; LLVM IR from jrouwe/JoltPhysics :: Samples/Tests/Vehicle/VehicleSixDOFTest.ll (ZN17VehicleSixDOFTest10InitializeEv)

; 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::Vec3" = type { %union.anon.4 }
%union.anon.4 = type { <4 x float> }
%"class.JPH::RefConst" = type { ptr }
%"class.JPH::Ref.6" = type { ptr }
%"class.JPH::Ref.7" = type { ptr }
%"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.13", %"class.JPH::RefConst" }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst.12", i32, i32 }
%"class.JPH::RefConst.12" = type { ptr }
%"class.JPH::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::RefConst.13" = type { ptr }
%"class.JPH::SixDOFConstraintSettings" = type <{ %"class.JPH::TwoBodyConstraintSettings", i32, [4 x i8], %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", [6 x float], i8, [3 x i8], [6 x float], [6 x float], [3 x %"class.JPH::SpringSettings"], [6 x %"class.JPH::MotorSettings"], [8 x i8] }>
%"class.JPH::TwoBodyConstraintSettings" = type { %"class.JPH::ConstraintSettings" }
%"class.JPH::ConstraintSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget.16", i8, i32, i32, i32, float, i64 }
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget.16" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::SpringSettings" = type { i8, %union.anon.17, float }
%union.anon.17 = type { float }
%"class.JPH::MotorSettings" = type { %"class.JPH::SpringSettings", float, float, float, float }
%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.VehicleSixDOFTest = type <{ %class.VehicleTest, ptr, [4 x %"class.JPH::Ref"], %"class.JPH::Mat44", float, float, [8 x i8] }>
%class.VehicleTest = type { %class.Test, %"class.JPH::Array" }
%"class.JPH::Array" = type { i64, i64, ptr }
%"class.JPH::Ref" = type { 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 @_ZN17VehicleSixDOFTest10InitializeEv(ptr noundef nonnull align 16 dereferenceable(248) %0) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca float, align 4
  %4 = alloca float, align 4
  %5 = alloca float, align 4
  %6 = alloca float, align 4
  %7 = alloca float, align 4
  %8 = alloca float, align 4
  %9 = alloca [4 x %"class.JPH::Vec3"], align 16
  %10 = alloca %"class.JPH::Vec3", align 16
  %11 = alloca %"class.JPH::RefConst", align 8
  %12 = alloca %"class.JPH::Vec3", align 16
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca %"class.JPH::Ref.6", align 8
  %16 = alloca %"class.JPH::Ref.7", align 8
  %17 = alloca %"class.JPH::BodyCreationSettings", align 16
  %18 = alloca %"class.JPH::Vec3", align 16
  %19 = alloca %"class.JPH::Quat", align 16
  %20 = alloca %"class.JPH::CollisionGroup", align 8
  %21 = alloca i32, align 4
  %22 = alloca i8, align 1
  %23 = alloca i8, align 1
  %24 = alloca %"class.JPH::Vec3", align 16
  %25 = alloca %"class.JPH::Vec3", align 16
  %26 = alloca %"class.JPH::Vec3", align 16
  %27 = alloca %"class.JPH::Vec3", align 16
  %28 = alloca ptr, align 8
  %29 = alloca %"class.JPH::BodyCreationSettings", align 16
  %30 = alloca %"class.JPH::Vec3", align 16
  %31 = alloca %"class.JPH::Quat", align 16
  %32 = alloca %"class.JPH::Vec3", align 16
  %33 = alloca %"class.JPH::CollisionGroup", align 8
  %34 = alloca %"class.JPH::SixDOFConstraintSettings", align 16
  %35 = alloca %"class.JPH::Vec3", align 16
  %36 = alloca %"class.JPH::Vec3", align 16
  %37 = alloca %"class.JPH::Vec3", align 16
  %38 = alloca %"class.JPH::MotorSettings", align 4
  %39 = alloca %"class.JPH::MotorSettings", align 4
  %40 = alloca %"class.JPH::MotorSettings", align 4
  %41 = alloca ptr, align 8
  %42 = alloca %"class.JPH::Vec3", align 16
  %43 = alloca %"class.JPH::Quat", align 16
  store ptr %0, ptr %2, align 8, !tbaa !5
  %44 = load ptr, ptr %2, align 8
  call void @_ZN11VehicleTest10InitializeEv(ptr noundef nonnull align 8 dereferenceable(136) %44)
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #11
  store float 2.000000e+00, ptr %3, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #11
  store float 0x3FECCCCCC0000000, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #11
  store float 0x3FC99999A0000000, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #11
  store float 0x3FD3333340000000, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #11
  store float 0x3FA99999A0000000, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #11
  store float 5.000000e-01, ptr %8, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 64, ptr %9) #11
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %9, float noundef 0xBFECCCCCC0000000, float noundef 0xBFC99999A0000000, float noundef 0x3FF6666660000000)
  %45 = getelementptr inbounds %"class.JPH::Vec3", ptr %9, i64 1
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %45, float noundef 0x3FECCCCCC0000000, float noundef 0xBFC99999A0000000, float noundef 0x3FF6666660000000)
  %46 = getelementptr inbounds %"class.JPH::Vec3", ptr %9, i64 2
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %46, float noundef 0xBFECCCCCC0000000, float noundef 0xBFC99999A0000000, float noundef 0xBFF6666660000000)
  %47 = getelementptr inbounds %"class.JPH::Vec3", ptr %9, i64 3
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %47, float noundef 0x3FECCCCCC0000000, float noundef 0xBFC99999A0000000, float noundef 0xBFF6666660000000)
  call void @llvm.lifetime.start.p0(i64 16, ptr %10) #11
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %10, float noundef 0.000000e+00, float noundef 2.000000e+00, float noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #11
  %48 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %12, float noundef 0x3FECCCCCC0000000, float noundef 0x3FC99999A0000000, float noundef 2.000000e+00)
          to label %49 unwind label %108

49:                                               ; preds = %1
  %50 = getelementptr inbounds { double, double }, ptr %12, i32 0, i32 0
  %51 = load double, ptr %50, align 16
  %52 = getelementptr inbounds { double, double }, ptr %12, i32 0, i32 1
  %53 = load double, ptr %52, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %48, double %51, double %53, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %54 unwind label %108

54:                                               ; preds = %49
  call void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef %48)
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #11
  %55 = invoke noundef ptr @_ZN3JPH13CylinderShapenwEm(i64 noundef 56)
          to label %56 unwind label %112

56:                                               ; preds = %54
  invoke void @_ZN3JPH13CylinderShapeC1EfffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(56) %55, float noundef 0x3FA99999A0000000, float noundef 0x3FD3333340000000, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %57 unwind label %116

57:                                               ; preds = %56
  invoke void @_ZN3JPH3RefINS_13CylinderShapeEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef %55)
          to label %58 unwind label %112

58:                                               ; preds = %57
  %59 = invoke noundef ptr @_ZNK3JPH3RefINS_13CylinderShapeEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %15)
          to label %60 unwind label %120

60:                                               ; preds = %58
  invoke void @_ZN3JPH11ConvexShape10SetDensityEf(ptr noundef nonnull align 8 dereferenceable(44) %59, float noundef 1.000000e+04)
          to label %61 unwind label %120

61:                                               ; preds = %60
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #11
  %62 = invoke noundef ptr @_ZN3JPH16GroupFilterTablenwEm(i64 noundef 40)
          to label %63 unwind label %124

63:                                               ; preds = %61
  invoke void @_ZN3JPH16GroupFilterTableC2Ej(ptr noundef nonnull align 8 dereferenceable(40) %62, i32 noundef 0)
          to label %64 unwind label %128

64:                                               ; preds = %63
  invoke void @_ZN3JPH3RefINS_16GroupFilterTableEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %16, ptr noundef %62)
          to label %65 unwind label %124

65:                                               ; preds = %64
  %66 = getelementptr inbounds %class.Test, ptr %44, i32 0, i32 3
  %67 = load ptr, ptr %66, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 256, ptr %17) #11
  %68 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %11)
          to label %69 unwind label %132

69:                                               ; preds = %65
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %18, ptr align 16 %10, i64 16, i1 false), !tbaa.struct !19
  %70 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %71 unwind label %132

71:                                               ; preds = %69
  %72 = getelementptr inbounds %"class.JPH::Quat", ptr %19, i32 0, i32 0
  %73 = getelementptr inbounds %"class.JPH::Vec4", ptr %72, i32 0, i32 0
  %74 = getelementptr inbounds %union.anon, ptr %73, i32 0, i32 0
  %75 = getelementptr inbounds { double, double }, ptr %74, i32 0, i32 0
  %76 = extractvalue { double, double } %70, 0
  store double %76, ptr %75, align 16
  %77 = getelementptr inbounds { double, double }, ptr %74, i32 0, i32 1
  %78 = extractvalue { double, double } %70, 1
  store double %78, ptr %77, align 8
  %79 = getelementptr inbounds { double, double }, ptr %18, i32 0, i32 0
  %80 = load double, ptr %79, align 16
  %81 = getelementptr inbounds { double, double }, ptr %18, i32 0, i32 1
  %82 = load double, ptr %81, align 8
  %83 = getelementptr inbounds { double, double }, ptr %19, i32 0, i32 0
  %84 = load double, ptr %83, align 16
  %85 = getelementptr inbounds { double, double }, ptr %19, i32 0, i32 1
  %86 = load double, ptr %85, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %17, ptr noundef %68, double %80, double %82, double %84, double %86, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %87 unwind label %132

87:                                               ; preds = %71
  %88 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %67, ptr noundef nonnull align 16 dereferenceable(256) %17)
          to label %89 unwind label %136

