; LLVM IR from jrouwe/JoltPhysics :: Jolt/Physics/Body/Body.ll (ZNK3JPH4Body23GetBodyCreationSettingsEv)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.JPH::BodyCreationSettings" = type { %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::Vec3", %"class.JPH::Vec3", i64, i16, %"class.JPH::CollisionGroup", i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, float, float, float, float, float, float, float, i32, i32, i8, float, %"class.JPH::MassProperties", %"class.JPH::RefConst.16", %"class.JPH::RefConst" }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.0 }
%union.anon.0 = type { <4 x float> }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst.1", i32, i32 }
%"class.JPH::RefConst.1" = type { ptr }
%"class.JPH::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::RefConst.16" = type { ptr }
%"class.JPH::RefConst" = type { ptr }
%"struct.JPH::AssertLastParam" = type { i8 }
%"class.JPH::Body" = type <{ %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::AABox", %"class.JPH::RefConst", ptr, i64, %"class.JPH::CollisionGroup", float, float, %"class.JPH::BodyID", i16, i8, %"class.JPH::BroadPhaseLayer", i8, %"struct.std::atomic.2", [6 x i8] }>
%"class.JPH::AABox" = type { %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"class.JPH::BodyID" = type { i32 }
%"class.JPH::BroadPhaseLayer" = type { i8 }
%"struct.std::atomic.2" = type { %"struct.std::__atomic_base.3" }
%"struct.std::__atomic_base.3" = type { i8 }

@.str.3 = external hidden unnamed_addr constant [79 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [14 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: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Vec35sZeroEv() #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 nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH4Body11IsRigidBodyEv(ptr noundef nonnull align 16 dereferenceable(122)) #3 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i8 @_ZNK3JPH16MotionProperties14GetAllowedDOFsEv(ptr noundef nonnull align 16 dereferenceable(182)) #3 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH16MotionProperties16GetGravityFactorEv(ptr noundef nonnull align 16 dereferenceable(182)) #3 align 2

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK3JPH4Body23GetBodyCreationSettingsEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::BodyCreationSettings") align 16 %0, ptr noundef nonnull align 16 dereferenceable(122) %1) #5 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca %"struct.JPH::AssertLastParam", align 1
  %6 = alloca i1, align 1
  %7 = alloca %"class.JPH::Vec3", align 16
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca %"class.JPH::Quat", align 16
  %11 = alloca %"class.JPH::Vec3", align 16
  %12 = alloca %"class.JPH::Vec3", align 16
  %13 = alloca float, align 4
  %14 = alloca %"class.JPH::Mat44", align 16
  %15 = alloca %"class.JPH::Mat44", align 16
  %16 = alloca %"class.JPH::Vec3", align 16
  %17 = alloca %"class.JPH::Vec3", align 16
  %18 = alloca %"class.JPH::Vec3", align 16
  %19 = alloca %"class.JPH::Mat44", align 16
  %20 = alloca %"class.JPH::Vec3", align 16
  %21 = alloca %"class.JPH::Mat44", align 16
  %22 = alloca %"class.JPH::Vec3", align 16
  store ptr %0, ptr %3, align 8
  store ptr %1, ptr %4, align 8, !tbaa !5
  %23 = load ptr, ptr %4, align 8
  br label %24

24:                                               ; preds = %2
  %25 = call noundef zeroext i1 @_ZNK3JPH4Body11IsRigidBodyEv(ptr noundef nonnull align 16 dereferenceable(122) %23)
  br i1 %25, label %29, label %26

26:                                               ; preds = %24
  %27 = call noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.9, ptr noundef @.str.3, i32 noundef 332)
  br i1 %27, label %28, label %29

28:                                               ; preds = %26
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #8, !srcloc !9
  br label %29

29:                                               ; preds = %28, %26, %24
  br label %30

30:                                               ; preds = %29
  store i1 false, ptr %6, align 1
  call void @_ZN3JPH20BodyCreationSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(256) %0)
  call void @llvm.lifetime.start.p0(i64 16, ptr %7) #8
  %31 = invoke { double, double } @_ZNK3JPH4Body11GetPositionEv(ptr noundef nonnull align 16 dereferenceable(122) %23)
          to label %32 unwind label %291

32:                                               ; preds = %30
  %33 = getelementptr inbounds %"class.JPH::Vec3", ptr %7, i32 0, i32 0
  %34 = getelementptr inbounds %union.anon, ptr %33, i32 0, i32 0
  %35 = getelementptr inbounds { double, double }, ptr %34, i32 0, i32 0
  %36 = extractvalue { double, double } %31, 0
  store double %36, ptr %35, align 16
  %37 = getelementptr inbounds { double, double }, ptr %34, i32 0, i32 1
  %38 = extractvalue { double, double } %31, 1
  store double %38, ptr %37, align 8
  %39 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %39, ptr align 16 %7, i64 16, i1 false), !tbaa.struct !10
  call void @llvm.lifetime.end.p0(i64 16, ptr %7) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %10) #8
  %40 = invoke { double, double } @_ZNK3JPH4Body11GetRotationEv(ptr noundef nonnull align 16 dereferenceable(122) %23)
          to label %41 unwind label %295

41:                                               ; preds = %32
  %42 = getelementptr inbounds %"class.JPH::Quat", ptr %10, i32 0, i32 0
  %43 = getelementptr inbounds %"class.JPH::Vec4", ptr %42, i32 0, i32 0
  %44 = getelementptr inbounds %union.anon.0, ptr %43, i32 0, i32 0
  %45 = getelementptr inbounds { double, double }, ptr %44, i32 0, i32 0
  %46 = extractvalue { double, double } %40, 0
  store double %46, ptr %45, align 16
  %47 = getelementptr inbounds { double, double }, ptr %44, i32 0, i32 1
  %48 = extractvalue { double, double } %40, 1
  store double %48, ptr %47, align 8
  %49 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %49, ptr align 16 %10, i64 16, i1 false), !tbaa.struct !10
  call void @llvm.lifetime.end.p0(i64 16, ptr %10) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %11) #8
  %50 = getelementptr inbounds %"class.JPH::Body", ptr %23, i32 0, i32 4
  %51 = load ptr, ptr %50, align 8, !tbaa !12
  %52 = icmp ne ptr %51, null
  br i1 %52, label %53, label %64

53:                                               ; preds = %41
  %54 = getelementptr inbounds %"class.JPH::Body", ptr %23, i32 0, i32 4
  %55 = load ptr, ptr %54, align 8, !tbaa !12
  %56 = invoke { double, double } @_ZNK3JPH16MotionProperties17GetLinearVelocityEv(ptr noundef nonnull align 16 dereferenceable(182) %55)
          to label %57 unwind label %299

57:                                               ; preds = %53
  %58 = getelementptr inbounds %"class.JPH::Vec3", ptr %11, i32 0, i32 0
  %59 = getelementptr inbounds %union.anon, ptr %58, i32 0, i32 0
  %60 = getelementptr inbounds { double, double }, ptr %59, i32 0, i32 0
  %61 = extractvalue { double, double } %56, 0
  store double %61, ptr %60, align 16
  %62 = getelementptr inbounds { double, double }, ptr %59, i32 0, i32 1
  %63 = extractvalue { double, double } %56, 1
  store double %63, ptr %62, align 8
  br label %73

64:                                               ; preds = %41
  %65 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %66 unwind label %299

66:                                               ; preds = %64
  %67 = getelementptr inbounds %"class.JPH::Vec3", ptr %11, i32 0, i32 0
  %68 = getelementptr inbounds %union.anon, ptr %67, i32 0, i32 0
  %69 = getelementptr inbounds { double, double }, ptr %68, i32 0, i32 0
  %70 = extractvalue { double, double } %65, 0
  store double %70, ptr %69, align 16
  %71 = getelementptr inbounds { double, double }, ptr %68, i32 0, i32 1
  %72 = extractvalue { double, double } %65, 1
  store double %72, ptr %71, align 8
  br label %73

73:                                               ; preds = %66, %57
  %74 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %74, ptr align 16 %11, i64 16, i1 false), !tbaa.struct !10
  call void @llvm.lifetime.end.p0(i64 16, ptr %11) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %12) #8
  %75 = getelementptr inbounds %"class.JPH::Body", ptr %23, i32 0, i32 4
  %76 = load ptr, ptr %75, align 8, !tbaa !12
  %77 = icmp ne ptr %76, null
  br i1 %77, label %78, label %89

78:                                               ; preds = %73
  %79 = getelementptr inbounds %"class.JPH::Body", ptr %23, i32 0, i32 4
  %80 = load ptr, ptr %79, align 8, !tbaa !12
  %81 = invoke { double, double } @_ZNK3JPH16MotionProperties18GetAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(182) %80)
          to label %82 unwind label %303

82:                                               ; preds = %78
  %83 = getelementptr inbounds %"class.JPH::Vec3", ptr %12, i32 0, i32 0
  %84 = getelementptr inbounds %union.anon, ptr %83, i32 0, i32 0
  %85 = getelementptr inbounds { double, double }, ptr %84, i32 0, i32 0
  %86 = extractvalue { double, double } %81, 0
  store double %86, ptr %85, align 16
  %87 = getelementptr inbounds { double, double }, ptr %84, i32 0, i32 1
  %88 = extractvalue { double, double } %81, 1
  store double %88, ptr %87, align 8
  br label %98

