; LLVM IR from jrouwe/JoltPhysics :: Samples/SamplesApp.ll (ZN10SamplesApp11UpdateDebugEf)

; 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::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::Vec4" = type { %union.anon.55 }
%union.anon.55 = type { <4 x float> }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::BodyLockWrite" = type { %"class.JPH::BodyLockBase.203" }
%"class.JPH::BodyLockBase.203" = type { ptr, ptr, ptr }
%"class.JPH::DistanceConstraintSettings" = type <{ %"class.JPH::TwoBodyConstraintSettings", i32, [4 x i8], %"class.JPH::Vec3", %"class.JPH::Vec3", float, float, %"class.JPH::SpringSettings", [12 x i8] }>
%"class.JPH::TwoBodyConstraintSettings" = type { %"class.JPH::ConstraintSettings" }
%"class.JPH::ConstraintSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget.216", i8, i32, i32, i32, float, i64 }
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget.216" = 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.217, float }
%union.anon.217 = type { float }
%"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.89", %"class.JPH::RefConst.74" }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst.88", i32, i32 }
%"class.JPH::RefConst.88" = type { ptr }
%"class.JPH::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::RefConst.89" = type { ptr }
%"class.JPH::RefConst.74" = type { ptr }
%"struct.JPH::AssertLastParam" = type { i8 }
%"class.JPH::BodyID" = type { i32 }
%class.SamplesApp = type <{ %class.Application, i32, float, i32, [4 x i8], ptr, ptr, ptr, %class.BPLayerInterfaceImpl, %class.ObjectVsBroadPhaseLayerFilterImpl, %class.ObjectLayerPairFilterImpl, ptr, ptr, %"struct.JPH::PhysicsSettings", [4 x i8], %"class.JPH::UnorderedMap", ptr, ptr, ptr, i32, i8, [3 x i8], float, i8, i8, i8, i8, %"class.JPH::Array", i32, i32, i32, i32, i8, [15 x i8], %"class.JPH::Vec3", i8, i8, i8, i8, float, i8, i8, i8, i8, i32, i8, [3 x i8], i32, float, i8, [3 x i8], float, float, i8, [7 x i8], %"class.JPH::Vec3", i8, [7 x i8], ptr, %"class.JPH::BodyID", [4 x i8], %"class.JPH::Ref", i32, float, float, i32, %"class.std::chrono::duration.3", [8 x i8] }>
%class.Application = type { ptr, [8 x i8], %struct.CameraState, %struct.CameraState, ptr, ptr, ptr, %"class.JPH::RefConst", ptr, ptr, ptr, ptr, %"class.std::__cxx11::basic_string", %"class.std::chrono::time_point", i8, i8, i8, i8, float, float, float, float, i32 }
%struct.CameraState = type <{ %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", float, [12 x i8] }>
%"class.JPH::RefConst" = type { ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider", i64, %union.anon.0 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.0 = type { i64, [8 x i8] }
%"class.std::chrono::time_point" = type { %"class.std::chrono::duration" }
%"class.std::chrono::duration" = type { i64 }
%class.BPLayerInterfaceImpl = type <{ %"class.JPH::BroadPhaseLayerInterface", [2 x %"class.JPH::BroadPhaseLayer"], [6 x i8] }>
%"class.JPH::BroadPhaseLayerInterface" = type { ptr }
%"class.JPH::BroadPhaseLayer" = type { i8 }
%class.ObjectVsBroadPhaseLayerFilterImpl = type { %"class.JPH::ObjectVsBroadPhaseLayerFilter" }
%"class.JPH::ObjectVsBroadPhaseLayerFilter" = type { ptr }
%class.ObjectLayerPairFilterImpl = type { %"class.JPH::ObjectLayerPairFilter" }
%"class.JPH::ObjectLayerPairFilter" = type { ptr }
%"struct.JPH::PhysicsSettings" = type <{ i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float, i32, i32, float, float, float, i8, i8, i8, i8, i8, i8, i8, i8 }>
%"class.JPH::UnorderedMap" = type { %"class.JPH::HashTable.base", [4 x i8] }
%"class.JPH::HashTable.base" = type <{ ptr, ptr, i32, i32, i32 }>
%"class.JPH::Array" = type { i64, i64, ptr }
%"class.JPH::Ref" = type { ptr }
%"class.std::chrono::duration.3" = type { i64 }
%"class.JPH::SoftBodyVertex" = type { %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Plane", i32, i8, float, float }
%"class.JPH::Plane" = type { %"class.JPH::Vec4" }

@.str.147 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.152 = external hidden unnamed_addr constant [18 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN10SamplesApp11ShootObjectEv(ptr noundef nonnull align 16 dereferenceable(712)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(52) ptr @_ZNK11Application9GetCameraEv(ptr noundef nonnull align 16 dereferenceable(272)) #1 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 #5 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN10SamplesApp9CastProbeEfRfRN3JPH4Vec3ERNS1_6BodyIDE(ptr noundef nonnull align 16 dereferenceable(712), float noundef, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 16 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(4)) #5 align 2

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK3JPH4Body24GetCenterOfMassTransformEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::Mat44") align 16, ptr noundef nonnull align 16 dereferenceable(122)) #3 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN10SamplesApp11UpdateDebugEf(ptr noundef nonnull align 16 dereferenceable(712) %0, float noundef %1) #5 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca float, align 4
  %5 = alloca float, align 4
  %6 = alloca ptr, align 8
  %7 = alloca %"class.JPH::Vec3", align 16
  %8 = alloca %"class.JPH::BodyLockWrite", align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca %"class.JPH::Vec3", align 16
  %14 = alloca %"class.JPH::Mat44", align 16
  %15 = alloca %"class.JPH::Vec3", align 16
  %16 = alloca float, align 4
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca float, align 4
  %22 = alloca %"class.JPH::Vec3", align 16
  %23 = alloca %"class.JPH::Vec3", align 16
  %24 = alloca ptr, align 8
  %25 = alloca %"class.JPH::DistanceConstraintSettings", align 16
  %26 = alloca ptr, align 8
  %27 = alloca %"class.JPH::BodyCreationSettings", align 16
  %28 = alloca %"class.JPH::Vec3", align 16
  %29 = alloca %"class.JPH::Quat", align 16
  %30 = alloca %"class.JPH::BodyLockWrite", align 8
  %31 = alloca ptr, align 8
  %32 = alloca %"struct.JPH::AssertLastParam", align 1
  %33 = alloca ptr, align 8
  %34 = alloca %"class.JPH::BodyID", align 4
  %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::Vec3", align 16
  %39 = alloca %"class.JPH::Quat", align 16
  %40 = alloca %"class.JPH::BodyLockWrite", align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca ptr, align 8
  %44 = alloca %"class.JPH::Vec3", align 16
  %45 = alloca %"class.JPH::Vec3", align 16
  %46 = alloca %"class.JPH::Quat", align 16
  %47 = alloca %"class.JPH::Quat", align 16
  %48 = alloca %"class.JPH::Vec3", align 16
  %49 = alloca %"class.JPH::Vec3", align 16
  %50 = alloca %"class.JPH::Mat44", align 16
  %51 = alloca %"class.JPH::Vec3", align 16
  store ptr %0, ptr %3, align 8, !tbaa !5
  store float %1, ptr %4, align 4, !tbaa !9
  %52 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #10
  store float 4.000000e+01, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #10
  %53 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 11
  %54 = load ptr, ptr %53, align 8, !tbaa !11
  %55 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH13PhysicsSystem16GetBodyInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %54)
  store ptr %55, ptr %6, align 8, !tbaa !5
  %56 = getelementptr inbounds %class.Application, ptr %52, i32 0, i32 8
  %57 = load ptr, ptr %56, align 16, !tbaa !45
  %58 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 56
  %59 = call noundef zeroext i1 @_ZNK8Keyboard24IsKeyPressedAndTriggeredE4EKeyRb(ptr noundef nonnull align 8 dereferenceable(8) %57, i32 noundef 3, ptr noundef nonnull align 1 dereferenceable(1) %58)
  br i1 %59, label %60, label %61

60:                                               ; preds = %2
  call void @_ZN10SamplesApp11ShootObjectEv(ptr noundef nonnull align 16 dereferenceable(712) %52)
  br label %61

61:                                               ; preds = %60, %2
  %62 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 61
  %63 = call noundef zeroext i1 @_ZNK3JPH3RefINS_10ConstraintEEeqEPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %62, ptr noundef null)
  br i1 %63, label %64, label %314

64:                                               ; preds = %61
  %65 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 62
  %66 = load i32, ptr %65, align 16, !tbaa !46
  %67 = icmp eq i32 %66, -1
  br i1 %67, label %68, label %314

68:                                               ; preds = %64
  call void @llvm.lifetime.start.p0(i64 16, ptr %7) #10
  %69 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 64
  %70 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 59
  %71 = call noundef zeroext i1 @_ZN10SamplesApp9CastProbeEfRfRN3JPH4Vec3ERNS1_6BodyIDE(ptr noundef nonnull align 16 dereferenceable(712) %52, float noundef 4.000000e+01, ptr noundef nonnull align 4 dereferenceable(4) %69, ptr noundef nonnull align 16 dereferenceable(16) %7, ptr noundef nonnull align 4 dereferenceable(4) %70)
  br i1 %71, label %72, label %313

72:                                               ; preds = %68
  %73 = getelementptr inbounds %class.Application, ptr %52, i32 0, i32 8
  %74 = load ptr, ptr %73, align 16, !tbaa !45
  %75 = load ptr, ptr %74, align 8, !tbaa !47
  %76 = getelementptr inbounds ptr, ptr %75, i64 5
  %77 = load ptr, ptr %76, align 8
  %78 = call noundef zeroext i1 %77(ptr noundef nonnull align 8 dereferenceable(8) %74, i32 noundef 38)
  br i1 %78, label %79, label %312

79:                                               ; preds = %72
  call void @llvm.lifetime.start.p0(i64 24, ptr %8) #10
  %80 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 11
  %81 = load ptr, ptr %80, align 8, !tbaa !11
  %82 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem20GetBodyLockInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %81)
  %83 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 59
  call void @_ZN3JPH13BodyLockWriteCI2NS_12BodyLockBaseILb1ENS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(16) %82, ptr noundef nonnull align 4 dereferenceable(4) %83)
  %84 = invoke noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb1ENS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %8)
          to label %85 unwind label %124

85:                                               ; preds = %79
  br i1 %84, label %86, label %310

86:                                               ; preds = %85
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #10
  %87 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb1ENS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %8)
          to label %88 unwind label %128

88:                                               ; preds = %86
  store ptr %87, ptr %11, align 8, !tbaa !5
  %89 = load ptr, ptr %11, align 8, !tbaa !5
  %90 = invoke noundef zeroext i1 @_ZNK3JPH4Body10IsSoftBodyEv(ptr noundef nonnull align 16 dereferenceable(122) %89)
          to label %91 unwind label %128

91:                                               ; preds = %88
  br i1 %90, label %92, label %222

92:                                               ; preds = %91
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #10
  %93 = load ptr, ptr %11, align 8, !tbaa !5
  %94 = invoke noundef ptr @_ZN3JPH4Body19GetMotionPropertiesEv(ptr noundef nonnull align 16 dereferenceable(122) %93)
          to label %95 unwind label %132

95:                                               ; preds = %92
  store ptr %94, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %13) #10
  call void @llvm.lifetime.start.p0(i64 64, ptr %14) #10
  %96 = load ptr, ptr %11, align 8, !tbaa !5
  invoke void @_ZNK3JPH4Body31GetInverseCenterOfMassTransformEv(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %14, ptr noundef nonnull align 16 dereferenceable(122) %96)
          to label %97 unwind label %136

97:                                               ; preds = %95
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %15, ptr align 16 %7, i64 16, i1 false), !tbaa.struct !49
  %98 = getelementptr inbounds { double, double }, ptr %15, i32 0, i32 0
  %99 = load double, ptr %98, align 16
  %100 = getelementptr inbounds { double, double }, ptr %15, i32 0, i32 1
  %101 = load double, ptr %100, align 8
  %102 = invoke { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %14, double %99, double %101)
          to label %103 unwind label %136

