; LLVM IR from jrouwe/JoltPhysics :: Samples/Tests/Constraints (SwingTwistConstraintFrictionTest)

; 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::Ref" = type { ptr }
%"class.JPH::RefConst" = type { ptr }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::BodyCreationSettings" = type { %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::Vec3", %"class.JPH::Vec3", i64, i16, %"class.JPH::CollisionGroup", i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, float, float, float, float, float, float, float, i32, i32, i8, float, %"class.JPH::MassProperties", %"class.JPH::RefConst.10", %"class.JPH::RefConst" }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.4 }
%union.anon.4 = type { <4 x float> }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst.5", i32, i32 }
%"class.JPH::RefConst.5" = type { ptr }
%"class.JPH::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::RefConst.10" = type { ptr }
%"class.JPH::SwingTwistConstraintSettings" = type { %"class.JPH::TwoBodyConstraintSettings", i32, %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", i8, float, float, float, float, float, %"class.JPH::MotorSettings", %"class.JPH::MotorSettings" }
%"class.JPH::TwoBodyConstraintSettings" = type { %"class.JPH::ConstraintSettings" }
%"class.JPH::ConstraintSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget.11", i8, i32, i32, i32, float, i64 }
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget.11" = type { %"struct.std::atomic.6" }
%"struct.std::atomic.6" = type { %"struct.std::__atomic_base.7" }
%"struct.std::__atomic_base.7" = type { i32 }
%"class.JPH::MotorSettings" = type { %"class.JPH::SpringSettings", float, float, float, float }
%"class.JPH::SpringSettings" = type { i8, %union.anon.12, float }
%union.anon.12 = type { float }
%class.Test = type { ptr, ptr, ptr, ptr, ptr, ptr, i8, %"class.std::unordered_map" }
%"class.std::unordered_map" = type { %"class.std::_Hashtable" }
%"class.std::_Hashtable" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%class.SwingTwistConstraintFrictionTest = type { %class.Test, float, ptr }

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN32SwingTwistConstraintFrictionTest10InitializeEv(ptr noundef nonnull align 8 dereferenceable(128) %0) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca %"class.JPH::Ref", align 8
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca float, align 4
  %7 = alloca %"class.JPH::RefConst", align 8
  %8 = alloca %"class.JPH::Vec3", align 16
  %9 = alloca ptr, align 8
  %10 = alloca %"class.JPH::BodyCreationSettings", align 16
  %11 = alloca %"class.JPH::Vec3", align 16
  %12 = alloca %"class.JPH::Quat", align 16
  %13 = alloca %"class.JPH::CollisionGroup", align 8
  %14 = alloca %"class.JPH::Vec3", align 16
  %15 = alloca %"class.JPH::Vec3", align 16
  %16 = alloca ptr, align 8
  %17 = alloca %"class.JPH::BodyCreationSettings", align 16
  %18 = alloca %"class.JPH::Vec3", align 16
  %19 = alloca %"class.JPH::Quat", align 16
  %20 = alloca %"class.JPH::CollisionGroup", align 8
  %21 = alloca %"class.JPH::SwingTwistConstraintSettings", align 16
  %22 = alloca %"class.JPH::Vec3", align 16
  %23 = alloca %"class.JPH::Vec3", align 16
  %24 = alloca %"class.JPH::Vec3", align 16
  %25 = alloca %"class.JPH::Vec3", align 16
  %26 = alloca float, align 4
  %27 = alloca %"class.JPH::Vec3", align 16
  %28 = alloca %"class.JPH::Mat44", align 16
  %29 = alloca %"class.JPH::Mat44", align 16
  %30 = alloca %"class.JPH::Vec3", align 16
  %31 = alloca float, align 4
  %32 = alloca %"class.JPH::MotorSettings", align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  %33 = load ptr, ptr %2, align 8
  %34 = call noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test11CreateFloorEf(ptr noundef nonnull align 8 dereferenceable(112) %33, float noundef 2.000000e+02)
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #9
  %35 = call noundef ptr @_ZN3JPH16GroupFilterTablenwEm(i64 noundef 40)
  invoke void @_ZN3JPH16GroupFilterTableC2Ej(ptr noundef nonnull align 8 dereferenceable(40) %35, i32 noundef 0)
          to label %36 unwind label %220

36:                                               ; preds = %1
  call void @_ZN3JPH3RefINS_16GroupFilterTableEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef %35)
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #9
  store float 1.500000e+00, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #9
  %37 = invoke noundef ptr @_ZN3JPH12CapsuleShapenwEm(i64 noundef 56)
          to label %38 unwind label %224

38:                                               ; preds = %36
  %39 = load float, ptr %6, align 4, !tbaa !9
  invoke void @_ZN3JPH12CapsuleShapeC2EffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(56) %37, float noundef %39, float noundef 5.000000e-01, ptr noundef null)
          to label %40 unwind label %228

40:                                               ; preds = %38
  invoke void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef %37)
          to label %41 unwind label %224

41:                                               ; preds = %40
  call void @llvm.lifetime.start.p0(i64 16, ptr %8) #9
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %8, float noundef 0.000000e+00, float noundef 1.000000e+01, float noundef 0.000000e+00)
          to label %42 unwind label %232

42:                                               ; preds = %41
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #9
  %43 = getelementptr inbounds %class.Test, ptr %33, i32 0, i32 3
  %44 = load ptr, ptr %43, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 256, ptr %10) #9
  %45 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %46 unwind label %236

46:                                               ; preds = %42
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %11, ptr align 16 %8, i64 16, i1 false), !tbaa.struct !19
  %47 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %48 unwind label %236

48:                                               ; preds = %46
  %49 = getelementptr inbounds %"class.JPH::Quat", ptr %12, i32 0, i32 0
  %50 = getelementptr inbounds %"class.JPH::Vec4", ptr %49, i32 0, i32 0
  %51 = getelementptr inbounds %union.anon.4, ptr %50, i32 0, i32 0
  %52 = getelementptr inbounds { double, double }, ptr %51, i32 0, i32 0
  %53 = extractvalue { double, double } %47, 0
  store double %53, ptr %52, align 16
  %54 = getelementptr inbounds { double, double }, ptr %51, i32 0, i32 1
  %55 = extractvalue { double, double } %47, 1
  store double %55, ptr %54, align 8
  %56 = getelementptr inbounds { double, double }, ptr %11, i32 0, i32 0
  %57 = load double, ptr %56, align 16
  %58 = getelementptr inbounds { double, double }, ptr %11, i32 0, i32 1
  %59 = load double, ptr %58, align 8
  %60 = getelementptr inbounds { double, double }, ptr %12, i32 0, i32 0
  %61 = load double, ptr %60, align 16
  %62 = getelementptr inbounds { double, double }, ptr %12, i32 0, i32 1
  %63 = load double, ptr %62, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %10, ptr noundef %45, double %57, double %59, double %61, double %63, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %64 unwind label %236

64:                                               ; preds = %48
  %65 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %44, ptr noundef nonnull align 16 dereferenceable(256) %10)
          to label %66 unwind label %240

66:                                               ; preds = %64
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %10) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr %10) #9
  store ptr %65, ptr %9, align 8, !tbaa !5
  %67 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %13) #9
  %68 = invoke noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %3)
          to label %69 unwind label %245

69:                                               ; preds = %66
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %13, ptr noundef %68, i32 noundef 0, i32 noundef 0)
          to label %70 unwind label %245