89:                                               ; preds = %73
  %90 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %91 unwind label %303

91:                                               ; preds = %89
  %92 = getelementptr inbounds %"class.JPH::Vec3", ptr %12, i32 0, i32 0
  %93 = getelementptr inbounds %union.anon, ptr %92, i32 0, i32 0
  %94 = getelementptr inbounds { double, double }, ptr %93, i32 0, i32 0
  %95 = extractvalue { double, double } %90, 0
  store double %95, ptr %94, align 16
  %96 = getelementptr inbounds { double, double }, ptr %93, i32 0, i32 1
  %97 = extractvalue { double, double } %90, 1
  store double %97, ptr %96, align 8
  br label %98

98:                                               ; preds = %91, %82
  %99 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %99, ptr align 16 %12, i64 16, i1 false), !tbaa.struct !10
  call void @llvm.lifetime.end.p0(i64 16, ptr %12) #8
  %100 = invoke noundef zeroext i16 @_ZNK3JPH4Body14GetObjectLayerEv(ptr noundef nonnull align 16 dereferenceable(122) %23)
          to label %101 unwind label %307

101:                                              ; preds = %98
  %102 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 5
  store i16 %100, ptr %102, align 8, !tbaa !31
  %103 = getelementptr inbounds %"class.JPH::Body", ptr %23, i32 0, i32 5
  %104 = load i64, ptr %103, align 16, !tbaa !40
  %105 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 4
  store i64 %104, ptr %105, align 16, !tbaa !41
  %106 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH4Body17GetCollisionGroupEv(ptr noundef nonnull align 16 dereferenceable(122) %23)
          to label %107 unwind label %307

107:                                              ; preds = %101
  %108 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 6
  %109 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN3JPH14CollisionGroupaSERKS0_(ptr noundef nonnull align 8 dereferenceable(16) %108, ptr noundef nonnull align 8 dereferenceable(16) %106)
          to label %110 unwind label %307

110:                                              ; preds = %107
  %111 = invoke noundef zeroext i8 @_ZNK3JPH4Body13GetMotionTypeEv(ptr noundef nonnull align 16 dereferenceable(122) %23)
          to label %112 unwind label %307

112:                                              ; preds = %110
  %113 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 7
  store i8 %111, ptr %113, align 16, !tbaa !42
  %114 = getelementptr inbounds %"class.JPH::Body", ptr %23, i32 0, i32 4
  %115 = load ptr, ptr %114, align 8, !tbaa !12
  %116 = icmp ne ptr %115, null
  br i1 %116, label %117, label %122

117:                                              ; preds = %112
  %118 = getelementptr inbounds %"class.JPH::Body", ptr %23, i32 0, i32 4
  %119 = load ptr, ptr %118, align 8, !tbaa !12
  %120 = invoke noundef zeroext i8 @_ZNK3JPH16MotionProperties14GetAllowedDOFsEv(ptr noundef nonnull align 16 dereferenceable(182) %119)
          to label %121 unwind label %307

121:                                              ; preds = %117
  br label %123

122:                                              ; preds = %112
  br label %123

123:                                              ; preds = %122, %121
  %124 = phi i8 [ %120, %121 ], [ 63, %122 ]
  %125 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 8
  store i8 %124, ptr %125, align 1, !tbaa !43
  %126 = getelementptr inbounds %"class.JPH::Body", ptr %23, i32 0, i32 4
  %127 = load ptr, ptr %126, align 8, !tbaa !12
  %128 = icmp ne ptr %127, null
  %129 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 9
  %130 = zext i1 %128 to i8
  store i8 %130, ptr %129, align 2, !tbaa !44
  %131 = invoke noundef zeroext i1 @_ZNK3JPH4Body8IsSensorEv(ptr noundef nonnull align 16 dereferenceable(122) %23)
          to label %132 unwind label %307

132:                                              ; preds = %123
  %133 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 10
  %134 = zext i1 %131 to i8
  store i8 %134, ptr %133, align 1, !tbaa !45
  %135 = invoke noundef zeroext i1 @_ZNK3JPH4Body31GetCollideKinematicVsNonDynamicEv(ptr noundef nonnull align 16 dereferenceable(122) %23)
          to label %136 unwind label %307

136:                                              ; preds = %132
  %137 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 11
  %138 = zext i1 %135 to i8
  store i8 %138, ptr %137, align 4, !tbaa !46
  %139 = invoke noundef zeroext i1 @_ZNK3JPH4Body23GetUseManifoldReductionEv(ptr noundef nonnull align 16 dereferenceable(122) %23)
          to label %140 unwind label %307

140:                                              ; preds = %136
  %141 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 12
  %142 = zext i1 %139 to i8
  store i8 %142, ptr %141, align 1, !tbaa !47
  %143 = invoke noundef zeroext i1 @_ZNK3JPH4Body23GetApplyGyroscopicForceEv(ptr noundef nonnull align 16 dereferenceable(122) %23)
          to label %144 unwind label %307

144:                                              ; preds = %140
  %145 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 13
  %146 = zext i1 %143 to i8
  store i8 %146, ptr %145, align 2, !tbaa !48
  %147 = getelementptr inbounds %"class.JPH::Body", ptr %23, i32 0, i32 4
  %148 = load ptr, ptr %147, align 8, !tbaa !12
  %149 = icmp ne ptr %148, null
  br i1 %149, label %150, label %155

150:                                              ; preds = %144
  %151 = getelementptr inbounds %"class.JPH::Body", ptr %23, i32 0, i32 4
  %152 = load ptr, ptr %151, align 8, !tbaa !12
  %153 = invoke noundef zeroext i8 @_ZNK3JPH16MotionProperties16GetMotionQualityEv(ptr noundef nonnull align 16 dereferenceable(182) %152)
          to label %154 unwind label %307

154:                                              ; preds = %150
  br label %156

155:                                              ; preds = %144
  br label %156

156:                                              ; preds = %155, %154
  %157 = phi i8 [ %153, %154 ], [ 0, %155 ]
  %158 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 14
  store i8 %157, ptr %158, align 1, !tbaa !49
  %159 = invoke noundef zeroext i1 @_ZNK3JPH4Body30GetEnhancedInternalEdgeRemovalEv(ptr noundef nonnull align 16 dereferenceable(122) %23)
          to label %160 unwind label %307

160:                                              ; preds = %156
  %161 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 15
  %162 = zext i1 %159 to i8
  store i8 %162, ptr %161, align 8, !tbaa !50
  %163 = getelementptr inbounds %"class.JPH::Body", ptr %23, i32 0, i32 4
  %164 = load ptr, ptr %163, align 8, !tbaa !12
  %165 = icmp ne ptr %164, null
  br i1 %165, label %166, label %169

166:                                              ; preds = %160
  %167 = invoke noundef zeroext i1 @_ZNK3JPH4Body16GetAllowSleepingEv(ptr noundef nonnull align 16 dereferenceable(122) %23)
          to label %168 unwind label %307

168:                                              ; preds = %166
  br label %170

169:                                              ; preds = %160
  br label %170

170:                                              ; preds = %169, %168
  %171 = phi i1 [ %167, %168 ], [ true, %169 ]
  %172 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 16
  %173 = zext i1 %171 to i8
  store i8 %173, ptr %172, align 1, !tbaa !51
  %174 = invoke noundef float @_ZNK3JPH4Body11GetFrictionEv(ptr noundef nonnull align 16 dereferenceable(122) %23)
          to label %175 unwind label %307

175:                                              ; preds = %170
  %176 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 17
  store float %174, ptr %176, align 4, !tbaa !52
  %177 = invoke noundef float @_ZNK3JPH4Body14GetRestitutionEv(ptr noundef nonnull align 16 dereferenceable(122) %23)
          to label %178 unwind label %307

178:                                              ; preds = %175
  %179 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 18
  store float %177, ptr %179, align 16, !tbaa !53
  %180 = getelementptr inbounds %"class.JPH::Body", ptr %23, i32 0, i32 4
  %181 = load ptr, ptr %180, align 8, !tbaa !12
  %182 = icmp ne ptr %181, null
  br i1 %182, label %183, label %188

183:                                              ; preds = %178
  %184 = getelementptr inbounds %"class.JPH::Body", ptr %23, i32 0, i32 4
  %185 = load ptr, ptr %184, align 8, !tbaa !12
  %186 = invoke noundef float @_ZNK3JPH16MotionProperties16GetLinearDampingEv(ptr noundef nonnull align 16 dereferenceable(182) %185)
          to label %187 unwind label %307

187:                                              ; preds = %183
  br label %189

188:                                              ; preds = %178
  br label %189

189:                                              ; preds = %188, %187
  %190 = phi float [ %186, %187 ], [ 0.000000e+00, %188 ]
  %191 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 19
  store float %190, ptr %191, align 4, !tbaa !54
  %192 = getelementptr inbounds %"class.JPH::Body", ptr %23, i32 0, i32 4
  %193 = load ptr, ptr %192, align 8, !tbaa !12
  %194 = icmp ne ptr %193, null
  br i1 %194, label %195, label %200

