; LLVM IR from jrouwe/JoltPhysics :: Jolt/Physics/Body (BodyManager)

; 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::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::Vec4" = type { %union.anon.6 }
%union.anon.6 = type { <4 x float> }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::BodyWithMotionProperties" = type { %"class.JPH::Body.base", [6 x i8], %"class.JPH::MotionProperties" }
%"class.JPH::Body.base" = 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.8" }>
%"class.JPH::AABox" = type { %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"class.JPH::RefConst" = type { ptr }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst.7", i32, i32 }
%"class.JPH::RefConst.7" = type { ptr }
%"class.JPH::BodyID" = type { i32 }
%"class.JPH::BroadPhaseLayer" = type { i8 }
%"struct.std::atomic.8" = type { %"struct.std::__atomic_base.9" }
%"struct.std::__atomic_base.9" = type { i8 }
%"class.JPH::MotionProperties" = type <{ %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::Float3", %"class.JPH::Float3", float, float, float, float, float, float, i32, i32, i8, i8, i8, i8, i8, [3 x i8], [3 x %"class.JPH::Sphere"], float, i8, i8, [10 x i8] }>
%"class.JPH::Float3" = type { float, float, float }
%"class.JPH::Sphere" = type { %"class.JPH::Float3", float }
%"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.8", [6 x i8] }>
%"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.10", %"class.JPH::RefConst" }
%"class.JPH::RefConst.10" = type { ptr }

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local noundef ptr @_ZNK3JPH11BodyManager12AllocateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(297) %0, ptr noundef nonnull align 16 dereferenceable(256) %1) #1 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca %"class.JPH::MassProperties", align 16
  %11 = alloca %"class.JPH::Vec3", align 16
  %12 = alloca %"class.JPH::Vec3", align 16
  %13 = alloca %"class.JPH::Vec3", align 16
  %14 = alloca %"class.JPH::Quat", align 16
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %15 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #8
  %16 = load ptr, ptr %4, align 8, !tbaa !5
  %17 = call noundef zeroext i1 @_ZNK3JPH20BodyCreationSettings17HasMassPropertiesEv(ptr noundef nonnull align 16 dereferenceable(256) %16)
  br i1 %17, label %18, label %30

18:                                               ; preds = %2
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #8
  %19 = call noundef ptr @_ZN3JPH24BodyWithMotionPropertiesnwEm(i64 noundef 320)
  invoke void @_ZN3JPH24BodyWithMotionPropertiesC2Ev(ptr noundef nonnull align 16 dereferenceable(320) %19)
          to label %20 unwind label %26

20:                                               ; preds = %18
  store ptr %19, ptr %6, align 8, !tbaa !5
  %21 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %21, ptr %5, align 8, !tbaa !5
  %22 = load ptr, ptr %6, align 8, !tbaa !5
  %23 = getelementptr inbounds %"class.JPH::BodyWithMotionProperties", ptr %22, i32 0, i32 2
  %24 = load ptr, ptr %5, align 8, !tbaa !5
  %25 = getelementptr inbounds %"class.JPH::Body", ptr %24, i32 0, i32 4
  store ptr %23, ptr %25, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #8
  br label %37

26:                                               ; preds = %18
  %27 = landingpad { ptr, i32 }
          cleanup
  %28 = extractvalue { ptr, i32 } %27, 0
  store ptr %28, ptr %7, align 8
  %29 = extractvalue { ptr, i32 } %27, 1
  store i32 %29, ptr %8, align 4
  call void @_ZN3JPH24BodyWithMotionPropertiesdlEPv(ptr noundef %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #8
  br label %202

30:                                               ; preds = %2
  %31 = call noundef ptr @_ZN3JPH4BodynwEm(i64 noundef 128)
  invoke void @_ZN3JPH4BodyC2Ev(ptr noundef nonnull align 16 dereferenceable(122) %31)
          to label %32 unwind label %33

32:                                               ; preds = %30
  store ptr %31, ptr %5, align 8, !tbaa !5
  br label %37

33:                                               ; preds = %30
  %34 = landingpad { ptr, i32 }
          cleanup
  %35 = extractvalue { ptr, i32 } %34, 0
  store ptr %35, ptr %7, align 8
  %36 = extractvalue { ptr, i32 } %34, 1
  store i32 %36, ptr %8, align 4
  call void @_ZN3JPH4BodydlEPv(ptr noundef %31) #8
  br label %202

37:                                               ; preds = %32, %20
  %38 = load ptr, ptr %5, align 8, !tbaa !5
  %39 = getelementptr inbounds %"class.JPH::Body", ptr %38, i32 0, i32 11
  store i8 0, ptr %39, align 2, !tbaa !28
  %40 = load ptr, ptr %4, align 8, !tbaa !5
  %41 = call noundef ptr @_ZNK3JPH20BodyCreationSettings8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(256) %40)
  %42 = load ptr, ptr %5, align 8, !tbaa !5
  %43 = getelementptr inbounds %"class.JPH::Body", ptr %42, i32 0, i32 3
  %44 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSEPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %43, ptr noundef %41)
  %45 = load ptr, ptr %4, align 8, !tbaa !5
  %46 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %45, i32 0, i32 4
  %47 = load i64, ptr %46, align 16, !tbaa !29
  %48 = load ptr, ptr %5, align 8, !tbaa !5
  %49 = getelementptr inbounds %"class.JPH::Body", ptr %48, i32 0, i32 5
  store i64 %47, ptr %49, align 16, !tbaa !38
  %50 = load ptr, ptr %5, align 8, !tbaa !5
  %51 = load ptr, ptr %4, align 8, !tbaa !5
  %52 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %51, i32 0, i32 17
  %53 = load float, ptr %52, align 4, !tbaa !39
  call void @_ZN3JPH4Body11SetFrictionEf(ptr noundef nonnull align 16 dereferenceable(122) %50, float noundef %53)
  %54 = load ptr, ptr %5, align 8, !tbaa !5
  %55 = load ptr, ptr %4, align 8, !tbaa !5
  %56 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %55, i32 0, i32 18
  %57 = load float, ptr %56, align 16, !tbaa !40
  call void @_ZN3JPH4Body14SetRestitutionEf(ptr noundef nonnull align 16 dereferenceable(122) %54, float noundef %57)
  %58 = load ptr, ptr %4, align 8, !tbaa !5
  %59 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %58, i32 0, i32 7
  %60 = load i8, ptr %59, align 16, !tbaa !41
  %61 = load ptr, ptr %5, align 8, !tbaa !5
  %62 = getelementptr inbounds %"class.JPH::Body", ptr %61, i32 0, i32 13
  store i8 %60, ptr %62, align 8, !tbaa !42
  %63 = load ptr, ptr %4, align 8, !tbaa !5
  %64 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %63, i32 0, i32 10
  %65 = load i8, ptr %64, align 1, !tbaa !43, !range !44, !noundef !45
  %66 = trunc i8 %65 to i1
  br i1 %66, label %67, label %69