103:                                              ; preds = %97
  %104 = getelementptr inbounds %"class.JPH::Vec3", ptr %13, i32 0, i32 0
  %105 = getelementptr inbounds %union.anon, ptr %104, i32 0, i32 0
  %106 = getelementptr inbounds { double, double }, ptr %105, i32 0, i32 0
  %107 = extractvalue { double, double } %102, 0
  store double %107, ptr %106, align 16
  %108 = getelementptr inbounds { double, double }, ptr %105, i32 0, i32 1
  %109 = extractvalue { double, double } %102, 1
  store double %109, ptr %108, align 8
  call void @llvm.lifetime.end.p0(i64 64, ptr %14) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #10
  store float 0x47EFFFFFE0000000, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #10
  %110 = load ptr, ptr %12, align 8, !tbaa !5
  %111 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH24SoftBodyMotionProperties11GetVerticesEv(ptr noundef nonnull align 16 dereferenceable(372) %110)
          to label %112 unwind label %140

112:                                              ; preds = %103
  store ptr %111, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #10
  %113 = load ptr, ptr %17, align 8, !tbaa !5
  %114 = invoke noundef ptr @_ZN3JPH5ArrayINS_14SoftBodyVertexENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %113)
          to label %115 unwind label %144

115:                                              ; preds = %112
  store ptr %114, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #10
  %116 = load ptr, ptr %17, align 8, !tbaa !5
  %117 = invoke noundef ptr @_ZN3JPH5ArrayINS_14SoftBodyVertexENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %116)
          to label %118 unwind label %148

118:                                              ; preds = %115
  store ptr %117, ptr %19, align 8, !tbaa !5
  br label %119

119:                                              ; preds = %196, %118
  %120 = load ptr, ptr %18, align 8, !tbaa !5
  %121 = load ptr, ptr %19, align 8, !tbaa !5
  %122 = icmp ne ptr %120, %121
  br i1 %122, label %152, label %123

123:                                              ; preds = %119
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #10
  br label %203

124:                                              ; preds = %79
  %125 = landingpad { ptr, i32 }
          cleanup
  %126 = extractvalue { ptr, i32 } %125, 0
  store ptr %126, ptr %9, align 8
  %127 = extractvalue { ptr, i32 } %125, 1
  store i32 %127, ptr %10, align 4
  br label %311

128:                                              ; preds = %222, %88, %86
  %129 = landingpad { ptr, i32 }
          cleanup
  %130 = extractvalue { ptr, i32 } %129, 0
  store ptr %130, ptr %9, align 8
  %131 = extractvalue { ptr, i32 } %129, 1
  store i32 %131, ptr %10, align 4
  br label %309

132:                                              ; preds = %92
  %133 = landingpad { ptr, i32 }
          cleanup
  %134 = extractvalue { ptr, i32 } %133, 0
  store ptr %134, ptr %9, align 8
  %135 = extractvalue { ptr, i32 } %133, 1
  store i32 %135, ptr %10, align 4
  br label %221

136:                                              ; preds = %97, %95
  %137 = landingpad { ptr, i32 }
          cleanup
  %138 = extractvalue { ptr, i32 } %137, 0
  store ptr %138, ptr %9, align 8
  %139 = extractvalue { ptr, i32 } %137, 1
  store i32 %139, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %14) #10
  br label %220

140:                                              ; preds = %103
  %141 = landingpad { ptr, i32 }
          cleanup
  %142 = extractvalue { ptr, i32 } %141, 0
  store ptr %142, ptr %9, align 8
  %143 = extractvalue { ptr, i32 } %141, 1
  store i32 %143, ptr %10, align 4
  br label %202

144:                                              ; preds = %112
  %145 = landingpad { ptr, i32 }
          cleanup
  %146 = extractvalue { ptr, i32 } %145, 0
  store ptr %146, ptr %9, align 8
  %147 = extractvalue { ptr, i32 } %145, 1
  store i32 %147, ptr %10, align 4
  br label %201

148:                                              ; preds = %115
  %149 = landingpad { ptr, i32 }
          cleanup
  %150 = extractvalue { ptr, i32 } %149, 0
  store ptr %150, ptr %9, align 8
  %151 = extractvalue { ptr, i32 } %149, 1
  store i32 %151, ptr %10, align 4
  br label %200

152:                                              ; preds = %119
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #10
  %153 = load ptr, ptr %18, align 8, !tbaa !5
  store ptr %153, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %22) #10
  %154 = load ptr, ptr %20, align 8, !tbaa !5
  %155 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %154, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %23, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !49
  %156 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 0
  %157 = load double, ptr %156, align 16
  %158 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 1
  %159 = load double, ptr %158, align 8
  %160 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %155, double %157, double %159)
          to label %161 unwind label %187

161:                                              ; preds = %152
  %162 = getelementptr inbounds %"class.JPH::Vec3", ptr %22, i32 0, i32 0
  %163 = getelementptr inbounds %union.anon, ptr %162, i32 0, i32 0
  %164 = getelementptr inbounds { double, double }, ptr %163, i32 0, i32 0
  %165 = extractvalue { double, double } %160, 0
  store double %165, ptr %164, align 16
  %166 = getelementptr inbounds { double, double }, ptr %163, i32 0, i32 1
  %167 = extractvalue { double, double } %160, 1
  store double %167, ptr %166, align 8
  %168 = invoke noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16) %22)
          to label %169 unwind label %187

169:                                              ; preds = %161
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #10
  store float %168, ptr %21, align 4, !tbaa !9
  %170 = load float, ptr %21, align 4, !tbaa !9
  %171 = load float, ptr %16, align 4, !tbaa !9
  %172 = fcmp olt float %170, %171
  br i1 %172, label %173, label %195

173:                                              ; preds = %169
  %174 = load float, ptr %21, align 4, !tbaa !9
  store float %174, ptr %16, align 4, !tbaa !9
  %175 = load ptr, ptr %20, align 8, !tbaa !5
  %176 = load ptr, ptr %12, align 8, !tbaa !5
  %177 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH24SoftBodyMotionProperties11GetVerticesEv(ptr noundef nonnull align 16 dereferenceable(372) %176)
          to label %178 unwind label %191

178:                                              ; preds = %173
  %179 = invoke noundef ptr @_ZN3JPH5ArrayINS_14SoftBodyVertexENS_12STLAllocatorIS1_EEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %177)
          to label %180 unwind label %191

180:                                              ; preds = %178
  %181 = ptrtoint ptr %175 to i64
  %182 = ptrtoint ptr %179 to i64
  %183 = sub i64 %181, %182
  %184 = sdiv exact i64 %183, 80
  %185 = trunc i64 %184 to i32
  %186 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 62
  store i32 %185, ptr %186, align 16, !tbaa !46
  br label %195

187:                                              ; preds = %161, %152
  %188 = landingpad { ptr, i32 }
          cleanup
  %189 = extractvalue { ptr, i32 } %188, 0
  store ptr %189, ptr %9, align 8
  %190 = extractvalue { ptr, i32 } %188, 1
  store i32 %190, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #10
  br label %199

191:                                              ; preds = %178, %173
  %192 = landingpad { ptr, i32 }
          cleanup
  %193 = extractvalue { ptr, i32 } %192, 0
  store ptr %193, ptr %9, align 8
  %194 = extractvalue { ptr, i32 } %192, 1
  store i32 %194, ptr %10, align 4
  br label %199

195:                                              ; preds = %180, %169
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #10
  br label %196

196:                                              ; preds = %195
  %197 = load ptr, ptr %18, align 8, !tbaa !5
  %198 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %197, i32 1
  store ptr %198, ptr %18, align 8, !tbaa !5
  br label %119

199:                                              ; preds = %191, %187
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #10
  br label %200

200:                                              ; preds = %199, %148
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #10
  br label %201

201:                                              ; preds = %200, %144
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #10
  br label %202

202:                                              ; preds = %201, %140
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #10
  br label %219

203:                                              ; preds = %123
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #10
  %204 = load ptr, ptr %12, align 8, !tbaa !5
  %205 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 62
  %206 = load i32, ptr %205, align 16, !tbaa !46
  %207 = invoke noundef nonnull align 16 dereferenceable(80) ptr @_ZN3JPH24SoftBodyMotionProperties9GetVertexEj(ptr noundef nonnull align 16 dereferenceable(372) %204, i32 noundef %206)
          to label %208 unwind label %215

208:                                              ; preds = %203
  store ptr %207, ptr %24, align 8, !tbaa !5
  %209 = load ptr, ptr %24, align 8, !tbaa !5
  %210 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %209, i32 0, i32 7
  %211 = load float, ptr %210, align 4, !tbaa !51
  %212 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 63
  store float %211, ptr %212, align 4, !tbaa !55
  %213 = load ptr, ptr %24, align 8, !tbaa !5
  %214 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %213, i32 0, i32 7
  store float 0.000000e+00, ptr %214, align 4, !tbaa !51
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %13) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #10
  br label %308

215:                                              ; preds = %203
  %216 = landingpad { ptr, i32 }
          cleanup
  %217 = extractvalue { ptr, i32 } %216, 0
  store ptr %217, ptr %9, align 8
  %218 = extractvalue { ptr, i32 } %216, 1
  store i32 %218, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #10
  br label %219

219:                                              ; preds = %215, %202
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #10
  br label %220

220:                                              ; preds = %219, %136
  call void @llvm.lifetime.end.p0(i64 16, ptr %13) #10
  br label %221

221:                                              ; preds = %220, %132
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #10
  br label %309

222:                                              ; preds = %91
  %223 = load ptr, ptr %11, align 8, !tbaa !5
  %224 = invoke noundef zeroext i1 @_ZNK3JPH4Body9IsDynamicEv(ptr noundef nonnull align 16 dereferenceable(122) %223)
          to label %225 unwind label %128

225:                                              ; preds = %222
  br i1 %224, label %226, label %307

226:                                              ; preds = %225
  call void @llvm.lifetime.start.p0(i64 112, ptr %25) #10
  invoke void @_ZN3JPH26DistanceConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(112) %25)
          to label %227 unwind label %279

227:                                              ; preds = %226
  %228 = getelementptr inbounds %"class.JPH::DistanceConstraintSettings", ptr %25, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %228, ptr align 16 %7, i64 16, i1 false), !tbaa.struct !49
  %229 = getelementptr inbounds %"class.JPH::DistanceConstraintSettings", ptr %25, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %229, ptr align 16 %228, i64 16, i1 false), !tbaa.struct !49
  %230 = load ptr, ptr %52, align 16, !tbaa !47
  %231 = getelementptr inbounds ptr, ptr %230, i64 5
  %232 = load ptr, ptr %231, align 8
  %233 = invoke noundef float %232(ptr noundef nonnull align 16 dereferenceable(712) %52)
          to label %234 unwind label %283

234:                                              ; preds = %227
  %235 = fdiv float 2.000000e+00, %233
  %236 = getelementptr inbounds %"class.JPH::DistanceConstraintSettings", ptr %25, i32 0, i32 7
  %237 = getelementptr inbounds %"class.JPH::SpringSettings", ptr %236, i32 0, i32 1
  store float %235, ptr %237, align 4, !tbaa !50
  %238 = getelementptr inbounds %"class.JPH::DistanceConstraintSettings", ptr %25, i32 0, i32 7
  %239 = getelementptr inbounds %"class.JPH::SpringSettings", ptr %238, i32 0, i32 2
  store float 1.000000e+00, ptr %239, align 8, !tbaa !56
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #10
  %240 = load ptr, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 256, ptr %27) #10
  %241 = invoke noundef ptr @_ZN3JPH11SphereShapenwEm(i64 noundef 48)
          to label %242 unwind label %287

242:                                              ; preds = %234
  invoke void @_ZN3JPH11SphereShapeC2EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(48) %241, float noundef 0x3F847AE140000000, ptr noundef null)
          to label %243 unwind label %291

243:                                              ; preds = %242
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %28, ptr align 16 %7, i64 16, i1 false), !tbaa.struct !49
  %244 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %245 unwind label %287

245:                                              ; preds = %243
  %246 = getelementptr inbounds %"class.JPH::Quat", ptr %29, i32 0, i32 0
  %247 = getelementptr inbounds %"class.JPH::Vec4", ptr %246, i32 0, i32 0
  %248 = getelementptr inbounds %union.anon.55, ptr %247, i32 0, i32 0
  %249 = getelementptr inbounds { double, double }, ptr %248, i32 0, i32 0
  %250 = extractvalue { double, double } %244, 0
  store double %250, ptr %249, align 16
  %251 = getelementptr inbounds { double, double }, ptr %248, i32 0, i32 1
  %252 = extractvalue { double, double } %244, 1
  store double %252, ptr %251, align 8
  %253 = getelementptr inbounds { double, double }, ptr %28, i32 0, i32 0
  %254 = load double, ptr %253, align 16
  %255 = getelementptr inbounds { double, double }, ptr %28, i32 0, i32 1
  %256 = load double, ptr %255, align 8
  %257 = getelementptr inbounds { double, double }, ptr %29, i32 0, i32 0
  %258 = load double, ptr %257, align 16
  %259 = getelementptr inbounds { double, double }, ptr %29, i32 0, i32 1
  %260 = load double, ptr %259, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %27, ptr noundef %241, double %254, double %256, double %258, double %260, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %261 unwind label %287