195:                                              ; preds = %189
  %196 = getelementptr inbounds %"class.JPH::Body", ptr %23, i32 0, i32 4
  %197 = load ptr, ptr %196, align 8, !tbaa !12
  %198 = invoke noundef float @_ZNK3JPH16MotionProperties17GetAngularDampingEv(ptr noundef nonnull align 16 dereferenceable(182) %197)
          to label %199 unwind label %307

199:                                              ; preds = %195
  br label %201

200:                                              ; preds = %189
  br label %201

201:                                              ; preds = %200, %199
  %202 = phi float [ %198, %199 ], [ 0.000000e+00, %200 ]
  %203 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 20
  store float %202, ptr %203, align 8, !tbaa !55
  %204 = getelementptr inbounds %"class.JPH::Body", ptr %23, i32 0, i32 4
  %205 = load ptr, ptr %204, align 8, !tbaa !12
  %206 = icmp ne ptr %205, null
  br i1 %206, label %207, label %212

207:                                              ; preds = %201
  %208 = getelementptr inbounds %"class.JPH::Body", ptr %23, i32 0, i32 4
  %209 = load ptr, ptr %208, align 8, !tbaa !12
  %210 = invoke noundef float @_ZNK3JPH16MotionProperties20GetMaxLinearVelocityEv(ptr noundef nonnull align 16 dereferenceable(182) %209)
          to label %211 unwind label %307

211:                                              ; preds = %207
  br label %213

212:                                              ; preds = %201
  br label %213

213:                                              ; preds = %212, %211
  %214 = phi float [ %210, %211 ], [ 0.000000e+00, %212 ]
  %215 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 21
  store float %214, ptr %215, align 4, !tbaa !56
  %216 = getelementptr inbounds %"class.JPH::Body", ptr %23, i32 0, i32 4
  %217 = load ptr, ptr %216, align 8, !tbaa !12
  %218 = icmp ne ptr %217, null
  br i1 %218, label %219, label %224

219:                                              ; preds = %213
  %220 = getelementptr inbounds %"class.JPH::Body", ptr %23, i32 0, i32 4
  %221 = load ptr, ptr %220, align 8, !tbaa !12
  %222 = invoke noundef float @_ZNK3JPH16MotionProperties21GetMaxAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(182) %221)
          to label %223 unwind label %307

223:                                              ; preds = %219
  br label %225

224:                                              ; preds = %213
  br label %225

225:                                              ; preds = %224, %223
  %226 = phi float [ %222, %223 ], [ 0.000000e+00, %224 ]
  %227 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 22
  store float %226, ptr %227, align 16, !tbaa !57
  %228 = getelementptr inbounds %"class.JPH::Body", ptr %23, i32 0, i32 4
  %229 = load ptr, ptr %228, align 8, !tbaa !12
  %230 = icmp ne ptr %229, null
  br i1 %230, label %231, label %236

231:                                              ; preds = %225
  %232 = getelementptr inbounds %"class.JPH::Body", ptr %23, i32 0, i32 4
  %233 = load ptr, ptr %232, align 8, !tbaa !12
  %234 = invoke noundef float @_ZNK3JPH16MotionProperties16GetGravityFactorEv(ptr noundef nonnull align 16 dereferenceable(182) %233)
          to label %235 unwind label %307

235:                                              ; preds = %231
  br label %237

236:                                              ; preds = %225
  br label %237

237:                                              ; preds = %236, %235
  %238 = phi float [ %234, %235 ], [ 1.000000e+00, %236 ]
  %239 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 23
  store float %238, ptr %239, align 4, !tbaa !58
  %240 = getelementptr inbounds %"class.JPH::Body", ptr %23, i32 0, i32 4
  %241 = load ptr, ptr %240, align 8, !tbaa !12
  %242 = icmp ne ptr %241, null
  br i1 %242, label %243, label %248

243:                                              ; preds = %237
  %244 = getelementptr inbounds %"class.JPH::Body", ptr %23, i32 0, i32 4
  %245 = load ptr, ptr %244, align 8, !tbaa !12
  %246 = invoke noundef i32 @_ZNK3JPH16MotionProperties27GetNumVelocityStepsOverrideEv(ptr noundef nonnull align 16 dereferenceable(182) %245)
          to label %247 unwind label %307

247:                                              ; preds = %243
  br label %249

248:                                              ; preds = %237
  br label %249

249:                                              ; preds = %248, %247
  %250 = phi i32 [ %246, %247 ], [ 0, %248 ]
  %251 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 24
  store i32 %250, ptr %251, align 8, !tbaa !59
  %252 = getelementptr inbounds %"class.JPH::Body", ptr %23, i32 0, i32 4
  %253 = load ptr, ptr %252, align 8, !tbaa !12
  %254 = icmp ne ptr %253, null
  br i1 %254, label %255, label %260

255:                                              ; preds = %249
  %256 = getelementptr inbounds %"class.JPH::Body", ptr %23, i32 0, i32 4
  %257 = load ptr, ptr %256, align 8, !tbaa !12
  %258 = invoke noundef i32 @_ZNK3JPH16MotionProperties27GetNumPositionStepsOverrideEv(ptr noundef nonnull align 16 dereferenceable(182) %257)
          to label %259 unwind label %307

259:                                              ; preds = %255
  br label %261

260:                                              ; preds = %249
  br label %261

261:                                              ; preds = %260, %259
  %262 = phi i32 [ %258, %259 ], [ 0, %260 ]
  %263 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 25
  store i32 %262, ptr %263, align 4, !tbaa !60
  %264 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 26
  store i8 2, ptr %264, align 16, !tbaa !61
  %265 = getelementptr inbounds %"class.JPH::Body", ptr %23, i32 0, i32 4
  %266 = load ptr, ptr %265, align 8, !tbaa !12
  %267 = icmp ne ptr %266, null
  br i1 %267, label %268, label %384

268:                                              ; preds = %261
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #8
  %269 = getelementptr inbounds %"class.JPH::Body", ptr %23, i32 0, i32 4
  %270 = load ptr, ptr %269, align 8, !tbaa !12
  %271 = invoke noundef float @_ZNK3JPH16MotionProperties23GetInverseMassUncheckedEv(ptr noundef nonnull align 16 dereferenceable(182) %270)
          to label %272 unwind label %311

272:                                              ; preds = %268
  store float %271, ptr %13, align 4, !tbaa !62
  call void @llvm.lifetime.start.p0(i64 64, ptr %14) #8
  %273 = getelementptr inbounds %"class.JPH::Body", ptr %23, i32 0, i32 4
  %274 = load ptr, ptr %273, align 8, !tbaa !12
  invoke void @_ZNK3JPH16MotionProperties36GetLocalSpaceInverseInertiaUncheckedEv(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %14, ptr noundef nonnull align 16 dereferenceable(182) %274)
          to label %275 unwind label %315

275:                                              ; preds = %272
  %276 = load float, ptr %13, align 4, !tbaa !62
  %277 = fcmp une float %276, 0.000000e+00
  br i1 %277, label %278, label %281

278:                                              ; preds = %275
  %279 = load float, ptr %13, align 4, !tbaa !62
  %280 = fdiv float 1.000000e+00, %279
  br label %282

281:                                              ; preds = %275
  br label %282

282:                                              ; preds = %281, %278
  %283 = phi float [ %280, %278 ], [ 0x47EFFFFFE0000000, %281 ]
  %284 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 28
  %285 = getelementptr inbounds %"class.JPH::MassProperties", ptr %284, i32 0, i32 0
  store float %283, ptr %285, align 16, !tbaa !63
  call void @llvm.lifetime.start.p0(i64 64, ptr %15) #8
  %286 = invoke noundef zeroext i1 @_ZN3JPH5Mat4414SetInversed3x3ERKS0_(ptr noundef nonnull align 16 dereferenceable(64) %15, ptr noundef nonnull align 16 dereferenceable(64) %14)
          to label %287 unwind label %319

287:                                              ; preds = %282
  br i1 %286, label %288, label %323

288:                                              ; preds = %287
  %289 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 28
  %290 = getelementptr inbounds %"class.JPH::MassProperties", ptr %289, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %290, ptr align 16 %15, i64 64, i1 false), !tbaa.struct !64
  br label %380

291:                                              ; preds = %30
  %292 = landingpad { ptr, i32 }
          cleanup
  %293 = extractvalue { ptr, i32 } %292, 0
  store ptr %293, ptr %8, align 8
  %294 = extractvalue { ptr, i32 } %292, 1
  store i32 %294, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %7) #8
  br label %413

295:                                              ; preds = %32
  %296 = landingpad { ptr, i32 }
          cleanup
  %297 = extractvalue { ptr, i32 } %296, 0
  store ptr %297, ptr %8, align 8
  %298 = extractvalue { ptr, i32 } %296, 1
  store i32 %298, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %10) #8
  br label %413

299:                                              ; preds = %64, %53
  %300 = landingpad { ptr, i32 }
          cleanup
  %301 = extractvalue { ptr, i32 } %300, 0
  store ptr %301, ptr %8, align 8
  %302 = extractvalue { ptr, i32 } %300, 1
  store i32 %302, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %11) #8
  br label %413

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