70:                                               ; preds = %69
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %67, ptr noundef nonnull align 8 dereferenceable(16) %13)
          to label %71 unwind label %249

71:                                               ; preds = %70
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %13) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %13) #9
  %72 = getelementptr inbounds %class.Test, ptr %33, i32 0, i32 3
  %73 = load ptr, ptr %72, align 8, !tbaa !11
  %74 = load ptr, ptr %9, align 8, !tbaa !5
  %75 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %74)
          to label %76 unwind label %254

76:                                               ; preds = %71
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %73, ptr noundef nonnull align 4 dereferenceable(4) %75, i32 noundef 1)
          to label %77 unwind label %254

77:                                               ; preds = %76
  call void @llvm.lifetime.start.p0(i64 16, ptr %14) #9
  %78 = load float, ptr %6, align 4, !tbaa !9
  %79 = fmul float -2.000000e+00, %78
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %15, float noundef 0.000000e+00, float noundef %79, float noundef 0.000000e+00)
          to label %80 unwind label %258

80:                                               ; preds = %77
  %81 = getelementptr inbounds { double, double }, ptr %15, i32 0, i32 0
  %82 = load double, ptr %81, align 16
  %83 = getelementptr inbounds { double, double }, ptr %15, i32 0, i32 1
  %84 = load double, ptr %83, align 8
  %85 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %8, double %82, double %84)
          to label %86 unwind label %258

86:                                               ; preds = %80
  %87 = getelementptr inbounds %"class.JPH::Vec3", ptr %14, i32 0, i32 0
  %88 = getelementptr inbounds %union.anon, ptr %87, i32 0, i32 0
  %89 = getelementptr inbounds { double, double }, ptr %88, i32 0, i32 0
  %90 = extractvalue { double, double } %85, 0
  store double %90, ptr %89, align 16
  %91 = getelementptr inbounds { double, double }, ptr %88, i32 0, i32 1
  %92 = extractvalue { double, double } %85, 1
  store double %92, ptr %91, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #9
  %93 = getelementptr inbounds %class.Test, ptr %33, i32 0, i32 3
  %94 = load ptr, ptr %93, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 256, ptr %17) #9
  %95 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %96 unwind label %262

96:                                               ; preds = %86
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %18, ptr align 16 %14, i64 16, i1 false), !tbaa.struct !19
  %97 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %98 unwind label %262

98:                                               ; preds = %96
  %99 = getelementptr inbounds %"class.JPH::Quat", ptr %19, i32 0, i32 0
  %100 = getelementptr inbounds %"class.JPH::Vec4", ptr %99, i32 0, i32 0
  %101 = getelementptr inbounds %union.anon.4, ptr %100, i32 0, i32 0
  %102 = getelementptr inbounds { double, double }, ptr %101, i32 0, i32 0
  %103 = extractvalue { double, double } %97, 0
  store double %103, ptr %102, align 16
  %104 = getelementptr inbounds { double, double }, ptr %101, i32 0, i32 1
  %105 = extractvalue { double, double } %97, 1
  store double %105, ptr %104, align 8
  %106 = getelementptr inbounds { double, double }, ptr %18, i32 0, i32 0
  %107 = load double, ptr %106, align 16
  %108 = getelementptr inbounds { double, double }, ptr %18, i32 0, i32 1
  %109 = load double, ptr %108, align 8
  %110 = getelementptr inbounds { double, double }, ptr %19, i32 0, i32 0
  %111 = load double, ptr %110, align 16
  %112 = getelementptr inbounds { double, double }, ptr %19, i32 0, i32 1
  %113 = load double, ptr %112, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %17, ptr noundef %95, double %107, double %109, double %111, double %113, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %114 unwind label %262

114:                                              ; preds = %98
  %115 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %94, ptr noundef nonnull align 16 dereferenceable(256) %17)
          to label %116 unwind label %266

116:                                              ; preds = %114
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %17) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr %17) #9
  store ptr %115, ptr %16, align 8, !tbaa !5
  %117 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %20) #9
  %118 = invoke noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %3)
          to label %119 unwind label %271

119:                                              ; preds = %116
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %20, ptr noundef %118, i32 noundef 0, i32 noundef 0)
          to label %120 unwind label %271

120:                                              ; preds = %119
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %117, ptr noundef nonnull align 8 dereferenceable(16) %20)
          to label %121 unwind label %275

121:                                              ; preds = %120
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #9
  %122 = load ptr, ptr %16, align 8, !tbaa !5
  %123 = invoke noundef ptr @_ZN3JPH4Body19GetMotionPropertiesEv(ptr noundef nonnull align 16 dereferenceable(122) %122)
          to label %124 unwind label %280

124:                                              ; preds = %121
  invoke void @_ZN3JPH16MotionProperties16SetLinearDampingEf(ptr noundef nonnull align 16 dereferenceable(182) %123, float noundef 0.000000e+00)
          to label %125 unwind label %280

125:                                              ; preds = %124
  %126 = load ptr, ptr %16, align 8, !tbaa !5
  %127 = invoke noundef ptr @_ZN3JPH4Body19GetMotionPropertiesEv(ptr noundef nonnull align 16 dereferenceable(122) %126)
          to label %128 unwind label %280

128:                                              ; preds = %125
  invoke void @_ZN3JPH16MotionProperties17SetAngularDampingEf(ptr noundef nonnull align 16 dereferenceable(182) %127, float noundef 0.000000e+00)
          to label %129 unwind label %280

129:                                              ; preds = %128
  %130 = load ptr, ptr %16, align 8, !tbaa !5
  invoke void @_ZN3JPH4Body16SetAllowSleepingEb(ptr noundef nonnull align 16 dereferenceable(122) %130, i1 noundef zeroext false)
          to label %131 unwind label %280

131:                                              ; preds = %129
  %132 = getelementptr inbounds %class.Test, ptr %33, i32 0, i32 3
  %133 = load ptr, ptr %132, align 8, !tbaa !11
  %134 = load ptr, ptr %16, align 8, !tbaa !5
  %135 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %134)
          to label %136 unwind label %280

136:                                              ; preds = %131
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %133, ptr noundef nonnull align 4 dereferenceable(4) %135, i32 noundef 0)
          to label %137 unwind label %280

137:                                              ; preds = %136
  call void @llvm.lifetime.start.p0(i64 224, ptr %21) #9
  invoke void @_ZN3JPH28SwingTwistConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(224) %21)
          to label %138 unwind label %284

138:                                              ; preds = %137
  call void @llvm.lifetime.start.p0(i64 16, ptr %22) #9
  %139 = load float, ptr %6, align 4, !tbaa !9
  %140 = fneg float %139
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %23, float noundef 0.000000e+00, float noundef %140, float noundef 0.000000e+00)
          to label %141 unwind label %288

141:                                              ; preds = %138
  %142 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 0
  %143 = load double, ptr %142, align 16
  %144 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 1
  %145 = load double, ptr %144, align 8
  %146 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %8, double %143, double %145)
          to label %147 unwind label %288