89:                                               ; preds = %87
  %90 = getelementptr inbounds %class.VehicleSixDOFTest, ptr %44, i32 0, i32 1
  store ptr %88, ptr %90, align 8, !tbaa !21
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %17) #11
  call void @llvm.lifetime.end.p0(i64 256, ptr %17) #11
  %91 = getelementptr inbounds %class.VehicleSixDOFTest, ptr %44, i32 0, i32 1
  %92 = load ptr, ptr %91, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 16, ptr %20) #11
  %93 = invoke noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %16)
          to label %94 unwind label %141

94:                                               ; preds = %89
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %20, ptr noundef %93, i32 noundef 0, i32 noundef 0)
          to label %95 unwind label %141

95:                                               ; preds = %94
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %92, ptr noundef nonnull align 8 dereferenceable(16) %20)
          to label %96 unwind label %145

96:                                               ; preds = %95
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #11
  %97 = getelementptr inbounds %class.Test, ptr %44, i32 0, i32 3
  %98 = load ptr, ptr %97, align 8, !tbaa !11
  %99 = getelementptr inbounds %class.VehicleSixDOFTest, ptr %44, i32 0, i32 1
  %100 = load ptr, ptr %99, align 8, !tbaa !21
  %101 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %100)
          to label %102 unwind label %150

102:                                              ; preds = %96
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %98, ptr noundef nonnull align 4 dereferenceable(4) %101, i32 noundef 0)
          to label %103 unwind label %150

103:                                              ; preds = %102
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #11
  store i32 0, ptr %21, align 4, !tbaa !26
  br label %104

104:                                              ; preds = %429, %103
  %105 = load i32, ptr %21, align 4, !tbaa !26
  %106 = icmp slt i32 %105, 4
  br i1 %106, label %154, label %107

107:                                              ; preds = %104
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #11
  br label %439

108:                                              ; preds = %49, %1
  %109 = landingpad { ptr, i32 }
          cleanup
  %110 = extractvalue { ptr, i32 } %109, 0
  store ptr %110, ptr %13, align 8
  %111 = extractvalue { ptr, i32 } %109, 1
  store i32 %111, ptr %14, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %48) #11
  br label %445

112:                                              ; preds = %57, %54
  %113 = landingpad { ptr, i32 }
          cleanup
  %114 = extractvalue { ptr, i32 } %113, 0
  store ptr %114, ptr %13, align 8
  %115 = extractvalue { ptr, i32 } %113, 1
  store i32 %115, ptr %14, align 4
  br label %444

116:                                              ; preds = %56
  %117 = landingpad { ptr, i32 }
          cleanup
  %118 = extractvalue { ptr, i32 } %117, 0
  store ptr %118, ptr %13, align 8
  %119 = extractvalue { ptr, i32 } %117, 1
  store i32 %119, ptr %14, align 4
  call void @_ZN3JPH13CylinderShapedlEPv(ptr noundef %55) #11
  br label %444

120:                                              ; preds = %60, %58
  %121 = landingpad { ptr, i32 }
          cleanup
  %122 = extractvalue { ptr, i32 } %121, 0
  store ptr %122, ptr %13, align 8
  %123 = extractvalue { ptr, i32 } %121, 1
  store i32 %123, ptr %14, align 4
  br label %443

124:                                              ; preds = %64, %61
  %125 = landingpad { ptr, i32 }
          cleanup
  %126 = extractvalue { ptr, i32 } %125, 0
  store ptr %126, ptr %13, align 8
  %127 = extractvalue { ptr, i32 } %125, 1
  store i32 %127, ptr %14, align 4
  br label %442

128:                                              ; preds = %63
  %129 = landingpad { ptr, i32 }
          cleanup
  %130 = extractvalue { ptr, i32 } %129, 0
  store ptr %130, ptr %13, align 8
  %131 = extractvalue { ptr, i32 } %129, 1
  store i32 %131, ptr %14, align 4
  call void @_ZN3JPH16GroupFilterTabledlEPv(ptr noundef %62) #11
  br label %442

132:                                              ; preds = %71, %69, %65
  %133 = landingpad { ptr, i32 }
          cleanup
  %134 = extractvalue { ptr, i32 } %133, 0
  store ptr %134, ptr %13, align 8
  %135 = extractvalue { ptr, i32 } %133, 1
  store i32 %135, ptr %14, align 4
  br label %140

136:                                              ; preds = %87
  %137 = landingpad { ptr, i32 }
          cleanup
  %138 = extractvalue { ptr, i32 } %137, 0
  store ptr %138, ptr %13, align 8
  %139 = extractvalue { ptr, i32 } %137, 1
  store i32 %139, ptr %14, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %17) #11
  br label %140

140:                                              ; preds = %136, %132
  call void @llvm.lifetime.end.p0(i64 256, ptr %17) #11
  br label %441

141:                                              ; preds = %94, %89
  %142 = landingpad { ptr, i32 }
          cleanup
  %143 = extractvalue { ptr, i32 } %142, 0
  store ptr %143, ptr %13, align 8
  %144 = extractvalue { ptr, i32 } %142, 1
  store i32 %144, ptr %14, align 4
  br label %149

145:                                              ; preds = %95
  %146 = landingpad { ptr, i32 }
          cleanup
  %147 = extractvalue { ptr, i32 } %146, 0
  store ptr %147, ptr %13, align 8
  %148 = extractvalue { ptr, i32 } %146, 1
  store i32 %148, ptr %14, align 4
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #11
  br label %149

149:                                              ; preds = %145, %141
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #11
  br label %441

150:                                              ; preds = %439, %102, %96
  %151 = landingpad { ptr, i32 }
          cleanup
  %152 = extractvalue { ptr, i32 } %151, 0
  store ptr %152, ptr %13, align 8
  %153 = extractvalue { ptr, i32 } %151, 1
  store i32 %153, ptr %14, align 4
  br label %441

154:                                              ; preds = %104
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #11
  %155 = load i32, ptr %21, align 4, !tbaa !26
  %156 = invoke noundef zeroext i1 @_ZN17VehicleSixDOFTest13sIsFrontWheelENS_6EWheelE(i32 noundef %155)
          to label %157 unwind label %294

157:                                              ; preds = %154
  %158 = zext i1 %156 to i8
  store i8 %158, ptr %22, align 1, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #11
  %159 = load i32, ptr %21, align 4, !tbaa !26
  %160 = invoke noundef zeroext i1 @_ZN17VehicleSixDOFTest12sIsLeftWheelENS_6EWheelE(i32 noundef %159)
          to label %161 unwind label %298

161:                                              ; preds = %157
  %162 = zext i1 %160 to i8
  store i8 %162, ptr %23, align 1, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #11
  %163 = load i32, ptr %21, align 4, !tbaa !26
  %164 = sext i32 %163 to i64
  %165 = getelementptr inbounds [4 x %"class.JPH::Vec3"], ptr %9, i64 0, i64 %164
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %25, ptr align 16 %165, i64 16, i1 false), !tbaa.struct !19
  %166 = getelementptr inbounds { double, double }, ptr %25, i32 0, i32 0
  %167 = load double, ptr %166, align 16
  %168 = getelementptr inbounds { double, double }, ptr %25, i32 0, i32 1
  %169 = load double, ptr %168, align 8
  %170 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %10, double %167, double %169)
          to label %171 unwind label %302

171:                                              ; preds = %161
  %172 = getelementptr inbounds %"class.JPH::Vec3", ptr %24, i32 0, i32 0
  %173 = getelementptr inbounds %union.anon.4, ptr %172, i32 0, i32 0
  %174 = getelementptr inbounds { double, double }, ptr %173, i32 0, i32 0
  %175 = extractvalue { double, double } %170, 0
  store double %175, ptr %174, align 16
  %176 = getelementptr inbounds { double, double }, ptr %173, i32 0, i32 1
  %177 = extractvalue { double, double } %170, 1
  store double %177, ptr %176, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %26) #11
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %27, float noundef 0.000000e+00, float noundef 5.000000e-01, float noundef 0.000000e+00)
          to label %178 unwind label %306

178:                                              ; preds = %171
  %179 = getelementptr inbounds { double, double }, ptr %27, i32 0, i32 0
  %180 = load double, ptr %179, align 16
  %181 = getelementptr inbounds { double, double }, ptr %27, i32 0, i32 1
  %182 = load double, ptr %181, align 8
  %183 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %24, double %180, double %182)
          to label %184 unwind label %306

184:                                              ; preds = %178
  %185 = getelementptr inbounds %"class.JPH::Vec3", ptr %26, i32 0, i32 0
  %186 = getelementptr inbounds %union.anon.4, ptr %185, i32 0, i32 0
  %187 = getelementptr inbounds { double, double }, ptr %186, i32 0, i32 0
  %188 = extractvalue { double, double } %183, 0
  store double %188, ptr %187, align 16
  %189 = getelementptr inbounds { double, double }, ptr %186, i32 0, i32 1
  %190 = extractvalue { double, double } %183, 1
  store double %190, ptr %189, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #11
  %191 = getelementptr inbounds %class.Test, ptr %44, i32 0, i32 3
  %192 = load ptr, ptr %191, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 256, ptr %29) #11
  %193 = invoke noundef ptr @_ZNK3JPH3RefINS_13CylinderShapeEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %15)
          to label %194 unwind label %310

194:                                              ; preds = %184
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %30, ptr align 16 %26, i64 16, i1 false), !tbaa.struct !19
  %195 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %196 unwind label %310

196:                                              ; preds = %194
  %197 = getelementptr inbounds %"class.JPH::Vec3", ptr %32, i32 0, i32 0
  %198 = getelementptr inbounds %union.anon.4, ptr %197, i32 0, i32 0
  %199 = getelementptr inbounds { double, double }, ptr %198, i32 0, i32 0
  %200 = extractvalue { double, double } %195, 0
  store double %200, ptr %199, align 16
  %201 = getelementptr inbounds { double, double }, ptr %198, i32 0, i32 1
  %202 = extractvalue { double, double } %195, 1
  store double %202, ptr %201, align 8
  %203 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 0
  %204 = load double, ptr %203, align 16
  %205 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 1
  %206 = load double, ptr %205, align 8
  %207 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %204, double %206, float noundef 0x3FF921FB60000000)
          to label %208 unwind label %310