307:                                              ; preds = %408, %406, %255, %243, %231, %219, %207, %195, %183, %175, %170, %166, %156, %150, %140, %136, %132, %123, %117, %110, %107, %101, %98
  %308 = landingpad { ptr, i32 }
          cleanup
  %309 = extractvalue { ptr, i32 } %308, 0
  store ptr %309, ptr %8, align 8
  %310 = extractvalue { ptr, i32 } %308, 1
  store i32 %310, ptr %9, align 4
  br label %413

311:                                              ; preds = %268
  %312 = landingpad { ptr, i32 }
          cleanup
  %313 = extractvalue { ptr, i32 } %312, 0
  store ptr %313, ptr %8, align 8
  %314 = extractvalue { ptr, i32 } %312, 1
  store i32 %314, ptr %9, align 4
  br label %383

315:                                              ; preds = %272
  %316 = landingpad { ptr, i32 }
          cleanup
  %317 = extractvalue { ptr, i32 } %316, 0
  store ptr %317, ptr %8, align 8
  %318 = extractvalue { ptr, i32 } %316, 1
  store i32 %318, ptr %9, align 4
  br label %382

319:                                              ; preds = %282
  %320 = landingpad { ptr, i32 }
          cleanup
  %321 = extractvalue { ptr, i32 } %320, 0
  store ptr %321, ptr %8, align 8
  %322 = extractvalue { ptr, i32 } %320, 1
  store i32 %322, ptr %9, align 4
  br label %381

323:                                              ; preds = %287
  call void @llvm.lifetime.start.p0(i64 16, ptr %16) #8
  %324 = invoke { double, double } @_ZNK3JPH5Mat4412GetDiagonal3Ev(ptr noundef nonnull align 16 dereferenceable(64) %14)
          to label %325 unwind label %371

325:                                              ; preds = %323
  %326 = getelementptr inbounds %"class.JPH::Vec3", ptr %17, i32 0, i32 0
  %327 = getelementptr inbounds %union.anon, ptr %326, i32 0, i32 0
  %328 = getelementptr inbounds { double, double }, ptr %327, i32 0, i32 0
  %329 = extractvalue { double, double } %324, 0
  store double %329, ptr %328, align 16
  %330 = getelementptr inbounds { double, double }, ptr %327, i32 0, i32 1
  %331 = extractvalue { double, double } %324, 1
  store double %331, ptr %330, align 8
  %332 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 0x3810000000000000)
          to label %333 unwind label %371

333:                                              ; preds = %325
  %334 = getelementptr inbounds %"class.JPH::Vec3", ptr %18, i32 0, i32 0
  %335 = getelementptr inbounds %union.anon, ptr %334, i32 0, i32 0
  %336 = getelementptr inbounds { double, double }, ptr %335, i32 0, i32 0
  %337 = extractvalue { double, double } %332, 0
  store double %337, ptr %336, align 16
  %338 = getelementptr inbounds { double, double }, ptr %335, i32 0, i32 1
  %339 = extractvalue { double, double } %332, 1
  store double %339, ptr %338, align 8
  %340 = getelementptr inbounds { double, double }, ptr %17, i32 0, i32 0
  %341 = load double, ptr %340, align 16
  %342 = getelementptr inbounds { double, double }, ptr %17, i32 0, i32 1
  %343 = load double, ptr %342, align 8
  %344 = getelementptr inbounds { double, double }, ptr %18, i32 0, i32 0
  %345 = load double, ptr %344, align 16
  %346 = getelementptr inbounds { double, double }, ptr %18, i32 0, i32 1
  %347 = load double, ptr %346, align 8
  %348 = invoke { double, double } @_ZN3JPH4Vec34sMaxES0_S0_(double %341, double %343, double %345, double %347)
          to label %349 unwind label %371

349:                                              ; preds = %333
  %350 = getelementptr inbounds %"class.JPH::Vec3", ptr %16, i32 0, i32 0
  %351 = getelementptr inbounds %union.anon, ptr %350, i32 0, i32 0
  %352 = getelementptr inbounds { double, double }, ptr %351, i32 0, i32 0
  %353 = extractvalue { double, double } %348, 0
  store double %353, ptr %352, align 16
  %354 = getelementptr inbounds { double, double }, ptr %351, i32 0, i32 1
  %355 = extractvalue { double, double } %348, 1
  store double %355, ptr %354, align 8
  call void @llvm.lifetime.start.p0(i64 64, ptr %19) #8
  %356 = invoke { double, double } @_ZNK3JPH4Vec310ReciprocalEv(ptr noundef nonnull align 16 dereferenceable(16) %16)
          to label %357 unwind label %375

357:                                              ; preds = %349
  %358 = getelementptr inbounds %"class.JPH::Vec3", ptr %20, i32 0, i32 0
  %359 = getelementptr inbounds %union.anon, ptr %358, i32 0, i32 0
  %360 = getelementptr inbounds { double, double }, ptr %359, i32 0, i32 0
  %361 = extractvalue { double, double } %356, 0
  store double %361, ptr %360, align 16
  %362 = getelementptr inbounds { double, double }, ptr %359, i32 0, i32 1
  %363 = extractvalue { double, double } %356, 1
  store double %363, ptr %362, align 8
  %364 = getelementptr inbounds { double, double }, ptr %20, i32 0, i32 0
  %365 = load double, ptr %364, align 16
  %366 = getelementptr inbounds { double, double }, ptr %20, i32 0, i32 1
  %367 = load double, ptr %366, align 8
  invoke void @_ZN3JPH5Mat446sScaleENS_4Vec3E(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %19, double %365, double %367)
          to label %368 unwind label %375

368:                                              ; preds = %357
  %369 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 28
  %370 = getelementptr inbounds %"class.JPH::MassProperties", ptr %369, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %370, ptr align 16 %19, i64 64, i1 false), !tbaa.struct !64
  call void @llvm.lifetime.end.p0(i64 64, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #8
  br label %380

371:                                              ; preds = %333, %325, %323
  %372 = landingpad { ptr, i32 }
          cleanup
  %373 = extractvalue { ptr, i32 } %372, 0
  store ptr %373, ptr %8, align 8
  %374 = extractvalue { ptr, i32 } %372, 1
  store i32 %374, ptr %9, align 4
  br label %379

375:                                              ; preds = %357, %349
  %376 = landingpad { ptr, i32 }
          cleanup
  %377 = extractvalue { ptr, i32 } %376, 0
  store ptr %377, ptr %8, align 8
  %378 = extractvalue { ptr, i32 } %376, 1
  store i32 %378, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %19) #8
  br label %379

379:                                              ; preds = %375, %371
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #8
  br label %381

380:                                              ; preds = %368, %288
  call void @llvm.lifetime.end.p0(i64 64, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #8
  br label %406

381:                                              ; preds = %379, %319
  call void @llvm.lifetime.end.p0(i64 64, ptr %15) #8
  br label %382

382:                                              ; preds = %381, %315
  call void @llvm.lifetime.end.p0(i64 64, ptr %14) #8
  br label %383

383:                                              ; preds = %382, %311
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #8
  br label %413

384:                                              ; preds = %261
  %385 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 28
  %386 = getelementptr inbounds %"class.JPH::MassProperties", ptr %385, i32 0, i32 0
  store float 0x47EFFFFFE0000000, ptr %386, align 16, !tbaa !63
  call void @llvm.lifetime.start.p0(i64 64, ptr %21) #8
  %387 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 0x47EFFFFFE0000000)
          to label %388 unwind label %402

388:                                              ; preds = %384
  %389 = getelementptr inbounds %"class.JPH::Vec3", ptr %22, i32 0, i32 0
  %390 = getelementptr inbounds %union.anon, ptr %389, i32 0, i32 0
  %391 = getelementptr inbounds { double, double }, ptr %390, i32 0, i32 0
  %392 = extractvalue { double, double } %387, 0
  store double %392, ptr %391, align 16
  %393 = getelementptr inbounds { double, double }, ptr %390, i32 0, i32 1
  %394 = extractvalue { double, double } %387, 1
  store double %394, ptr %393, align 8
  %395 = getelementptr inbounds { double, double }, ptr %22, i32 0, i32 0
  %396 = load double, ptr %395, align 16
  %397 = getelementptr inbounds { double, double }, ptr %22, i32 0, i32 1
  %398 = load double, ptr %397, align 8
  invoke void @_ZN3JPH5Mat446sScaleENS_4Vec3E(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %21, double %396, double %398)
          to label %399 unwind label %402

399:                                              ; preds = %388
  %400 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %0, i32 0, i32 28
  %401 = getelementptr inbounds %"class.JPH::MassProperties", ptr %400, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %401, ptr align 16 %21, i64 64, i1 false), !tbaa.struct !64
  call void @llvm.lifetime.end.p0(i64 64, ptr %21) #8
  br label %406

402:                                              ; preds = %388, %384
  %403 = landingpad { ptr, i32 }
          cleanup
  %404 = extractvalue { ptr, i32 } %403, 0
  store ptr %404, ptr %8, align 8
  %405 = extractvalue { ptr, i32 } %403, 1
  store i32 %405, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %21) #8
  br label %413