147:                                              ; preds = %141
  %148 = getelementptr inbounds %"class.JPH::Vec3", ptr %22, i32 0, i32 0
  %149 = getelementptr inbounds %union.anon, ptr %148, i32 0, i32 0
  %150 = getelementptr inbounds { double, double }, ptr %149, i32 0, i32 0
  %151 = extractvalue { double, double } %146, 0
  store double %151, ptr %150, align 16
  %152 = getelementptr inbounds { double, double }, ptr %149, i32 0, i32 1
  %153 = extractvalue { double, double } %146, 1
  store double %153, ptr %152, align 8
  %154 = getelementptr inbounds %"class.JPH::SwingTwistConstraintSettings", ptr %21, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %154, ptr align 16 %22, i64 16, i1 false), !tbaa.struct !19
  %155 = getelementptr inbounds %"class.JPH::SwingTwistConstraintSettings", ptr %21, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %155, ptr align 16 %154, i64 16, i1 false), !tbaa.struct !19
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #9
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %24, float noundef 0.000000e+00, float noundef -1.000000e+00, float noundef 0.000000e+00)
          to label %156 unwind label %292

156:                                              ; preds = %147
  %157 = getelementptr inbounds %"class.JPH::SwingTwistConstraintSettings", ptr %21, i32 0, i32 6
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %157, ptr align 16 %24, i64 16, i1 false), !tbaa.struct !19
  %158 = getelementptr inbounds %"class.JPH::SwingTwistConstraintSettings", ptr %21, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %158, ptr align 16 %157, i64 16, i1 false), !tbaa.struct !19
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %25) #9
  %159 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %160 unwind label %296

160:                                              ; preds = %156
  %161 = getelementptr inbounds %"class.JPH::Vec3", ptr %25, i32 0, i32 0
  %162 = getelementptr inbounds %union.anon, ptr %161, i32 0, i32 0
  %163 = getelementptr inbounds { double, double }, ptr %162, i32 0, i32 0
  %164 = extractvalue { double, double } %159, 0
  store double %164, ptr %163, align 16
  %165 = getelementptr inbounds { double, double }, ptr %162, i32 0, i32 1
  %166 = extractvalue { double, double } %159, 1
  store double %166, ptr %165, align 8
  %167 = getelementptr inbounds %"class.JPH::SwingTwistConstraintSettings", ptr %21, i32 0, i32 7
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %167, ptr align 16 %25, i64 16, i1 false), !tbaa.struct !19
  %168 = getelementptr inbounds %"class.JPH::SwingTwistConstraintSettings", ptr %21, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %168, ptr align 16 %167, i64 16, i1 false), !tbaa.struct !19
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #9
  %169 = invoke noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef 9.000000e+01)
          to label %170 unwind label %300

170:                                              ; preds = %160
  %171 = getelementptr inbounds %"class.JPH::SwingTwistConstraintSettings", ptr %21, i32 0, i32 9
  store float %169, ptr %171, align 4, !tbaa !21
  %172 = invoke noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef 9.000000e+01)
          to label %173 unwind label %300

173:                                              ; preds = %170
  %174 = getelementptr inbounds %"class.JPH::SwingTwistConstraintSettings", ptr %21, i32 0, i32 10
  store float %172, ptr %174, align 8, !tbaa !36
  %175 = getelementptr inbounds %"class.JPH::SwingTwistConstraintSettings", ptr %21, i32 0, i32 11
  store float 0xC00921FB60000000, ptr %175, align 4, !tbaa !37
  %176 = getelementptr inbounds %"class.JPH::SwingTwistConstraintSettings", ptr %21, i32 0, i32 12
  store float 0x400921FB60000000, ptr %176, align 16, !tbaa !38
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %27) #9
  call void @llvm.lifetime.start.p0(i64 64, ptr %28) #9
  call void @llvm.lifetime.start.p0(i64 64, ptr %29) #9
  %177 = load ptr, ptr %16, align 8, !tbaa !5
  %178 = invoke noundef ptr @_ZN3JPH4Body19GetMotionPropertiesEv(ptr noundef nonnull align 16 dereferenceable(122) %177)
          to label %179 unwind label %304

179:                                              ; preds = %173
  invoke void @_ZNK3JPH16MotionProperties27GetLocalSpaceInverseInertiaEv(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %29, ptr noundef nonnull align 16 dereferenceable(182) %178)
          to label %180 unwind label %304

180:                                              ; preds = %179
  invoke void @_ZNK3JPH5Mat4411Inversed3x3Ev(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %28, ptr noundef nonnull align 16 dereferenceable(64) %29)
          to label %181 unwind label %304

181:                                              ; preds = %180
  %182 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %183 unwind label %304

183:                                              ; preds = %181
  %184 = getelementptr inbounds %"class.JPH::Vec3", ptr %30, i32 0, i32 0
  %185 = getelementptr inbounds %union.anon, ptr %184, i32 0, i32 0
  %186 = getelementptr inbounds { double, double }, ptr %185, i32 0, i32 0
  %187 = extractvalue { double, double } %182, 0
  store double %187, ptr %186, align 16
  %188 = getelementptr inbounds { double, double }, ptr %185, i32 0, i32 1
  %189 = extractvalue { double, double } %182, 1
  store double %189, ptr %188, align 8
  %190 = getelementptr inbounds { double, double }, ptr %30, i32 0, i32 0
  %191 = load double, ptr %190, align 16
  %192 = getelementptr inbounds { double, double }, ptr %30, i32 0, i32 1
  %193 = load double, ptr %192, align 8
  %194 = invoke { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %28, double %191, double %193)
          to label %195 unwind label %304

195:                                              ; preds = %183
  %196 = getelementptr inbounds %"class.JPH::Vec3", ptr %27, i32 0, i32 0
  %197 = getelementptr inbounds %union.anon, ptr %196, i32 0, i32 0
  %198 = getelementptr inbounds { double, double }, ptr %197, i32 0, i32 0
  %199 = extractvalue { double, double } %194, 0
  store double %199, ptr %198, align 16
  %200 = getelementptr inbounds { double, double }, ptr %197, i32 0, i32 1
  %201 = extractvalue { double, double } %194, 1
  store double %201, ptr %200, align 8
  %202 = invoke noundef float @_ZNK3JPH4Vec36LengthEv(ptr noundef nonnull align 16 dereferenceable(16) %27)
          to label %203 unwind label %304

203:                                              ; preds = %195
  call void @llvm.lifetime.end.p0(i64 64, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #9
  store float %202, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #9
  store float 0x3FF921FB60000000, ptr %31, align 4, !tbaa !9
  %204 = load float, ptr %26, align 4, !tbaa !9
  %205 = fmul float %204, 0x3FF921FB60000000
  %206 = getelementptr inbounds %"class.JPH::SwingTwistConstraintSettings", ptr %21, i32 0, i32 13
  store float %205, ptr %206, align 4, !tbaa !39
  call void @llvm.lifetime.start.p0(i64 28, ptr %32) #9
  invoke void @_ZN3JPH13MotorSettingsC2Eff(ptr noundef nonnull align 4 dereferenceable(28) %32, float noundef 1.000000e+01, float noundef 2.000000e+00)
          to label %207 unwind label %308

207:                                              ; preds = %203
  %208 = getelementptr inbounds %"class.JPH::SwingTwistConstraintSettings", ptr %21, i32 0, i32 14
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %208, ptr align 4 %32, i64 28, i1 false), !tbaa.struct !40
  %209 = getelementptr inbounds %"class.JPH::SwingTwistConstraintSettings", ptr %21, i32 0, i32 15
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %209, ptr align 4 %208, i64 28, i1 false), !tbaa.struct !40
  call void @llvm.lifetime.end.p0(i64 28, ptr %32) #9
  %210 = load ptr, ptr %9, align 8, !tbaa !5
  %211 = load ptr, ptr %16, align 8, !tbaa !5
  %212 = invoke noundef ptr @_ZNK3JPH28SwingTwistConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(224) %21, ptr noundef nonnull align 16 dereferenceable(122) %210, ptr noundef nonnull align 16 dereferenceable(122) %211)
          to label %213 unwind label %312