208:                                              ; preds = %196
  %209 = getelementptr inbounds %"class.JPH::Quat", ptr %31, i32 0, i32 0
  %210 = getelementptr inbounds %"class.JPH::Vec4", ptr %209, i32 0, i32 0
  %211 = getelementptr inbounds %union.anon, ptr %210, i32 0, i32 0
  %212 = getelementptr inbounds { double, double }, ptr %211, i32 0, i32 0
  %213 = extractvalue { double, double } %207, 0
  store double %213, ptr %212, align 16
  %214 = getelementptr inbounds { double, double }, ptr %211, i32 0, i32 1
  %215 = extractvalue { double, double } %207, 1
  store double %215, ptr %214, align 8
  %216 = getelementptr inbounds { double, double }, ptr %30, i32 0, i32 0
  %217 = load double, ptr %216, align 16
  %218 = getelementptr inbounds { double, double }, ptr %30, i32 0, i32 1
  %219 = load double, ptr %218, align 8
  %220 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 0
  %221 = load double, ptr %220, align 16
  %222 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 1
  %223 = load double, ptr %222, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %29, ptr noundef %193, double %217, double %219, double %221, double %223, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %224 unwind label %310

224:                                              ; preds = %208
  %225 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %192, ptr noundef nonnull align 16 dereferenceable(256) %29)
          to label %226 unwind label %314

226:                                              ; preds = %224
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %29) #11
  call void @llvm.lifetime.end.p0(i64 256, ptr %29) #11
  store ptr %225, ptr %28, align 8, !tbaa !5
  %227 = load ptr, ptr %28, align 8, !tbaa !5
  invoke void @_ZN3JPH4Body11SetFrictionEf(ptr noundef nonnull align 16 dereferenceable(122) %227, float noundef 1.000000e+00)
          to label %228 unwind label %319

228:                                              ; preds = %226
  %229 = load ptr, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %33) #11
  %230 = invoke noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %16)
          to label %231 unwind label %323

231:                                              ; preds = %228
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %33, ptr noundef %230, i32 noundef 0, i32 noundef 0)
          to label %232 unwind label %323

232:                                              ; preds = %231
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %229, ptr noundef nonnull align 8 dereferenceable(16) %33)
          to label %233 unwind label %327

233:                                              ; preds = %232
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %33) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #11
  %234 = getelementptr inbounds %class.Test, ptr %44, i32 0, i32 3
  %235 = load ptr, ptr %234, align 8, !tbaa !11
  %236 = load ptr, ptr %28, align 8, !tbaa !5
  %237 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %236)
          to label %238 unwind label %319

238:                                              ; preds = %233
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %235, ptr noundef nonnull align 4 dereferenceable(4) %237, i32 noundef 0)
          to label %239 unwind label %319

239:                                              ; preds = %238
  call void @llvm.lifetime.start.p0(i64 432, ptr %34) #11
  invoke void @_ZN3JPH24SixDOFConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(432) %34)
          to label %240 unwind label %332

240:                                              ; preds = %239
  %241 = getelementptr inbounds %"class.JPH::SixDOFConstraintSettings", ptr %34, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %241, ptr align 16 %24, i64 16, i1 false), !tbaa.struct !19
  %242 = getelementptr inbounds %"class.JPH::SixDOFConstraintSettings", ptr %34, i32 0, i32 6
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %242, ptr align 16 %26, i64 16, i1 false), !tbaa.struct !19
  call void @llvm.lifetime.start.p0(i64 16, ptr %35) #11
  %243 = load i8, ptr %23, align 1, !tbaa !28, !range !29, !noundef !30
  %244 = trunc i8 %243 to i1
  call void @llvm.lifetime.start.p0(i64 16, ptr %36) #11
  br i1 %244, label %245, label %262

245:                                              ; preds = %240
  %246 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %247 unwind label %336

247:                                              ; preds = %245
  %248 = getelementptr inbounds %"class.JPH::Vec3", ptr %36, i32 0, i32 0
  %249 = getelementptr inbounds %union.anon.4, ptr %248, i32 0, i32 0
  %250 = getelementptr inbounds { double, double }, ptr %249, i32 0, i32 0
  %251 = extractvalue { double, double } %246, 0
  store double %251, ptr %250, align 16
  %252 = getelementptr inbounds { double, double }, ptr %249, i32 0, i32 1
  %253 = extractvalue { double, double } %246, 1
  store double %253, ptr %252, align 8
  %254 = invoke { double, double } @_ZNK3JPH4Vec3ngEv(ptr noundef nonnull align 16 dereferenceable(16) %36)
          to label %255 unwind label %336

255:                                              ; preds = %247
  %256 = getelementptr inbounds %"class.JPH::Vec3", ptr %35, i32 0, i32 0
  %257 = getelementptr inbounds %union.anon.4, ptr %256, i32 0, i32 0
  %258 = getelementptr inbounds { double, double }, ptr %257, i32 0, i32 0
  %259 = extractvalue { double, double } %254, 0
  store double %259, ptr %258, align 16
  %260 = getelementptr inbounds { double, double }, ptr %257, i32 0, i32 1
  %261 = extractvalue { double, double } %254, 1
  store double %261, ptr %260, align 8
  br label %271

262:                                              ; preds = %240
  %263 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %264 unwind label %336

264:                                              ; preds = %262
  %265 = getelementptr inbounds %"class.JPH::Vec3", ptr %35, i32 0, i32 0
  %266 = getelementptr inbounds %union.anon.4, ptr %265, i32 0, i32 0
  %267 = getelementptr inbounds { double, double }, ptr %266, i32 0, i32 0
  %268 = extractvalue { double, double } %263, 0
  store double %268, ptr %267, align 16
  %269 = getelementptr inbounds { double, double }, ptr %266, i32 0, i32 1
  %270 = extractvalue { double, double } %263, 1
  store double %270, ptr %269, align 8
  br label %271

271:                                              ; preds = %264, %255
  %272 = getelementptr inbounds %"class.JPH::SixDOFConstraintSettings", ptr %34, i32 0, i32 7
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %272, ptr align 16 %35, i64 16, i1 false), !tbaa.struct !19
  %273 = getelementptr inbounds %"class.JPH::SixDOFConstraintSettings", ptr %34, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %273, ptr align 16 %272, i64 16, i1 false), !tbaa.struct !19
  call void @llvm.lifetime.end.p0(i64 16, ptr %36) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %37) #11
  %274 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %275 unwind label %340

275:                                              ; preds = %271
  %276 = getelementptr inbounds %"class.JPH::Vec3", ptr %37, i32 0, i32 0
  %277 = getelementptr inbounds %union.anon.4, ptr %276, i32 0, i32 0
  %278 = getelementptr inbounds { double, double }, ptr %277, i32 0, i32 0
  %279 = extractvalue { double, double } %274, 0
  store double %279, ptr %278, align 16
  %280 = getelementptr inbounds { double, double }, ptr %277, i32 0, i32 1
  %281 = extractvalue { double, double } %274, 1
  store double %281, ptr %280, align 8
  %282 = getelementptr inbounds %"class.JPH::SixDOFConstraintSettings", ptr %34, i32 0, i32 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %282, ptr align 16 %37, i64 16, i1 false), !tbaa.struct !19
  %283 = getelementptr inbounds %"class.JPH::SixDOFConstraintSettings", ptr %34, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %283, ptr align 16 %282, i64 16, i1 false), !tbaa.struct !19
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #11
  invoke void @_ZN3JPH24SixDOFConstraintSettings13MakeFixedAxisENS0_5EAxisE(ptr noundef nonnull align 16 dereferenceable(432) %34, i32 noundef 0)
          to label %284 unwind label %344

284:                                              ; preds = %275
  invoke void @_ZN3JPH24SixDOFConstraintSettings14SetLimitedAxisENS0_5EAxisEff(ptr noundef nonnull align 16 dereferenceable(432) %34, i32 noundef 1, float noundef -5.000000e-01, float noundef 5.000000e-01)
          to label %285 unwind label %344

285:                                              ; preds = %284
  invoke void @_ZN3JPH24SixDOFConstraintSettings13MakeFixedAxisENS0_5EAxisE(ptr noundef nonnull align 16 dereferenceable(432) %34, i32 noundef 2)
          to label %286 unwind label %344

286:                                              ; preds = %285
  call void @llvm.lifetime.start.p0(i64 28, ptr %38) #11
  invoke void @_ZN3JPH13MotorSettingsC2Effff(ptr noundef nonnull align 4 dereferenceable(28) %38, float noundef 2.000000e+00, float noundef 1.000000e+00, float noundef 1.000000e+05, float noundef 0.000000e+00)
          to label %287 unwind label %348

287:                                              ; preds = %286
  %288 = getelementptr inbounds %"class.JPH::SixDOFConstraintSettings", ptr %34, i32 0, i32 15
  %289 = getelementptr inbounds [6 x %"class.JPH::MotorSettings"], ptr %288, i64 0, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %289, ptr align 4 %38, i64 28, i1 false), !tbaa.struct !31
  call void @llvm.lifetime.end.p0(i64 28, ptr %38) #11
  %290 = load i8, ptr %22, align 1, !tbaa !28, !range !29, !noundef !30
  %291 = trunc i8 %290 to i1
  br i1 %291, label %292, label %352

292:                                              ; preds = %287
  invoke void @_ZN3JPH24SixDOFConstraintSettings14SetLimitedAxisENS0_5EAxisEff(ptr noundef nonnull align 16 dereferenceable(432) %34, i32 noundef 4, float noundef 0xBFE0C15240000000, float noundef 0x3FE0C15240000000)
          to label %293 unwind label %344

293:                                              ; preds = %292
  br label %354