67:                                               ; preds = %37
  %68 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN3JPH4Body11SetIsSensorEb(ptr noundef nonnull align 16 dereferenceable(122) %68, i1 noundef zeroext true)
  br label %69

69:                                               ; preds = %67, %37
  %70 = load ptr, ptr %4, align 8, !tbaa !5
  %71 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %70, i32 0, i32 11
  %72 = load i8, ptr %71, align 4, !tbaa !46, !range !44, !noundef !45
  %73 = trunc i8 %72 to i1
  br i1 %73, label %74, label %76

74:                                               ; preds = %69
  %75 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN3JPH4Body31SetCollideKinematicVsNonDynamicEb(ptr noundef nonnull align 16 dereferenceable(122) %75, i1 noundef zeroext true)
  br label %76

76:                                               ; preds = %74, %69
  %77 = load ptr, ptr %4, align 8, !tbaa !5
  %78 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %77, i32 0, i32 12
  %79 = load i8, ptr %78, align 1, !tbaa !47, !range !44, !noundef !45
  %80 = trunc i8 %79 to i1
  br i1 %80, label %81, label %83

81:                                               ; preds = %76
  %82 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN3JPH4Body23SetUseManifoldReductionEb(ptr noundef nonnull align 16 dereferenceable(122) %82, i1 noundef zeroext true)
  br label %83

83:                                               ; preds = %81, %76
  %84 = load ptr, ptr %4, align 8, !tbaa !5
  %85 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %84, i32 0, i32 13
  %86 = load i8, ptr %85, align 2, !tbaa !48, !range !44, !noundef !45
  %87 = trunc i8 %86 to i1
  br i1 %87, label %88, label %90

88:                                               ; preds = %83
  %89 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN3JPH4Body23SetApplyGyroscopicForceEb(ptr noundef nonnull align 16 dereferenceable(122) %89, i1 noundef zeroext true)
  br label %90

90:                                               ; preds = %88, %83
  %91 = load ptr, ptr %4, align 8, !tbaa !5
  %92 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %91, i32 0, i32 15
  %93 = load i8, ptr %92, align 8, !tbaa !49, !range !44, !noundef !45
  %94 = trunc i8 %93 to i1
  br i1 %94, label %95, label %97

95:                                               ; preds = %90
  %96 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN3JPH4Body30SetEnhancedInternalEdgeRemovalEb(ptr noundef nonnull align 16 dereferenceable(122) %96, i1 noundef zeroext true)
  br label %97

97:                                               ; preds = %95, %90
  %98 = load ptr, ptr %5, align 8, !tbaa !5
  %99 = load ptr, ptr %4, align 8, !tbaa !5
  %100 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %99, i32 0, i32 5
  %101 = load i16, ptr %100, align 8, !tbaa !50
  call void @_ZNK3JPH11BodyManager26SetBodyObjectLayerInternalERNS_4BodyEt(ptr noundef nonnull align 8 dereferenceable(297) %15, ptr noundef nonnull align 16 dereferenceable(122) %98, i16 noundef zeroext %101)
  %102 = load ptr, ptr %4, align 8, !tbaa !5
  %103 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %102, i32 0, i32 5
  %104 = load i16, ptr %103, align 8, !tbaa !50
  %105 = load ptr, ptr %5, align 8, !tbaa !5
  %106 = getelementptr inbounds %"class.JPH::Body", ptr %105, i32 0, i32 10
  store i16 %104, ptr %106, align 4, !tbaa !51
  %107 = load ptr, ptr %4, align 8, !tbaa !5
  %108 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %107, i32 0, i32 6
  %109 = load ptr, ptr %5, align 8, !tbaa !5
  %110 = getelementptr inbounds %"class.JPH::Body", ptr %109, i32 0, i32 6
  %111 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN3JPH14CollisionGroupaSERKS0_(ptr noundef nonnull align 8 dereferenceable(16) %110, ptr noundef nonnull align 8 dereferenceable(16) %108)
  %112 = load ptr, ptr %4, align 8, !tbaa !5
  %113 = call noundef zeroext i1 @_ZNK3JPH20BodyCreationSettings17HasMassPropertiesEv(ptr noundef nonnull align 16 dereferenceable(256) %112)
  br i1 %113, label %114, label %187