213:                                              ; preds = %207
  %214 = getelementptr inbounds %class.SwingTwistConstraintFrictionTest, ptr %33, i32 0, i32 2
  store ptr %212, ptr %214, align 8, !tbaa !42
  %215 = getelementptr inbounds %class.Test, ptr %33, i32 0, i32 2
  %216 = load ptr, ptr %215, align 8, !tbaa !44
  %217 = getelementptr inbounds %class.SwingTwistConstraintFrictionTest, ptr %33, i32 0, i32 2
  %218 = load ptr, ptr %217, align 8, !tbaa !42
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %216, ptr noundef %218)
          to label %219 unwind label %312

219:                                              ; preds = %213
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #9
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(224) %21) #9
  call void @llvm.lifetime.end.p0(i64 224, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %8) #9
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %7) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #9
  call void @_ZN3JPH3RefINS_16GroupFilterTableEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %3) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #9
  ret void

220:                                              ; preds = %1
  %221 = landingpad { ptr, i32 }
          cleanup
  %222 = extractvalue { ptr, i32 } %221, 0
  store ptr %222, ptr %4, align 8
  %223 = extractvalue { ptr, i32 } %221, 1
  store i32 %223, ptr %5, align 4
  call void @_ZN3JPH16GroupFilterTabledlEPv(ptr noundef %35) #9
  br label %325

224:                                              ; preds = %40, %36
  %225 = landingpad { ptr, i32 }
          cleanup
  %226 = extractvalue { ptr, i32 } %225, 0
  store ptr %226, ptr %4, align 8
  %227 = extractvalue { ptr, i32 } %225, 1
  store i32 %227, ptr %5, align 4
  br label %324

228:                                              ; preds = %38
  %229 = landingpad { ptr, i32 }
          cleanup
  %230 = extractvalue { ptr, i32 } %229, 0
  store ptr %230, ptr %4, align 8
  %231 = extractvalue { ptr, i32 } %229, 1
  store i32 %231, ptr %5, align 4
  call void @_ZN3JPH12CapsuleShapedlEPv(ptr noundef %37) #9
  br label %324

232:                                              ; preds = %41
  %233 = landingpad { ptr, i32 }
          cleanup
  %234 = extractvalue { ptr, i32 } %233, 0
  store ptr %234, ptr %4, align 8
  %235 = extractvalue { ptr, i32 } %233, 1
  store i32 %235, ptr %5, align 4
  br label %323

236:                                              ; preds = %48, %46, %42
  %237 = landingpad { ptr, i32 }
          cleanup
  %238 = extractvalue { ptr, i32 } %237, 0
  store ptr %238, ptr %4, align 8
  %239 = extractvalue { ptr, i32 } %237, 1
  store i32 %239, ptr %5, align 4
  br label %244

240:                                              ; preds = %64
  %241 = landingpad { ptr, i32 }
          cleanup
  %242 = extractvalue { ptr, i32 } %241, 0
  store ptr %242, ptr %4, align 8
  %243 = extractvalue { ptr, i32 } %241, 1
  store i32 %243, ptr %5, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %10) #9
  br label %244

244:                                              ; preds = %240, %236
  call void @llvm.lifetime.end.p0(i64 256, ptr %10) #9
  br label %322

245:                                              ; preds = %69, %66
  %246 = landingpad { ptr, i32 }
          cleanup
  %247 = extractvalue { ptr, i32 } %246, 0
  store ptr %247, ptr %4, align 8
  %248 = extractvalue { ptr, i32 } %246, 1
  store i32 %248, ptr %5, align 4
  br label %253

249:                                              ; preds = %70
  %250 = landingpad { ptr, i32 }
          cleanup
  %251 = extractvalue { ptr, i32 } %250, 0
  store ptr %251, ptr %4, align 8
  %252 = extractvalue { ptr, i32 } %250, 1
  store i32 %252, ptr %5, align 4
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %13) #9
  br label %253

253:                                              ; preds = %249, %245
  call void @llvm.lifetime.end.p0(i64 16, ptr %13) #9
  br label %322

254:                                              ; preds = %76, %71
  %255 = landingpad { ptr, i32 }
          cleanup
  %256 = extractvalue { ptr, i32 } %255, 0
  store ptr %256, ptr %4, align 8
  %257 = extractvalue { ptr, i32 } %255, 1
  store i32 %257, ptr %5, align 4
  br label %322

258:                                              ; preds = %80, %77
  %259 = landingpad { ptr, i32 }
          cleanup
  %260 = extractvalue { ptr, i32 } %259, 0
  store ptr %260, ptr %4, align 8
  %261 = extractvalue { ptr, i32 } %259, 1
  store i32 %261, ptr %5, align 4
  br label %321

262:                                              ; preds = %98, %96, %86
  %263 = landingpad { ptr, i32 }
          cleanup
  %264 = extractvalue { ptr, i32 } %263, 0
  store ptr %264, ptr %4, align 8
  %265 = extractvalue { ptr, i32 } %263, 1
  store i32 %265, ptr %5, align 4
  br label %270

266:                                              ; preds = %114
  %267 = landingpad { ptr, i32 }
          cleanup
  %268 = extractvalue { ptr, i32 } %267, 0
  store ptr %268, ptr %4, align 8
  %269 = extractvalue { ptr, i32 } %267, 1
  store i32 %269, ptr %5, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %17) #9
  br label %270

270:                                              ; preds = %266, %262
  call void @llvm.lifetime.end.p0(i64 256, ptr %17) #9
  br label %320

271:                                              ; preds = %119, %116
  %272 = landingpad { ptr, i32 }
          cleanup
  %273 = extractvalue { ptr, i32 } %272, 0
  store ptr %273, ptr %4, align 8
  %274 = extractvalue { ptr, i32 } %272, 1
  store i32 %274, ptr %5, align 4
  br label %279

275:                                              ; preds = %120
  %276 = landingpad { ptr, i32 }
          cleanup
  %277 = extractvalue { ptr, i32 } %276, 0
  store ptr %277, ptr %4, align 8
  %278 = extractvalue { ptr, i32 } %276, 1
  store i32 %278, ptr %5, align 4
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #9
  br label %279

279:                                              ; preds = %275, %271
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #9
  br label %320

280:                                              ; preds = %136, %131, %129, %128, %125, %124, %121
  %281 = landingpad { ptr, i32 }
          cleanup
  %282 = extractvalue { ptr, i32 } %281, 0
  store ptr %282, ptr %4, align 8
  %283 = extractvalue { ptr, i32 } %281, 1
  store i32 %283, ptr %5, align 4
  br label %320

284:                                              ; preds = %137
  %285 = landingpad { ptr, i32 }
          cleanup
  %286 = extractvalue { ptr, i32 } %285, 0
  store ptr %286, ptr %4, align 8
  %287 = extractvalue { ptr, i32 } %285, 1
  store i32 %287, ptr %5, align 4
  br label %319

288:                                              ; preds = %141, %138
  %289 = landingpad { ptr, i32 }
          cleanup
  %290 = extractvalue { ptr, i32 } %289, 0
  store ptr %290, ptr %4, align 8
  %291 = extractvalue { ptr, i32 } %289, 1
  store i32 %291, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #9
  br label %318

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

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