294:                                              ; preds = %154
  %295 = landingpad { ptr, i32 }
          cleanup
  %296 = extractvalue { ptr, i32 } %295, 0
  store ptr %296, ptr %13, align 8
  %297 = extractvalue { ptr, i32 } %295, 1
  store i32 %297, ptr %14, align 4
  br label %438

298:                                              ; preds = %157
  %299 = landingpad { ptr, i32 }
          cleanup
  %300 = extractvalue { ptr, i32 } %299, 0
  store ptr %300, ptr %13, align 8
  %301 = extractvalue { ptr, i32 } %299, 1
  store i32 %301, ptr %14, align 4
  br label %437

302:                                              ; preds = %161
  %303 = landingpad { ptr, i32 }
          cleanup
  %304 = extractvalue { ptr, i32 } %303, 0
  store ptr %304, ptr %13, align 8
  %305 = extractvalue { ptr, i32 } %303, 1
  store i32 %305, ptr %14, align 4
  br label %436

306:                                              ; preds = %178, %171
  %307 = landingpad { ptr, i32 }
          cleanup
  %308 = extractvalue { ptr, i32 } %307, 0
  store ptr %308, ptr %13, align 8
  %309 = extractvalue { ptr, i32 } %307, 1
  store i32 %309, ptr %14, align 4
  br label %435

310:                                              ; preds = %208, %196, %194, %184
  %311 = landingpad { ptr, i32 }
          cleanup
  %312 = extractvalue { ptr, i32 } %311, 0
  store ptr %312, ptr %13, align 8
  %313 = extractvalue { ptr, i32 } %311, 1
  store i32 %313, ptr %14, align 4
  br label %318

314:                                              ; preds = %224
  %315 = landingpad { ptr, i32 }
          cleanup
  %316 = extractvalue { ptr, i32 } %315, 0
  store ptr %316, ptr %13, align 8
  %317 = extractvalue { ptr, i32 } %315, 1
  store i32 %317, ptr %14, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %29) #11
  br label %318

318:                                              ; preds = %314, %310
  call void @llvm.lifetime.end.p0(i64 256, ptr %29) #11
  br label %434

319:                                              ; preds = %238, %233, %226
  %320 = landingpad { ptr, i32 }
          cleanup
  %321 = extractvalue { ptr, i32 } %320, 0
  store ptr %321, ptr %13, align 8
  %322 = extractvalue { ptr, i32 } %320, 1
  store i32 %322, ptr %14, align 4
  br label %434

323:                                              ; preds = %231, %228
  %324 = landingpad { ptr, i32 }
          cleanup
  %325 = extractvalue { ptr, i32 } %324, 0
  store ptr %325, ptr %13, align 8
  %326 = extractvalue { ptr, i32 } %324, 1
  store i32 %326, ptr %14, align 4
  br label %331

327:                                              ; preds = %232
  %328 = landingpad { ptr, i32 }
          cleanup
  %329 = extractvalue { ptr, i32 } %328, 0
  store ptr %329, ptr %13, align 8
  %330 = extractvalue { ptr, i32 } %328, 1
  store i32 %330, ptr %14, align 4
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %33) #11
  br label %331

331:                                              ; preds = %327, %323
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #11
  br label %434

332:                                              ; preds = %239
  %333 = landingpad { ptr, i32 }
          cleanup
  %334 = extractvalue { ptr, i32 } %333, 0
  store ptr %334, ptr %13, align 8
  %335 = extractvalue { ptr, i32 } %333, 1
  store i32 %335, ptr %14, align 4
  br label %433

336:                                              ; preds = %262, %247, %245
  %337 = landingpad { ptr, i32 }
          cleanup
  %338 = extractvalue { ptr, i32 } %337, 0
  store ptr %338, ptr %13, align 8
  %339 = extractvalue { ptr, i32 } %337, 1
  store i32 %339, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %36) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #11
  br label %432

340:                                              ; preds = %271
  %341 = landingpad { ptr, i32 }
          cleanup
  %342 = extractvalue { ptr, i32 } %341, 0
  store ptr %342, ptr %13, align 8
  %343 = extractvalue { ptr, i32 } %341, 1
  store i32 %343, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #11
  br label %432

344:                                              ; preds = %355, %354, %352, %292, %285, %284, %275
  %345 = landingpad { ptr, i32 }
          cleanup
  %346 = extractvalue { ptr, i32 } %345, 0
  store ptr %346, ptr %13, align 8
  %347 = extractvalue { ptr, i32 } %345, 1
  store i32 %347, ptr %14, align 4
  br label %432

348:                                              ; preds = %286
  %349 = landingpad { ptr, i32 }
          cleanup
  %350 = extractvalue { ptr, i32 } %349, 0
  store ptr %350, ptr %13, align 8
  %351 = extractvalue { ptr, i32 } %349, 1
  store i32 %351, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 28, ptr %38) #11
  br label %432

352:                                              ; preds = %287
  invoke void @_ZN3JPH24SixDOFConstraintSettings13MakeFixedAxisENS0_5EAxisE(ptr noundef nonnull align 16 dereferenceable(432) %34, i32 noundef 4)
          to label %353 unwind label %344

353:                                              ; preds = %352
  br label %354

354:                                              ; preds = %353, %293
  invoke void @_ZN3JPH24SixDOFConstraintSettings13MakeFixedAxisENS0_5EAxisE(ptr noundef nonnull align 16 dereferenceable(432) %34, i32 noundef 5)
          to label %355 unwind label %344

355:                                              ; preds = %354
  invoke void @_ZN3JPH24SixDOFConstraintSettings12MakeFreeAxisENS0_5EAxisE(ptr noundef nonnull align 16 dereferenceable(432) %34, i32 noundef 3)
          to label %356 unwind label %344

356:                                              ; preds = %355
  call void @llvm.lifetime.start.p0(i64 28, ptr %39) #11
  invoke void @_ZN3JPH13MotorSettingsC2Effff(ptr noundef nonnull align 4 dereferenceable(28) %39, float noundef 2.000000e+00, float noundef 1.000000e+00, float noundef 0.000000e+00, float noundef 5.000000e+03)
          to label %357 unwind label %368

357:                                              ; preds = %356
  %358 = getelementptr inbounds %"class.JPH::SixDOFConstraintSettings", ptr %34, i32 0, i32 15
  %359 = getelementptr inbounds [6 x %"class.JPH::MotorSettings"], ptr %358, i64 0, i64 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %359, ptr align 4 %39, i64 28, i1 false), !tbaa.struct !31
  call void @llvm.lifetime.end.p0(i64 28, ptr %39) #11
  %360 = load i8, ptr %22, align 1, !tbaa !28, !range !29, !noundef !30
  %361 = trunc i8 %360 to i1
  br i1 %361, label %362, label %376

362:                                              ; preds = %357
  call void @llvm.lifetime.start.p0(i64 28, ptr %40) #11
  invoke void @_ZN3JPH13MotorSettingsC2Effff(ptr noundef nonnull align 4 dereferenceable(28) %40, float noundef 1.000000e+01, float noundef 1.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+06)
          to label %363 unwind label %372

363:                                              ; preds = %362
  %364 = getelementptr inbounds %"class.JPH::SixDOFConstraintSettings", ptr %34, i32 0, i32 15
  %365 = getelementptr inbounds [6 x %"class.JPH::MotorSettings"], ptr %364, i64 0, i64 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %365, ptr align 4 %40, i64 28, i1 false), !tbaa.struct !31
  %366 = getelementptr inbounds %"class.JPH::SixDOFConstraintSettings", ptr %34, i32 0, i32 15
  %367 = getelementptr inbounds [6 x %"class.JPH::MotorSettings"], ptr %366, i64 0, i64 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %367, ptr align 4 %365, i64 28, i1 false), !tbaa.struct !31
  call void @llvm.lifetime.end.p0(i64 28, ptr %40) #11
  br label %376

368:                                              ; preds = %356
  %369 = landingpad { ptr, i32 }
          cleanup
  %370 = extractvalue { ptr, i32 } %369, 0
  store ptr %370, ptr %13, align 8
  %371 = extractvalue { ptr, i32 } %369, 1
  store i32 %371, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 28, ptr %39) #11
  br label %432

372:                                              ; preds = %362
  %373 = landingpad { ptr, i32 }
          cleanup
  %374 = extractvalue { ptr, i32 } %373, 0
  store ptr %374, ptr %13, align 8
  %375 = extractvalue { ptr, i32 } %373, 1
  store i32 %375, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 28, ptr %40) #11
  br label %432

376:                                              ; preds = %363, %357
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #11
  %377 = getelementptr inbounds %class.VehicleSixDOFTest, ptr %44, i32 0, i32 1
  %378 = load ptr, ptr %377, align 8, !tbaa !21
  %379 = load ptr, ptr %28, align 8, !tbaa !5
  %380 = invoke noundef ptr @_ZNK3JPH24SixDOFConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(432) %34, ptr noundef nonnull align 16 dereferenceable(122) %378, ptr noundef nonnull align 16 dereferenceable(122) %379)
          to label %381 unwind label %424

381:                                              ; preds = %376
  store ptr %380, ptr %41, align 8, !tbaa !5
  %382 = getelementptr inbounds %class.Test, ptr %44, i32 0, i32 2
  %383 = load ptr, ptr %382, align 16, !tbaa !34
  %384 = load ptr, ptr %41, align 8, !tbaa !5
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %383, ptr noundef %384)
          to label %385 unwind label %424

385:                                              ; preds = %381
  %386 = load ptr, ptr %41, align 8, !tbaa !5
  %387 = getelementptr inbounds %class.VehicleSixDOFTest, ptr %44, i32 0, i32 2
  %388 = load i32, ptr %21, align 4, !tbaa !26
  %389 = sext i32 %388 to i64
  %390 = getelementptr inbounds [4 x %"class.JPH::Ref"], ptr %387, i64 0, i64 %389
  %391 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefINS_16SixDOFConstraintEEaSEPS1_(ptr noundef nonnull align 8 dereferenceable(8) %390, ptr noundef %386)
          to label %392 unwind label %424