261:                                              ; preds = %245
  %262 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %240, ptr noundef nonnull align 16 dereferenceable(256) %27)
          to label %263 unwind label %295

263:                                              ; preds = %261
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %27) #10
  call void @llvm.lifetime.end.p0(i64 256, ptr %27) #10
  store ptr %262, ptr %26, align 8, !tbaa !5
  %264 = load ptr, ptr %26, align 8, !tbaa !5
  %265 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 58
  store ptr %264, ptr %265, align 8, !tbaa !67
  %266 = load ptr, ptr %26, align 8, !tbaa !5
  %267 = load ptr, ptr %11, align 8, !tbaa !5
  %268 = invoke noundef ptr @_ZNK3JPH26DistanceConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(112) %25, ptr noundef nonnull align 16 dereferenceable(122) %266, ptr noundef nonnull align 16 dereferenceable(122) %267)
          to label %269 unwind label %300

269:                                              ; preds = %263
  %270 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 61
  %271 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefINS_10ConstraintEEaSEPS1_(ptr noundef nonnull align 8 dereferenceable(8) %270, ptr noundef %268)
          to label %272 unwind label %300

272:                                              ; preds = %269
  %273 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 11
  %274 = load ptr, ptr %273, align 8, !tbaa !11
  %275 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 61
  %276 = invoke noundef ptr @_ZNK3JPH3RefINS_10ConstraintEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %275)
          to label %277 unwind label %300

277:                                              ; preds = %272
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %274, ptr noundef %276)
          to label %278 unwind label %300

278:                                              ; preds = %277
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #10
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(112) %25) #10
  call void @llvm.lifetime.end.p0(i64 112, ptr %25) #10
  br label %307

279:                                              ; preds = %226
  %280 = landingpad { ptr, i32 }
          cleanup
  %281 = extractvalue { ptr, i32 } %280, 0
  store ptr %281, ptr %9, align 8
  %282 = extractvalue { ptr, i32 } %280, 1
  store i32 %282, ptr %10, align 4
  br label %306

283:                                              ; preds = %227
  %284 = landingpad { ptr, i32 }
          cleanup
  %285 = extractvalue { ptr, i32 } %284, 0
  store ptr %285, ptr %9, align 8
  %286 = extractvalue { ptr, i32 } %284, 1
  store i32 %286, ptr %10, align 4
  br label %305

287:                                              ; preds = %245, %243, %234
  %288 = landingpad { ptr, i32 }
          cleanup
  %289 = extractvalue { ptr, i32 } %288, 0
  store ptr %289, ptr %9, align 8
  %290 = extractvalue { ptr, i32 } %288, 1
  store i32 %290, ptr %10, align 4
  br label %299

291:                                              ; preds = %242
  %292 = landingpad { ptr, i32 }
          cleanup
  %293 = extractvalue { ptr, i32 } %292, 0
  store ptr %293, ptr %9, align 8
  %294 = extractvalue { ptr, i32 } %292, 1
  store i32 %294, ptr %10, align 4
  call void @_ZN3JPH11SphereShapedlEPv(ptr noundef %241) #10
  br label %299

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

299:                                              ; preds = %295, %291, %287
  call void @llvm.lifetime.end.p0(i64 256, ptr %27) #10
  br label %304

300:                                              ; preds = %277, %272, %269, %263
  %301 = landingpad { ptr, i32 }
          cleanup
  %302 = extractvalue { ptr, i32 } %301, 0
  store ptr %302, ptr %9, align 8
  %303 = extractvalue { ptr, i32 } %301, 1
  store i32 %303, ptr %10, align 4
  br label %304

304:                                              ; preds = %300, %299
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #10
  br label %305

305:                                              ; preds = %304, %283
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(112) %25) #10
  br label %306

306:                                              ; preds = %305, %279
  call void @llvm.lifetime.end.p0(i64 112, ptr %25) #10
  br label %309

307:                                              ; preds = %278, %225
  br label %308

308:                                              ; preds = %307, %208
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #10
  br label %310

309:                                              ; preds = %306, %221, %128
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #10
  br label %311

310:                                              ; preds = %308, %85
  call void @_ZN3JPH12BodyLockBaseILb1ENS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %8) #10
  br label %312

311:                                              ; preds = %309, %124
  call void @_ZN3JPH12BodyLockBaseILb1ENS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %8) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %7) #10
  br label %573

312:                                              ; preds = %310, %72
  br label %313

313:                                              ; preds = %312, %68
  call void @llvm.lifetime.end.p0(i64 16, ptr %7) #10
  br label %572

314:                                              ; preds = %64, %61
  %315 = getelementptr inbounds %class.Application, ptr %52, i32 0, i32 8
  %316 = load ptr, ptr %315, align 16, !tbaa !45
  %317 = load ptr, ptr %316, align 8, !tbaa !47
  %318 = getelementptr inbounds ptr, ptr %317, i64 5
  %319 = load ptr, ptr %318, align 8
  %320 = call noundef zeroext i1 %319(ptr noundef nonnull align 8 dereferenceable(8) %316, i32 noundef 38)
  br i1 %320, label %396, label %321

321:                                              ; preds = %314
  %322 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 61
  %323 = call noundef zeroext i1 @_ZNK3JPH3RefINS_10ConstraintEEneEPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %322, ptr noundef null)
  br i1 %323, label %324, label %331

324:                                              ; preds = %321
  %325 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 11
  %326 = load ptr, ptr %325, align 8, !tbaa !11
  %327 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 61
  %328 = call noundef ptr @_ZNK3JPH3RefINS_10ConstraintEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %327)
  call void @_ZN3JPH13PhysicsSystem16RemoveConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %326, ptr noundef %328)
  %329 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 61
  %330 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefINS_10ConstraintEEaSEPS1_(ptr noundef nonnull align 8 dereferenceable(8) %329, ptr noundef null)
  br label %331

331:                                              ; preds = %324, %321
  %332 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 58
  %333 = load ptr, ptr %332, align 8, !tbaa !67
  %334 = icmp ne ptr %333, null
  br i1 %334, label %335, label %341

335:                                              ; preds = %331
  %336 = load ptr, ptr %6, align 8, !tbaa !5
  %337 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 58
  %338 = load ptr, ptr %337, align 8, !tbaa !67
  %339 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %338)
  call void @_ZN3JPH13BodyInterface11DestroyBodyERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %336, ptr noundef nonnull align 4 dereferenceable(4) %339)
  %340 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 58
  store ptr null, ptr %340, align 8, !tbaa !67
  br label %341

341:                                              ; preds = %335, %331
  %342 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 62
  %343 = load i32, ptr %342, align 16, !tbaa !46
  %344 = icmp ne i32 %343, -1
  br i1 %344, label %345, label %394

345:                                              ; preds = %341
  call void @llvm.lifetime.start.p0(i64 24, ptr %30) #10
  %346 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 11
  %347 = load ptr, ptr %346, align 8, !tbaa !11
  %348 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem20GetBodyLockInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %347)
  %349 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 59
  call void @_ZN3JPH13BodyLockWriteCI2NS_12BodyLockBaseILb1ENS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %30, ptr noundef nonnull align 8 dereferenceable(16) %348, ptr noundef nonnull align 4 dereferenceable(4) %349)
  %350 = invoke noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb1ENS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %30)
          to label %351 unwind label %363

351:                                              ; preds = %345
  br i1 %350, label %352, label %390

352:                                              ; preds = %351
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #10
  %353 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb1ENS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %30)
          to label %354 unwind label %367

354:                                              ; preds = %352
  store ptr %353, ptr %31, align 8, !tbaa !5
  br label %355

355:                                              ; preds = %354
  %356 = load ptr, ptr %31, align 8, !tbaa !5
  %357 = invoke noundef zeroext i1 @_ZNK3JPH4Body10IsSoftBodyEv(ptr noundef nonnull align 16 dereferenceable(122) %356)
          to label %358 unwind label %367

358:                                              ; preds = %355
  br i1 %357, label %371, label %359

359:                                              ; preds = %358
  %360 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.152, ptr noundef @.str.147, i32 noundef 2002)
          to label %361 unwind label %367

361:                                              ; preds = %359
  br i1 %360, label %362, label %371

362:                                              ; preds = %361
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #10, !srcloc !68
  br label %371

363:                                              ; preds = %345
  %364 = landingpad { ptr, i32 }
          cleanup
  %365 = extractvalue { ptr, i32 } %364, 0
  store ptr %365, ptr %9, align 8
  %366 = extractvalue { ptr, i32 } %364, 1
  store i32 %366, ptr %10, align 4
  br label %393

367:                                              ; preds = %359, %355, %352
  %368 = landingpad { ptr, i32 }
          cleanup
  %369 = extractvalue { ptr, i32 } %368, 0
  store ptr %369, ptr %9, align 8
  %370 = extractvalue { ptr, i32 } %368, 1
  store i32 %370, ptr %10, align 4
  br label %389

371:                                              ; preds = %362, %361, %358
  br label %372

372:                                              ; preds = %371
  br label %373

373:                                              ; preds = %372
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #10
  %374 = load ptr, ptr %31, align 8, !tbaa !5
  %375 = invoke noundef ptr @_ZN3JPH4Body19GetMotionPropertiesEv(ptr noundef nonnull align 16 dereferenceable(122) %374)
          to label %376 unwind label %385

376:                                              ; preds = %373
  store ptr %375, ptr %33, align 8, !tbaa !5
  %377 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 63
  %378 = load float, ptr %377, align 4, !tbaa !55
  %379 = load ptr, ptr %33, align 8, !tbaa !5
  %380 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 62
  %381 = load i32, ptr %380, align 16, !tbaa !46
  %382 = invoke noundef nonnull align 16 dereferenceable(80) ptr @_ZN3JPH24SoftBodyMotionProperties9GetVertexEj(ptr noundef nonnull align 16 dereferenceable(372) %379, i32 noundef %381)
          to label %383 unwind label %385

383:                                              ; preds = %376
  %384 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %382, i32 0, i32 7
  store float %378, ptr %384, align 4, !tbaa !51
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #10
  br label %390

385:                                              ; preds = %376, %373
  %386 = landingpad { ptr, i32 }
          cleanup
  %387 = extractvalue { ptr, i32 } %386, 0
  store ptr %387, ptr %9, align 8
  %388 = extractvalue { ptr, i32 } %386, 1
  store i32 %388, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #10
  br label %389

389:                                              ; preds = %385, %367
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #10
  br label %393

390:                                              ; preds = %383, %351
  %391 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 62
  store i32 -1, ptr %391, align 16, !tbaa !46
  %392 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 63
  store float 0.000000e+00, ptr %392, align 4, !tbaa !55
  call void @_ZN3JPH12BodyLockBaseILb1ENS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %30) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %30) #10
  br label %394

393:                                              ; preds = %389, %363
  call void @_ZN3JPH12BodyLockBaseILb1ENS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %30) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %30) #10
  br label %573

394:                                              ; preds = %390, %341
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #10
  call void @_ZN3JPH6BodyIDC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %34)
  %395 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 59
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %395, ptr align 4 %34, i64 4, i1 false), !tbaa.struct !69
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #10
  br label %571