406:                                              ; preds = %399, %380
  %407 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %23)
          to label %408 unwind label %307

408:                                              ; preds = %406
  invoke void @_ZN3JPH20BodyCreationSettings8SetShapeEPKNS_5ShapeE(ptr noundef nonnull align 16 dereferenceable(256) %0, ptr noundef %407)
          to label %409 unwind label %307

409:                                              ; preds = %408
  store i1 true, ptr %6, align 1
  %410 = load i1, ptr %6, align 1
  br i1 %410, label %412, label %411

411:                                              ; preds = %409
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %0) #8
  br label %412

412:                                              ; preds = %411, %409
  ret void

413:                                              ; preds = %402, %383, %307, %303, %299, %295, %291
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %0) #8
  br label %414

414:                                              ; preds = %413
  %415 = load ptr, ptr %8, align 8
  %416 = load i32, ptr %9, align 4
  %417 = insertvalue { ptr, i32 } poison, ptr %415, 0
  %418 = insertvalue { ptr, i32 } %417, i32 %416, 1
  resume { ptr, i32 } %418
}

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i16 @_ZNK3JPH4Body14GetObjectLayerEv(ptr noundef nonnull align 16 dereferenceable(122)) #3 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i8 @_ZNK3JPH4Body13GetMotionTypeEv(ptr noundef nonnull align 16 dereferenceable(122)) #3 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i8 @_ZNK3JPH16MotionProperties16GetMotionQualityEv(ptr noundef nonnull align 16 dereferenceable(182)) #6 align 2

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH16MotionProperties16GetLinearDampingEv(ptr noundef nonnull align 16 dereferenceable(182)) #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH16MotionProperties17GetAngularDampingEv(ptr noundef nonnull align 16 dereferenceable(182)) #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH16MotionProperties20GetMaxLinearVelocityEv(ptr noundef nonnull align 16 dereferenceable(182)) #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH16MotionProperties21GetMaxAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(182)) #3 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH16MotionProperties23GetInverseMassUncheckedEv(ptr noundef nonnull align 16 dereferenceable(182)) #3 align 2

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN3JPH5Mat4414SetInversed3x3ERKS0_(ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(64)) #7 align 2

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

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

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

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

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

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { 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 #4 = { 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 #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 = { 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"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { 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 = !{i64 2158443549}
!10 = !{i64 0, i64 16, !11}
!11 = !{!7, !7, i64 0}
!12 = !{!13, !6, i64 72}
!13 = !{!"_ZTSN3JPH4BodyE", !14, i64 0, !15, i64 16, !17, i64 32, !18, i64 64, !6, i64 72, !19, i64 80, !20, i64 88, !23, i64 104, !23, i64 108, !24, i64 112, !25, i64 116, !26, i64 118, !27, i64 119, !28, i64 120, !29, i64 121}
!14 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!15 = !{!"_ZTSN3JPH4QuatE", !16, i64 0}
!16 = !{!"_ZTSN3JPH4Vec4E", !7, i64 0}
!17 = !{!"_ZTSN3JPH5AABoxE", !14, i64 0, !14, i64 16}
!18 = !{!"_ZTSN3JPH8RefConstINS_5ShapeEEE", !6, i64 0}
!19 = !{!"long", !7, i64 0}
!20 = !{!"_ZTSN3JPH14CollisionGroupE", !21, i64 0, !22, i64 8, !22, i64 12}
!21 = !{!"_ZTSN3JPH8RefConstINS_11GroupFilterEEE", !6, i64 0}
!22 = !{!"int", !7, i64 0}
!23 = !{!"float", !7, i64 0}
!24 = !{!"_ZTSN3JPH6BodyIDE", !22, i64 0}
!25 = !{!"short", !7, i64 0}
!26 = !{!"_ZTSN3JPH9EBodyTypeE", !7, i64 0}
!27 = !{!"_ZTSN3JPH15BroadPhaseLayerE", !7, i64 0}
!28 = !{!"_ZTSN3JPH11EMotionTypeE", !7, i64 0}
!29 = !{!"_ZTSSt6atomicIhE", !30, i64 0}
!30 = !{!"_ZTSSt13__atomic_baseIhE", !7, i64 0}
!31 = !{!32, !25, i64 72}
!32 = !{!"_ZTSN3JPH20BodyCreationSettingsE", !14, i64 0, !15, i64 16, !14, i64 32, !14, i64 48, !19, i64 64, !25, i64 72, !20, i64 80, !28, i64 96, !33, i64 97, !34, i64 98, !34, i64 99, !34, i64 100, !34, i64 101, !34, i64 102, !35, i64 103, !34, i64 104, !34, i64 105, !23, i64 108, !23, i64 112, !23, i64 116, !23, i64 120, !23, i64 124, !23, i64 128, !23, i64 132, !22, i64 136, !22, i64 140, !36, i64 144, !23, i64 148, !37, i64 160, !39, i64 240, !18, i64 248}
!33 = !{!"_ZTSN3JPH12EAllowedDOFsE", !7, i64 0}
!34 = !{!"bool", !7, i64 0}
!35 = !{!"_ZTSN3JPH14EMotionQualityE", !7, i64 0}
!36 = !{!"_ZTSN3JPH23EOverrideMassPropertiesE", !7, i64 0}
!37 = !{!"_ZTSN3JPH14MassPropertiesE", !23, i64 0, !38, i64 16}
!38 = !{!"_ZTSN3JPH5Mat44E", !7, i64 0}
!39 = !{!"_ZTSN3JPH8RefConstINS_13ShapeSettingsEEE", !6, i64 0}
!40 = !{!13, !19, i64 80}
!41 = !{!32, !19, i64 64}
!42 = !{!32, !28, i64 96}
!43 = !{!32, !33, i64 97}
!44 = !{!32, !34, i64 98}
!45 = !{!32, !34, i64 99}
!46 = !{!32, !34, i64 100}
!47 = !{!32, !34, i64 101}
!48 = !{!32, !34, i64 102}
!49 = !{!32, !35, i64 103}
!50 = !{!32, !34, i64 104}
!51 = !{!32, !34, i64 105}
!52 = !{!32, !23, i64 108}
!53 = !{!32, !23, i64 112}
!54 = !{!32, !23, i64 116}
!55 = !{!32, !23, i64 120}
!56 = !{!32, !23, i64 124}
!57 = !{!32, !23, i64 128}
!58 = !{!32, !23, i64 132}
!59 = !{!32, !22, i64 136}
!60 = !{!32, !22, i64 140}
!61 = !{!32, !36, i64 144}
!62 = !{!23, !23, i64 0}
!63 = !{!32, !23, i64 160}
!64 = !{i64 0, i64 64, !11}


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

%"class.JPH::BodyCreationSettings" = type { %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::Vec3", %"class.JPH::Vec3", i64, i16, %"class.JPH::CollisionGroup", i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, float, float, float, float, float, float, float, i32, i32, i8, float, %"class.JPH::MassProperties", %"class.JPH::RefConst.16", %"class.JPH::RefConst" }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.0 }
%union.anon.0 = type { <4 x float> }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst.1", i32, i32 }
%"class.JPH::RefConst.1" = type { ptr }
%"class.JPH::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::RefConst.16" = type { ptr }
%"class.JPH::RefConst" = type { ptr }

@.str.3 = external hidden unnamed_addr constant [79 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [14 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: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Vec35sZeroEv() local_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 nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH4Body11IsRigidBodyEv(ptr noundef nonnull align 16 dereferenceable(122)) local_unnamed_addr #3 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 #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i8 @_ZNK3JPH16MotionProperties14GetAllowedDOFsEv(ptr noundef nonnull align 16 dereferenceable(182)) local_unnamed_addr #3 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH16MotionProperties16GetGravityFactorEv(ptr noundef nonnull align 16 dereferenceable(182)) local_unnamed_addr #3 align 2

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK3JPH4Body23GetBodyCreationSettingsEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::BodyCreationSettings") align 16 %0, ptr noundef nonnull align 16 dereferenceable(122) %1) local_unnamed_addr #5 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.JPH::Mat44", align 16
  %4 = alloca %"class.JPH::Mat44", align 16
  %5 = alloca %"class.JPH::Vec3", align 16
  %6 = alloca %"class.JPH::Mat44", align 16
  %7 = alloca %"class.JPH::Mat44", align 16
  %8 = tail call noundef zeroext i1 @_ZNK3JPH4Body11IsRigidBodyEv(ptr noundef nonnull align 16 dereferenceable(122) %1)
  br i1 %8, label %12, label %9

9:                                                ; preds = %2
  %10 = tail call noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.3, i32 noundef 332)
  br i1 %10, label %11, label %12

11:                                               ; preds = %9
  tail call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #8, !srcloc !5
  br label %12

12:                                               ; preds = %2, %9, %11
  tail call void @_ZN3JPH20BodyCreationSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(256) %0)
  %13 = invoke { double, double } @_ZNK3JPH4Body11GetPositionEv(ptr noundef nonnull align 16 dereferenceable(122) %1)
          to label %14 unwind label %127

14:                                               ; preds = %12
  %15 = extractvalue { double, double } %13, 0
  %16 = extractvalue { double, double } %13, 1
  store double %15, ptr %0, align 16
  %.sroa.514.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 8
  store double %16, ptr %.sroa.514.0..sroa_idx, align 8, !tbaa !6
  %17 = invoke { double, double } @_ZNK3JPH4Body11GetRotationEv(ptr noundef nonnull align 16 dereferenceable(122) %1)
          to label %18 unwind label %129

18:                                               ; preds = %14
  %19 = extractvalue { double, double } %17, 0
  %20 = extractvalue { double, double } %17, 1
  %21 = getelementptr inbounds i8, ptr %0, i64 16
  store double %19, ptr %21, align 16
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 24
  store double %20, ptr %.sroa.5.0..sroa_idx, align 8, !tbaa !6
  %22 = getelementptr inbounds i8, ptr %1, i64 72
  %23 = load ptr, ptr %22, align 8, !tbaa !9
  %.not = icmp eq ptr %23, null
  br i1 %.not, label %26, label %24

24:                                               ; preds = %18
  %25 = invoke { double, double } @_ZNK3JPH16MotionProperties17GetLinearVelocityEv(ptr noundef nonnull align 16 dereferenceable(182) %23)
          to label %28 unwind label %131

26:                                               ; preds = %18
  %27 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %28 unwind label %131

28:                                               ; preds = %26, %24
  %.pn = phi { double, double } [ %25, %24 ], [ %27, %26 ]
  %.sroa.610.0 = extractvalue { double, double } %.pn, 1
  %.sroa.09.0 = extractvalue { double, double } %.pn, 0
  %29 = getelementptr inbounds i8, ptr %0, i64 32
  store double %.sroa.09.0, ptr %29, align 16
  %.sroa.610.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 40
  store double %.sroa.610.0, ptr %.sroa.610.0..sroa_idx, align 8, !tbaa !6
  %30 = load ptr, ptr %22, align 8, !tbaa !9
  %.not34 = icmp eq ptr %30, null
  br i1 %.not34, label %33, label %31

31:                                               ; preds = %28
  %32 = invoke { double, double } @_ZNK3JPH16MotionProperties18GetAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(182) %30)
          to label %35 unwind label %133

33:                                               ; preds = %28
  %34 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %35 unwind label %133

35:                                               ; preds = %33, %31
  %.pn35 = phi { double, double } [ %32, %31 ], [ %34, %33 ]
  %.sroa.6.0 = extractvalue { double, double } %.pn35, 1
  %.sroa.08.0 = extractvalue { double, double } %.pn35, 0
  %36 = getelementptr inbounds i8, ptr %0, i64 48
  store double %.sroa.08.0, ptr %36, align 16
  %.sroa.6.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 56
  store double %.sroa.6.0, ptr %.sroa.6.0..sroa_idx, align 8, !tbaa !6
  %37 = tail call noundef zeroext i16 @_ZNK3JPH4Body14GetObjectLayerEv(ptr noundef nonnull align 16 dereferenceable(122) %1)
  %38 = getelementptr inbounds i8, ptr %0, i64 72
  store i16 %37, ptr %38, align 8, !tbaa !29
  %39 = getelementptr inbounds i8, ptr %1, i64 80
  %40 = load i64, ptr %39, align 16, !tbaa !38
  %41 = getelementptr inbounds i8, ptr %0, i64 64
  store i64 %40, ptr %41, align 16, !tbaa !39
  %42 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH4Body17GetCollisionGroupEv(ptr noundef nonnull align 16 dereferenceable(122) %1)
  %43 = getelementptr inbounds i8, ptr %0, i64 80
  %44 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN3JPH14CollisionGroupaSERKS0_(ptr noundef nonnull align 8 dereferenceable(16) %43, ptr noundef nonnull align 8 dereferenceable(16) %42)
          to label %45 unwind label %135

45:                                               ; preds = %35
  %46 = tail call noundef zeroext i8 @_ZNK3JPH4Body13GetMotionTypeEv(ptr noundef nonnull align 16 dereferenceable(122) %1)
  %47 = getelementptr inbounds i8, ptr %0, i64 96
  store i8 %46, ptr %47, align 16, !tbaa !40
  %48 = load ptr, ptr %22, align 8, !tbaa !9
  %.not37 = icmp eq ptr %48, null
  br i1 %.not37, label %51, label %49

49:                                               ; preds = %45
  %50 = tail call noundef zeroext i8 @_ZNK3JPH16MotionProperties14GetAllowedDOFsEv(ptr noundef nonnull align 16 dereferenceable(182) %48)
  %.pre = load ptr, ptr %22, align 8, !tbaa !9
  br label %51

51:                                               ; preds = %45, %49
  %52 = phi ptr [ %.pre, %49 ], [ null, %45 ]
  %53 = phi i8 [ %50, %49 ], [ 63, %45 ]
  %54 = getelementptr inbounds i8, ptr %0, i64 97
  store i8 %53, ptr %54, align 1, !tbaa !41
  %55 = icmp ne ptr %52, null
  %56 = getelementptr inbounds i8, ptr %0, i64 98
  %57 = zext i1 %55 to i8
  store i8 %57, ptr %56, align 2, !tbaa !42
  %58 = tail call noundef zeroext i1 @_ZNK3JPH4Body8IsSensorEv(ptr noundef nonnull align 16 dereferenceable(122) %1)
  %59 = getelementptr inbounds i8, ptr %0, i64 99
  %60 = zext i1 %58 to i8
  store i8 %60, ptr %59, align 1, !tbaa !43
  %61 = tail call noundef zeroext i1 @_ZNK3JPH4Body31GetCollideKinematicVsNonDynamicEv(ptr noundef nonnull align 16 dereferenceable(122) %1)
  %62 = getelementptr inbounds i8, ptr %0, i64 100
  %63 = zext i1 %61 to i8
  store i8 %63, ptr %62, align 4, !tbaa !44
  %64 = tail call noundef zeroext i1 @_ZNK3JPH4Body23GetUseManifoldReductionEv(ptr noundef nonnull align 16 dereferenceable(122) %1)
  %65 = getelementptr inbounds i8, ptr %0, i64 101
  %66 = zext i1 %64 to i8
  store i8 %66, ptr %65, align 1, !tbaa !45
  %67 = tail call noundef zeroext i1 @_ZNK3JPH4Body23GetApplyGyroscopicForceEv(ptr noundef nonnull align 16 dereferenceable(122) %1)
  %68 = getelementptr inbounds i8, ptr %0, i64 102
  %69 = zext i1 %67 to i8
  store i8 %69, ptr %68, align 2, !tbaa !46
  %70 = load ptr, ptr %22, align 8, !tbaa !9
  %.not38 = icmp eq ptr %70, null
  br i1 %.not38, label %73, label %71

71:                                               ; preds = %51
  %72 = tail call noundef zeroext i8 @_ZNK3JPH16MotionProperties16GetMotionQualityEv(ptr noundef nonnull align 16 dereferenceable(182) %70)
  br label %73

73:                                               ; preds = %51, %71
  %74 = phi i8 [ %72, %71 ], [ 0, %51 ]
  %75 = getelementptr inbounds i8, ptr %0, i64 103
  store i8 %74, ptr %75, align 1, !tbaa !47
  %76 = tail call noundef zeroext i1 @_ZNK3JPH4Body30GetEnhancedInternalEdgeRemovalEv(ptr noundef nonnull align 16 dereferenceable(122) %1)
  %77 = getelementptr inbounds i8, ptr %0, i64 104
  %78 = zext i1 %76 to i8
  store i8 %78, ptr %77, align 8, !tbaa !48
  %79 = load ptr, ptr %22, align 8, !tbaa !9
  %.not39 = icmp eq ptr %79, null
  br i1 %.not39, label %82, label %80

80:                                               ; preds = %73
  %81 = tail call noundef zeroext i1 @_ZNK3JPH4Body16GetAllowSleepingEv(ptr noundef nonnull align 16 dereferenceable(122) %1)
  br label %82

82:                                               ; preds = %73, %80
  %83 = phi i1 [ %81, %80 ], [ true, %73 ]
  %84 = getelementptr inbounds i8, ptr %0, i64 105
  %85 = zext i1 %83 to i8
  store i8 %85, ptr %84, align 1, !tbaa !49
  %86 = tail call noundef float @_ZNK3JPH4Body11GetFrictionEv(ptr noundef nonnull align 16 dereferenceable(122) %1)
  %87 = getelementptr inbounds i8, ptr %0, i64 108
  store float %86, ptr %87, align 4, !tbaa !50
  %88 = tail call noundef float @_ZNK3JPH4Body14GetRestitutionEv(ptr noundef nonnull align 16 dereferenceable(122) %1)
  %89 = getelementptr inbounds i8, ptr %0, i64 112
  store float %88, ptr %89, align 16, !tbaa !51
  %90 = load ptr, ptr %22, align 8, !tbaa !9
  %.not40 = icmp eq ptr %90, null
  br i1 %.not40, label %.thread, label %92

.thread:                                          ; preds = %82
  %91 = getelementptr inbounds i8, ptr %0, i64 116
  store float 0.000000e+00, ptr %91, align 4, !tbaa !52
  br label %.thread87

92:                                               ; preds = %82
  %93 = tail call noundef float @_ZNK3JPH16MotionProperties16GetLinearDampingEv(ptr noundef nonnull align 16 dereferenceable(182) %90)
  %.pr = load ptr, ptr %22, align 8, !tbaa !9
  %94 = getelementptr inbounds i8, ptr %0, i64 116
  store float %93, ptr %94, align 4, !tbaa !52
  %.not41 = icmp eq ptr %.pr, null
  br i1 %.not41, label %.thread87, label %96

.thread87:                                        ; preds = %92, %.thread
  %95 = getelementptr inbounds i8, ptr %0, i64 120
  store float 0.000000e+00, ptr %95, align 8, !tbaa !53
  br label %.sink.split.sink.split.sink.split.sink.split.sink.split

96:                                               ; preds = %92
  %97 = tail call noundef float @_ZNK3JPH16MotionProperties17GetAngularDampingEv(ptr noundef nonnull align 16 dereferenceable(182) %.pr)
  %.pr55 = load ptr, ptr %22, align 8, !tbaa !9
  %98 = getelementptr inbounds i8, ptr %0, i64 120
  store float %97, ptr %98, align 8, !tbaa !53
  %.not42 = icmp eq ptr %.pr55, null
  br i1 %.not42, label %.sink.split.sink.split.sink.split.sink.split.sink.split, label %99

99:                                               ; preds = %96
  %100 = tail call noundef float @_ZNK3JPH16MotionProperties20GetMaxLinearVelocityEv(ptr noundef nonnull align 16 dereferenceable(182) %.pr55)
  %.pr58.pre = load ptr, ptr %22, align 8, !tbaa !9
  %101 = getelementptr inbounds i8, ptr %0, i64 124
  store float %100, ptr %101, align 4, !tbaa !54
  %.not43 = icmp eq ptr %.pr58.pre, null
  br i1 %.not43, label %.sink.split.sink.split.sink.split.sink.split, label %102

102:                                              ; preds = %99
  %103 = tail call noundef float @_ZNK3JPH16MotionProperties21GetMaxAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(182) %.pr58.pre)
  %.pr63.pre = load ptr, ptr %22, align 8, !tbaa !9
  %104 = getelementptr inbounds i8, ptr %0, i64 128
  store float %103, ptr %104, align 16, !tbaa !55
  %.not44 = icmp eq ptr %.pr63.pre, null
  br i1 %.not44, label %.sink.split.sink.split.sink.split, label %105