300:                                              ; preds = %170, %160
  %301 = landingpad { ptr, i32 }
          cleanup
  %302 = extractvalue { ptr, i32 } %301, 0
  store ptr %302, ptr %4, align 8
  %303 = extractvalue { ptr, i32 } %301, 1
  store i32 %303, ptr %5, align 4
  br label %318

304:                                              ; preds = %195, %183, %181, %180, %179, %173
  %305 = landingpad { ptr, i32 }
          cleanup
  %306 = extractvalue { ptr, i32 } %305, 0
  store ptr %306, ptr %4, align 8
  %307 = extractvalue { ptr, i32 } %305, 1
  store i32 %307, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #9
  br label %317

308:                                              ; preds = %203
  %309 = landingpad { ptr, i32 }
          cleanup
  %310 = extractvalue { ptr, i32 } %309, 0
  store ptr %310, ptr %4, align 8
  %311 = extractvalue { ptr, i32 } %309, 1
  store i32 %311, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 28, ptr %32) #9
  br label %316

312:                                              ; preds = %213, %207
  %313 = landingpad { ptr, i32 }
          cleanup
  %314 = extractvalue { ptr, i32 } %313, 0
  store ptr %314, ptr %4, align 8
  %315 = extractvalue { ptr, i32 } %313, 1
  store i32 %315, ptr %5, align 4
  br label %316

316:                                              ; preds = %312, %308
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  br label %317

317:                                              ; preds = %316, %304
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #9
  br label %318

318:                                              ; preds = %317, %300, %296, %292, %288
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(224) %21) #9
  br label %319

319:                                              ; preds = %318, %284
  call void @llvm.lifetime.end.p0(i64 224, ptr %21) #9
  br label %320

320:                                              ; preds = %319, %280, %279, %270
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #9
  br label %321

321:                                              ; preds = %320, %258
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #9
  br label %322

322:                                              ; preds = %321, %254, %253, %244
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #9
  br label %323

323:                                              ; preds = %322, %232
  call void @llvm.lifetime.end.p0(i64 16, ptr %8) #9
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %7) #9
  br label %324

324:                                              ; preds = %323, %228, %224
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #9
  call void @_ZN3JPH3RefINS_16GroupFilterTableEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %3) #9
  br label %325

325:                                              ; preds = %324, %220
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #9
  br label %326

326:                                              ; preds = %325
  %327 = load ptr, ptr %4, align 8
  %328 = load i32, ptr %5, align 4
  %329 = insertvalue { ptr, i32 } poison, ptr %327, 0
  %330 = insertvalue { ptr, i32 } %329, i32 %328, 1
  resume { ptr, i32 } %330
}

declare noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test11CreateFloorEf(ptr noundef nonnull align 8 dereferenceable(112), float noundef) #2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH12CapsuleShapeC2EffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(56), float noundef, float noundef, ptr noundef) unnamed_addr #1 align 2

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

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

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

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #8

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH4Body19GetMotionPropertiesEv(ptr noundef nonnull align 16 dereferenceable(122)) #1 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

declare void @_ZN3JPH4Body16SetAllowSleepingEb(ptr noundef nonnull align 16 dereferenceable(122), i1 noundef zeroext) #2

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

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

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

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

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

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

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

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

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

declare noundef ptr @_ZNK3JPH28SwingTwistConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(224), ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 16 dereferenceable(122)) unnamed_addr #2

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"float", !7, i64 0}
!11 = !{!12, !6, i64 24}
!12 = !{!"_ZTS4Test", !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !13, i64 48, !14, i64 56}
!13 = !{!"bool", !7, i64 0}
!14 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !15, i64 0}
!15 = !{!"_ZTSSt10_HashtableIN3JPH6BodyIDESt4pairIKS1_NSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEEESaISB_ENSt8__detail10_Select1stESt8equal_toIS1_ESt4hashIS1_ENSD_18_Mod_range_hashingENSD_20_Default_ranged_hashENSD_20_Prime_rehash_policyENSD_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !16, i64 8, !17, i64 16, !16, i64 24, !18, i64 32, !6, i64 48}
!16 = !{!"long", !7, i64 0}
!17 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!18 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !10, i64 0, !16, i64 8}
!19 = !{i64 0, i64 16, !20}
!20 = !{!7, !7, i64 0}
!21 = !{!22, !10, i64 148}
!22 = !{!"_ZTSN3JPH28SwingTwistConstraintSettingsE", !23, i64 0, !30, i64 40, !31, i64 48, !31, i64 64, !31, i64 80, !31, i64 96, !31, i64 112, !31, i64 128, !32, i64 144, !10, i64 148, !10, i64 152, !10, i64 156, !10, i64 160, !10, i64 164, !33, i64 168, !33, i64 196}
!23 = !{!"_ZTSN3JPH25TwoBodyConstraintSettingsE", !24, i64 0}
!24 = !{!"_ZTSN3JPH18ConstraintSettingsE", !25, i64 0, !26, i64 8, !13, i64 12, !29, i64 16, !29, i64 20, !29, i64 24, !10, i64 28, !16, i64 32}
!25 = !{!"_ZTSN3JPH18SerializableObjectE"}
!26 = !{!"_ZTSN3JPH9RefTargetINS_18ConstraintSettingsEEE", !27, i64 0}
!27 = !{!"_ZTSSt6atomicIjE", !28, i64 0}
!28 = !{!"_ZTSSt13__atomic_baseIjE", !29, i64 0}
!29 = !{!"int", !7, i64 0}
!30 = !{!"_ZTSN3JPH16EConstraintSpaceE", !7, i64 0}
!31 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!32 = !{!"_ZTSN3JPH10ESwingTypeE", !7, i64 0}
!33 = !{!"_ZTSN3JPH13MotorSettingsE", !34, i64 0, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24}
!34 = !{!"_ZTSN3JPH14SpringSettingsE", !35, i64 0, !7, i64 4, !10, i64 8}
!35 = !{!"_ZTSN3JPH11ESpringModeE", !7, i64 0}
!36 = !{!22, !10, i64 152}
!37 = !{!22, !10, i64 156}
!38 = !{!22, !10, i64 160}
!39 = !{!22, !10, i64 164}
!40 = !{i64 0, i64 1, !41, i64 4, i64 4, !20, i64 8, i64 4, !9, i64 12, i64 4, !9, i64 16, i64 4, !9, i64 20, i64 4, !9, i64 24, i64 4, !9}
!41 = !{!35, !35, i64 0}
!42 = !{!43, !6, i64 120}
!43 = !{!"_ZTS32SwingTwistConstraintFrictionTest", !12, i64 0, !10, i64 112, !6, i64 120}
!44 = !{!12, !6, i64 16}