392:                                              ; preds = %385
  %393 = load ptr, ptr %41, align 8, !tbaa !5
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %42, float noundef 0.000000e+00, float noundef -5.000000e-01, float noundef 0.000000e+00)
          to label %394 unwind label %424

394:                                              ; preds = %392
  %395 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 0
  %396 = load double, ptr %395, align 16
  %397 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 1
  %398 = load double, ptr %397, align 8
  invoke void @_ZN3JPH16SixDOFConstraint19SetTargetPositionCSENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(1856) %393, double %396, double %398)
          to label %399 unwind label %424

399:                                              ; preds = %394
  %400 = load ptr, ptr %41, align 8, !tbaa !5
  invoke void @_ZN3JPH16SixDOFConstraint13SetMotorStateENS_24SixDOFConstraintSettings5EAxisENS_11EMotorStateE(ptr noundef nonnull align 16 dereferenceable(1856) %400, i32 noundef 1, i32 noundef 2)
          to label %401 unwind label %424

401:                                              ; preds = %399
  %402 = load i8, ptr %22, align 1, !tbaa !28, !range !29, !noundef !30
  %403 = trunc i8 %402 to i1
  br i1 %403, label %404, label %428

404:                                              ; preds = %401
  %405 = load ptr, ptr %41, align 8, !tbaa !5
  %406 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %407 unwind label %424

407:                                              ; preds = %404
  %408 = getelementptr inbounds %"class.JPH::Quat", ptr %43, i32 0, i32 0
  %409 = getelementptr inbounds %"class.JPH::Vec4", ptr %408, i32 0, i32 0
  %410 = getelementptr inbounds %union.anon, ptr %409, i32 0, i32 0
  %411 = getelementptr inbounds { double, double }, ptr %410, i32 0, i32 0
  %412 = extractvalue { double, double } %406, 0
  store double %412, ptr %411, align 16
  %413 = getelementptr inbounds { double, double }, ptr %410, i32 0, i32 1
  %414 = extractvalue { double, double } %406, 1
  store double %414, ptr %413, align 8
  %415 = getelementptr inbounds { double, double }, ptr %43, i32 0, i32 0
  %416 = load double, ptr %415, align 16
  %417 = getelementptr inbounds { double, double }, ptr %43, i32 0, i32 1
  %418 = load double, ptr %417, align 8
  invoke void @_ZN3JPH16SixDOFConstraint22SetTargetOrientationCSENS_4QuatE(ptr noundef nonnull align 16 dereferenceable(1856) %405, double %416, double %418)
          to label %419 unwind label %424

419:                                              ; preds = %407
  %420 = load ptr, ptr %41, align 8, !tbaa !5
  invoke void @_ZN3JPH16SixDOFConstraint13SetMotorStateENS_24SixDOFConstraintSettings5EAxisENS_11EMotorStateE(ptr noundef nonnull align 16 dereferenceable(1856) %420, i32 noundef 4, i32 noundef 2)
          to label %421 unwind label %424

421:                                              ; preds = %419
  %422 = load ptr, ptr %41, align 8, !tbaa !5
  invoke void @_ZN3JPH16SixDOFConstraint13SetMotorStateENS_24SixDOFConstraintSettings5EAxisENS_11EMotorStateE(ptr noundef nonnull align 16 dereferenceable(1856) %422, i32 noundef 5, i32 noundef 2)
          to label %423 unwind label %424

423:                                              ; preds = %421
  br label %428

424:                                              ; preds = %421, %419, %407, %404, %399, %394, %392, %385, %381, %376
  %425 = landingpad { ptr, i32 }
          cleanup
  %426 = extractvalue { ptr, i32 } %425, 0
  store ptr %426, ptr %13, align 8
  %427 = extractvalue { ptr, i32 } %425, 1
  store i32 %427, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #11
  br label %432

428:                                              ; preds = %423, %401
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #11
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(432) %34) #11
  call void @llvm.lifetime.end.p0(i64 432, ptr %34) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #11
  br label %429

429:                                              ; preds = %428
  %430 = load i32, ptr %21, align 4, !tbaa !26
  %431 = add nsw i32 %430, 1
  store i32 %431, ptr %21, align 4, !tbaa !26
  br label %104, !llvm.loop !35

432:                                              ; preds = %424, %372, %368, %348, %344, %340, %336
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(432) %34) #11
  br label %433

433:                                              ; preds = %432, %332
  call void @llvm.lifetime.end.p0(i64 432, ptr %34) #11
  br label %434

434:                                              ; preds = %433, %331, %319, %318
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #11
  br label %435

435:                                              ; preds = %434, %306
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #11
  br label %436

436:                                              ; preds = %435, %302
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #11
  br label %437

437:                                              ; preds = %436, %298
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #11
  br label %438

438:                                              ; preds = %437, %294
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #11
  br label %441

439:                                              ; preds = %107
  invoke void @_ZN17VehicleSixDOFTest17UpdateCameraPivotEv(ptr noundef nonnull align 16 dereferenceable(248) %44)
          to label %440 unwind label %150

440:                                              ; preds = %439
  call void @_ZN3JPH3RefINS_16GroupFilterTableEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %16) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #11
  call void @_ZN3JPH3RefINS_13CylinderShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %15) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #11
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %11) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %10) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr %9) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #11
  ret void

441:                                              ; preds = %438, %150, %149, %140
  call void @_ZN3JPH3RefINS_16GroupFilterTableEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %16) #11
  br label %442

442:                                              ; preds = %441, %128, %124
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #11
  br label %443

443:                                              ; preds = %442, %120
  call void @_ZN3JPH3RefINS_13CylinderShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %15) #11
  br label %444

444:                                              ; preds = %443, %116, %112
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #11
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %11) #11
  br label %445

445:                                              ; preds = %444, %108
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %10) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr %9) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #11
  br label %446

446:                                              ; preds = %445
  %447 = load ptr, ptr %13, align 8
  %448 = load i32, ptr %14, align 4
  %449 = insertvalue { ptr, i32 } poison, ptr %447, 0
  %450 = insertvalue { ptr, i32 } %449, i32 %448, 1
  resume { ptr, i32 } %450
}

declare void @_ZN11VehicleTest10InitializeEv(ptr noundef nonnull align 8 dereferenceable(136)) unnamed_addr #2

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef) #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: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) unnamed_addr #6 align 2

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

declare void @_ZN3JPH13CylinderShapeC1EfffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(56), float noundef, float noundef, float noundef, ptr noundef) unnamed_addr #2

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8)) #7 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) #9

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Quat9sIdentityEv() #4 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 #7 align 2

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #7 align 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)) #7 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN17VehicleSixDOFTest13sIsFrontWheelENS_6EWheelE(i32 noundef) #7 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN17VehicleSixDOFTest12sIsLeftWheelENS_6EWheelE(i32 noundef) #7 align 2

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH4Body11SetFrictionEf(ptr noundef nonnull align 16 dereferenceable(122), float noundef) #8 align 2

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH24SixDOFConstraintSettings13MakeFixedAxisENS0_5EAxisE(ptr noundef nonnull align 16 dereferenceable(432), i32 noundef) #8 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH24SixDOFConstraintSettings14SetLimitedAxisENS0_5EAxisEff(ptr noundef nonnull align 16 dereferenceable(432), i32 noundef, float noundef, float noundef) #8 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH13MotorSettingsC2Effff(ptr noundef nonnull align 4 dereferenceable(28), float noundef, float noundef, float noundef, float noundef) unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH24SixDOFConstraintSettings12MakeFreeAxisENS0_5EAxisE(ptr noundef nonnull align 16 dereferenceable(432), i32 noundef) #8 align 2

declare noundef ptr @_ZNK3JPH24SixDOFConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(432), ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 16 dereferenceable(122)) unnamed_addr #2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH16SixDOFConstraint19SetTargetPositionCSENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(1856), double, double) #8 align 2

declare void @_ZN3JPH16SixDOFConstraint13SetMotorStateENS_24SixDOFConstraintSettings5EAxisENS_11EMotorStateE(ptr noundef nonnull align 16 dereferenceable(1856), i32 noundef, i32 noundef) #2