105:                                              ; preds = %102
  %106 = tail call noundef float @_ZNK3JPH16MotionProperties16GetGravityFactorEv(ptr noundef nonnull align 16 dereferenceable(182) %.pr63.pre)
  %.pr68.pre = load ptr, ptr %22, align 8, !tbaa !9
  %107 = getelementptr inbounds i8, ptr %0, i64 132
  store float %106, ptr %107, align 4, !tbaa !56
  %.not45 = icmp eq ptr %.pr68.pre, null
  br i1 %.not45, label %.sink.split.sink.split, label %108

108:                                              ; preds = %105
  %109 = tail call noundef i32 @_ZNK3JPH16MotionProperties27GetNumVelocityStepsOverrideEv(ptr noundef nonnull align 16 dereferenceable(182) %.pr68.pre)
  %.pr73.pre = load ptr, ptr %22, align 8, !tbaa !9
  %110 = getelementptr inbounds i8, ptr %0, i64 136
  store i32 %109, ptr %110, align 8, !tbaa !57
  %.not46 = icmp eq ptr %.pr73.pre, null
  br i1 %.not46, label %.sink.split, label %111

111:                                              ; preds = %108
  %112 = tail call noundef i32 @_ZNK3JPH16MotionProperties27GetNumPositionStepsOverrideEv(ptr noundef nonnull align 16 dereferenceable(182) %.pr73.pre)
  %.pr78.pre = load ptr, ptr %22, align 8, !tbaa !9
  %113 = getelementptr inbounds i8, ptr %0, i64 140
  store i32 %112, ptr %113, align 4, !tbaa !58
  %114 = getelementptr inbounds i8, ptr %0, i64 144
  store i8 2, ptr %114, align 16, !tbaa !59
  %.not47 = icmp eq ptr %.pr78.pre, null
  br i1 %.not47, label %175, label %115