; 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::Ref" = type { ptr }
%"class.JPH::RefConst" = type { ptr }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::BodyCreationSettings" = type { %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::Vec3", %"class.JPH::Vec3", i64, i16, %"class.JPH::CollisionGroup", i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, float, float, float, float, float, float, float, i32, i32, i8, float, %"class.JPH::MassProperties", %"class.JPH::RefConst.10", %"class.JPH::RefConst" }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.4 }
%union.anon.4 = type { <4 x float> }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst.5", i32, i32 }
%"class.JPH::RefConst.5" = type { ptr }
%"class.JPH::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::RefConst.10" = type { ptr }
%"class.JPH::SwingTwistConstraintSettings" = type { %"class.JPH::TwoBodyConstraintSettings", i32, %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", i8, float, float, float, float, float, %"class.JPH::MotorSettings", %"class.JPH::MotorSettings" }
%"class.JPH::TwoBodyConstraintSettings" = type { %"class.JPH::ConstraintSettings" }
%"class.JPH::ConstraintSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget.11", i8, i32, i32, i32, float, i64 }
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget.11" = type { %"struct.std::atomic.6" }
%"struct.std::atomic.6" = type { %"struct.std::__atomic_base.7" }
%"struct.std::__atomic_base.7" = type { i32 }
%"class.JPH::MotorSettings" = type { %"class.JPH::SpringSettings", float, float, float, float }
%"class.JPH::SpringSettings" = type { i8, %union.anon.12, float }
%union.anon.12 = type { 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 void @_ZN32SwingTwistConstraintFrictionTest10InitializeEv(ptr noundef nonnull align 8 dereferenceable(128) %0) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.JPH::Ref", align 8
  %3 = alloca %"class.JPH::RefConst", align 8
  %4 = alloca %"class.JPH::Vec3", align 16
  %5 = alloca %"class.JPH::BodyCreationSettings", align 16
  %6 = alloca %"class.JPH::CollisionGroup", align 8
  %7 = alloca %"class.JPH::Vec3", align 16
  %8 = alloca %"class.JPH::BodyCreationSettings", align 16
  %9 = alloca %"class.JPH::CollisionGroup", align 8
  %10 = alloca %"class.JPH::SwingTwistConstraintSettings", 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::Mat44", align 16
  %15 = alloca %"class.JPH::Mat44", align 16
  %16 = alloca %"class.JPH::MotorSettings", align 4
  %17 = tail call noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test11CreateFloorEf(ptr noundef nonnull align 8 dereferenceable(112) %0, float noundef 2.000000e+02)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) #9
  %18 = tail call noundef ptr @_ZN3JPH16GroupFilterTablenwEm(i64 noundef 40)
  invoke void @_ZN3JPH16GroupFilterTableC2Ej(ptr noundef nonnull align 8 dereferenceable(40) %18, i32 noundef 0)
          to label %19 unwind label %122

19:                                               ; preds = %1
  call void @_ZN3JPH3RefINS_16GroupFilterTableEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull %18)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #9
  %20 = invoke noundef ptr @_ZN3JPH12CapsuleShapenwEm(i64 noundef 56)
          to label %21 unwind label %124

21:                                               ; preds = %19
  invoke void @_ZN3JPH12CapsuleShapeC2EffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(56) %20, float noundef 1.500000e+00, float noundef 5.000000e-01, ptr noundef null)
          to label %22 unwind label %126

22:                                               ; preds = %21
  invoke void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull %20)
          to label %23 unwind label %124

23:                                               ; preds = %22
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #9
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %4, float noundef 0.000000e+00, float noundef 1.000000e+01, float noundef 0.000000e+00)
          to label %24 unwind label %128

24:                                               ; preds = %23
  %25 = getelementptr inbounds i8, ptr %0, i64 24
  %26 = load ptr, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %5) #9
  %27 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %3)
  %.sroa.019.0.copyload = load double, ptr %4, align 16
  %.sroa.220.0..sroa_idx = getelementptr inbounds i8, ptr %4, i64 8
  %.sroa.220.0.copyload = load double, ptr %.sroa.220.0..sroa_idx, align 8, !tbaa !17
  %28 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %29 unwind label %130

29:                                               ; preds = %24
  %30 = extractvalue { double, double } %28, 0
  %31 = extractvalue { double, double } %28, 1
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %5, ptr noundef %27, double %.sroa.019.0.copyload, double %.sroa.220.0.copyload, double %30, double %31, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %32 unwind label %130

32:                                               ; preds = %29
  %33 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %26, ptr noundef nonnull align 16 dereferenceable(256) %5)
          to label %34 unwind label %132

34:                                               ; preds = %32
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %5) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %5) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #9
  %35 = call noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %2)
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef %35, i32 noundef 0, i32 noundef 0)
          to label %36 unwind label %135

36:                                               ; preds = %34
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %33, ptr noundef nonnull align 8 dereferenceable(16) %6)
          to label %37 unwind label %137

37:                                               ; preds = %36
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #9
  %38 = load ptr, ptr %25, align 8, !tbaa !5
  %39 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %33)
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %38, ptr noundef nonnull align 4 dereferenceable(4) %39, i32 noundef 1)
          to label %40 unwind label %140

40:                                               ; preds = %37
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %7, float noundef 0.000000e+00, float noundef -3.000000e+00, float noundef 0.000000e+00)
          to label %41 unwind label %142

41:                                               ; preds = %40
  %42 = load double, ptr %7, align 16
  %43 = getelementptr inbounds i8, ptr %7, i64 8
  %44 = load double, ptr %43, align 8
  %45 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %4, double %42, double %44)
          to label %46 unwind label %142

46:                                               ; preds = %41
  %47 = load ptr, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %8) #9
  %48 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %3)
  %49 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %50 unwind label %144

50:                                               ; preds = %46
  %51 = extractvalue { double, double } %45, 1
  %52 = extractvalue { double, double } %45, 0
  %53 = extractvalue { double, double } %49, 0
  %54 = extractvalue { double, double } %49, 1
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %8, ptr noundef %48, double %52, double %51, double %53, double %54, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %55 unwind label %144

55:                                               ; preds = %50
  %56 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %47, ptr noundef nonnull align 16 dereferenceable(256) %8)
          to label %57 unwind label %146

57:                                               ; preds = %55
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %8) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %8) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #9
  %58 = call noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %2)
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %9, ptr noundef %58, i32 noundef 0, i32 noundef 0)
          to label %59 unwind label %149

59:                                               ; preds = %57
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %56, ptr noundef nonnull align 8 dereferenceable(16) %9)
          to label %60 unwind label %151

60:                                               ; preds = %59
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #9
  %61 = invoke noundef ptr @_ZN3JPH4Body19GetMotionPropertiesEv(ptr noundef nonnull align 16 dereferenceable(122) %56)
          to label %62 unwind label %154

62:                                               ; preds = %60
  invoke void @_ZN3JPH16MotionProperties16SetLinearDampingEf(ptr noundef nonnull align 16 dereferenceable(182) %61, float noundef 0.000000e+00)
          to label %63 unwind label %154

63:                                               ; preds = %62
  %64 = invoke noundef ptr @_ZN3JPH4Body19GetMotionPropertiesEv(ptr noundef nonnull align 16 dereferenceable(122) %56)
          to label %65 unwind label %154

65:                                               ; preds = %63
  invoke void @_ZN3JPH16MotionProperties17SetAngularDampingEf(ptr noundef nonnull align 16 dereferenceable(182) %64, float noundef 0.000000e+00)
          to label %66 unwind label %154

66:                                               ; preds = %65
  invoke void @_ZN3JPH4Body16SetAllowSleepingEb(ptr noundef nonnull align 16 dereferenceable(122) %56, i1 noundef zeroext false)
          to label %67 unwind label %154

67:                                               ; preds = %66
  %68 = load ptr, ptr %25, align 8, !tbaa !5
  %69 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %56)
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %68, ptr noundef nonnull align 4 dereferenceable(4) %69, i32 noundef 0)
          to label %70 unwind label %154