114:                                              ; preds = %97
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #8
  %115 = load ptr, ptr %5, align 8, !tbaa !5
  %116 = getelementptr inbounds %"class.JPH::Body", ptr %115, i32 0, i32 4
  %117 = load ptr, ptr %116, align 8, !tbaa !9
  store ptr %117, ptr %9, align 8, !tbaa !5
  %118 = load ptr, ptr %9, align 8, !tbaa !5
  %119 = load ptr, ptr %4, align 8, !tbaa !5
  %120 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %119, i32 0, i32 19
  %121 = load float, ptr %120, align 4, !tbaa !52
  call void @_ZN3JPH16MotionProperties16SetLinearDampingEf(ptr noundef nonnull align 16 dereferenceable(182) %118, float noundef %121)
  %122 = load ptr, ptr %9, align 8, !tbaa !5
  %123 = load ptr, ptr %4, align 8, !tbaa !5
  %124 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %123, i32 0, i32 20
  %125 = load float, ptr %124, align 8, !tbaa !53
  call void @_ZN3JPH16MotionProperties17SetAngularDampingEf(ptr noundef nonnull align 16 dereferenceable(182) %122, float noundef %125)
  %126 = load ptr, ptr %9, align 8, !tbaa !5
  %127 = load ptr, ptr %4, align 8, !tbaa !5
  %128 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %127, i32 0, i32 21
  %129 = load float, ptr %128, align 4, !tbaa !54
  call void @_ZN3JPH16MotionProperties20SetMaxLinearVelocityEf(ptr noundef nonnull align 16 dereferenceable(182) %126, float noundef %129)
  %130 = load ptr, ptr %9, align 8, !tbaa !5
  %131 = load ptr, ptr %4, align 8, !tbaa !5
  %132 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %131, i32 0, i32 22
  %133 = load float, ptr %132, align 16, !tbaa !55
  call void @_ZN3JPH16MotionProperties21SetMaxAngularVelocityEf(ptr noundef nonnull align 16 dereferenceable(182) %130, float noundef %133)
  %134 = load ptr, ptr %9, align 8, !tbaa !5
  %135 = load ptr, ptr %4, align 8, !tbaa !5
  %136 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %135, i32 0, i32 8
  %137 = load i8, ptr %136, align 1, !tbaa !56
  call void @llvm.lifetime.start.p0(i64 80, ptr %10) #8
  %138 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZNK3JPH20BodyCreationSettings17GetMassPropertiesEv(ptr dead_on_unwind writable sret(%"class.JPH::MassProperties") align 16 %10, ptr noundef nonnull align 16 dereferenceable(256) %138)
  call void @_ZN3JPH16MotionProperties17SetMassPropertiesENS_12EAllowedDOFsERKNS_14MassPropertiesE(ptr noundef nonnull align 16 dereferenceable(182) %134, i8 noundef zeroext %137, ptr noundef nonnull align 16 dereferenceable(80) %10)
  call void @llvm.lifetime.end.p0(i64 80, ptr %10) #8
  %139 = load ptr, ptr %9, align 8, !tbaa !5
  %140 = load ptr, ptr %4, align 8, !tbaa !5
  %141 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %140, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %11, ptr align 16 %141, i64 16, i1 false), !tbaa.struct !57
  %142 = getelementptr inbounds { double, double }, ptr %11, i32 0, i32 0
  %143 = load double, ptr %142, align 16
  %144 = getelementptr inbounds { double, double }, ptr %11, i32 0, i32 1
  %145 = load double, ptr %144, align 8
  call void @_ZN3JPH16MotionProperties17SetLinearVelocityENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(182) %139, double %143, double %145)
  %146 = load ptr, ptr %9, align 8, !tbaa !5
  %147 = load ptr, ptr %4, align 8, !tbaa !5
  %148 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %147, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %12, ptr align 16 %148, i64 16, i1 false), !tbaa.struct !57
  %149 = getelementptr inbounds { double, double }, ptr %12, i32 0, i32 0
  %150 = load double, ptr %149, align 16
  %151 = getelementptr inbounds { double, double }, ptr %12, i32 0, i32 1
  %152 = load double, ptr %151, align 8
  call void @_ZN3JPH16MotionProperties18SetAngularVelocityENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(182) %146, double %150, double %152)
  %153 = load ptr, ptr %9, align 8, !tbaa !5
  %154 = load ptr, ptr %4, align 8, !tbaa !5
  %155 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %154, i32 0, i32 23
  %156 = load float, ptr %155, align 4, !tbaa !59
  call void @_ZN3JPH16MotionProperties16SetGravityFactorEf(ptr noundef nonnull align 16 dereferenceable(182) %153, float noundef %156)
  %157 = load ptr, ptr %9, align 8, !tbaa !5
  %158 = load ptr, ptr %4, align 8, !tbaa !5
  %159 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %158, i32 0, i32 24
  %160 = load i32, ptr %159, align 8, !tbaa !60
  call void @_ZN3JPH16MotionProperties27SetNumVelocityStepsOverrideEj(ptr noundef nonnull align 16 dereferenceable(182) %157, i32 noundef %160)
  %161 = load ptr, ptr %9, align 8, !tbaa !5
  %162 = load ptr, ptr %4, align 8, !tbaa !5
  %163 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %162, i32 0, i32 25
  %164 = load i32, ptr %163, align 4, !tbaa !61
  call void @_ZN3JPH16MotionProperties27SetNumPositionStepsOverrideEj(ptr noundef nonnull align 16 dereferenceable(182) %161, i32 noundef %164)
  %165 = load ptr, ptr %4, align 8, !tbaa !5
  %166 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %165, i32 0, i32 14
  %167 = load i8, ptr %166, align 1, !tbaa !62
  %168 = load ptr, ptr %9, align 8, !tbaa !5
  %169 = getelementptr inbounds %"class.JPH::MotionProperties", ptr %168, i32 0, i32 14
  store i8 %167, ptr %169, align 8, !tbaa !63
  %170 = load ptr, ptr %4, align 8, !tbaa !5
  %171 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %170, i32 0, i32 16
  %172 = load i8, ptr %171, align 1, !tbaa !66, !range !44, !noundef !45
  %173 = trunc i8 %172 to i1
  %174 = load ptr, ptr %9, align 8, !tbaa !5
  %175 = getelementptr inbounds %"class.JPH::MotionProperties", ptr %174, i32 0, i32 15
  %176 = zext i1 %173 to i8
  store i8 %176, ptr %175, align 1, !tbaa !67
  %177 = load ptr, ptr %5, align 8, !tbaa !5
  %178 = getelementptr inbounds %"class.JPH::Body", ptr %177, i32 0, i32 11
  %179 = load i8, ptr %178, align 2, !tbaa !28
  %180 = load ptr, ptr %9, align 8, !tbaa !5
  %181 = getelementptr inbounds %"class.JPH::MotionProperties", ptr %180, i32 0, i32 22
  store i8 %179, ptr %181, align 4, !tbaa !68
  %182 = load ptr, ptr %5, align 8, !tbaa !5
  %183 = getelementptr inbounds %"class.JPH::Body", ptr %182, i32 0, i32 13
  %184 = load i8, ptr %183, align 8, !tbaa !42
  %185 = load ptr, ptr %9, align 8, !tbaa !5
  %186 = getelementptr inbounds %"class.JPH::MotionProperties", ptr %185, i32 0, i32 23
  store i8 %184, ptr %186, align 1, !tbaa !69
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #8
  br label %187