396:                                              ; preds = %314
  call void @llvm.lifetime.start.p0(i64 16, ptr %35) #10
  %397 = call noundef nonnull align 16 dereferenceable(52) ptr @_ZNK11Application9GetCameraEv(ptr noundef nonnull align 16 dereferenceable(272) %52)
  %398 = getelementptr inbounds %struct.CameraState, ptr %397, i32 0, i32 0
  %399 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 64
  %400 = load float, ptr %399, align 8, !tbaa !71
  %401 = fmul float 4.000000e+01, %400
  %402 = call noundef nonnull align 16 dereferenceable(52) ptr @_ZNK11Application9GetCameraEv(ptr noundef nonnull align 16 dereferenceable(272) %52)
  %403 = getelementptr inbounds %struct.CameraState, ptr %402, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %37, ptr align 16 %403, i64 16, i1 false), !tbaa.struct !49
  %404 = getelementptr inbounds { double, double }, ptr %37, i32 0, i32 0
  %405 = load double, ptr %404, align 16
  %406 = getelementptr inbounds { double, double }, ptr %37, i32 0, i32 1
  %407 = load double, ptr %406, align 8
  %408 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %401, double %405, double %407)
  %409 = getelementptr inbounds %"class.JPH::Vec3", ptr %36, 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 } %408, 0
  store double %412, ptr %411, align 16
  %413 = getelementptr inbounds { double, double }, ptr %410, i32 0, i32 1
  %414 = extractvalue { double, double } %408, 1
  store double %414, ptr %413, align 8
  %415 = getelementptr inbounds { double, double }, ptr %36, i32 0, i32 0
  %416 = load double, ptr %415, align 16
  %417 = getelementptr inbounds { double, double }, ptr %36, i32 0, i32 1
  %418 = load double, ptr %417, align 8
  %419 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %398, double %416, double %418)
  %420 = getelementptr inbounds %"class.JPH::Vec3", ptr %35, i32 0, i32 0
  %421 = getelementptr inbounds %union.anon, ptr %420, i32 0, i32 0
  %422 = getelementptr inbounds { double, double }, ptr %421, i32 0, i32 0
  %423 = extractvalue { double, double } %419, 0
  store double %423, ptr %422, align 16
  %424 = getelementptr inbounds { double, double }, ptr %421, i32 0, i32 1
  %425 = extractvalue { double, double } %419, 1
  store double %425, ptr %424, align 8
  %426 = load ptr, ptr %6, align 8, !tbaa !5
  %427 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 59
  %428 = call noundef zeroext i8 @_ZNK3JPH13BodyInterface11GetBodyTypeERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %426, ptr noundef nonnull align 4 dereferenceable(4) %427)
  switch i8 %428, label %568 [
    i8 0, label %429
    i8 1, label %450
  ]

429:                                              ; preds = %396
  %430 = load ptr, ptr %6, align 8, !tbaa !5
  %431 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 58
  %432 = load ptr, ptr %431, align 8, !tbaa !67
  %433 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %432)
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %38, ptr align 16 %35, i64 16, i1 false), !tbaa.struct !49
  %434 = call { double, double } @_ZN3JPH4Quat9sIdentityEv()
  %435 = getelementptr inbounds %"class.JPH::Quat", ptr %39, i32 0, i32 0
  %436 = getelementptr inbounds %"class.JPH::Vec4", ptr %435, i32 0, i32 0
  %437 = getelementptr inbounds %union.anon.55, ptr %436, i32 0, i32 0
  %438 = getelementptr inbounds { double, double }, ptr %437, i32 0, i32 0
  %439 = extractvalue { double, double } %434, 0
  store double %439, ptr %438, align 16
  %440 = getelementptr inbounds { double, double }, ptr %437, i32 0, i32 1
  %441 = extractvalue { double, double } %434, 1
  store double %441, ptr %440, align 8
  %442 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 0
  %443 = load double, ptr %442, align 16
  %444 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 1
  %445 = load double, ptr %444, align 8
  %446 = getelementptr inbounds { double, double }, ptr %39, i32 0, i32 0
  %447 = load double, ptr %446, align 16
  %448 = getelementptr inbounds { double, double }, ptr %39, i32 0, i32 1
  %449 = load double, ptr %448, align 8
  call void @_ZN3JPH13BodyInterface22SetPositionAndRotationERKNS_6BodyIDENS_4Vec3ENS_4QuatENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %430, ptr noundef nonnull align 4 dereferenceable(4) %433, double %443, double %445, double %447, double %449, i32 noundef 1)
  br label %568

450:                                              ; preds = %396
  call void @llvm.lifetime.start.p0(i64 24, ptr %40) #10
  %451 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 11
  %452 = load ptr, ptr %451, align 8, !tbaa !11
  %453 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem20GetBodyLockInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %452)
  %454 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 59
  call void @_ZN3JPH13BodyLockWriteCI2NS_12BodyLockBaseILb1ENS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %40, ptr noundef nonnull align 8 dereferenceable(16) %453, ptr noundef nonnull align 4 dereferenceable(4) %454)
  %455 = invoke noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb1ENS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %40)
          to label %456 unwind label %538

456:                                              ; preds = %450
  br i1 %455, label %457, label %566

457:                                              ; preds = %456
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #10
  %458 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb1ENS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %40)
          to label %459 unwind label %542

459:                                              ; preds = %457
  store ptr %458, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #10
  %460 = load ptr, ptr %41, align 8, !tbaa !5
  %461 = invoke noundef ptr @_ZN3JPH4Body19GetMotionPropertiesEv(ptr noundef nonnull align 16 dereferenceable(122) %460)
          to label %462 unwind label %546

462:                                              ; preds = %459
  store ptr %461, ptr %42, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #10
  %463 = load ptr, ptr %42, align 8, !tbaa !5
  %464 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 62
  %465 = load i32, ptr %464, align 16, !tbaa !46
  %466 = invoke noundef nonnull align 16 dereferenceable(80) ptr @_ZN3JPH24SoftBodyMotionProperties9GetVertexEj(ptr noundef nonnull align 16 dereferenceable(372) %463, i32 noundef %465)
          to label %467 unwind label %550

467:                                              ; preds = %462
  store ptr %466, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %44) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %45) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %46) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %47) #10
  %468 = load ptr, ptr %41, align 8, !tbaa !5
  %469 = invoke { double, double } @_ZNK3JPH4Body11GetRotationEv(ptr noundef nonnull align 16 dereferenceable(122) %468)
          to label %470 unwind label %554

470:                                              ; preds = %467
  %471 = getelementptr inbounds %"class.JPH::Quat", ptr %47, i32 0, i32 0
  %472 = getelementptr inbounds %"class.JPH::Vec4", ptr %471, i32 0, i32 0
  %473 = getelementptr inbounds %union.anon.55, ptr %472, i32 0, i32 0
  %474 = getelementptr inbounds { double, double }, ptr %473, i32 0, i32 0
  %475 = extractvalue { double, double } %469, 0
  store double %475, ptr %474, align 16
  %476 = getelementptr inbounds { double, double }, ptr %473, i32 0, i32 1
  %477 = extractvalue { double, double } %469, 1
  store double %477, ptr %476, align 8
  %478 = invoke { double, double } @_ZNK3JPH4Quat10ConjugatedEv(ptr noundef nonnull align 16 dereferenceable(16) %47)
          to label %479 unwind label %554

479:                                              ; preds = %470
  %480 = getelementptr inbounds %"class.JPH::Quat", ptr %46, i32 0, i32 0
  %481 = getelementptr inbounds %"class.JPH::Vec4", ptr %480, i32 0, i32 0
  %482 = getelementptr inbounds %union.anon.55, ptr %481, i32 0, i32 0
  %483 = getelementptr inbounds { double, double }, ptr %482, i32 0, i32 0
  %484 = extractvalue { double, double } %478, 0
  store double %484, ptr %483, align 16
  %485 = getelementptr inbounds { double, double }, ptr %482, i32 0, i32 1
  %486 = extractvalue { double, double } %478, 1
  store double %486, ptr %485, align 8
  call void @llvm.lifetime.start.p0(i64 64, ptr %50) #10
  %487 = load ptr, ptr %41, align 8, !tbaa !5
  invoke void @_ZNK3JPH4Body24GetCenterOfMassTransformEv(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %50, ptr noundef nonnull align 16 dereferenceable(122) %487)
          to label %488 unwind label %558

488:                                              ; preds = %479
  %489 = load ptr, ptr %43, align 8, !tbaa !5
  %490 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %489, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %51, ptr align 16 %490, i64 16, i1 false), !tbaa.struct !49
  %491 = getelementptr inbounds { double, double }, ptr %51, i32 0, i32 0
  %492 = load double, ptr %491, align 16
  %493 = getelementptr inbounds { double, double }, ptr %51, i32 0, i32 1
  %494 = load double, ptr %493, align 8
  %495 = invoke { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %50, double %492, double %494)
          to label %496 unwind label %558

496:                                              ; preds = %488
  %497 = getelementptr inbounds %"class.JPH::Vec3", ptr %49, i32 0, i32 0
  %498 = getelementptr inbounds %union.anon, ptr %497, i32 0, i32 0
  %499 = getelementptr inbounds { double, double }, ptr %498, i32 0, i32 0
  %500 = extractvalue { double, double } %495, 0
  store double %500, ptr %499, align 16
  %501 = getelementptr inbounds { double, double }, ptr %498, i32 0, i32 1
  %502 = extractvalue { double, double } %495, 1
  store double %502, ptr %501, align 8
  %503 = getelementptr inbounds { double, double }, ptr %49, i32 0, i32 0
  %504 = load double, ptr %503, align 16
  %505 = getelementptr inbounds { double, double }, ptr %49, i32 0, i32 1
  %506 = load double, ptr %505, align 8
  %507 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %35, double %504, double %506)
          to label %508 unwind label %558

508:                                              ; preds = %496
  %509 = getelementptr inbounds %"class.JPH::Vec3", ptr %48, i32 0, i32 0
  %510 = getelementptr inbounds %union.anon, ptr %509, i32 0, i32 0
  %511 = getelementptr inbounds { double, double }, ptr %510, i32 0, i32 0
  %512 = extractvalue { double, double } %507, 0
  store double %512, ptr %511, align 16
  %513 = getelementptr inbounds { double, double }, ptr %510, i32 0, i32 1
  %514 = extractvalue { double, double } %507, 1
  store double %514, ptr %513, align 8
  %515 = getelementptr inbounds { double, double }, ptr %48, i32 0, i32 0
  %516 = load double, ptr %515, align 16
  %517 = getelementptr inbounds { double, double }, ptr %48, i32 0, i32 1
  %518 = load double, ptr %517, align 8
  %519 = invoke { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %46, double %516, double %518)
          to label %520 unwind label %558

520:                                              ; preds = %508
  %521 = getelementptr inbounds %"class.JPH::Vec3", ptr %45, i32 0, i32 0
  %522 = getelementptr inbounds %union.anon, ptr %521, i32 0, i32 0
  %523 = getelementptr inbounds { double, double }, ptr %522, i32 0, i32 0
  %524 = extractvalue { double, double } %519, 0
  store double %524, ptr %523, align 16
  %525 = getelementptr inbounds { double, double }, ptr %522, i32 0, i32 1
  %526 = extractvalue { double, double } %519, 1
  store double %526, ptr %525, align 8
  %527 = load float, ptr %4, align 4, !tbaa !9
  %528 = invoke { double, double } @_ZNK3JPH4Vec3dvEf(ptr noundef nonnull align 16 dereferenceable(16) %45, float noundef %527)
          to label %529 unwind label %558

529:                                              ; preds = %520
  %530 = getelementptr inbounds %"class.JPH::Vec3", ptr %44, i32 0, i32 0
  %531 = getelementptr inbounds %union.anon, ptr %530, i32 0, i32 0
  %532 = getelementptr inbounds { double, double }, ptr %531, i32 0, i32 0
  %533 = extractvalue { double, double } %528, 0
  store double %533, ptr %532, align 16
  %534 = getelementptr inbounds { double, double }, ptr %531, i32 0, i32 1
  %535 = extractvalue { double, double } %528, 1
  store double %535, ptr %534, align 8
  %536 = load ptr, ptr %43, align 8, !tbaa !5
  %537 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %536, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %537, ptr align 16 %44, i64 16, i1 false), !tbaa.struct !49
  call void @llvm.lifetime.end.p0(i64 64, ptr %50) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %47) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %46) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %45) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #10
  br label %566

538:                                              ; preds = %450
  %539 = landingpad { ptr, i32 }
          cleanup
  %540 = extractvalue { ptr, i32 } %539, 0
  store ptr %540, ptr %9, align 8
  %541 = extractvalue { ptr, i32 } %539, 1
  store i32 %541, ptr %10, align 4
  br label %567

542:                                              ; preds = %457
  %543 = landingpad { ptr, i32 }
          cleanup
  %544 = extractvalue { ptr, i32 } %543, 0
  store ptr %544, ptr %9, align 8
  %545 = extractvalue { ptr, i32 } %543, 1
  store i32 %545, ptr %10, align 4
  br label %565

546:                                              ; preds = %459
  %547 = landingpad { ptr, i32 }
          cleanup
  %548 = extractvalue { ptr, i32 } %547, 0
  store ptr %548, ptr %9, align 8
  %549 = extractvalue { ptr, i32 } %547, 1
  store i32 %549, ptr %10, align 4
  br label %564

550:                                              ; preds = %462
  %551 = landingpad { ptr, i32 }
          cleanup
  %552 = extractvalue { ptr, i32 } %551, 0
  store ptr %552, ptr %9, align 8
  %553 = extractvalue { ptr, i32 } %551, 1
  store i32 %553, ptr %10, align 4
  br label %563