70:                                               ; preds = %67
  call void @llvm.lifetime.start.p0(i64 224, ptr nonnull %10) #9
  invoke void @_ZN3JPH28SwingTwistConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(224) %10)
          to label %71 unwind label %156

71:                                               ; preds = %70
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %11, float noundef 0.000000e+00, float noundef -1.500000e+00, float noundef 0.000000e+00)
          to label %72 unwind label %158

72:                                               ; preds = %71
  %73 = load double, ptr %11, align 16
  %74 = getelementptr inbounds i8, ptr %11, i64 8
  %75 = load double, ptr %74, align 8
  %76 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %4, double %73, double %75)
          to label %77 unwind label %158

77:                                               ; preds = %72
  %78 = extractvalue { double, double } %76, 0
  %79 = extractvalue { double, double } %76, 1
  %80 = getelementptr inbounds i8, ptr %10, i64 96
  store double %78, ptr %80, align 16
  %.sroa.53.0..sroa_idx = getelementptr inbounds i8, ptr %10, i64 104
  store double %79, ptr %.sroa.53.0..sroa_idx, align 8, !tbaa !17
  %81 = getelementptr inbounds i8, ptr %10, i64 48
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %81, ptr noundef nonnull align 16 dereferenceable(16) %80, i64 16, i1 false), !tbaa.struct !18
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #9
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %12, float noundef 0.000000e+00, float noundef -1.000000e+00, float noundef 0.000000e+00)
          to label %82 unwind label %160

82:                                               ; preds = %77
  %83 = getelementptr inbounds i8, ptr %10, i64 112
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %83, ptr noundef nonnull align 16 dereferenceable(16) %12, i64 16, i1 false), !tbaa.struct !18
  %84 = getelementptr inbounds i8, ptr %10, i64 64
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %84, ptr noundef nonnull align 16 dereferenceable(16) %12, i64 16, i1 false)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #9
  %85 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %86 unwind label %162

86:                                               ; preds = %82
  %87 = extractvalue { double, double } %85, 0
  %88 = extractvalue { double, double } %85, 1
  %89 = getelementptr inbounds i8, ptr %10, i64 128
  store double %87, ptr %89, align 16
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %10, i64 136
  store double %88, ptr %.sroa.5.0..sroa_idx, align 8, !tbaa !17
  %90 = getelementptr inbounds i8, ptr %10, i64 80
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %90, ptr noundef nonnull align 16 dereferenceable(16) %89, i64 16, i1 false), !tbaa.struct !18
  %91 = call noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef 9.000000e+01)
  %92 = getelementptr inbounds i8, ptr %10, i64 148
  store float %91, ptr %92, align 4, !tbaa !19
  %93 = call noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef 9.000000e+01)
  %94 = getelementptr inbounds i8, ptr %10, i64 152
  store float %93, ptr %94, align 8, !tbaa !34
  %95 = getelementptr inbounds i8, ptr %10, i64 156
  store <2 x float> <float 0xC00921FB60000000, float 0x400921FB60000000>, ptr %95, align 4, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #9
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %14) #9
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %15) #9
  %96 = invoke noundef ptr @_ZN3JPH4Body19GetMotionPropertiesEv(ptr noundef nonnull align 16 dereferenceable(122) %56)
          to label %97 unwind label %164

97:                                               ; preds = %86
  invoke void @_ZNK3JPH16MotionProperties27GetLocalSpaceInverseInertiaEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %15, ptr noundef nonnull align 16 dereferenceable(182) %96)
          to label %98 unwind label %164

98:                                               ; preds = %97
  invoke void @_ZNK3JPH5Mat4411Inversed3x3Ev(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %14, ptr noundef nonnull align 16 dereferenceable(64) %15)
          to label %99 unwind label %164

99:                                               ; preds = %98
  %100 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %101 unwind label %164

101:                                              ; preds = %99
  %102 = extractvalue { double, double } %100, 0
  %103 = extractvalue { double, double } %100, 1
  %104 = invoke { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %14, double %102, double %103)
          to label %105 unwind label %164

105:                                              ; preds = %101
  %106 = extractvalue { double, double } %104, 0
  store double %106, ptr %13, align 16
  %107 = getelementptr inbounds i8, ptr %13, i64 8
  %108 = extractvalue { double, double } %104, 1
  store double %108, ptr %107, align 8
  %109 = invoke noundef float @_ZNK3JPH4Vec36LengthEv(ptr noundef nonnull align 16 dereferenceable(16) %13)
          to label %110 unwind label %164

110:                                              ; preds = %105
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %15) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %14) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #9
  %111 = fmul float %109, 0x3FF921FB60000000
  %112 = getelementptr inbounds i8, ptr %10, i64 164
  store float %111, ptr %112, align 4, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 28, ptr nonnull %16) #9
  invoke void @_ZN3JPH13MotorSettingsC2Eff(ptr noundef nonnull align 4 dereferenceable(28) %16, float noundef 1.000000e+01, float noundef 2.000000e+00)
          to label %113 unwind label %166

113:                                              ; preds = %110
  %114 = getelementptr inbounds i8, ptr %10, i64 168
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(28) %114, ptr noundef nonnull align 4 dereferenceable(28) %16, i64 28, i1 false), !tbaa.struct !37
  %115 = getelementptr inbounds i8, ptr %10, i64 196
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(28) %115, ptr noundef nonnull align 4 dereferenceable(28) %16, i64 28, i1 false)
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %16) #9
  %116 = invoke noundef ptr @_ZNK3JPH28SwingTwistConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(224) %10, ptr noundef nonnull align 16 dereferenceable(122) %33, ptr noundef nonnull align 16 dereferenceable(122) %56)
          to label %117 unwind label %168

117:                                              ; preds = %113
  %118 = getelementptr inbounds i8, ptr %0, i64 120
  store ptr %116, ptr %118, align 8, !tbaa !39
  %119 = getelementptr inbounds i8, ptr %0, i64 16
  %120 = load ptr, ptr %119, align 8, !tbaa !41
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %120, ptr noundef %116)
          to label %121 unwind label %168

121:                                              ; preds = %117
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(224) %10) #9
  call void @llvm.lifetime.end.p0(i64 224, ptr nonnull %10) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #9
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %3) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #9
  call void @_ZN3JPH3RefINS_16GroupFilterTableEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %2) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #9
  ret void

122:                                              ; preds = %1
  %123 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZN3JPH16GroupFilterTabledlEPv(ptr noundef %18) #9
  br label %174

124:                                              ; preds = %22, %19
  %125 = landingpad { ptr, i32 }
          cleanup
  br label %173

126:                                              ; preds = %21
  %127 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH12CapsuleShapedlEPv(ptr noundef %20) #9
  br label %173

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

130:                                              ; preds = %29, %24
  %131 = landingpad { ptr, i32 }
          cleanup
  br label %134

132:                                              ; preds = %32
  %133 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %5) #9
  br label %134

134:                                              ; preds = %132, %130
  %.pn = phi { ptr, i32 } [ %133, %132 ], [ %131, %130 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %5) #9
  br label %172

135:                                              ; preds = %34
  %136 = landingpad { ptr, i32 }
          cleanup
  br label %139

137:                                              ; preds = %36
  %138 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #9
  br label %139