187:                                              ; preds = %114, %97
  %188 = load ptr, ptr %5, align 8, !tbaa !5
  %189 = load ptr, ptr %4, align 8, !tbaa !5
  %190 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %189, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %13, ptr align 16 %190, i64 16, i1 false), !tbaa.struct !57
  %191 = load ptr, ptr %4, align 8, !tbaa !5
  %192 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %191, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %14, ptr align 16 %192, i64 16, i1 false), !tbaa.struct !57
  %193 = getelementptr inbounds { double, double }, ptr %13, i32 0, i32 0
  %194 = load double, ptr %193, align 16
  %195 = getelementptr inbounds { double, double }, ptr %13, i32 0, i32 1
  %196 = load double, ptr %195, align 8
  %197 = getelementptr inbounds { double, double }, ptr %14, i32 0, i32 0
  %198 = load double, ptr %197, align 16
  %199 = getelementptr inbounds { double, double }, ptr %14, i32 0, i32 1
  %200 = load double, ptr %199, align 8
  call void @_ZN3JPH4Body30SetPositionAndRotationInternalENS_4Vec3ENS_4QuatEb(ptr noundef nonnull align 16 dereferenceable(122) %188, double %194, double %196, double %198, double %200, i1 noundef zeroext true)
  %201 = load ptr, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #8
  ret ptr %201

202:                                              ; preds = %33, %26
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #8
  br label %203

203:                                              ; preds = %202
  %204 = load ptr, ptr %7, align 8
  %205 = load i32, ptr %8, align 4
  %206 = insertvalue { ptr, i32 } poison, ptr %204, 0
  %207 = insertvalue { ptr, i32 } %206, i32 %205, 1
  resume { ptr, i32 } %207
}

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH24BodyWithMotionPropertiesC2Ev(ptr noundef nonnull align 16 dereferenceable(320)) unnamed_addr #4 align 2

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

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

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

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

declare noundef ptr @_ZNK3JPH20BodyCreationSettings8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(256)) #6

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH4Body11SetIsSensorEb(ptr noundef nonnull align 16 dereferenceable(122), i1 noundef zeroext) #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH4Body31SetCollideKinematicVsNonDynamicEb(ptr noundef nonnull align 16 dereferenceable(122), i1 noundef zeroext) #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH4Body23SetUseManifoldReductionEb(ptr noundef nonnull align 16 dereferenceable(122), i1 noundef zeroext) #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH4Body23SetApplyGyroscopicForceEb(ptr noundef nonnull align 16 dereferenceable(122), i1 noundef zeroext) #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH4Body30SetEnhancedInternalEdgeRemovalEb(ptr noundef nonnull align 16 dereferenceable(122), i1 noundef zeroext) #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK3JPH11BodyManager26SetBodyObjectLayerInternalERNS_4BodyEt(ptr noundef nonnull align 8 dereferenceable(297), ptr noundef nonnull align 16 dereferenceable(122), i16 noundef zeroext) #4 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: mustprogress uwtable
declare dso_local void @_ZN3JPH16MotionProperties16SetLinearDampingEf(ptr noundef nonnull align 16 dereferenceable(182), float noundef) #1 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH16MotionProperties20SetMaxLinearVelocityEf(ptr noundef nonnull align 16 dereferenceable(182), float noundef) #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH16MotionProperties21SetMaxAngularVelocityEf(ptr noundef nonnull align 16 dereferenceable(182), float noundef) #4 align 2