554:                                              ; preds = %470, %467
  %555 = landingpad { ptr, i32 }
          cleanup
  %556 = extractvalue { ptr, i32 } %555, 0
  store ptr %556, ptr %9, align 8
  %557 = extractvalue { ptr, i32 } %555, 1
  store i32 %557, ptr %10, align 4
  br label %562

558:                                              ; preds = %520, %508, %496, %488, %479
  %559 = landingpad { ptr, i32 }
          cleanup
  %560 = extractvalue { ptr, i32 } %559, 0
  store ptr %560, ptr %9, align 8
  %561 = extractvalue { ptr, i32 } %559, 1
  store i32 %561, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %50) #10
  br label %562

562:                                              ; preds = %558, %554
  call void @llvm.lifetime.end.p0(i64 16, ptr %47) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %46) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %45) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #10
  br label %563

563:                                              ; preds = %562, %550
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #10
  br label %564

564:                                              ; preds = %563, %546
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #10
  br label %565

565:                                              ; preds = %564, %542
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #10
  br label %567

566:                                              ; preds = %529, %456
  call void @_ZN3JPH12BodyLockBaseILb1ENS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %40) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %40) #10
  br label %568

567:                                              ; preds = %565, %538
  call void @_ZN3JPH12BodyLockBaseILb1ENS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %40) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %40) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #10
  br label %573

568:                                              ; preds = %566, %429, %396
  %569 = load ptr, ptr %6, align 8, !tbaa !5
  %570 = getelementptr inbounds %class.SamplesApp, ptr %52, i32 0, i32 59
  call void @_ZN3JPH13BodyInterface12ActivateBodyERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %569, ptr noundef nonnull align 4 dereferenceable(4) %570)
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #10
  br label %571

571:                                              ; preds = %568, %394
  br label %572

572:                                              ; preds = %571, %313
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #10
  ret void

573:                                              ; preds = %567, %393, %311
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #10
  br label %574

574:                                              ; preds = %573
  %575 = load ptr, ptr %9, align 8
  %576 = load i32, ptr %10, align 4
  %577 = insertvalue { ptr, i32 } poison, ptr %575, 0
  %578 = insertvalue { ptr, i32 } %577, i32 %576, 1
  resume { ptr, i32 } %578
}

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK8Keyboard24IsKeyPressedAndTriggeredE4EKeyRb(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef, ptr noundef nonnull align 1 dereferenceable(1)) #5 align 2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH4Body19GetMotionPropertiesEv(ptr noundef nonnull align 16 dereferenceable(122)) #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK3JPH4Body31GetInverseCenterOfMassTransformEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::Mat44") align 16, ptr noundef nonnull align 16 dereferenceable(122)) #3 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH24SoftBodyMotionProperties11GetVerticesEv(ptr noundef nonnull align 16 dereferenceable(372)) #1 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 16 dereferenceable(80) ptr @_ZN3JPH24SoftBodyMotionProperties9GetVertexEj(ptr noundef nonnull align 16 dereferenceable(372), i32 noundef) #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH26DistanceConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(112)) unnamed_addr #3 align 2

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

declare noundef ptr @_ZNK3JPH26DistanceConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(112), ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 16 dereferenceable(122)) unnamed_addr #9

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

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

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

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

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

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

declare void @_ZN3JPH13BodyInterface11DestroyBodyERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4)) #9

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

declare noundef zeroext i8 @_ZNK3JPH13BodyInterface11GetBodyTypeERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4)) #9

declare void @_ZN3JPH13BodyInterface22SetPositionAndRotationERKNS_6BodyIDENS_4Vec3ENS_4QuatENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4), double, double, double, double, i32 noundef) #9

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"float", !7, i64 0}
!11 = !{!12, !6, i64 344}
!12 = !{!"_ZTS10SamplesApp", !13, i64 0, !23, i64 272, !10, i64 276, !23, i64 280, !6, i64 288, !6, i64 296, !6, i64 304, !24, i64 312, !26, i64 328, !28, i64 336, !6, i64 344, !6, i64 352, !30, i64 360, !31, i64 448, !6, i64 480, !6, i64 488, !6, i64 496, !23, i64 504, !22, i64 508, !10, i64 512, !22, i64 516, !22, i64 517, !22, i64 518, !22, i64 519, !33, i64 520, !34, i64 544, !23, i64 548, !35, i64 552, !36, i64 556, !22, i64 560, !15, i64 576, !37, i64 592, !37, i64 593, !38, i64 594, !39, i64 595, !10, i64 596, !22, i64 600, !22, i64 601, !22, i64 602, !22, i64 603, !23, i64 604, !22, i64 608, !40, i64 612, !10, i64 616, !41, i64 620, !10, i64 624, !10, i64 628, !22, i64 632, !15, i64 640, !22, i64 656, !6, i64 664, !42, i64 672, !43, i64 680, !23, i64 688, !10, i64 692, !10, i64 696, !23, i64 700, !44, i64 704}
!13 = !{!"_ZTS11Application", !14, i64 16, !14, i64 80, !6, i64 144, !6, i64 152, !6, i64 160, !16, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !17, i64 208, !20, i64 240, !22, i64 248, !22, i64 249, !22, i64 250, !22, i64 251, !10, i64 252, !10, i64 256, !10, i64 260, !10, i64 264, !23, i64 268}
!14 = !{!"_ZTS11CameraState", !15, i64 0, !15, i64 16, !15, i64 32, !10, i64 48}
!15 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!16 = !{!"_ZTSN3JPH8RefConstI4FontEE", !6, i64 0}
!17 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEE", !18, i64 0, !19, i64 8, !7, i64 16}
!18 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEE12_Alloc_hiderE", !6, i64 0}
!19 = !{!"long", !7, i64 0}
!20 = !{!"_ZTSNSt6chrono10time_pointINS_3_V212system_clockENS_8durationIlSt5ratioILl1ELl1000000000EEEEEE", !21, i64 0}
!21 = !{!"_ZTSNSt6chrono8durationIlSt5ratioILl1ELl1000000000EEEE", !19, i64 0}
!22 = !{!"bool", !7, i64 0}
!23 = !{!"int", !7, i64 0}
!24 = !{!"_ZTS20BPLayerInterfaceImpl", !25, i64 0, !7, i64 8}
!25 = !{!"_ZTSN3JPH24BroadPhaseLayerInterfaceE"}
!26 = !{!"_ZTS33ObjectVsBroadPhaseLayerFilterImpl", !27, i64 0}
!27 = !{!"_ZTSN3JPH29ObjectVsBroadPhaseLayerFilterE"}
!28 = !{!"_ZTS25ObjectLayerPairFilterImpl", !29, i64 0}
!29 = !{!"_ZTSN3JPH21ObjectLayerPairFilterE"}
!30 = !{!"_ZTSN3JPH15PhysicsSettingsE", !23, i64 0, !23, i64 4, !23, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !23, i64 56, !23, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !22, i64 76, !22, i64 77, !22, i64 78, !22, i64 79, !22, i64 80, !22, i64 81, !22, i64 82}
!31 = !{!"_ZTSN3JPH12UnorderedMapINS_8RefConstINS_5ShapeEEENS_3RefINS_13DebugRenderer8GeometryEEENS_4HashIS3_EESt8equal_toIS3_EEE", !32, i64 0}
!32 = !{!"_ZTSN3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EEE", !6, i64 0, !6, i64 8, !23, i64 16, !23, i64 20, !23, i64 24}
!33 = !{!"_ZTSN3JPH5ArrayIN10SamplesApp13PlayBackFrameENS_12STLAllocatorIS2_EEEE", !19, i64 0, !19, i64 8, !6, i64 16}
!34 = !{!"_ZTSN10SamplesApp13EPlaybackModeE", !7, i64 0}
!35 = !{!"_ZTSN10SamplesApp10EProbeModeE", !7, i64 0}
!36 = !{!"_ZTSN10SamplesApp11EProbeShapeE", !7, i64 0}
!37 = !{!"_ZTSN3JPH13EBackFaceModeE", !7, i64 0}
!38 = !{!"_ZTSN3JPH15EActiveEdgeModeE", !7, i64 0}
!39 = !{!"_ZTSN3JPH17ECollectFacesModeE", !7, i64 0}
!40 = !{!"_ZTSN10SamplesApp17EShootObjectShapeE", !7, i64 0}
!41 = !{!"_ZTSN3JPH14EMotionQualityE", !7, i64 0}
!42 = !{!"_ZTSN3JPH6BodyIDE", !23, i64 0}
!43 = !{!"_ZTSN3JPH3RefINS_10ConstraintEEE", !6, i64 0}
!44 = !{!"_ZTSNSt6chrono8durationIlSt5ratioILl1ELl1000000EEEE", !19, i64 0}
!45 = !{!13, !6, i64 176}
!46 = !{!12, !23, i64 688}
!47 = !{!48, !48, i64 0}
!48 = !{!"vtable pointer", !8, i64 0}
!49 = !{i64 0, i64 16, !50}
!50 = !{!7, !7, i64 0}
!51 = !{!52, !10, i64 76}
!52 = !{!"_ZTSN3JPH14SoftBodyVertexE", !15, i64 0, !15, i64 16, !15, i64 32, !53, i64 48, !23, i64 64, !22, i64 68, !10, i64 72, !10, i64 76}
!53 = !{!"_ZTSN3JPH5PlaneE", !54, i64 0}
!54 = !{!"_ZTSN3JPH4Vec4E", !7, i64 0}
!55 = !{!12, !10, i64 692}
!56 = !{!57, !10, i64 96}
!57 = !{!"_ZTSN3JPH26DistanceConstraintSettingsE", !58, i64 0, !64, i64 40, !15, i64 48, !15, i64 64, !10, i64 80, !10, i64 84, !65, i64 88}
!58 = !{!"_ZTSN3JPH25TwoBodyConstraintSettingsE", !59, i64 0}
!59 = !{!"_ZTSN3JPH18ConstraintSettingsE", !60, i64 0, !61, i64 8, !22, i64 12, !23, i64 16, !23, i64 20, !23, i64 24, !10, i64 28, !19, i64 32}
!60 = !{!"_ZTSN3JPH18SerializableObjectE"}
!61 = !{!"_ZTSN3JPH9RefTargetINS_18ConstraintSettingsEEE", !62, i64 0}
!62 = !{!"_ZTSSt6atomicIjE", !63, i64 0}
!63 = !{!"_ZTSSt13__atomic_baseIjE", !23, i64 0}
!64 = !{!"_ZTSN3JPH16EConstraintSpaceE", !7, i64 0}
!65 = !{!"_ZTSN3JPH14SpringSettingsE", !66, i64 0, !7, i64 4, !10, i64 8}
!66 = !{!"_ZTSN3JPH11ESpringModeE", !7, i64 0}
!67 = !{!12, !6, i64 664}
!68 = !{i64 2161775950}
!69 = !{i64 0, i64 4, !70}
!70 = !{!23, !23, i64 0}
!71 = !{!12, !10, i64 696}


; 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::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::Vec4" = type { %union.anon.55 }
%union.anon.55 = type { <4 x float> }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::BodyLockWrite" = type { %"class.JPH::BodyLockBase.203" }
%"class.JPH::BodyLockBase.203" = type { ptr, ptr, ptr }
%"class.JPH::DistanceConstraintSettings" = type <{ %"class.JPH::TwoBodyConstraintSettings", i32, [4 x i8], %"class.JPH::Vec3", %"class.JPH::Vec3", float, float, %"class.JPH::SpringSettings", [12 x i8] }>
%"class.JPH::TwoBodyConstraintSettings" = type { %"class.JPH::ConstraintSettings" }
%"class.JPH::ConstraintSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget.216", i8, i32, i32, i32, float, i64 }
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget.216" = 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.217, float }
%union.anon.217 = type { float }
%"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.89", %"class.JPH::RefConst.74" }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst.88", i32, i32 }
%"class.JPH::RefConst.88" = type { ptr }
%"class.JPH::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::RefConst.89" = type { ptr }
%"class.JPH::RefConst.74" = type { ptr }
%"class.JPH::BodyID" = type { i32 }