declare void @_ZN3JPH16SixDOFConstraint22SetTargetOrientationCSENS_4QuatE(ptr noundef nonnull align 16 dereferenceable(1856), double, double) #2

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #7 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 nounwind 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 #4 = { 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 #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 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 nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { 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 #9 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #10 = { 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 #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, !10, i64 0}
!10 = !{!"float", !7, i64 0}
!11 = !{!12, !6, i64 24}
!12 = !{!"_ZTS4Test", !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !13, i64 48, !14, i64 56}
!13 = !{!"bool", !7, i64 0}
!14 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !15, i64 0}
!15 = !{!"_ZTSSt10_HashtableIN3JPH6BodyIDESt4pairIKS1_NSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEEESaISB_ENSt8__detail10_Select1stESt8equal_toIS1_ESt4hashIS1_ENSD_18_Mod_range_hashingENSD_20_Default_ranged_hashENSD_20_Prime_rehash_policyENSD_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !16, i64 8, !17, i64 16, !16, i64 24, !18, i64 32, !6, i64 48}
!16 = !{!"long", !7, i64 0}
!17 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!18 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !10, i64 0, !16, i64 8}
!19 = !{i64 0, i64 16, !20}
!20 = !{!7, !7, i64 0}
!21 = !{!22, !6, i64 136}
!22 = !{!"_ZTS17VehicleSixDOFTest", !23, i64 0, !6, i64 136, !7, i64 144, !25, i64 176, !10, i64 240, !10, i64 244}
!23 = !{!"_ZTS11VehicleTest", !12, i64 0, !24, i64 112}
!24 = !{!"_ZTSN3JPH5ArrayIN11VehicleTest4LineENS_12STLAllocatorIS2_EEEE", !16, i64 0, !16, i64 8, !6, i64 16}
!25 = !{!"_ZTSN3JPH5Mat44E", !7, i64 0}
!26 = !{!27, !27, i64 0}
!27 = !{!"int", !7, i64 0}
!28 = !{!13, !13, i64 0}
!29 = !{i8 0, i8 2}
!30 = !{}
!31 = !{i64 0, i64 1, !32, i64 4, i64 4, !20, i64 8, i64 4, !9, i64 12, i64 4, !9, i64 16, i64 4, !9, i64 20, i64 4, !9, i64 24, i64 4, !9}
!32 = !{!33, !33, i64 0}
!33 = !{!"_ZTSN3JPH11ESpringModeE", !7, i64 0}
!34 = !{!12, !6, i64 16}
!35 = distinct !{!35, !36}
!36 = !{!"llvm.loop.mustprogress"}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.JPH::Vec3" = type { %union.anon.4 }
%union.anon.4 = type { <4 x float> }
%"class.JPH::RefConst" = type { ptr }
%"class.JPH::Ref.6" = type { ptr }
%"class.JPH::Ref.7" = type { ptr }
%"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.13", %"class.JPH::RefConst" }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst.12", i32, i32 }
%"class.JPH::RefConst.12" = type { ptr }
%"class.JPH::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::RefConst.13" = type { ptr }
%"class.JPH::SixDOFConstraintSettings" = type <{ %"class.JPH::TwoBodyConstraintSettings", i32, [4 x i8], %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", [6 x float], i8, [3 x i8], [6 x float], [6 x float], [3 x %"class.JPH::SpringSettings"], [6 x %"class.JPH::MotorSettings"], [8 x i8] }>
%"class.JPH::TwoBodyConstraintSettings" = type { %"class.JPH::ConstraintSettings" }
%"class.JPH::ConstraintSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget.16", i8, i32, i32, i32, float, i64 }
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget.16" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::SpringSettings" = type { i8, %union.anon.17, float }
%union.anon.17 = type { float }
%"class.JPH::MotorSettings" = type { %"class.JPH::SpringSettings", float, float, float, float }
%"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 @_ZN17VehicleSixDOFTest10InitializeEv(ptr noundef nonnull align 16 dereferenceable(248) %0) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca [4 x %"class.JPH::Vec3"], align 16
  %3 = alloca %"class.JPH::Vec3", align 16
  %4 = alloca %"class.JPH::RefConst", align 8
  %5 = alloca %"class.JPH::Vec3", align 16
  %6 = alloca %"class.JPH::Ref.6", align 8
  %7 = alloca %"class.JPH::Ref.7", align 8
  %8 = alloca %"class.JPH::BodyCreationSettings", align 16
  %9 = alloca %"class.JPH::CollisionGroup", align 8
  %10 = alloca %"class.JPH::Vec3", align 16
  %11 = alloca %"class.JPH::Vec3", align 16
  %12 = alloca %"class.JPH::BodyCreationSettings", align 16
  %13 = alloca %"class.JPH::CollisionGroup", align 8
  %14 = alloca %"class.JPH::SixDOFConstraintSettings", align 16
  %15 = alloca %"class.JPH::Vec3", align 16
  %16 = alloca %"class.JPH::MotorSettings", align 4
  %17 = alloca %"class.JPH::MotorSettings", align 4
  %18 = alloca %"class.JPH::MotorSettings", align 4
  %19 = alloca %"class.JPH::Vec3", align 16
  tail call void @_ZN11VehicleTest10InitializeEv(ptr noundef nonnull align 8 dereferenceable(136) %0)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %2) #11
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %2, float noundef 0xBFECCCCCC0000000, float noundef 0xBFC99999A0000000, float noundef 0x3FF6666660000000)
  %20 = getelementptr inbounds i8, ptr %2, i64 16
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %20, float noundef 0x3FECCCCCC0000000, float noundef 0xBFC99999A0000000, float noundef 0x3FF6666660000000)
  %21 = getelementptr inbounds i8, ptr %2, i64 32
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %21, float noundef 0xBFECCCCCC0000000, float noundef 0xBFC99999A0000000, float noundef 0xBFF6666660000000)
  %22 = getelementptr inbounds i8, ptr %2, i64 48
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %22, float noundef 0x3FECCCCCC0000000, float noundef 0xBFC99999A0000000, float noundef 0xBFF6666660000000)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #11
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %3, float noundef 0.000000e+00, float noundef 2.000000e+00, float noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #11
  %23 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %5, float noundef 0x3FECCCCCC0000000, float noundef 0x3FC99999A0000000, float noundef 2.000000e+00)
  %24 = load double, ptr %5, align 16
  %25 = getelementptr inbounds i8, ptr %5, i64 8
  %26 = load double, ptr %25, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %23, double %24, double %26, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %27 unwind label %72

27:                                               ; preds = %1
  call void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull %23)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #11
  %28 = invoke noundef ptr @_ZN3JPH13CylinderShapenwEm(i64 noundef 56)
          to label %29 unwind label %74

29:                                               ; preds = %27
  invoke void @_ZN3JPH13CylinderShapeC1EfffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(56) %28, float noundef 0x3FA99999A0000000, float noundef 0x3FD3333340000000, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %30 unwind label %76

30:                                               ; preds = %29
  invoke void @_ZN3JPH3RefINS_13CylinderShapeEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull %28)
          to label %31 unwind label %74

31:                                               ; preds = %30
  %32 = call noundef ptr @_ZNK3JPH3RefINS_13CylinderShapeEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %6)
  call void @_ZN3JPH11ConvexShape10SetDensityEf(ptr noundef nonnull align 8 dereferenceable(44) %32, float noundef 1.000000e+04)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #11
  %33 = invoke noundef ptr @_ZN3JPH16GroupFilterTablenwEm(i64 noundef 40)
          to label %34 unwind label %78

34:                                               ; preds = %31
  invoke void @_ZN3JPH16GroupFilterTableC2Ej(ptr noundef nonnull align 8 dereferenceable(40) %33, i32 noundef 0)
          to label %35 unwind label %80

35:                                               ; preds = %34
  invoke void @_ZN3JPH3RefINS_16GroupFilterTableEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull %33)
          to label %36 unwind label %78

36:                                               ; preds = %35
  %37 = getelementptr inbounds i8, ptr %0, i64 24
  %38 = load ptr, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %8) #11
  %39 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %4)
  %.sroa.034.0.copyload = load double, ptr %3, align 16
  %.sroa.235.0..sroa_idx = getelementptr inbounds i8, ptr %3, i64 8
  %.sroa.235.0.copyload = load double, ptr %.sroa.235.0..sroa_idx, align 8, !tbaa !17
  %40 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %41 unwind label %82

41:                                               ; preds = %36
  %42 = extractvalue { double, double } %40, 0
  %43 = extractvalue { double, double } %40, 1
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %8, ptr noundef %39, double %.sroa.034.0.copyload, double %.sroa.235.0.copyload, double %42, double %43, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %44 unwind label %82

44:                                               ; preds = %41
  %45 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %38, ptr noundef nonnull align 16 dereferenceable(256) %8)
          to label %46 unwind label %84

46:                                               ; preds = %44
  %47 = getelementptr inbounds i8, ptr %0, i64 136
  store ptr %45, ptr %47, align 8, !tbaa !18
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %8) #11
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %8) #11
  %48 = load ptr, ptr %47, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #11
  %49 = call noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %7)
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %9, ptr noundef %49, i32 noundef 0, i32 noundef 0)
          to label %50 unwind label %87

50:                                               ; preds = %46
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %48, ptr noundef nonnull align 8 dereferenceable(16) %9)
          to label %51 unwind label %89

51:                                               ; preds = %50
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #11
  %52 = load ptr, ptr %37, align 8, !tbaa !5
  %53 = load ptr, ptr %47, align 8, !tbaa !18
  %54 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %53)
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %52, ptr noundef nonnull align 4 dereferenceable(4) %54, i32 noundef 0)
          to label %.preheader unwind label %92

.preheader:                                       ; preds = %51
  %55 = getelementptr inbounds i8, ptr %10, i64 8
  %56 = getelementptr inbounds i8, ptr %11, i64 8
  %57 = getelementptr inbounds i8, ptr %14, i64 48
  %58 = getelementptr inbounds i8, ptr %14, i64 96
  %.sroa.620.0..sroa_idx = getelementptr inbounds i8, ptr %14, i64 104
  %59 = getelementptr inbounds i8, ptr %15, i64 8
  %60 = getelementptr inbounds i8, ptr %14, i64 112
  %.sroa.6.0..sroa_idx = getelementptr inbounds i8, ptr %14, i64 120
  %61 = getelementptr inbounds i8, ptr %14, i64 64
  %62 = getelementptr inbounds i8, ptr %14, i64 128
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %14, i64 136
  %63 = getelementptr inbounds i8, ptr %14, i64 80
  %64 = getelementptr inbounds i8, ptr %14, i64 284
  %65 = getelementptr inbounds i8, ptr %14, i64 340
  %66 = getelementptr inbounds i8, ptr %14, i64 396
  %67 = getelementptr inbounds i8, ptr %14, i64 368
  %68 = getelementptr inbounds i8, ptr %0, i64 16
  %69 = getelementptr inbounds i8, ptr %0, i64 144
  %70 = getelementptr inbounds i8, ptr %19, i64 8
  br label %94

71:                                               ; preds = %198
  invoke void @_ZN17VehicleSixDOFTest17UpdateCameraPivotEv(ptr noundef nonnull align 16 dereferenceable(248) %0)
          to label %202 unwind label %92

72:                                               ; preds = %1
  %73 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %23) #11
  br label %206

74:                                               ; preds = %30, %27
  %75 = landingpad { ptr, i32 }
          cleanup
  br label %205

76:                                               ; preds = %29
  %77 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH13CylinderShapedlEPv(ptr noundef %28) #11
  br label %205