139:                                              ; preds = %137, %135
  %.pn44 = phi { ptr, i32 } [ %138, %137 ], [ %136, %135 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #9
  br label %172

140:                                              ; preds = %37
  %141 = landingpad { ptr, i32 }
          cleanup
  br label %172

142:                                              ; preds = %41, %40
  %143 = landingpad { ptr, i32 }
          cleanup
  br label %172

144:                                              ; preds = %50, %46
  %145 = landingpad { ptr, i32 }
          cleanup
  br label %148

146:                                              ; preds = %55
  %147 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %8) #9
  br label %148

148:                                              ; preds = %146, %144
  %.pn46 = phi { ptr, i32 } [ %147, %146 ], [ %145, %144 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %8) #9
  br label %172

149:                                              ; preds = %57
  %150 = landingpad { ptr, i32 }
          cleanup
  br label %153

151:                                              ; preds = %59
  %152 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #9
  br label %153

153:                                              ; preds = %151, %149
  %.pn48 = phi { ptr, i32 } [ %152, %151 ], [ %150, %149 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #9
  br label %172

154:                                              ; preds = %67, %66, %65, %63, %62, %60
  %155 = landingpad { ptr, i32 }
          cleanup
  br label %172

156:                                              ; preds = %70
  %157 = landingpad { ptr, i32 }
          cleanup
  br label %171

158:                                              ; preds = %72, %71
  %159 = landingpad { ptr, i32 }
          cleanup
  br label %170

160:                                              ; preds = %77
  %161 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #9
  br label %170

162:                                              ; preds = %82
  %163 = landingpad { ptr, i32 }
          cleanup
  br label %170

164:                                              ; preds = %105, %101, %99, %98, %97, %86
  %165 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %15) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %14) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #9
  br label %170

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

168:                                              ; preds = %117, %113
  %169 = landingpad { ptr, i32 }
          cleanup
  br label %170

170:                                              ; preds = %164, %168, %166, %162, %160, %158
  %.pn50.pn.pn = phi { ptr, i32 } [ %163, %162 ], [ %161, %160 ], [ %159, %158 ], [ %165, %164 ], [ %169, %168 ], [ %167, %166 ]
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(224) %10) #9
  br label %171

171:                                              ; preds = %170, %156
  %.pn50.pn.pn.pn = phi { ptr, i32 } [ %.pn50.pn.pn, %170 ], [ %157, %156 ]
  call void @llvm.lifetime.end.p0(i64 224, ptr nonnull %10) #9
  br label %172

172:                                              ; preds = %134, %139, %140, %148, %153, %154, %171, %142, %128
  %.pn50.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %129, %128 ], [ %141, %140 ], [ %.pn44, %139 ], [ %.pn, %134 ], [ %143, %142 ], [ %.pn50.pn.pn.pn, %171 ], [ %155, %154 ], [ %.pn48, %153 ], [ %.pn46, %148 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #9
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %3) #9
  br label %173

173:                                              ; preds = %172, %126, %124
  %.pn50.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn50.pn.pn.pn.pn.pn.pn.pn, %172 ], [ %125, %124 ], [ %127, %126 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #9
  call void @_ZN3JPH3RefINS_16GroupFilterTableEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %2) #9
  br label %174

174:                                              ; preds = %173, %122
  %.pn50.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn50.pn.pn.pn.pn.pn.pn.pn.pn, %173 ], [ %123, %122 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #9
  resume { ptr, i32 } %.pn50.pn.pn.pn.pn.pn.pn.pn.pn.pn
}

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH12CapsuleShapeC2EffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(56), float noundef, float noundef, ptr noundef) unnamed_addr #1 align 2

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

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

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

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

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #8

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH4Body19GetMotionPropertiesEv(ptr noundef nonnull align 16 dereferenceable(122)) local_unnamed_addr #1 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

declare void @_ZN3JPH4Body16SetAllowSleepingEb(ptr noundef nonnull align 16 dereferenceable(122), i1 noundef zeroext) local_unnamed_addr #2

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

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

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

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

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

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

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

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

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

declare noundef ptr @_ZNK3JPH28SwingTwistConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(224), ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 16 dereferenceable(122)) unnamed_addr #2

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 24}
!6 = !{!"_ZTS4Test", !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !10, i64 48, !11, i64 56}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"bool", !8, i64 0}
!11 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !12, i64 0}
!12 = !{!"_ZTSSt10_HashtableIN3JPH6BodyIDESt4pairIKS1_NSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEEESaISB_ENSt8__detail10_Select1stESt8equal_toIS1_ESt4hashIS1_ENSD_18_Mod_range_hashingENSD_20_Default_ranged_hashENSD_20_Prime_rehash_policyENSD_17_Hashtable_traitsILb1ELb0ELb1EEEE", !7, i64 0, !13, i64 8, !14, i64 16, !13, i64 24, !15, i64 32, !7, i64 48}
!13 = !{!"long", !8, i64 0}
!14 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !7, i64 0}
!15 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !16, i64 0, !13, i64 8}
!16 = !{!"float", !8, i64 0}
!17 = !{!8, !8, i64 0}
!18 = !{i64 0, i64 16, !17}
!19 = !{!20, !16, i64 148}
!20 = !{!"_ZTSN3JPH28SwingTwistConstraintSettingsE", !21, i64 0, !28, i64 40, !29, i64 48, !29, i64 64, !29, i64 80, !29, i64 96, !29, i64 112, !29, i64 128, !30, i64 144, !16, i64 148, !16, i64 152, !16, i64 156, !16, i64 160, !16, i64 164, !31, i64 168, !31, i64 196}
!21 = !{!"_ZTSN3JPH25TwoBodyConstraintSettingsE", !22, i64 0}
!22 = !{!"_ZTSN3JPH18ConstraintSettingsE", !23, i64 0, !24, i64 8, !10, i64 12, !27, i64 16, !27, i64 20, !27, i64 24, !16, i64 28, !13, i64 32}
!23 = !{!"_ZTSN3JPH18SerializableObjectE"}
!24 = !{!"_ZTSN3JPH9RefTargetINS_18ConstraintSettingsEEE", !25, i64 0}
!25 = !{!"_ZTSSt6atomicIjE", !26, i64 0}
!26 = !{!"_ZTSSt13__atomic_baseIjE", !27, i64 0}
!27 = !{!"int", !8, i64 0}
!28 = !{!"_ZTSN3JPH16EConstraintSpaceE", !8, i64 0}
!29 = !{!"_ZTSN3JPH4Vec3E", !8, i64 0}
!30 = !{!"_ZTSN3JPH10ESwingTypeE", !8, i64 0}
!31 = !{!"_ZTSN3JPH13MotorSettingsE", !32, i64 0, !16, i64 12, !16, i64 16, !16, i64 20, !16, i64 24}
!32 = !{!"_ZTSN3JPH14SpringSettingsE", !33, i64 0, !8, i64 4, !16, i64 8}
!33 = !{!"_ZTSN3JPH11ESpringModeE", !8, i64 0}
!34 = !{!20, !16, i64 152}
!35 = !{!16, !16, i64 0}
!36 = !{!20, !16, i64 164}
!37 = !{i64 0, i64 1, !38, i64 4, i64 4, !17, i64 8, i64 4, !35, i64 12, i64 4, !35, i64 16, i64 4, !35, i64 20, i64 4, !35, i64 24, i64 4, !35}
!38 = !{!33, !33, i64 0}
!39 = !{!40, !7, i64 120}
!40 = !{!"_ZTS32SwingTwistConstraintFrictionTest", !6, i64 0, !16, i64 112, !7, i64 120}
!41 = !{!6, !7, i64 16}


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