@.str.147 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.152 = external hidden unnamed_addr constant [18 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN10SamplesApp11ShootObjectEv(ptr noundef nonnull align 16 dereferenceable(712)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(52) ptr @_ZNK11Application9GetCameraEv(ptr noundef nonnull align 16 dereferenceable(272)) local_unnamed_addr #1 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 #5 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN10SamplesApp9CastProbeEfRfRN3JPH4Vec3ERNS1_6BodyIDE(ptr noundef nonnull align 16 dereferenceable(712), float noundef, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 16 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #5 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 #7 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH4Body9IsDynamicEv(ptr noundef nonnull align 16 dereferenceable(122)) local_unnamed_addr #8 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 #7 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK3JPH4Body24GetCenterOfMassTransformEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::Mat44") align 16, ptr noundef nonnull align 16 dereferenceable(122)) local_unnamed_addr #3 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN10SamplesApp11UpdateDebugEf(ptr noundef nonnull align 16 dereferenceable(712) %0, float noundef %1) local_unnamed_addr #5 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.JPH::Vec3", align 16
  %4 = alloca %"class.JPH::BodyLockWrite", align 8
  %5 = alloca %"class.JPH::Mat44", align 16
  %6 = alloca %"class.JPH::Vec3", align 16
  %7 = alloca %"class.JPH::DistanceConstraintSettings", align 16
  %8 = alloca %"class.JPH::BodyCreationSettings", align 16
  %9 = alloca %"class.JPH::BodyLockWrite", align 8
  %10 = alloca %"class.JPH::BodyID", align 4
  %11 = alloca %"class.JPH::Vec3", align 16
  %12 = alloca %"class.JPH::BodyLockWrite", align 8
  %13 = alloca %"class.JPH::Vec3", align 16
  %14 = alloca %"class.JPH::Quat", align 16
  %15 = alloca %"class.JPH::Quat", align 16
  %16 = alloca %"class.JPH::Mat44", align 16
  %17 = getelementptr inbounds i8, ptr %0, i64 344
  %18 = load ptr, ptr %17, align 8, !tbaa !5
  %19 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH13PhysicsSystem16GetBodyInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %18)
  %20 = getelementptr inbounds i8, ptr %0, i64 176
  %21 = load ptr, ptr %20, align 16, !tbaa !43
  %22 = getelementptr inbounds i8, ptr %0, i64 656
  %23 = tail call noundef zeroext i1 @_ZNK8Keyboard24IsKeyPressedAndTriggeredE4EKeyRb(ptr noundef nonnull align 8 dereferenceable(8) %21, i32 noundef 3, ptr noundef nonnull align 1 dereferenceable(1) %22)
  br i1 %23, label %24, label %25

24:                                               ; preds = %2
  tail call void @_ZN10SamplesApp11ShootObjectEv(ptr noundef nonnull align 16 dereferenceable(712) %0)
  br label %25

25:                                               ; preds = %24, %2
  %26 = getelementptr inbounds i8, ptr %0, i64 680
  %27 = tail call noundef zeroext i1 @_ZNK3JPH3RefINS_10ConstraintEEeqEPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %26, ptr noundef null)
  br i1 %27, label %28, label %146

28:                                               ; preds = %25
  %29 = getelementptr inbounds i8, ptr %0, i64 688
  %30 = load i32, ptr %29, align 16, !tbaa !44
  %31 = icmp eq i32 %30, -1
  br i1 %31, label %32, label %146

32:                                               ; preds = %28
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #10
  %33 = getelementptr inbounds i8, ptr %0, i64 696
  %34 = getelementptr inbounds i8, ptr %0, i64 672
  %35 = call noundef zeroext i1 @_ZN10SamplesApp9CastProbeEfRfRN3JPH4Vec3ERNS1_6BodyIDE(ptr noundef nonnull align 16 dereferenceable(712) %0, float noundef 4.000000e+01, ptr noundef nonnull align 4 dereferenceable(4) %33, ptr noundef nonnull align 16 dereferenceable(16) %3, ptr noundef nonnull align 4 dereferenceable(4) %34)
  br i1 %35, label %36, label %145

36:                                               ; preds = %32
  %37 = load ptr, ptr %20, align 16, !tbaa !43
  %38 = load ptr, ptr %37, align 8, !tbaa !45
  %39 = getelementptr inbounds i8, ptr %38, i64 40
  %40 = load ptr, ptr %39, align 8
  %41 = call noundef zeroext i1 %40(ptr noundef nonnull align 8 dereferenceable(8) %37, i32 noundef 38)
  br i1 %41, label %42, label %145

42:                                               ; preds = %36
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #10
  %43 = load ptr, ptr %17, align 8, !tbaa !5
  %44 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem20GetBodyLockInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %43)
  call void @_ZN3JPH13BodyLockWriteCI2NS_12BodyLockBaseILb1ENS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(16) %44, ptr noundef nonnull align 4 dereferenceable(4) %34)
  %45 = call noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb1ENS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %4)
  br i1 %45, label %46, label %144

46:                                               ; preds = %42
  %47 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb1ENS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %4)
          to label %48 unwind label %64

48:                                               ; preds = %46
  %49 = call noundef zeroext i1 @_ZNK3JPH4Body10IsSoftBodyEv(ptr noundef nonnull align 16 dereferenceable(122) %47)
  br i1 %49, label %50, label %96

50:                                               ; preds = %48
  %51 = invoke noundef ptr @_ZN3JPH4Body19GetMotionPropertiesEv(ptr noundef nonnull align 16 dereferenceable(122) %47)
          to label %52 unwind label %66

52:                                               ; preds = %50
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %5) #10
  invoke void @_ZNK3JPH4Body31GetInverseCenterOfMassTransformEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %5, ptr noundef nonnull align 16 dereferenceable(122) %47)
          to label %53 unwind label %68

53:                                               ; preds = %52
  %.sroa.043.0.copyload = load double, ptr %3, align 16
  %.sroa.244.0..sroa_idx = getelementptr inbounds i8, ptr %3, i64 8
  %.sroa.244.0.copyload = load double, ptr %.sroa.244.0..sroa_idx, align 8, !tbaa !47
  %54 = invoke { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %5, double %.sroa.043.0.copyload, double %.sroa.244.0.copyload)
          to label %55 unwind label %68

55:                                               ; preds = %53
  %56 = extractvalue { double, double } %54, 0
  %57 = extractvalue { double, double } %54, 1
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %5) #10
  %58 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH24SoftBodyMotionProperties11GetVerticesEv(ptr noundef nonnull align 16 dereferenceable(372) %51)
  %59 = call noundef ptr @_ZN3JPH5ArrayINS_14SoftBodyVertexENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %58)
  %60 = call noundef ptr @_ZN3JPH5ArrayINS_14SoftBodyVertexENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %58)
  %.not95102 = icmp eq ptr %59, %60
  br i1 %.not95102, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %55
  %61 = getelementptr inbounds i8, ptr %6, i64 8
  br label %70

._crit_edge:                                      ; preds = %88, %55
  %62 = load i32, ptr %29, align 16, !tbaa !44
  %63 = invoke noundef nonnull align 16 dereferenceable(80) ptr @_ZN3JPH24SoftBodyMotionProperties9GetVertexEj(ptr noundef nonnull align 16 dereferenceable(372) %51, i32 noundef %62)
          to label %90 unwind label %94

64:                                               ; preds = %46
  %65 = landingpad { ptr, i32 }
          cleanup
  br label %143

66:                                               ; preds = %50
  %67 = landingpad { ptr, i32 }
          cleanup
  br label %143

68:                                               ; preds = %53, %52
  %69 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %5) #10
  br label %143

70:                                               ; preds = %.lr.ph, %88
  %.077104 = phi float [ 0x47EFFFFFE0000000, %.lr.ph ], [ %.178, %88 ]
  %.079103 = phi ptr [ %59, %.lr.ph ], [ %89, %88 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #10
  %71 = getelementptr inbounds i8, ptr %.079103, i64 16
  %72 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %71, double %56, double %57)
          to label %73 unwind label %86

73:                                               ; preds = %70
  %74 = extractvalue { double, double } %72, 0
  store double %74, ptr %6, align 16
  %75 = extractvalue { double, double } %72, 1
  store double %75, ptr %61, align 8
  %76 = call noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16) %6)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #10
  %77 = fcmp olt float %76, %.077104
  br i1 %77, label %78, label %88

78:                                               ; preds = %73
  %79 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH24SoftBodyMotionProperties11GetVerticesEv(ptr noundef nonnull align 16 dereferenceable(372) %51)
  %80 = call noundef ptr @_ZN3JPH5ArrayINS_14SoftBodyVertexENS_12STLAllocatorIS1_EEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %79)
  %81 = ptrtoint ptr %.079103 to i64
  %82 = ptrtoint ptr %80 to i64
  %83 = sub i64 %81, %82
  %84 = sdiv exact i64 %83, 80
  %85 = trunc i64 %84 to i32
  store i32 %85, ptr %29, align 16, !tbaa !44
  br label %88

86:                                               ; preds = %70
  %87 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #10
  br label %143

88:                                               ; preds = %78, %73
  %.178 = phi float [ %76, %78 ], [ %.077104, %73 ]
  %89 = getelementptr inbounds i8, ptr %.079103, i64 80
  %.not95 = icmp eq ptr %89, %60
  br i1 %.not95, label %._crit_edge, label %70

90:                                               ; preds = %._crit_edge
  %91 = getelementptr inbounds i8, ptr %63, i64 76
  %92 = load float, ptr %91, align 4, !tbaa !48
  %93 = getelementptr inbounds i8, ptr %0, i64 692
  store float %92, ptr %93, align 4, !tbaa !52
  store float 0.000000e+00, ptr %91, align 4, !tbaa !48
  br label %144

94:                                               ; preds = %._crit_edge
  %95 = landingpad { ptr, i32 }
          cleanup
  br label %143

96:                                               ; preds = %48
  %97 = call noundef zeroext i1 @_ZNK3JPH4Body9IsDynamicEv(ptr noundef nonnull align 16 dereferenceable(122) %47)
  br i1 %97, label %98, label %144

98:                                               ; preds = %96
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %7) #10
  invoke void @_ZN3JPH26DistanceConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(112) %7)
          to label %99 unwind label %128

99:                                               ; preds = %98
  %100 = getelementptr inbounds i8, ptr %7, i64 64
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %100, ptr noundef nonnull align 16 dereferenceable(16) %3, i64 16, i1 false), !tbaa.struct !53
  %101 = getelementptr inbounds i8, ptr %7, i64 48
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %101, ptr noundef nonnull align 16 dereferenceable(16) %3, i64 16, i1 false)
  %102 = load ptr, ptr %0, align 16, !tbaa !45
  %103 = getelementptr inbounds i8, ptr %102, i64 40
  %104 = load ptr, ptr %103, align 8
  %105 = invoke noundef float %104(ptr noundef nonnull align 16 dereferenceable(712) %0)
          to label %106 unwind label %130

106:                                              ; preds = %99
  %107 = fdiv float 2.000000e+00, %105
  %108 = getelementptr inbounds i8, ptr %7, i64 92
  store float %107, ptr %108, align 4, !tbaa !47
  %109 = getelementptr inbounds i8, ptr %7, i64 96
  store float 1.000000e+00, ptr %109, align 16, !tbaa !54
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %8) #10
  %110 = invoke noundef ptr @_ZN3JPH11SphereShapenwEm(i64 noundef 48)
          to label %111 unwind label %132

111:                                              ; preds = %106
  invoke void @_ZN3JPH11SphereShapeC2EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(48) %110, float noundef 0x3F847AE140000000, ptr noundef null)
          to label %112 unwind label %134

112:                                              ; preds = %111
  %.sroa.024.0.copyload = load double, ptr %3, align 16
  %.sroa.225.0..sroa_idx = getelementptr inbounds i8, ptr %3, i64 8
  %.sroa.225.0.copyload = load double, ptr %.sroa.225.0..sroa_idx, align 8, !tbaa !47
  %113 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %114 unwind label %132

114:                                              ; preds = %112
  %115 = extractvalue { double, double } %113, 0
  %116 = extractvalue { double, double } %113, 1
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %8, ptr noundef nonnull %110, double %.sroa.024.0.copyload, double %.sroa.225.0.copyload, double %115, double %116, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %117 unwind label %132

117:                                              ; preds = %114
  %118 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 16 dereferenceable(256) %8)
          to label %119 unwind label %136

119:                                              ; preds = %117
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %8) #10
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %8) #10
  %120 = getelementptr inbounds i8, ptr %0, i64 664
  store ptr %118, ptr %120, align 8, !tbaa !65
  %121 = invoke noundef ptr @_ZNK3JPH26DistanceConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(112) %7, ptr noundef nonnull align 16 dereferenceable(122) %118, ptr noundef nonnull align 16 dereferenceable(122) %47)
          to label %122 unwind label %139