78:                                               ; preds = %35, %31
  %79 = landingpad { ptr, i32 }
          cleanup
  br label %204

80:                                               ; preds = %34
  %81 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH16GroupFilterTabledlEPv(ptr noundef %33) #11
  br label %204

82:                                               ; preds = %41, %36
  %83 = landingpad { ptr, i32 }
          cleanup
  br label %86

84:                                               ; preds = %44
  %85 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %8) #11
  br label %86

86:                                               ; preds = %84, %82
  %.pn = phi { ptr, i32 } [ %85, %84 ], [ %83, %82 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %8) #11
  br label %203

87:                                               ; preds = %46
  %88 = landingpad { ptr, i32 }
          cleanup
  br label %91

89:                                               ; preds = %50
  %90 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #11
  br label %91

91:                                               ; preds = %89, %87
  %.pn54 = phi { ptr, i32 } [ %90, %89 ], [ %88, %87 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #11
  br label %203

92:                                               ; preds = %71, %51
  %93 = landingpad { ptr, i32 }
          cleanup
  br label %203

94:                                               ; preds = %.preheader, %198
  %indvars.iv = phi i64 [ 0, %.preheader ], [ %indvars.iv.next, %198 ]
  %95 = trunc nuw nsw i64 %indvars.iv to i32
  %96 = call noundef zeroext i1 @_ZN17VehicleSixDOFTest13sIsFrontWheelENS_6EWheelE(i32 noundef %95)
  %97 = call noundef zeroext i1 @_ZN17VehicleSixDOFTest12sIsLeftWheelENS_6EWheelE(i32 noundef %95)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #11
  %98 = getelementptr inbounds [4 x %"class.JPH::Vec3"], ptr %2, i64 0, i64 %indvars.iv
  %.sroa.021.0.copyload = load double, ptr %98, align 16
  %.sroa.222.0..sroa_idx = getelementptr inbounds i8, ptr %98, i64 8
  %.sroa.222.0.copyload = load double, ptr %.sroa.222.0..sroa_idx, align 8, !tbaa !17
  %99 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %3, double %.sroa.021.0.copyload, double %.sroa.222.0.copyload)
          to label %100 unwind label %144

100:                                              ; preds = %94
  %101 = extractvalue { double, double } %99, 0
  store double %101, ptr %10, align 16
  %102 = extractvalue { double, double } %99, 1
  store double %102, ptr %55, align 8
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %11, float noundef 0.000000e+00, float noundef 5.000000e-01, float noundef 0.000000e+00)
  %103 = load double, ptr %11, align 16
  %104 = load double, ptr %56, align 8
  %105 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %10, double %103, double %104)
          to label %106 unwind label %146

106:                                              ; preds = %100
  %107 = extractvalue { double, double } %105, 0
  %108 = extractvalue { double, double } %105, 1
  %109 = load ptr, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %12) #11
  %110 = call noundef ptr @_ZNK3JPH3RefINS_13CylinderShapeEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %6)
  %111 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %112 unwind label %148

112:                                              ; preds = %106
  %113 = extractvalue { double, double } %111, 0
  %114 = extractvalue { double, double } %111, 1
  %115 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %113, double %114, float noundef 0x3FF921FB60000000)
          to label %116 unwind label %148

116:                                              ; preds = %112
  %117 = extractvalue { double, double } %115, 0
  %118 = extractvalue { double, double } %115, 1
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %12, ptr noundef %110, double %107, double %108, double %117, double %118, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %119 unwind label %148

119:                                              ; preds = %116
  %120 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %109, ptr noundef nonnull align 16 dereferenceable(256) %12)
          to label %121 unwind label %150

121:                                              ; preds = %119
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %12) #11
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %12) #11
  call void @_ZN3JPH4Body11SetFrictionEf(ptr noundef nonnull align 16 dereferenceable(122) %120, float noundef 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #11
  %122 = call noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %7)
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %13, ptr noundef %122, i32 noundef 0, i32 noundef 0)
          to label %123 unwind label %155

123:                                              ; preds = %121
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %120, ptr noundef nonnull align 8 dereferenceable(16) %13)
          to label %124 unwind label %157

124:                                              ; preds = %123
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %13) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #11
  %125 = load ptr, ptr %37, align 8, !tbaa !5
  %126 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %120)
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %125, ptr noundef nonnull align 4 dereferenceable(4) %126, i32 noundef 0)
          to label %127 unwind label %153

127:                                              ; preds = %124
  call void @llvm.lifetime.start.p0(i64 432, ptr nonnull %14) #11
  invoke void @_ZN3JPH24SixDOFConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(432) %14)
          to label %128 unwind label %160

128:                                              ; preds = %127
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %57, ptr noundef nonnull align 16 dereferenceable(16) %10, i64 16, i1 false), !tbaa.struct !23
  store double %107, ptr %58, align 16
  store double %108, ptr %.sroa.620.0..sroa_idx, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #11
  br i1 %97, label %129, label %135

129:                                              ; preds = %128
  %130 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %131 unwind label %162

131:                                              ; preds = %129
  %132 = extractvalue { double, double } %130, 0
  store double %132, ptr %15, align 16
  %133 = extractvalue { double, double } %130, 1
  store double %133, ptr %59, align 8
  %134 = invoke { double, double } @_ZNK3JPH4Vec3ngEv(ptr noundef nonnull align 16 dereferenceable(16) %15)
          to label %137 unwind label %162

135:                                              ; preds = %128
  %136 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %137 unwind label %162

137:                                              ; preds = %135, %131
  %.pn60 = phi { double, double } [ %134, %131 ], [ %136, %135 ]
  %.sroa.6.0 = extractvalue { double, double } %.pn60, 1
  %.sroa.08.0 = extractvalue { double, double } %.pn60, 0
  store double %.sroa.08.0, ptr %60, align 16
  store double %.sroa.6.0, ptr %.sroa.6.0..sroa_idx, align 8, !tbaa !17
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %61, ptr noundef nonnull align 16 dereferenceable(16) %60, i64 16, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #11
  %138 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %139 unwind label %164

139:                                              ; preds = %137
  %140 = extractvalue { double, double } %138, 0
  %141 = extractvalue { double, double } %138, 1
  store double %140, ptr %62, align 16
  store double %141, ptr %.sroa.5.0..sroa_idx, align 8, !tbaa !17
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %63, ptr noundef nonnull align 16 dereferenceable(16) %62, i64 16, i1 false), !tbaa.struct !23
  call void @_ZN3JPH24SixDOFConstraintSettings13MakeFixedAxisENS0_5EAxisE(ptr noundef nonnull align 16 dereferenceable(432) %14, i32 noundef 0)
  call void @_ZN3JPH24SixDOFConstraintSettings14SetLimitedAxisENS0_5EAxisEff(ptr noundef nonnull align 16 dereferenceable(432) %14, i32 noundef 1, float noundef -5.000000e-01, float noundef 5.000000e-01)
  call void @_ZN3JPH24SixDOFConstraintSettings13MakeFixedAxisENS0_5EAxisE(ptr noundef nonnull align 16 dereferenceable(432) %14, i32 noundef 2)
  call void @llvm.lifetime.start.p0(i64 28, ptr nonnull %16) #11
  invoke void @_ZN3JPH13MotorSettingsC2Effff(ptr noundef nonnull align 4 dereferenceable(28) %16, float noundef 2.000000e+00, float noundef 1.000000e+00, float noundef 1.000000e+05, float noundef 0.000000e+00)
          to label %142 unwind label %166

142:                                              ; preds = %139
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(28) %64, ptr noundef nonnull align 4 dereferenceable(28) %16, i64 28, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %16) #11
  br i1 %96, label %143, label %168

143:                                              ; preds = %142
  call void @_ZN3JPH24SixDOFConstraintSettings14SetLimitedAxisENS0_5EAxisEff(ptr noundef nonnull align 16 dereferenceable(432) %14, i32 noundef 4, float noundef 0xBFE0C15240000000, float noundef 0x3FE0C15240000000)
  br label %169

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

146:                                              ; preds = %100
  %147 = landingpad { ptr, i32 }
          cleanup
  br label %201

148:                                              ; preds = %116, %112, %106
  %149 = landingpad { ptr, i32 }
          cleanup
  br label %152

150:                                              ; preds = %119
  %151 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %12) #11
  br label %152

152:                                              ; preds = %150, %148
  %.pn56 = phi { ptr, i32 } [ %151, %150 ], [ %149, %148 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %12) #11
  br label %201

153:                                              ; preds = %124
  %154 = landingpad { ptr, i32 }
          cleanup
  br label %201

155:                                              ; preds = %121
  %156 = landingpad { ptr, i32 }
          cleanup
  br label %159

157:                                              ; preds = %123
  %158 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %13) #11
  br label %159

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

160:                                              ; preds = %127
  %161 = landingpad { ptr, i32 }
          cleanup
  br label %200

162:                                              ; preds = %135, %131, %129
  %163 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #11
  br label %199

164:                                              ; preds = %137
  %165 = landingpad { ptr, i32 }
          cleanup
  br label %199

166:                                              ; preds = %139
  %167 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %16) #11
  br label %199

168:                                              ; preds = %142
  call void @_ZN3JPH24SixDOFConstraintSettings13MakeFixedAxisENS0_5EAxisE(ptr noundef nonnull align 16 dereferenceable(432) %14, i32 noundef 4)
  br label %169

169:                                              ; preds = %168, %143
  call void @_ZN3JPH24SixDOFConstraintSettings13MakeFixedAxisENS0_5EAxisE(ptr noundef nonnull align 16 dereferenceable(432) %14, i32 noundef 5)
  call void @_ZN3JPH24SixDOFConstraintSettings12MakeFreeAxisENS0_5EAxisE(ptr noundef nonnull align 16 dereferenceable(432) %14, i32 noundef 3)
  call void @llvm.lifetime.start.p0(i64 28, ptr nonnull %17) #11
  invoke void @_ZN3JPH13MotorSettingsC2Effff(ptr noundef nonnull align 4 dereferenceable(28) %17, float noundef 2.000000e+00, float noundef 1.000000e+00, float noundef 0.000000e+00, float noundef 5.000000e+03)
          to label %170 unwind label %173