declare void @_ZN3JPH16MotionProperties17SetMassPropertiesENS_12EAllowedDOFsERKNS_14MassPropertiesE(ptr noundef nonnull align 16 dereferenceable(182), i8 noundef zeroext, ptr noundef nonnull align 16 dereferenceable(80)) #6

declare void @_ZNK3JPH20BodyCreationSettings17GetMassPropertiesEv(ptr dead_on_unwind writable sret(%"class.JPH::MassProperties") align 16, ptr noundef nonnull align 16 dereferenceable(256)) #6

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH16MotionProperties17SetLinearVelocityENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(182), double, double) #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) #7

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

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

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

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

declare void @_ZN3JPH4Body30SetPositionAndRotationInternalENS_4Vec3ENS_4QuatEb(ptr noundef nonnull align 16 dereferenceable(122), double, double, double, double, i1 noundef zeroext) #6

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 = { alwaysinline mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { "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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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 = !{!10, !6, i64 72}
!10 = !{!"_ZTSN3JPH4BodyE", !11, i64 0, !12, i64 16, !14, i64 32, !15, i64 64, !6, i64 72, !16, i64 80, !17, i64 88, !20, i64 104, !20, i64 108, !21, i64 112, !22, i64 116, !23, i64 118, !24, i64 119, !25, i64 120, !26, 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", !6, i64 0}
!16 = !{!"long", !7, i64 0}
!17 = !{!"_ZTSN3JPH14CollisionGroupE", !18, i64 0, !19, i64 8, !19, i64 12}
!18 = !{!"_ZTSN3JPH8RefConstINS_11GroupFilterEEE", !6, i64 0}
!19 = !{!"int", !7, i64 0}
!20 = !{!"float", !7, i64 0}
!21 = !{!"_ZTSN3JPH6BodyIDE", !19, i64 0}
!22 = !{!"short", !7, i64 0}
!23 = !{!"_ZTSN3JPH9EBodyTypeE", !7, i64 0}
!24 = !{!"_ZTSN3JPH15BroadPhaseLayerE", !7, i64 0}
!25 = !{!"_ZTSN3JPH11EMotionTypeE", !7, i64 0}
!26 = !{!"_ZTSSt6atomicIhE", !27, i64 0}
!27 = !{!"_ZTSSt13__atomic_baseIhE", !7, i64 0}
!28 = !{!10, !23, i64 118}
!29 = !{!30, !16, i64 64}
!30 = !{!"_ZTSN3JPH20BodyCreationSettingsE", !11, i64 0, !12, i64 16, !11, i64 32, !11, i64 48, !16, i64 64, !22, i64 72, !17, i64 80, !25, 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, !20, i64 108, !20, i64 112, !20, i64 116, !20, i64 120, !20, i64 124, !20, i64 128, !20, i64 132, !19, i64 136, !19, i64 140, !34, i64 144, !20, 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", !20, i64 0, !36, i64 16}
!36 = !{!"_ZTSN3JPH5Mat44E", !7, i64 0}
!37 = !{!"_ZTSN3JPH8RefConstINS_13ShapeSettingsEEE", !6, i64 0}
!38 = !{!10, !16, i64 80}
!39 = !{!30, !20, i64 108}
!40 = !{!30, !20, i64 112}
!41 = !{!30, !25, i64 96}
!42 = !{!10, !25, i64 120}
!43 = !{!30, !32, i64 99}
!44 = !{i8 0, i8 2}
!45 = !{}
!46 = !{!30, !32, i64 100}
!47 = !{!30, !32, i64 101}
!48 = !{!30, !32, i64 102}
!49 = !{!30, !32, i64 104}
!50 = !{!30, !22, i64 72}
!51 = !{!10, !22, i64 116}
!52 = !{!30, !20, i64 116}
!53 = !{!30, !20, i64 120}
!54 = !{!30, !20, i64 124}
!55 = !{!30, !20, i64 128}
!56 = !{!30, !31, i64 97}
!57 = !{i64 0, i64 16, !58}
!58 = !{!7, !7, i64 0}
!59 = !{!30, !20, i64 132}
!60 = !{!30, !19, i64 136}
!61 = !{!30, !19, i64 140}
!62 = !{!30, !33, i64 103}
!63 = !{!64, !33, i64 120}
!64 = !{!"_ZTSN3JPH16MotionPropertiesE", !11, i64 0, !11, i64 16, !11, i64 32, !12, i64 48, !65, i64 64, !65, i64 76, !20, i64 88, !20, i64 92, !20, i64 96, !20, i64 100, !20, i64 104, !20, i64 108, !19, i64 112, !19, i64 116, !33, i64 120, !32, i64 121, !31, i64 122, !7, i64 123, !7, i64 124, !7, i64 128, !20, i64 176, !23, i64 180, !25, i64 181}
!65 = !{!"_ZTSN3JPH6Float3E", !20, i64 0, !20, i64 4, !20, i64 8}
!66 = !{!30, !32, i64 105}
!67 = !{!64, !32, i64 121}
!68 = !{!64, !23, i64 180}
!69 = !{!64, !25, i64 181}


; 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::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::Vec4" = type { %union.anon.6 }
%union.anon.6 = type { <4 x float> }

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local noundef ptr @_ZNK3JPH11BodyManager12AllocateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(297) %0, ptr noundef nonnull align 16 dereferenceable(256) %1) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.JPH::MassProperties", align 16
  %4 = tail call noundef zeroext i1 @_ZNK3JPH20BodyCreationSettings17HasMassPropertiesEv(ptr noundef nonnull align 16 dereferenceable(256) %1)
  br i1 %4, label %5, label %12

5:                                                ; preds = %2
  %6 = tail call noundef ptr @_ZN3JPH24BodyWithMotionPropertiesnwEm(i64 noundef 320)
  invoke void @_ZN3JPH24BodyWithMotionPropertiesC2Ev(ptr noundef nonnull align 16 dereferenceable(320) %6)
          to label %7 unwind label %10

7:                                                ; preds = %5
  %8 = getelementptr inbounds i8, ptr %6, i64 128
  %9 = getelementptr inbounds i8, ptr %6, i64 72
  store ptr %8, ptr %9, align 8, !tbaa !5
  br label %16

10:                                               ; preds = %5
  %11 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZN3JPH24BodyWithMotionPropertiesdlEPv(ptr noundef %6) #7
  br label %97

12:                                               ; preds = %2
  %13 = tail call noundef ptr @_ZN3JPH4BodynwEm(i64 noundef 128)
  invoke void @_ZN3JPH4BodyC2Ev(ptr noundef nonnull align 16 dereferenceable(122) %13)
          to label %16 unwind label %14

14:                                               ; preds = %12
  %15 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZN3JPH4BodydlEPv(ptr noundef %13) #7
  br label %97

16:                                               ; preds = %12, %7
  %.0 = phi ptr [ %6, %7 ], [ %13, %12 ]
  %17 = getelementptr inbounds i8, ptr %.0, i64 118
  store i8 0, ptr %17, align 2, !tbaa !27
  %18 = tail call noundef ptr @_ZNK3JPH20BodyCreationSettings8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(256) %1)
  %19 = getelementptr inbounds i8, ptr %.0, i64 64
  %20 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_5ShapeEEaSEPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %19, ptr noundef %18)
  %21 = getelementptr inbounds i8, ptr %1, i64 64
  %22 = load i64, ptr %21, align 16, !tbaa !28
  %23 = getelementptr inbounds i8, ptr %.0, i64 80
  store i64 %22, ptr %23, align 16, !tbaa !37
  %24 = getelementptr inbounds i8, ptr %1, i64 108
  %25 = load float, ptr %24, align 4, !tbaa !38
  tail call void @_ZN3JPH4Body11SetFrictionEf(ptr noundef nonnull align 16 dereferenceable(122) %.0, float noundef %25)
  %26 = getelementptr inbounds i8, ptr %1, i64 112
  %27 = load float, ptr %26, align 16, !tbaa !39
  tail call void @_ZN3JPH4Body14SetRestitutionEf(ptr noundef nonnull align 16 dereferenceable(122) %.0, float noundef %27)
  %28 = getelementptr inbounds i8, ptr %1, i64 96
  %29 = load i8, ptr %28, align 16, !tbaa !40
  %30 = getelementptr inbounds i8, ptr %.0, i64 120
  store i8 %29, ptr %30, align 8, !tbaa !41
  %31 = getelementptr inbounds i8, ptr %1, i64 99
  %32 = load i8, ptr %31, align 1, !tbaa !42, !range !43, !noundef !44
  %33 = trunc nuw i8 %32 to i1
  br i1 %33, label %34, label %35

34:                                               ; preds = %16
  tail call void @_ZN3JPH4Body11SetIsSensorEb(ptr noundef nonnull align 16 dereferenceable(122) %.0, i1 noundef zeroext true)
  br label %35

35:                                               ; preds = %34, %16
  %36 = getelementptr inbounds i8, ptr %1, i64 100
  %37 = load i8, ptr %36, align 4, !tbaa !45, !range !43, !noundef !44
  %38 = trunc nuw i8 %37 to i1
  br i1 %38, label %39, label %40

39:                                               ; preds = %35
  tail call void @_ZN3JPH4Body31SetCollideKinematicVsNonDynamicEb(ptr noundef nonnull align 16 dereferenceable(122) %.0, i1 noundef zeroext true)
  br label %40

40:                                               ; preds = %39, %35
  %41 = getelementptr inbounds i8, ptr %1, i64 101
  %42 = load i8, ptr %41, align 1, !tbaa !46, !range !43, !noundef !44
  %43 = trunc nuw i8 %42 to i1
  br i1 %43, label %44, label %45

44:                                               ; preds = %40
  tail call void @_ZN3JPH4Body23SetUseManifoldReductionEb(ptr noundef nonnull align 16 dereferenceable(122) %.0, i1 noundef zeroext true)
  br label %45

45:                                               ; preds = %44, %40
  %46 = getelementptr inbounds i8, ptr %1, i64 102
  %47 = load i8, ptr %46, align 2, !tbaa !47, !range !43, !noundef !44
  %48 = trunc nuw i8 %47 to i1
  br i1 %48, label %49, label %50

49:                                               ; preds = %45
  tail call void @_ZN3JPH4Body23SetApplyGyroscopicForceEb(ptr noundef nonnull align 16 dereferenceable(122) %.0, i1 noundef zeroext true)
  br label %50

50:                                               ; preds = %49, %45
  %51 = getelementptr inbounds i8, ptr %1, i64 104
  %52 = load i8, ptr %51, align 8, !tbaa !48, !range !43, !noundef !44
  %53 = trunc nuw i8 %52 to i1
  br i1 %53, label %54, label %55

54:                                               ; preds = %50
  tail call void @_ZN3JPH4Body30SetEnhancedInternalEdgeRemovalEb(ptr noundef nonnull align 16 dereferenceable(122) %.0, i1 noundef zeroext true)
  br label %55

55:                                               ; preds = %54, %50
  %56 = getelementptr inbounds i8, ptr %1, i64 72
  %57 = load i16, ptr %56, align 8, !tbaa !49
  tail call void @_ZNK3JPH11BodyManager26SetBodyObjectLayerInternalERNS_4BodyEt(ptr noundef nonnull align 8 dereferenceable(297) %0, ptr noundef nonnull align 16 dereferenceable(122) %.0, i16 noundef zeroext %57)
  %58 = load i16, ptr %56, align 8, !tbaa !49
  %59 = getelementptr inbounds i8, ptr %.0, i64 116
  store i16 %58, ptr %59, align 4, !tbaa !50
  %60 = getelementptr inbounds i8, ptr %1, i64 80
  %61 = getelementptr inbounds i8, ptr %.0, i64 88
  %62 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZN3JPH14CollisionGroupaSERKS0_(ptr noundef nonnull align 8 dereferenceable(16) %61, ptr noundef nonnull align 8 dereferenceable(16) %60)
  %63 = tail call noundef zeroext i1 @_ZNK3JPH20BodyCreationSettings17HasMassPropertiesEv(ptr noundef nonnull align 16 dereferenceable(256) %1)
  br i1 %63, label %64, label %95

64:                                               ; preds = %55
  %65 = getelementptr inbounds i8, ptr %.0, i64 72
  %66 = load ptr, ptr %65, align 8, !tbaa !5
  %67 = getelementptr inbounds i8, ptr %1, i64 116
  %68 = load float, ptr %67, align 4, !tbaa !51
  tail call void @_ZN3JPH16MotionProperties16SetLinearDampingEf(ptr noundef nonnull align 16 dereferenceable(182) %66, float noundef %68)
  %69 = getelementptr inbounds i8, ptr %1, i64 120
  %70 = load float, ptr %69, align 8, !tbaa !52
  tail call void @_ZN3JPH16MotionProperties17SetAngularDampingEf(ptr noundef nonnull align 16 dereferenceable(182) %66, float noundef %70)
  %71 = getelementptr inbounds i8, ptr %1, i64 124
  %72 = load float, ptr %71, align 4, !tbaa !53
  tail call void @_ZN3JPH16MotionProperties20SetMaxLinearVelocityEf(ptr noundef nonnull align 16 dereferenceable(182) %66, float noundef %72)
  %73 = getelementptr inbounds i8, ptr %1, i64 128
  %74 = load float, ptr %73, align 16, !tbaa !54
  tail call void @_ZN3JPH16MotionProperties21SetMaxAngularVelocityEf(ptr noundef nonnull align 16 dereferenceable(182) %66, float noundef %74)
  %75 = getelementptr inbounds i8, ptr %1, i64 97
  %76 = load i8, ptr %75, align 1, !tbaa !55
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %3) #7
  call void @_ZNK3JPH20BodyCreationSettings17GetMassPropertiesEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::MassProperties") align 16 %3, ptr noundef nonnull align 16 dereferenceable(256) %1)
  call void @_ZN3JPH16MotionProperties17SetMassPropertiesENS_12EAllowedDOFsERKNS_14MassPropertiesE(ptr noundef nonnull align 16 dereferenceable(182) %66, i8 noundef zeroext %76, ptr noundef nonnull align 16 dereferenceable(80) %3)
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %3) #7
  %77 = getelementptr inbounds i8, ptr %1, i64 32
  %.sroa.05.0.copyload = load double, ptr %77, align 16
  %.sroa.26.0..sroa_idx = getelementptr inbounds i8, ptr %1, i64 40
  %.sroa.26.0.copyload = load double, ptr %.sroa.26.0..sroa_idx, align 8, !tbaa !56
  call void @_ZN3JPH16MotionProperties17SetLinearVelocityENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(182) %66, double %.sroa.05.0.copyload, double %.sroa.26.0.copyload)
  %78 = getelementptr inbounds i8, ptr %1, i64 48
  %.sroa.03.0.copyload = load double, ptr %78, align 16
  %.sroa.24.0..sroa_idx = getelementptr inbounds i8, ptr %1, i64 56
  %.sroa.24.0.copyload = load double, ptr %.sroa.24.0..sroa_idx, align 8, !tbaa !56
  call void @_ZN3JPH16MotionProperties18SetAngularVelocityENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(182) %66, double %.sroa.03.0.copyload, double %.sroa.24.0.copyload)
  %79 = getelementptr inbounds i8, ptr %1, i64 132
  %80 = load float, ptr %79, align 4, !tbaa !57
  call void @_ZN3JPH16MotionProperties16SetGravityFactorEf(ptr noundef nonnull align 16 dereferenceable(182) %66, float noundef %80)
  %81 = getelementptr inbounds i8, ptr %1, i64 136
  %82 = load i32, ptr %81, align 8, !tbaa !58
  call void @_ZN3JPH16MotionProperties27SetNumVelocityStepsOverrideEj(ptr noundef nonnull align 16 dereferenceable(182) %66, i32 noundef %82)
  %83 = getelementptr inbounds i8, ptr %1, i64 140
  %84 = load i32, ptr %83, align 4, !tbaa !59
  call void @_ZN3JPH16MotionProperties27SetNumPositionStepsOverrideEj(ptr noundef nonnull align 16 dereferenceable(182) %66, i32 noundef %84)
  %85 = getelementptr inbounds i8, ptr %1, i64 103
  %86 = load i8, ptr %85, align 1, !tbaa !60
  %87 = getelementptr inbounds i8, ptr %66, i64 120
  store i8 %86, ptr %87, align 8, !tbaa !61
  %88 = getelementptr inbounds i8, ptr %1, i64 105
  %89 = load i8, ptr %88, align 1, !tbaa !64, !range !43, !noundef !44
  %90 = getelementptr inbounds i8, ptr %66, i64 121
  store i8 %89, ptr %90, align 1, !tbaa !65
  %91 = load i8, ptr %17, align 2, !tbaa !27
  %92 = getelementptr inbounds i8, ptr %66, i64 180
  store i8 %91, ptr %92, align 4, !tbaa !66
  %93 = load i8, ptr %30, align 8, !tbaa !41
  %94 = getelementptr inbounds i8, ptr %66, i64 181
  store i8 %93, ptr %94, align 1, !tbaa !67
  br label %95