122:                                              ; preds = %119
  %123 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefINS_10ConstraintEEaSEPS1_(ptr noundef nonnull align 8 dereferenceable(8) %26, ptr noundef %121)
          to label %124 unwind label %139

124:                                              ; preds = %122
  %125 = load ptr, ptr %17, align 8, !tbaa !5
  %126 = call noundef ptr @_ZNK3JPH3RefINS_10ConstraintEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %26)
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %125, ptr noundef %126)
          to label %127 unwind label %139

127:                                              ; preds = %124
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(112) %7) #10
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %7) #10
  br label %144

128:                                              ; preds = %98
  %129 = landingpad { ptr, i32 }
          cleanup
  br label %142

130:                                              ; preds = %99
  %131 = landingpad { ptr, i32 }
          cleanup
  br label %141

132:                                              ; preds = %114, %112, %106
  %133 = landingpad { ptr, i32 }
          cleanup
  br label %138

134:                                              ; preds = %111
  %135 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11SphereShapedlEPv(ptr noundef %110) #10
  br label %138

136:                                              ; preds = %117
  %137 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %8) #10
  br label %138

138:                                              ; preds = %136, %134, %132
  %.pn89 = phi { ptr, i32 } [ %137, %136 ], [ %133, %132 ], [ %135, %134 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %8) #10
  br label %141

139:                                              ; preds = %124, %122, %119
  %140 = landingpad { ptr, i32 }
          cleanup
  br label %141

141:                                              ; preds = %138, %139, %130
  %.pn91.pn = phi { ptr, i32 } [ %131, %130 ], [ %140, %139 ], [ %.pn89, %138 ]
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(112) %7) #10
  br label %142

142:                                              ; preds = %141, %128
  %.pn91.pn.pn = phi { ptr, i32 } [ %.pn91.pn, %141 ], [ %129, %128 ]
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %7) #10
  br label %143

143:                                              ; preds = %66, %86, %94, %68, %142, %64
  %.pn96.pn.pn.pn = phi { ptr, i32 } [ %.pn91.pn.pn, %142 ], [ %65, %64 ], [ %67, %66 ], [ %69, %68 ], [ %87, %86 ], [ %95, %94 ]
  call void @_ZN3JPH12BodyLockBaseILb1ENS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #10
  br label %279

144:                                              ; preds = %90, %127, %96, %42
  call void @_ZN3JPH12BodyLockBaseILb1ENS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #10
  br label %145

145:                                              ; preds = %36, %144, %32
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #10
  br label %278

146:                                              ; preds = %28, %25
  %147 = load ptr, ptr %20, align 16, !tbaa !43
  %148 = load ptr, ptr %147, align 8, !tbaa !45
  %149 = getelementptr inbounds i8, ptr %148, i64 40
  %150 = load ptr, ptr %149, align 8
  %151 = tail call noundef zeroext i1 %150(ptr noundef nonnull align 8 dereferenceable(8) %147, i32 noundef 38)
  br i1 %151, label %198, label %152

152:                                              ; preds = %146
  %153 = tail call noundef zeroext i1 @_ZNK3JPH3RefINS_10ConstraintEEneEPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %26, ptr noundef null)
  br i1 %153, label %154, label %158

154:                                              ; preds = %152
  %155 = load ptr, ptr %17, align 8, !tbaa !5
  %156 = tail call noundef ptr @_ZNK3JPH3RefINS_10ConstraintEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %26)
  tail call void @_ZN3JPH13PhysicsSystem16RemoveConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %155, ptr noundef %156)
  %157 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefINS_10ConstraintEEaSEPS1_(ptr noundef nonnull align 8 dereferenceable(8) %26, ptr noundef null)
  br label %158

158:                                              ; preds = %154, %152
  %159 = getelementptr inbounds i8, ptr %0, i64 664
  %160 = load ptr, ptr %159, align 8, !tbaa !65
  %.not = icmp eq ptr %160, null
  br i1 %.not, label %163, label %161

161:                                              ; preds = %158
  %162 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %160)
  tail call void @_ZN3JPH13BodyInterface11DestroyBodyERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 4 dereferenceable(4) %162)
  store ptr null, ptr %159, align 8, !tbaa !65
  br label %163

163:                                              ; preds = %161, %158
  %164 = getelementptr inbounds i8, ptr %0, i64 688
  %165 = load i32, ptr %164, align 16, !tbaa !44
  %.not82 = icmp eq i32 %165, -1
  br i1 %.not82, label %195, label %166

166:                                              ; preds = %163
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %9) #10
  %167 = load ptr, ptr %17, align 8, !tbaa !5
  %168 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem20GetBodyLockInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %167)
  %169 = getelementptr inbounds i8, ptr %0, i64 672
  call void @_ZN3JPH13BodyLockWriteCI2NS_12BodyLockBaseILb1ENS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(16) %168, ptr noundef nonnull align 4 dereferenceable(4) %169)
  %170 = call noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb1ENS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %9)
  br i1 %170, label %171, label %193

171:                                              ; preds = %166
  %172 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb1ENS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %9)
          to label %173 unwind label %179

173:                                              ; preds = %171
  %174 = call noundef zeroext i1 @_ZNK3JPH4Body10IsSoftBodyEv(ptr noundef nonnull align 16 dereferenceable(122) %172)
  br i1 %174, label %181, label %175

175:                                              ; preds = %173
  %176 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.152, ptr noundef nonnull @.str.147, i32 noundef 2002)
          to label %177 unwind label %179

177:                                              ; preds = %175
  br i1 %176, label %178, label %181

178:                                              ; preds = %177
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #10, !srcloc !66
  br label %181

179:                                              ; preds = %175, %171
  %180 = landingpad { ptr, i32 }
          cleanup
  br label %192

181:                                              ; preds = %178, %177, %173
  %182 = invoke noundef ptr @_ZN3JPH4Body19GetMotionPropertiesEv(ptr noundef nonnull align 16 dereferenceable(122) %172)
          to label %183 unwind label %190

183:                                              ; preds = %181
  %184 = getelementptr inbounds i8, ptr %0, i64 692
  %185 = load float, ptr %184, align 4, !tbaa !52
  %186 = load i32, ptr %164, align 16, !tbaa !44
  %187 = invoke noundef nonnull align 16 dereferenceable(80) ptr @_ZN3JPH24SoftBodyMotionProperties9GetVertexEj(ptr noundef nonnull align 16 dereferenceable(372) %182, i32 noundef %186)
          to label %188 unwind label %190

188:                                              ; preds = %183
  %189 = getelementptr inbounds i8, ptr %187, i64 76
  store float %185, ptr %189, align 4, !tbaa !48
  br label %193

190:                                              ; preds = %183, %181
  %191 = landingpad { ptr, i32 }
          cleanup
  br label %192

192:                                              ; preds = %190, %179
  %.pn = phi { ptr, i32 } [ %191, %190 ], [ %180, %179 ]
  call void @_ZN3JPH12BodyLockBaseILb1ENS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #10
  br label %279

193:                                              ; preds = %188, %166
  store i32 -1, ptr %164, align 16, !tbaa !44
  %194 = getelementptr inbounds i8, ptr %0, i64 692
  store float 0.000000e+00, ptr %194, align 4, !tbaa !52
  call void @_ZN3JPH12BodyLockBaseILb1ENS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #10
  br label %195

195:                                              ; preds = %193, %163
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #10
  call void @_ZN3JPH6BodyIDC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %10)
  %196 = getelementptr inbounds i8, ptr %0, i64 672
  %197 = load i32, ptr %10, align 4, !tbaa !67
  store i32 %197, ptr %196, align 16, !tbaa !67
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #10
  br label %278

198:                                              ; preds = %146
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #10
  %199 = tail call noundef nonnull align 16 dereferenceable(52) ptr @_ZNK11Application9GetCameraEv(ptr noundef nonnull align 16 dereferenceable(272) %0)
  %200 = getelementptr inbounds i8, ptr %0, i64 696
  %201 = load float, ptr %200, align 8, !tbaa !68
  %202 = fmul float %201, 4.000000e+01
  %203 = tail call noundef nonnull align 16 dereferenceable(52) ptr @_ZNK11Application9GetCameraEv(ptr noundef nonnull align 16 dereferenceable(272) %0)
  %204 = getelementptr inbounds i8, ptr %203, i64 16
  %.sroa.015.0.copyload = load double, ptr %204, align 16
  %.sroa.216.0..sroa_idx = getelementptr inbounds i8, ptr %203, i64 24
  %.sroa.216.0.copyload = load double, ptr %.sroa.216.0..sroa_idx, align 8, !tbaa !47
  %205 = tail call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %202, double %.sroa.015.0.copyload, double %.sroa.216.0.copyload)
  %206 = extractvalue { double, double } %205, 0
  %207 = extractvalue { double, double } %205, 1
  %208 = tail call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %199, double %206, double %207)
  %209 = extractvalue { double, double } %208, 0
  store double %209, ptr %11, align 16
  %210 = getelementptr inbounds i8, ptr %11, i64 8
  %211 = extractvalue { double, double } %208, 1
  store double %211, ptr %210, align 8
  %212 = getelementptr inbounds i8, ptr %0, i64 672
  %213 = tail call noundef zeroext i8 @_ZNK3JPH13BodyInterface11GetBodyTypeERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 4 dereferenceable(4) %212)
  switch i8 %213, label %277 [
    i8 0, label %214
    i8 1, label %221
  ]

214:                                              ; preds = %198
  %215 = getelementptr inbounds i8, ptr %0, i64 664
  %216 = load ptr, ptr %215, align 8, !tbaa !65
  %217 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %216)
  %218 = tail call { double, double } @_ZN3JPH4Quat9sIdentityEv()
  %219 = extractvalue { double, double } %218, 0
  %220 = extractvalue { double, double } %218, 1
  tail call void @_ZN3JPH13BodyInterface22SetPositionAndRotationERKNS_6BodyIDENS_4Vec3ENS_4QuatENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 4 dereferenceable(4) %217, double %209, double %211, double %219, double %220, i32 noundef 1)
  br label %277

221:                                              ; preds = %198
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %12) #10
  %222 = load ptr, ptr %17, align 8, !tbaa !5
  %223 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem20GetBodyLockInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1172) %222)
  call void @_ZN3JPH13BodyLockWriteCI2NS_12BodyLockBaseILb1ENS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 8 dereferenceable(16) %223, ptr noundef nonnull align 4 dereferenceable(4) %212)
  %224 = call noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb1ENS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %12)
  br i1 %224, label %225, label %276

225:                                              ; preds = %221
  %226 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb1ENS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %12)
          to label %227 unwind label %264

227:                                              ; preds = %225
  %228 = invoke noundef ptr @_ZN3JPH4Body19GetMotionPropertiesEv(ptr noundef nonnull align 16 dereferenceable(122) %226)
          to label %229 unwind label %266

229:                                              ; preds = %227
  %230 = getelementptr inbounds i8, ptr %0, i64 688
  %231 = load i32, ptr %230, align 16, !tbaa !44
  %232 = invoke noundef nonnull align 16 dereferenceable(80) ptr @_ZN3JPH24SoftBodyMotionProperties9GetVertexEj(ptr noundef nonnull align 16 dereferenceable(372) %228, i32 noundef %231)
          to label %233 unwind label %268

233:                                              ; preds = %229
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #10
  %234 = invoke { double, double } @_ZNK3JPH4Body11GetRotationEv(ptr noundef nonnull align 16 dereferenceable(122) %226)
          to label %235 unwind label %270

235:                                              ; preds = %233
  %236 = extractvalue { double, double } %234, 0
  store double %236, ptr %15, align 16
  %237 = getelementptr inbounds i8, ptr %15, i64 8
  %238 = extractvalue { double, double } %234, 1
  store double %238, ptr %237, align 8
  %239 = invoke { double, double } @_ZNK3JPH4Quat10ConjugatedEv(ptr noundef nonnull align 16 dereferenceable(16) %15)
          to label %240 unwind label %270

240:                                              ; preds = %235
  %241 = extractvalue { double, double } %239, 0
  store double %241, ptr %14, align 16
  %242 = getelementptr inbounds i8, ptr %14, i64 8
  %243 = extractvalue { double, double } %239, 1
  store double %243, ptr %242, align 8
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %16) #10
  invoke void @_ZNK3JPH4Body24GetCenterOfMassTransformEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %16, ptr noundef nonnull align 16 dereferenceable(122) %226)
          to label %244 unwind label %272