170:                                              ; preds = %169
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(28) %65, ptr noundef nonnull align 4 dereferenceable(28) %17, i64 28, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %17) #11
  br i1 %96, label %171, label %177

171:                                              ; preds = %170
  call void @llvm.lifetime.start.p0(i64 28, ptr nonnull %18) #11
  invoke void @_ZN3JPH13MotorSettingsC2Effff(ptr noundef nonnull align 4 dereferenceable(28) %18, float noundef 1.000000e+01, float noundef 1.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+06)
          to label %172 unwind label %175

172:                                              ; preds = %171
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(28) %66, ptr noundef nonnull align 4 dereferenceable(28) %18, i64 28, i1 false), !tbaa.struct !24
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(28) %67, ptr noundef nonnull align 4 dereferenceable(28) %18, i64 28, i1 false)
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %18) #11
  br label %177

173:                                              ; preds = %169
  %174 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %17) #11
  br label %199

175:                                              ; preds = %171
  %176 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %18) #11
  br label %199

177:                                              ; preds = %172, %170
  %178 = load ptr, ptr %47, align 8, !tbaa !18
  %179 = invoke noundef ptr @_ZNK3JPH24SixDOFConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(432) %14, ptr noundef nonnull align 16 dereferenceable(122) %178, ptr noundef nonnull align 16 dereferenceable(122) %120)
          to label %180 unwind label %196

180:                                              ; preds = %177
  %181 = load ptr, ptr %68, align 16, !tbaa !28
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %181, ptr noundef %179)
          to label %182 unwind label %196

182:                                              ; preds = %180
  %183 = getelementptr inbounds [4 x %"class.JPH::Ref"], ptr %69, i64 0, i64 %indvars.iv
  %184 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefINS_16SixDOFConstraintEEaSEPS1_(ptr noundef nonnull align 8 dereferenceable(8) %183, ptr noundef %179)
          to label %185 unwind label %196

185:                                              ; preds = %182
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %19, float noundef 0.000000e+00, float noundef -5.000000e-01, float noundef 0.000000e+00)
  %186 = load double, ptr %19, align 16
  %187 = load double, ptr %70, align 8
  call void @_ZN3JPH16SixDOFConstraint19SetTargetPositionCSENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(1856) %179, double %186, double %187)
  invoke void @_ZN3JPH16SixDOFConstraint13SetMotorStateENS_24SixDOFConstraintSettings5EAxisENS_11EMotorStateE(ptr noundef nonnull align 16 dereferenceable(1856) %179, i32 noundef 1, i32 noundef 2)
          to label %188 unwind label %196

188:                                              ; preds = %185
  br i1 %96, label %189, label %198

189:                                              ; preds = %188
  %190 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %191 unwind label %196

191:                                              ; preds = %189
  %192 = extractvalue { double, double } %190, 0
  %193 = extractvalue { double, double } %190, 1
  invoke void @_ZN3JPH16SixDOFConstraint22SetTargetOrientationCSENS_4QuatE(ptr noundef nonnull align 16 dereferenceable(1856) %179, double %192, double %193)
          to label %194 unwind label %196

194:                                              ; preds = %191
  invoke void @_ZN3JPH16SixDOFConstraint13SetMotorStateENS_24SixDOFConstraintSettings5EAxisENS_11EMotorStateE(ptr noundef nonnull align 16 dereferenceable(1856) %179, i32 noundef 4, i32 noundef 2)
          to label %195 unwind label %196

195:                                              ; preds = %194
  invoke void @_ZN3JPH16SixDOFConstraint13SetMotorStateENS_24SixDOFConstraintSettings5EAxisENS_11EMotorStateE(ptr noundef nonnull align 16 dereferenceable(1856) %179, i32 noundef 5, i32 noundef 2)
          to label %198 unwind label %196

196:                                              ; preds = %195, %194, %191, %189, %185, %182, %180, %177
  %197 = landingpad { ptr, i32 }
          cleanup
  br label %199

198:                                              ; preds = %195, %188
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(432) %14) #11
  call void @llvm.lifetime.end.p0(i64 432, ptr nonnull %14) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #11
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, 4
  br i1 %exitcond.not, label %71, label %94, !llvm.loop !29

199:                                              ; preds = %196, %175, %173, %166, %164, %162
  %.pn62 = phi { ptr, i32 } [ %197, %196 ], [ %176, %175 ], [ %174, %173 ], [ %167, %166 ], [ %165, %164 ], [ %163, %162 ]
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(432) %14) #11
  br label %200

200:                                              ; preds = %199, %160
  %.pn62.pn = phi { ptr, i32 } [ %.pn62, %199 ], [ %161, %160 ]
  call void @llvm.lifetime.end.p0(i64 432, ptr nonnull %14) #11
  br label %201

201:                                              ; preds = %146, %200, %159, %153, %152, %144
  %.pn62.pn.pn.pn.pn = phi { ptr, i32 } [ %145, %144 ], [ %147, %146 ], [ %.pn62.pn, %200 ], [ %154, %153 ], [ %.pn58, %159 ], [ %.pn56, %152 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #11
  br label %203

202:                                              ; preds = %71
  call void @_ZN3JPH3RefINS_16GroupFilterTableEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %7) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #11
  call void @_ZN3JPH3RefINS_13CylinderShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %6) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #11
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %4) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %2) #11
  ret void

203:                                              ; preds = %201, %92, %91, %86
  %.pn62.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn62.pn.pn.pn.pn, %201 ], [ %93, %92 ], [ %.pn54, %91 ], [ %.pn, %86 ]
  call void @_ZN3JPH3RefINS_16GroupFilterTableEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %7) #11
  br label %204

204:                                              ; preds = %203, %80, %78
  %.pn62.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn62.pn.pn.pn.pn.pn, %203 ], [ %79, %78 ], [ %81, %80 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #11
  call void @_ZN3JPH3RefINS_13CylinderShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %6) #11
  br label %205

205:                                              ; preds = %204, %76, %74
  %.pn62.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn62.pn.pn.pn.pn.pn.pn, %204 ], [ %75, %74 ], [ %77, %76 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #11
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %4) #11
  br label %206

206:                                              ; preds = %205, %72
  %.pn62.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn62.pn.pn.pn.pn.pn.pn.pn, %205 ], [ %73, %72 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %2) #11
  resume { ptr, i32 } %.pn62.pn.pn.pn.pn.pn.pn.pn.pn
}

declare void @_ZN11VehicleTest10InitializeEv(ptr noundef nonnull align 8 dereferenceable(136)) unnamed_addr #2

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef) local_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: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) unnamed_addr #6 align 2

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

declare void @_ZN3JPH13CylinderShapeC1EfffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(56), float noundef, float noundef, float noundef, ptr noundef) unnamed_addr #2

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

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

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

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

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

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

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

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

declare noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 16 dereferenceable(256)) local_unnamed_addr #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 #7 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) #9

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Quat9sIdentityEv() local_unnamed_addr #4 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 #7 align 2

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #7 align 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 #7 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN17VehicleSixDOFTest13sIsFrontWheelENS_6EWheelE(i32 noundef) local_unnamed_addr #7 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN17VehicleSixDOFTest12sIsLeftWheelENS_6EWheelE(i32 noundef) local_unnamed_addr #7 align 2

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH24SixDOFConstraintSettings14SetLimitedAxisENS0_5EAxisEff(ptr noundef nonnull align 16 dereferenceable(432), i32 noundef, float noundef, float noundef) local_unnamed_addr #8 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH13MotorSettingsC2Effff(ptr noundef nonnull align 4 dereferenceable(28), float noundef, float noundef, float noundef, float noundef) unnamed_addr #1 align 2

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

declare noundef ptr @_ZNK3JPH24SixDOFConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(432), ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 16 dereferenceable(122)) unnamed_addr #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

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

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

declare void @_ZN3JPH16SixDOFConstraint13SetMotorStateENS_24SixDOFConstraintSettings5EAxisENS_11EMotorStateE(ptr noundef nonnull align 16 dereferenceable(1856), i32 noundef, i32 noundef) local_unnamed_addr #2

declare void @_ZN3JPH16SixDOFConstraint22SetTargetOrientationCSENS_4QuatE(ptr noundef nonnull align 16 dereferenceable(1856), double, double) local_unnamed_addr #2

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #7 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 nounwind 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 #4 = { 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 #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 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 nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { 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 #9 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #10 = { 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 #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 = !{!8, !8, i64 0}
!18 = !{!19, !7, i64 136}
!19 = !{!"_ZTS17VehicleSixDOFTest", !20, i64 0, !7, i64 136, !8, i64 144, !22, i64 176, !16, i64 240, !16, i64 244}
!20 = !{!"_ZTS11VehicleTest", !6, i64 0, !21, i64 112}
!21 = !{!"_ZTSN3JPH5ArrayIN11VehicleTest4LineENS_12STLAllocatorIS2_EEEE", !13, i64 0, !13, i64 8, !7, i64 16}
!22 = !{!"_ZTSN3JPH5Mat44E", !8, i64 0}
!23 = !{i64 0, i64 16, !17}
!24 = !{i64 0, i64 1, !25, i64 4, i64 4, !17, i64 8, i64 4, !27, i64 12, i64 4, !27, i64 16, i64 4, !27, i64 20, i64 4, !27, i64 24, i64 4, !27}
!25 = !{!26, !26, i64 0}
!26 = !{!"_ZTSN3JPH11ESpringModeE", !8, i64 0}
!27 = !{!16, !16, i64 0}
!28 = !{!6, !7, i64 16}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}


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