115:                                              ; preds = %111
  %116 = tail call noundef float @_ZNK3JPH16MotionProperties23GetInverseMassUncheckedEv(ptr noundef nonnull align 16 dereferenceable(182) %.pr78.pre)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %3) #8
  %117 = load ptr, ptr %22, align 8, !tbaa !9
  invoke void @_ZNK3JPH16MotionProperties36GetLocalSpaceInverseInertiaUncheckedEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %3, ptr noundef nonnull align 16 dereferenceable(182) %117)
          to label %118 unwind label %137

118:                                              ; preds = %115
  %119 = fcmp une float %116, 0.000000e+00
  %120 = fdiv float 1.000000e+00, %116
  %121 = select i1 %119, float %120, float 0x47EFFFFFE0000000
  %122 = getelementptr inbounds i8, ptr %0, i64 160
  store float %121, ptr %122, align 16, !tbaa !60
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %4) #8
  %123 = invoke noundef zeroext i1 @_ZN3JPH5Mat4414SetInversed3x3ERKS0_(ptr noundef nonnull align 16 dereferenceable(64) %4, ptr noundef nonnull align 16 dereferenceable(64) %3)
          to label %124 unwind label %139

124:                                              ; preds = %118
  br i1 %123, label %125, label %141

125:                                              ; preds = %124
  %126 = getelementptr inbounds i8, ptr %0, i64 176
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(64) %126, ptr noundef nonnull align 16 dereferenceable(64) %4, i64 64, i1 false), !tbaa.struct !61
  br label %166

127:                                              ; preds = %12
  %128 = landingpad { ptr, i32 }
          cleanup
  br label %189

129:                                              ; preds = %14
  %130 = landingpad { ptr, i32 }
          cleanup
  br label %189

131:                                              ; preds = %26, %24
  %132 = landingpad { ptr, i32 }
          cleanup
  br label %189

133:                                              ; preds = %33, %31
  %134 = landingpad { ptr, i32 }
          cleanup
  br label %189

135:                                              ; preds = %187, %185, %35
  %136 = landingpad { ptr, i32 }
          cleanup
  br label %189

137:                                              ; preds = %115
  %138 = landingpad { ptr, i32 }
          cleanup
  br label %168

139:                                              ; preds = %118
  %140 = landingpad { ptr, i32 }
          cleanup
  br label %167

141:                                              ; preds = %124
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) #8
  %142 = invoke { double, double } @_ZNK3JPH5Mat4412GetDiagonal3Ev(ptr noundef nonnull align 16 dereferenceable(64) %3)
          to label %143 unwind label %161

143:                                              ; preds = %141
  %144 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 0x3810000000000000)
          to label %145 unwind label %161

145:                                              ; preds = %143
  %146 = extractvalue { double, double } %142, 1
  %147 = extractvalue { double, double } %142, 0
  %148 = extractvalue { double, double } %144, 0
  %149 = extractvalue { double, double } %144, 1
  %150 = invoke { double, double } @_ZN3JPH4Vec34sMaxES0_S0_(double %147, double %146, double %148, double %149)
          to label %151 unwind label %161

151:                                              ; preds = %145
  %152 = extractvalue { double, double } %150, 0
  store double %152, ptr %5, align 16
  %153 = getelementptr inbounds i8, ptr %5, i64 8
  %154 = extractvalue { double, double } %150, 1
  store double %154, ptr %153, align 8
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %6) #8
  %155 = invoke { double, double } @_ZNK3JPH4Vec310ReciprocalEv(ptr noundef nonnull align 16 dereferenceable(16) %5)
          to label %156 unwind label %163

156:                                              ; preds = %151
  %157 = extractvalue { double, double } %155, 0
  %158 = extractvalue { double, double } %155, 1
  invoke void @_ZN3JPH5Mat446sScaleENS_4Vec3E(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %6, double %157, double %158)
          to label %159 unwind label %163

159:                                              ; preds = %156
  %160 = getelementptr inbounds i8, ptr %0, i64 176
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(64) %160, ptr noundef nonnull align 16 dereferenceable(64) %6, i64 64, i1 false), !tbaa.struct !61
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %6) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #8
  br label %166

161:                                              ; preds = %145, %143, %141
  %162 = landingpad { ptr, i32 }
          cleanup
  br label %165

163:                                              ; preds = %156, %151
  %164 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %6) #8
  br label %165

165:                                              ; preds = %163, %161
  %.pn48 = phi { ptr, i32 } [ %164, %163 ], [ %162, %161 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #8
  br label %167

166:                                              ; preds = %159, %125
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %4) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %3) #8
  br label %185

167:                                              ; preds = %165, %139
  %.pn48.pn = phi { ptr, i32 } [ %.pn48, %165 ], [ %140, %139 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %4) #8
  br label %168