95:                                               ; preds = %64, %55
  %.sroa.01.0.copyload = load double, ptr %1, align 16
  %.sroa.22.0..sroa_idx = getelementptr inbounds i8, ptr %1, i64 8
  %.sroa.22.0.copyload = load double, ptr %.sroa.22.0..sroa_idx, align 8, !tbaa !56
  %96 = getelementptr inbounds i8, ptr %1, i64 16
  %.sroa.0.0.copyload = load double, ptr %96, align 16
  %.sroa.2.0..sroa_idx = getelementptr inbounds i8, ptr %1, i64 24
  %.sroa.2.0.copyload = load double, ptr %.sroa.2.0..sroa_idx, align 8, !tbaa !56
  call void @_ZN3JPH4Body30SetPositionAndRotationInternalENS_4Vec3ENS_4QuatEb(ptr noundef nonnull align 16 dereferenceable(122) %.0, double %.sroa.01.0.copyload, double %.sroa.22.0.copyload, double %.sroa.0.0.copyload, double %.sroa.2.0.copyload, i1 noundef zeroext true)
  ret ptr %.0

97:                                               ; preds = %14, %10
  %.pn = phi { ptr, i32 } [ %11, %10 ], [ %15, %14 ]
  resume { ptr, i32 } %.pn
}

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH24BodyWithMotionPropertiesC2Ev(ptr noundef nonnull align 16 dereferenceable(320)) unnamed_addr #4 align 2

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

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

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

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