244:                                              ; preds = %240
  %245 = getelementptr inbounds i8, ptr %232, i64 16
  %.sroa.0.0.copyload = load double, ptr %245, align 16
  %.sroa.2.0..sroa_idx = getelementptr inbounds i8, ptr %232, i64 24
  %.sroa.2.0.copyload = load double, ptr %.sroa.2.0..sroa_idx, align 8, !tbaa !47
  %246 = invoke { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %16, double %.sroa.0.0.copyload, double %.sroa.2.0.copyload)
          to label %247 unwind label %272

247:                                              ; preds = %244
  %248 = extractvalue { double, double } %246, 0
  %249 = extractvalue { double, double } %246, 1
  %250 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %11, double %248, double %249)
          to label %251 unwind label %272

251:                                              ; preds = %247
  %252 = extractvalue { double, double } %250, 0
  %253 = extractvalue { double, double } %250, 1
  %254 = invoke { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %14, double %252, double %253)
          to label %255 unwind label %272

255:                                              ; preds = %251
  %256 = extractvalue { double, double } %254, 0
  store double %256, ptr %13, align 16
  %257 = getelementptr inbounds i8, ptr %13, i64 8
  %258 = extractvalue { double, double } %254, 1
  store double %258, ptr %257, align 8
  %259 = invoke { double, double } @_ZNK3JPH4Vec3dvEf(ptr noundef nonnull align 16 dereferenceable(16) %13, float noundef %1)
          to label %260 unwind label %272

260:                                              ; preds = %255
  %261 = extractvalue { double, double } %259, 0
  %262 = extractvalue { double, double } %259, 1
  %263 = getelementptr inbounds i8, ptr %232, i64 32
  store double %261, ptr %263, align 16
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %232, i64 40
  store double %262, ptr %.sroa.5.0..sroa_idx, align 8, !tbaa !47
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %16) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #10
  br label %276

264:                                              ; preds = %225
  %265 = landingpad { ptr, i32 }
          cleanup
  br label %275

266:                                              ; preds = %227
  %267 = landingpad { ptr, i32 }
          cleanup
  br label %275

268:                                              ; preds = %229
  %269 = landingpad { ptr, i32 }
          cleanup
  br label %275

270:                                              ; preds = %235, %233
  %271 = landingpad { ptr, i32 }
          cleanup
  br label %274

272:                                              ; preds = %255, %251, %247, %244, %240
  %273 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %16) #10
  br label %274

274:                                              ; preds = %272, %270
  %.pn84 = phi { ptr, i32 } [ %273, %272 ], [ %271, %270 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #10
  br label %275

275:                                              ; preds = %266, %274, %268, %264
  %.pn84.pn.pn.pn = phi { ptr, i32 } [ %265, %264 ], [ %267, %266 ], [ %.pn84, %274 ], [ %269, %268 ]
  call void @_ZN3JPH12BodyLockBaseILb1ENS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #10
  br label %279

276:                                              ; preds = %260, %221
  call void @_ZN3JPH12BodyLockBaseILb1ENS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #10
  br label %277

277:                                              ; preds = %276, %214, %198
  call void @_ZN3JPH13BodyInterface12ActivateBodyERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 4 dereferenceable(4) %212)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #10
  br label %278

278:                                              ; preds = %195, %277, %145
  ret void

279:                                              ; preds = %275, %192, %143
  %.pn96.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn96.pn.pn.pn, %143 ], [ %.pn84.pn.pn.pn, %275 ], [ %.pn, %192 ]
  resume { ptr, i32 } %.pn96.pn.pn.pn.pn
}

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK8Keyboard24IsKeyPressedAndTriggeredE4EKeyRb(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef, ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH3RefINS_10ConstraintEEeqEPKS1_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #8 align 2

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK3JPH4Body31GetInverseCenterOfMassTransformEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::Mat44") align 16, ptr noundef nonnull align 16 dereferenceable(122)) local_unnamed_addr #3 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH24SoftBodyMotionProperties11GetVerticesEv(ptr noundef nonnull align 16 dereferenceable(372)) local_unnamed_addr #1 align 2

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

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16)) local_unnamed_addr #6 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 16 dereferenceable(80) ptr @_ZN3JPH24SoftBodyMotionProperties9GetVertexEj(ptr noundef nonnull align 16 dereferenceable(372), i32 noundef) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH26DistanceConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(112)) unnamed_addr #3 align 2

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

declare noundef ptr @_ZNK3JPH26DistanceConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(112), ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 16 dereferenceable(122)) unnamed_addr #9

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH3RefINS_10ConstraintEEneEPKS1_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #8 align 2

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

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

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

declare noundef zeroext i8 @_ZNK3JPH13BodyInterface11GetBodyTypeERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #9

declare void @_ZN3JPH13BodyInterface22SetPositionAndRotationERKNS_6BodyIDENS_4Vec3ENS_4QuatENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4), double, double, double, double, i32 noundef) local_unnamed_addr #9

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !13, i64 344}
!6 = !{!"_ZTS10SamplesApp", !7, i64 0, !21, i64 272, !12, i64 276, !21, i64 280, !13, i64 288, !13, i64 296, !13, i64 304, !22, i64 312, !24, i64 328, !26, i64 336, !13, i64 344, !13, i64 352, !28, i64 360, !29, i64 448, !13, i64 480, !13, i64 488, !13, i64 496, !21, i64 504, !20, i64 508, !12, i64 512, !20, i64 516, !20, i64 517, !20, i64 518, !20, i64 519, !31, i64 520, !32, i64 544, !21, i64 548, !33, i64 552, !34, i64 556, !20, i64 560, !9, i64 576, !35, i64 592, !35, i64 593, !36, i64 594, !37, i64 595, !12, i64 596, !20, i64 600, !20, i64 601, !20, i64 602, !20, i64 603, !21, i64 604, !20, i64 608, !38, i64 612, !12, i64 616, !39, i64 620, !12, i64 624, !12, i64 628, !20, i64 632, !9, i64 640, !20, i64 656, !13, i64 664, !40, i64 672, !41, i64 680, !21, i64 688, !12, i64 692, !12, i64 696, !21, i64 700, !42, i64 704}
!7 = !{!"_ZTS11Application", !8, i64 16, !8, i64 80, !13, i64 144, !13, i64 152, !13, i64 160, !14, i64 168, !13, i64 176, !13, i64 184, !13, i64 192, !13, i64 200, !15, i64 208, !18, i64 240, !20, i64 248, !20, i64 249, !20, i64 250, !20, i64 251, !12, i64 252, !12, i64 256, !12, i64 260, !12, i64 264, !21, i64 268}
!8 = !{!"_ZTS11CameraState", !9, i64 0, !9, i64 16, !9, i64 32, !12, i64 48}
!9 = !{!"_ZTSN3JPH4Vec3E", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"float", !10, i64 0}
!13 = !{!"any pointer", !10, i64 0}
!14 = !{!"_ZTSN3JPH8RefConstI4FontEE", !13, i64 0}
!15 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEE", !16, i64 0, !17, i64 8, !10, i64 16}
!16 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEE12_Alloc_hiderE", !13, i64 0}
!17 = !{!"long", !10, i64 0}
!18 = !{!"_ZTSNSt6chrono10time_pointINS_3_V212system_clockENS_8durationIlSt5ratioILl1ELl1000000000EEEEEE", !19, i64 0}
!19 = !{!"_ZTSNSt6chrono8durationIlSt5ratioILl1ELl1000000000EEEE", !17, i64 0}
!20 = !{!"bool", !10, i64 0}
!21 = !{!"int", !10, i64 0}
!22 = !{!"_ZTS20BPLayerInterfaceImpl", !23, i64 0, !10, i64 8}
!23 = !{!"_ZTSN3JPH24BroadPhaseLayerInterfaceE"}
!24 = !{!"_ZTS33ObjectVsBroadPhaseLayerFilterImpl", !25, i64 0}
!25 = !{!"_ZTSN3JPH29ObjectVsBroadPhaseLayerFilterE"}
!26 = !{!"_ZTS25ObjectLayerPairFilterImpl", !27, i64 0}
!27 = !{!"_ZTSN3JPH21ObjectLayerPairFilterE"}
!28 = !{!"_ZTSN3JPH15PhysicsSettingsE", !21, i64 0, !21, i64 4, !21, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36, !12, i64 40, !12, i64 44, !12, i64 48, !12, i64 52, !21, i64 56, !21, i64 60, !12, i64 64, !12, i64 68, !12, i64 72, !20, i64 76, !20, i64 77, !20, i64 78, !20, i64 79, !20, i64 80, !20, i64 81, !20, i64 82}
!29 = !{!"_ZTSN3JPH12UnorderedMapINS_8RefConstINS_5ShapeEEENS_3RefINS_13DebugRenderer8GeometryEEENS_4HashIS3_EESt8equal_toIS3_EEE", !30, i64 0}
!30 = !{!"_ZTSN3JPH9HashTableINS_8RefConstINS_5ShapeEEESt4pairIS3_NS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIS3_S8_EENS_4HashIS3_EESt8equal_toIS3_EEE", !13, i64 0, !13, i64 8, !21, i64 16, !21, i64 20, !21, i64 24}
!31 = !{!"_ZTSN3JPH5ArrayIN10SamplesApp13PlayBackFrameENS_12STLAllocatorIS2_EEEE", !17, i64 0, !17, i64 8, !13, i64 16}
!32 = !{!"_ZTSN10SamplesApp13EPlaybackModeE", !10, i64 0}
!33 = !{!"_ZTSN10SamplesApp10EProbeModeE", !10, i64 0}
!34 = !{!"_ZTSN10SamplesApp11EProbeShapeE", !10, i64 0}
!35 = !{!"_ZTSN3JPH13EBackFaceModeE", !10, i64 0}
!36 = !{!"_ZTSN3JPH15EActiveEdgeModeE", !10, i64 0}
!37 = !{!"_ZTSN3JPH17ECollectFacesModeE", !10, i64 0}
!38 = !{!"_ZTSN10SamplesApp17EShootObjectShapeE", !10, i64 0}
!39 = !{!"_ZTSN3JPH14EMotionQualityE", !10, i64 0}
!40 = !{!"_ZTSN3JPH6BodyIDE", !21, i64 0}
!41 = !{!"_ZTSN3JPH3RefINS_10ConstraintEEE", !13, i64 0}
!42 = !{!"_ZTSNSt6chrono8durationIlSt5ratioILl1ELl1000000EEEE", !17, i64 0}
!43 = !{!7, !13, i64 176}
!44 = !{!6, !21, i64 688}
!45 = !{!46, !46, i64 0}
!46 = !{!"vtable pointer", !11, i64 0}
!47 = !{!10, !10, i64 0}
!48 = !{!49, !12, i64 76}
!49 = !{!"_ZTSN3JPH14SoftBodyVertexE", !9, i64 0, !9, i64 16, !9, i64 32, !50, i64 48, !21, i64 64, !20, i64 68, !12, i64 72, !12, i64 76}
!50 = !{!"_ZTSN3JPH5PlaneE", !51, i64 0}
!51 = !{!"_ZTSN3JPH4Vec4E", !10, i64 0}
!52 = !{!6, !12, i64 692}
!53 = !{i64 0, i64 16, !47}
!54 = !{!55, !12, i64 96}
!55 = !{!"_ZTSN3JPH26DistanceConstraintSettingsE", !56, i64 0, !62, i64 40, !9, i64 48, !9, i64 64, !12, i64 80, !12, i64 84, !63, i64 88}
!56 = !{!"_ZTSN3JPH25TwoBodyConstraintSettingsE", !57, i64 0}
!57 = !{!"_ZTSN3JPH18ConstraintSettingsE", !58, i64 0, !59, i64 8, !20, i64 12, !21, i64 16, !21, i64 20, !21, i64 24, !12, i64 28, !17, i64 32}
!58 = !{!"_ZTSN3JPH18SerializableObjectE"}
!59 = !{!"_ZTSN3JPH9RefTargetINS_18ConstraintSettingsEEE", !60, i64 0}
!60 = !{!"_ZTSSt6atomicIjE", !61, i64 0}
!61 = !{!"_ZTSSt13__atomic_baseIjE", !21, i64 0}
!62 = !{!"_ZTSN3JPH16EConstraintSpaceE", !10, i64 0}
!63 = !{!"_ZTSN3JPH14SpringSettingsE", !64, i64 0, !10, i64 4, !12, i64 8}
!64 = !{!"_ZTSN3JPH11ESpringModeE", !10, i64 0}
!65 = !{!6, !13, i64 664}
!66 = !{i64 2161775950}
!67 = !{!21, !21, i64 0}
!68 = !{!6, !12, i64 696}


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