168:                                              ; preds = %167, %137
  %.pn48.pn.pn = phi { ptr, i32 } [ %.pn48.pn, %167 ], [ %138, %137 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %3) #8
  br label %189

.sink.split.sink.split.sink.split.sink.split.sink.split: ; preds = %96, %.thread87
  %169 = getelementptr inbounds i8, ptr %0, i64 124
  store float 0.000000e+00, ptr %169, align 4, !tbaa !54
  br label %.sink.split.sink.split.sink.split.sink.split

.sink.split.sink.split.sink.split.sink.split:     ; preds = %.sink.split.sink.split.sink.split.sink.split.sink.split, %99
  %170 = getelementptr inbounds i8, ptr %0, i64 128
  store float 0.000000e+00, ptr %170, align 16, !tbaa !55
  br label %.sink.split.sink.split.sink.split

.sink.split.sink.split.sink.split:                ; preds = %.sink.split.sink.split.sink.split.sink.split, %102
  %171 = getelementptr inbounds i8, ptr %0, i64 132
  store float 1.000000e+00, ptr %171, align 4, !tbaa !56
  br label %.sink.split.sink.split

.sink.split.sink.split:                           ; preds = %.sink.split.sink.split.sink.split, %105
  %172 = getelementptr inbounds i8, ptr %0, i64 136
  store i32 0, ptr %172, align 8, !tbaa !57
  br label %.sink.split

.sink.split:                                      ; preds = %.sink.split.sink.split, %108
  %173 = getelementptr inbounds i8, ptr %0, i64 140
  store i32 0, ptr %173, align 4, !tbaa !58
  %174 = getelementptr inbounds i8, ptr %0, i64 144
  store i8 2, ptr %174, align 16, !tbaa !59
  br label %175

175:                                              ; preds = %.sink.split, %111
  %176 = getelementptr inbounds i8, ptr %0, i64 160
  store float 0x47EFFFFFE0000000, ptr %176, align 16, !tbaa !60
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %7) #8
  %177 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 0x47EFFFFFE0000000)
          to label %178 unwind label %183

178:                                              ; preds = %175
  %179 = extractvalue { double, double } %177, 0
  %180 = extractvalue { double, double } %177, 1
  invoke void @_ZN3JPH5Mat446sScaleENS_4Vec3E(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %7, double %179, double %180)
          to label %181 unwind label %183

181:                                              ; preds = %178
  %182 = getelementptr inbounds i8, ptr %0, i64 176
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(64) %182, ptr noundef nonnull align 16 dereferenceable(64) %7, i64 64, i1 false), !tbaa.struct !61
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %7) #8
  br label %185

183:                                              ; preds = %178, %175
  %184 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %7) #8
  br label %189

185:                                              ; preds = %181, %166
  %186 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %1)
          to label %187 unwind label %135

187:                                              ; preds = %185
  invoke void @_ZN3JPH20BodyCreationSettings8SetShapeEPKNS_5ShapeE(ptr noundef nonnull align 16 dereferenceable(256) %0, ptr noundef %186)
          to label %188 unwind label %135

188:                                              ; preds = %187
  ret void

189:                                              ; preds = %183, %168, %135, %133, %131, %129, %127
  %.pn52 = phi { ptr, i32 } [ %136, %135 ], [ %.pn48.pn.pn, %168 ], [ %184, %183 ], [ %134, %133 ], [ %132, %131 ], [ %130, %129 ], [ %128, %127 ]
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %0) #8
  resume { ptr, i32 } %.pn52
}

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i8 @_ZNK3JPH16MotionProperties16GetMotionQualityEv(ptr noundef nonnull align 16 dereferenceable(182)) local_unnamed_addr #6 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH4Body11GetFrictionEv(ptr noundef nonnull align 16 dereferenceable(122)) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH4Body14GetRestitutionEv(ptr noundef nonnull align 16 dereferenceable(122)) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH16MotionProperties16GetLinearDampingEv(ptr noundef nonnull align 16 dereferenceable(182)) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH16MotionProperties17GetAngularDampingEv(ptr noundef nonnull align 16 dereferenceable(182)) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH16MotionProperties20GetMaxLinearVelocityEv(ptr noundef nonnull align 16 dereferenceable(182)) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH16MotionProperties21GetMaxAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(182)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3JPH16MotionProperties27GetNumVelocityStepsOverrideEv(ptr noundef nonnull align 16 dereferenceable(182)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3JPH16MotionProperties27GetNumPositionStepsOverrideEv(ptr noundef nonnull align 16 dereferenceable(182)) local_unnamed_addr #6 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH16MotionProperties23GetInverseMassUncheckedEv(ptr noundef nonnull align 16 dereferenceable(182)) local_unnamed_addr #3 align 2

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN3JPH5Mat4414SetInversed3x3ERKS0_(ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(64)) local_unnamed_addr #7 align 2

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

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

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

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

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { 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 #4 = { 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 #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 = { 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"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { 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 = !{i64 2158443549}
!6 = !{!7, !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !16, i64 72}
!10 = !{!"_ZTSN3JPH4BodyE", !11, i64 0, !12, i64 16, !14, i64 32, !15, i64 64, !16, i64 72, !17, i64 80, !18, i64 88, !21, i64 104, !21, i64 108, !22, i64 112, !23, i64 116, !24, i64 118, !25, i64 119, !26, i64 120, !27, i64 121}
!11 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!12 = !{!"_ZTSN3JPH4QuatE", !13, i64 0}
!13 = !{!"_ZTSN3JPH4Vec4E", !7, i64 0}
!14 = !{!"_ZTSN3JPH5AABoxE", !11, i64 0, !11, i64 16}
!15 = !{!"_ZTSN3JPH8RefConstINS_5ShapeEEE", !16, i64 0}
!16 = !{!"any pointer", !7, i64 0}
!17 = !{!"long", !7, i64 0}
!18 = !{!"_ZTSN3JPH14CollisionGroupE", !19, i64 0, !20, i64 8, !20, i64 12}
!19 = !{!"_ZTSN3JPH8RefConstINS_11GroupFilterEEE", !16, i64 0}
!20 = !{!"int", !7, i64 0}
!21 = !{!"float", !7, i64 0}
!22 = !{!"_ZTSN3JPH6BodyIDE", !20, i64 0}
!23 = !{!"short", !7, i64 0}
!24 = !{!"_ZTSN3JPH9EBodyTypeE", !7, i64 0}
!25 = !{!"_ZTSN3JPH15BroadPhaseLayerE", !7, i64 0}
!26 = !{!"_ZTSN3JPH11EMotionTypeE", !7, i64 0}
!27 = !{!"_ZTSSt6atomicIhE", !28, i64 0}
!28 = !{!"_ZTSSt13__atomic_baseIhE", !7, i64 0}
!29 = !{!30, !23, i64 72}
!30 = !{!"_ZTSN3JPH20BodyCreationSettingsE", !11, i64 0, !12, i64 16, !11, i64 32, !11, i64 48, !17, i64 64, !23, i64 72, !18, i64 80, !26, i64 96, !31, i64 97, !32, i64 98, !32, i64 99, !32, i64 100, !32, i64 101, !32, i64 102, !33, i64 103, !32, i64 104, !32, i64 105, !21, i64 108, !21, i64 112, !21, i64 116, !21, i64 120, !21, i64 124, !21, i64 128, !21, i64 132, !20, i64 136, !20, i64 140, !34, i64 144, !21, i64 148, !35, i64 160, !37, i64 240, !15, i64 248}
!31 = !{!"_ZTSN3JPH12EAllowedDOFsE", !7, i64 0}
!32 = !{!"bool", !7, i64 0}
!33 = !{!"_ZTSN3JPH14EMotionQualityE", !7, i64 0}
!34 = !{!"_ZTSN3JPH23EOverrideMassPropertiesE", !7, i64 0}
!35 = !{!"_ZTSN3JPH14MassPropertiesE", !21, i64 0, !36, i64 16}
!36 = !{!"_ZTSN3JPH5Mat44E", !7, i64 0}
!37 = !{!"_ZTSN3JPH8RefConstINS_13ShapeSettingsEEE", !16, i64 0}
!38 = !{!10, !17, i64 80}
!39 = !{!30, !17, i64 64}
!40 = !{!30, !26, i64 96}
!41 = !{!30, !31, i64 97}
!42 = !{!30, !32, i64 98}
!43 = !{!30, !32, i64 99}
!44 = !{!30, !32, i64 100}
!45 = !{!30, !32, i64 101}
!46 = !{!30, !32, i64 102}
!47 = !{!30, !33, i64 103}
!48 = !{!30, !32, i64 104}
!49 = !{!30, !32, i64 105}
!50 = !{!30, !21, i64 108}
!51 = !{!30, !21, i64 112}
!52 = !{!30, !21, i64 116}
!53 = !{!30, !21, i64 120}
!54 = !{!30, !21, i64 124}
!55 = !{!30, !21, i64 128}
!56 = !{!30, !21, i64 132}
!57 = !{!30, !20, i64 136}
!58 = !{!30, !20, i64 140}
!59 = !{!30, !34, i64 144}
!60 = !{!30, !21, i64 160}
!61 = !{i64 0, i64 64, !6}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,SROAPass,SimplifyCFGPass,TailCallElimPass