declare noundef ptr @_ZNK3JPH20BodyCreationSettings8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(256)) local_unnamed_addr #6

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH4Body11SetIsSensorEb(ptr noundef nonnull align 16 dereferenceable(122), i1 noundef zeroext) local_unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH4Body31SetCollideKinematicVsNonDynamicEb(ptr noundef nonnull align 16 dereferenceable(122), i1 noundef zeroext) local_unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH4Body23SetUseManifoldReductionEb(ptr noundef nonnull align 16 dereferenceable(122), i1 noundef zeroext) local_unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH4Body23SetApplyGyroscopicForceEb(ptr noundef nonnull align 16 dereferenceable(122), i1 noundef zeroext) local_unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH4Body30SetEnhancedInternalEdgeRemovalEb(ptr noundef nonnull align 16 dereferenceable(122), i1 noundef zeroext) local_unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK3JPH11BodyManager26SetBodyObjectLayerInternalERNS_4BodyEt(ptr noundef nonnull align 8 dereferenceable(297), ptr noundef nonnull align 16 dereferenceable(122), i16 noundef zeroext) local_unnamed_addr #4 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: mustprogress uwtable
declare dso_local void @_ZN3JPH16MotionProperties16SetLinearDampingEf(ptr noundef nonnull align 16 dereferenceable(182), float noundef) local_unnamed_addr #1 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH16MotionProperties20SetMaxLinearVelocityEf(ptr noundef nonnull align 16 dereferenceable(182), float noundef) local_unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH16MotionProperties21SetMaxAngularVelocityEf(ptr noundef nonnull align 16 dereferenceable(182), float noundef) local_unnamed_addr #4 align 2

declare void @_ZN3JPH16MotionProperties17SetMassPropertiesENS_12EAllowedDOFsERKNS_14MassPropertiesE(ptr noundef nonnull align 16 dereferenceable(182), i8 noundef zeroext, ptr noundef nonnull align 16 dereferenceable(80)) local_unnamed_addr #6

declare void @_ZNK3JPH20BodyCreationSettings17GetMassPropertiesEv(ptr dead_on_unwind writable sret(%"class.JPH::MassProperties") align 16, ptr noundef nonnull align 16 dereferenceable(256)) local_unnamed_addr #6

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

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

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

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

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

declare void @_ZN3JPH4Body30SetPositionAndRotationInternalENS_4Vec3ENS_4QuatEb(ptr noundef nonnull align 16 dereferenceable(122), double, double, double, double, i1 noundef zeroext) local_unnamed_addr #6

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


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