; LLVM IR from jrouwe/JoltPhysics :: Samples/Tests/Constraints/HingeConstraintTest.ll (ZN19HingeConstraintTest10InitializeEv)

; 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::RefConst" = type { ptr }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::Ref" = type { ptr }
%"class.JPH::BodyCreationSettings" = type { %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::Vec3", %"class.JPH::Vec3", i64, i16, %"class.JPH::CollisionGroup", i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, float, float, float, float, float, float, float, i32, i32, i8, float, %"class.JPH::MassProperties", %"class.JPH::RefConst.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.std::linear_congruential_engine" = type { i64 }
%"class.std::uniform_real_distribution" = type { %"struct.std::uniform_real_distribution<float>::param_type" }
%"struct.std::uniform_real_distribution<float>::param_type" = type { float, float }
%"class.JPH::HingeConstraintSettings" = type <{ %"class.JPH::TwoBodyConstraintSettings", i32, [4 x i8], %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", float, float, %"class.JPH::SpringSettings", float, %"class.JPH::MotorSettings", [12 x i8] }>
%"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::SpringSettings" = type { i8, %union.anon.12, float }
%union.anon.12 = type { float }
%"class.JPH::MotorSettings" = type { %"class.JPH::SpringSettings", float, float, float, float }
%class.Test = type { ptr, ptr, ptr, ptr, ptr, ptr, i8, %"class.std::unordered_map" }
%"class.std::unordered_map" = type { %"class.std::_Hashtable" }
%"class.std::_Hashtable" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }

; 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 @_ZN19HingeConstraintTest10InitializeEv(ptr noundef nonnull align 8 dereferenceable(112) %0) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca float, align 4
  %4 = alloca %"class.JPH::RefConst", align 8
  %5 = alloca %"class.JPH::Vec3", align 16
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca float, align 4
  %10 = alloca float, align 4
  %11 = alloca %"class.JPH::Ref", align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca %"class.JPH::Vec3", align 16
  %17 = alloca ptr, align 8
  %18 = alloca %"class.JPH::BodyCreationSettings", align 16
  %19 = alloca %"class.JPH::Vec3", align 16
  %20 = alloca %"class.JPH::Quat", align 16
  %21 = alloca %"class.JPH::CollisionGroup", align 8
  %22 = alloca %"class.std::linear_congruential_engine", align 8
  %23 = alloca %"class.std::uniform_real_distribution", align 4
  %24 = alloca ptr, align 8
  %25 = alloca i32, align 4
  %26 = alloca %"class.JPH::Quat", align 16
  %27 = alloca %"class.JPH::Vec3", align 16
  %28 = alloca %"class.JPH::Quat", align 16
  %29 = alloca %"class.JPH::Vec3", align 16
  %30 = alloca %"class.JPH::Quat", align 16
  %31 = alloca ptr, align 8
  %32 = alloca %"class.JPH::BodyCreationSettings", align 16
  %33 = alloca %"class.JPH::Vec3", align 16
  %34 = alloca %"class.JPH::Quat", align 16
  %35 = alloca %"class.JPH::CollisionGroup", align 8
  %36 = alloca %"class.JPH::HingeConstraintSettings", align 16
  %37 = alloca %"class.JPH::Vec3", align 16
  %38 = alloca %"class.JPH::Vec3", align 16
  %39 = alloca %"class.JPH::Vec3", align 16
  %40 = alloca %"class.JPH::Vec3", align 16
  %41 = alloca %"class.JPH::Vec3", align 16
  %42 = alloca %"class.JPH::Vec3", align 16
  %43 = alloca %"class.JPH::Vec3", align 16
  %44 = alloca %"class.JPH::Vec3", align 16
  %45 = alloca ptr, align 8
  %46 = alloca %"class.JPH::BodyCreationSettings", align 16
  %47 = alloca %"class.JPH::Vec3", align 16
  %48 = alloca %"class.JPH::Vec3", align 16
  %49 = alloca %"class.JPH::Quat", align 16
  %50 = alloca %"class.JPH::CollisionGroup", align 8
  %51 = alloca ptr, align 8
  %52 = alloca %"class.JPH::BodyCreationSettings", align 16
  %53 = alloca %"class.JPH::Vec3", align 16
  %54 = alloca %"class.JPH::Vec3", align 16
  %55 = alloca %"class.JPH::Quat", align 16
  %56 = alloca %"class.JPH::CollisionGroup", align 8
  %57 = alloca %"class.JPH::HingeConstraintSettings", align 16
  %58 = alloca %"class.JPH::Vec3", align 16
  %59 = alloca %"class.JPH::Vec3", align 16
  %60 = alloca %"class.JPH::Vec3", align 16
  %61 = alloca ptr, align 8
  %62 = alloca %"class.JPH::BodyCreationSettings", align 16
  %63 = alloca %"class.JPH::Vec3", align 16
  %64 = alloca %"class.JPH::Vec3", align 16
  %65 = alloca %"class.JPH::Quat", align 16
  %66 = alloca %"class.JPH::CollisionGroup", align 8
  %67 = alloca ptr, align 8
  %68 = alloca %"class.JPH::BodyCreationSettings", align 16
  %69 = alloca %"class.JPH::Vec3", align 16
  %70 = alloca %"class.JPH::Vec3", align 16
  %71 = alloca %"class.JPH::Quat", align 16
  %72 = alloca %"class.JPH::CollisionGroup", align 8
  %73 = alloca %"class.JPH::HingeConstraintSettings", align 16
  %74 = alloca %"class.JPH::Vec3", align 16
  %75 = alloca %"class.JPH::Vec3", align 16
  %76 = alloca %"class.JPH::Vec3", align 16
  store ptr %0, ptr %2, align 8, !tbaa !5
  %77 = load ptr, ptr %2, align 8
  %78 = call noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test11CreateFloorEf(ptr noundef nonnull align 8 dereferenceable(112) %77, float noundef 2.000000e+02)
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #9
  store float 4.000000e+00, ptr %3, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #9
  %79 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  %80 = load float, ptr %3, align 4, !tbaa !9
  %81 = fmul float 5.000000e-01, %80
  %82 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef %81)
          to label %83 unwind label %103

83:                                               ; preds = %1
  %84 = getelementptr inbounds %"class.JPH::Vec3", ptr %5, i32 0, i32 0
  %85 = getelementptr inbounds %union.anon, ptr %84, i32 0, i32 0
  %86 = getelementptr inbounds { double, double }, ptr %85, i32 0, i32 0
  %87 = extractvalue { double, double } %82, 0
  store double %87, ptr %86, align 16
  %88 = getelementptr inbounds { double, double }, ptr %85, i32 0, i32 1
  %89 = extractvalue { double, double } %82, 1
  store double %89, ptr %88, align 8
  %90 = getelementptr inbounds { double, double }, ptr %5, i32 0, i32 0
  %91 = load double, ptr %90, align 16
  %92 = getelementptr inbounds { double, double }, ptr %5, i32 0, i32 1
  %93 = load double, ptr %92, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %79, double %91, double %93, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %94 unwind label %103

94:                                               ; preds = %83
  call void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef %79)
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #9
  store i32 15, ptr %8, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #9
  store float 0xBFC6571840000000, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #9
  store float 0x3FD6571840000000, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #9
  %95 = invoke noundef ptr @_ZN3JPH16GroupFilterTablenwEm(i64 noundef 40)
          to label %96 unwind label %107

96:                                               ; preds = %94
  invoke void @_ZN3JPH16GroupFilterTableC2Ej(ptr noundef nonnull align 8 dereferenceable(40) %95, i32 noundef 15)
          to label %97 unwind label %111

97:                                               ; preds = %96
  invoke void @_ZN3JPH3RefINS_16GroupFilterTableEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef %95)
          to label %98 unwind label %107

98:                                               ; preds = %97
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #9
  store i32 0, ptr %12, align 4, !tbaa !11
  br label %99

99:                                               ; preds = %122, %98
  %100 = load i32, ptr %12, align 4, !tbaa !11
  %101 = icmp ult i32 %100, 14
  br i1 %101, label %115, label %102

102:                                              ; preds = %99
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #9
  br label %129

103:                                              ; preds = %83, %1
  %104 = landingpad { ptr, i32 }
          cleanup
  %105 = extractvalue { ptr, i32 } %104, 0
  store ptr %105, ptr %6, align 8
  %106 = extractvalue { ptr, i32 } %104, 1
  store i32 %106, ptr %7, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %79) #9
  br label %900

107:                                              ; preds = %97, %94
  %108 = landingpad { ptr, i32 }
          cleanup
  %109 = extractvalue { ptr, i32 } %108, 0
  store ptr %109, ptr %6, align 8
  %110 = extractvalue { ptr, i32 } %108, 1
  store i32 %110, ptr %7, align 4
  br label %899

111:                                              ; preds = %96
  %112 = landingpad { ptr, i32 }
          cleanup
  %113 = extractvalue { ptr, i32 } %112, 0
  store ptr %113, ptr %6, align 8
  %114 = extractvalue { ptr, i32 } %112, 1
  store i32 %114, ptr %7, align 4
  call void @_ZN3JPH16GroupFilterTabledlEPv(ptr noundef %95) #9
  br label %899

115:                                              ; preds = %99
  %116 = invoke noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %11)
          to label %117 unwind label %125

117:                                              ; preds = %115
  %118 = load i32, ptr %12, align 4, !tbaa !11
  %119 = load i32, ptr %12, align 4, !tbaa !11
  %120 = add i32 %119, 1
  invoke void @_ZN3JPH16GroupFilterTable16DisableCollisionEjj(ptr noundef nonnull align 8 dereferenceable(40) %116, i32 noundef %118, i32 noundef %120)
          to label %121 unwind label %125

121:                                              ; preds = %117
  br label %122

122:                                              ; preds = %121
  %123 = load i32, ptr %12, align 4, !tbaa !11
  %124 = add i32 %123, 1
  store i32 %124, ptr %12, align 4, !tbaa !11
  br label %99, !llvm.loop !13

125:                                              ; preds = %117, %115
  %126 = landingpad { ptr, i32 }
          cleanup
  %127 = extractvalue { ptr, i32 } %126, 0
  store ptr %127, ptr %6, align 8
  %128 = extractvalue { ptr, i32 } %126, 1
  store i32 %128, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #9
  br label %898

129:                                              ; preds = %102
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #9
  store i32 0, ptr %13, align 4, !tbaa !11
  br label %130

130:                                              ; preds = %464, %129
  %131 = load i32, ptr %13, align 4, !tbaa !11
  %132 = icmp slt i32 %131, 2
  br i1 %132, label %134, label %133

133:                                              ; preds = %130
  store i32 5, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #9
  br label %471

134:                                              ; preds = %130
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #9
  %135 = load i32, ptr %13, align 4, !tbaa !11
  store i32 %135, ptr %15, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 16, ptr %16) #9
  %136 = load i32, ptr %13, align 4, !tbaa !11
  %137 = sub nsw i32 0, %136
  %138 = sitofp i32 %137 to float
  %139 = fmul float %138, 2.000000e+01
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %16, float noundef 0.000000e+00, float noundef 5.000000e+01, float noundef %139)
          to label %140 unwind label %184

140:                                              ; preds = %134
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #9
  %141 = getelementptr inbounds %class.Test, ptr %77, i32 0, i32 3
  %142 = load ptr, ptr %141, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 256, ptr %18) #9
  %143 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %4)
          to label %144 unwind label %188

144:                                              ; preds = %140
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %19, ptr align 16 %16, i64 16, i1 false), !tbaa.struct !23
  %145 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %146 unwind label %188

146:                                              ; preds = %144
  %147 = getelementptr inbounds %"class.JPH::Quat", ptr %20, i32 0, i32 0
  %148 = getelementptr inbounds %"class.JPH::Vec4", ptr %147, i32 0, i32 0
  %149 = getelementptr inbounds %union.anon.4, ptr %148, i32 0, i32 0
  %150 = getelementptr inbounds { double, double }, ptr %149, i32 0, i32 0
  %151 = extractvalue { double, double } %145, 0
  store double %151, ptr %150, align 16
  %152 = getelementptr inbounds { double, double }, ptr %149, i32 0, i32 1
  %153 = extractvalue { double, double } %145, 1
  store double %153, ptr %152, align 8
  %154 = getelementptr inbounds { double, double }, ptr %19, i32 0, i32 0
  %155 = load double, ptr %154, align 16
  %156 = getelementptr inbounds { double, double }, ptr %19, i32 0, i32 1
  %157 = load double, ptr %156, align 8
  %158 = getelementptr inbounds { double, double }, ptr %20, i32 0, i32 0
  %159 = load double, ptr %158, align 16
  %160 = getelementptr inbounds { double, double }, ptr %20, i32 0, i32 1
  %161 = load double, ptr %160, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %18, ptr noundef %143, double %155, double %157, double %159, double %161, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %162 unwind label %188

162:                                              ; preds = %146
  %163 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %142, ptr noundef nonnull align 16 dereferenceable(256) %18)
          to label %164 unwind label %192

164:                                              ; preds = %162
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %18) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr %18) #9
  store ptr %163, ptr %17, align 8, !tbaa !5
  %165 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %21) #9
  %166 = invoke noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %11)
          to label %167 unwind label %197

167:                                              ; preds = %164
  %168 = load i32, ptr %15, align 4, !tbaa !11
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %21, ptr noundef %166, i32 noundef %168, i32 noundef 0)
          to label %169 unwind label %197

169:                                              ; preds = %167
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %165, ptr noundef nonnull align 8 dereferenceable(16) %21)
          to label %170 unwind label %201

170:                                              ; preds = %169
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %21) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #9
  %171 = getelementptr inbounds %class.Test, ptr %77, i32 0, i32 3
  %172 = load ptr, ptr %171, align 8, !tbaa !15
  %173 = load ptr, ptr %17, align 8, !tbaa !5
  %174 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %173)
          to label %175 unwind label %206

175:                                              ; preds = %170
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %172, ptr noundef nonnull align 4 dereferenceable(4) %174, i32 noundef 1)
          to label %176 unwind label %206

176:                                              ; preds = %175
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #9
  invoke void @_ZNSt26linear_congruential_engineImLm16807ELm0ELm2147483647EEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %22)
          to label %177 unwind label %210

177:                                              ; preds = %176
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #9
  invoke void @_ZNSt25uniform_real_distributionIfEC2Eff(ptr noundef nonnull align 4 dereferenceable(8) %23, float noundef -1.000000e+00, float noundef 1.000000e+00)
          to label %178 unwind label %214

178:                                              ; preds = %177
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #9
  %179 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %179, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #9
  store i32 1, ptr %25, align 4, !tbaa !11
  br label %180

180:                                              ; preds = %452, %178
  %181 = load i32, ptr %25, align 4, !tbaa !11
  %182 = icmp slt i32 %181, 15
  br i1 %182, label %218, label %183

183:                                              ; preds = %180
  store i32 8, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  br label %463

184:                                              ; preds = %134
  %185 = landingpad { ptr, i32 }
          cleanup
  %186 = extractvalue { ptr, i32 } %185, 0
  store ptr %186, ptr %6, align 8
  %187 = extractvalue { ptr, i32 } %185, 1
  store i32 %187, ptr %7, align 4
  br label %470

188:                                              ; preds = %146, %144, %140
  %189 = landingpad { ptr, i32 }
          cleanup
  %190 = extractvalue { ptr, i32 } %189, 0
  store ptr %190, ptr %6, align 8
  %191 = extractvalue { ptr, i32 } %189, 1
  store i32 %191, ptr %7, align 4
  br label %196

192:                                              ; preds = %162
  %193 = landingpad { ptr, i32 }
          cleanup
  %194 = extractvalue { ptr, i32 } %193, 0
  store ptr %194, ptr %6, align 8
  %195 = extractvalue { ptr, i32 } %193, 1
  store i32 %195, ptr %7, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %18) #9
  br label %196

196:                                              ; preds = %192, %188
  call void @llvm.lifetime.end.p0(i64 256, ptr %18) #9
  br label %469

197:                                              ; preds = %167, %164
  %198 = landingpad { ptr, i32 }
          cleanup
  %199 = extractvalue { ptr, i32 } %198, 0
  store ptr %199, ptr %6, align 8
  %200 = extractvalue { ptr, i32 } %198, 1
  store i32 %200, ptr %7, align 4
  br label %205

201:                                              ; preds = %169
  %202 = landingpad { ptr, i32 }
          cleanup
  %203 = extractvalue { ptr, i32 } %202, 0
  store ptr %203, ptr %6, align 8
  %204 = extractvalue { ptr, i32 } %202, 1
  store i32 %204, ptr %7, align 4
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %21) #9
  br label %205

205:                                              ; preds = %201, %197
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #9
  br label %469

206:                                              ; preds = %175, %170
  %207 = landingpad { ptr, i32 }
          cleanup
  %208 = extractvalue { ptr, i32 } %207, 0
  store ptr %208, ptr %6, align 8
  %209 = extractvalue { ptr, i32 } %207, 1
  store i32 %209, ptr %7, align 4
  br label %469

210:                                              ; preds = %176
  %211 = landingpad { ptr, i32 }
          cleanup
  %212 = extractvalue { ptr, i32 } %211, 0
  store ptr %212, ptr %6, align 8
  %213 = extractvalue { ptr, i32 } %211, 1
  store i32 %213, ptr %7, align 4
  br label %468

214:                                              ; preds = %177
  %215 = landingpad { ptr, i32 }
          cleanup
  %216 = extractvalue { ptr, i32 } %215, 0
  store ptr %216, ptr %6, align 8
  %217 = extractvalue { ptr, i32 } %215, 1
  store i32 %217, ptr %7, align 4
  br label %467

218:                                              ; preds = %180
  call void @llvm.lifetime.start.p0(i64 16, ptr %26) #9
  %219 = load i32, ptr %13, align 4, !tbaa !11
  %220 = icmp eq i32 %219, 0
  br i1 %220, label %221, label %247

221:                                              ; preds = %218
  %222 = load float, ptr %3, align 4, !tbaa !9
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %27, float noundef %222, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %223 unwind label %239

223:                                              ; preds = %221
  %224 = getelementptr inbounds { double, double }, ptr %27, i32 0, i32 0
  %225 = load double, ptr %224, align 16
  %226 = getelementptr inbounds { double, double }, ptr %27, i32 0, i32 1
  %227 = load double, ptr %226, align 8
  %228 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %16, double %225, double %227)
          to label %229 unwind label %239

229:                                              ; preds = %223
  call void @llvm.lifetime.start.p0(i64 16, ptr %28) #9
  %230 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %231 unwind label %243

231:                                              ; preds = %229
  %232 = getelementptr inbounds %"class.JPH::Quat", ptr %28, i32 0, i32 0
  %233 = getelementptr inbounds %"class.JPH::Vec4", ptr %232, i32 0, i32 0
  %234 = getelementptr inbounds %union.anon.4, ptr %233, i32 0, i32 0
  %235 = getelementptr inbounds { double, double }, ptr %234, i32 0, i32 0
  %236 = extractvalue { double, double } %230, 0
  store double %236, ptr %235, align 16
  %237 = getelementptr inbounds { double, double }, ptr %234, i32 0, i32 1
  %238 = extractvalue { double, double } %230, 1
  store double %238, ptr %237, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %26, ptr align 16 %28, i64 16, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #9
  br label %278

239:                                              ; preds = %258, %257, %255, %252, %250, %247, %223, %221
  %240 = landingpad { ptr, i32 }
          cleanup
  %241 = extractvalue { ptr, i32 } %240, 0
  store ptr %241, ptr %6, align 8
  %242 = extractvalue { ptr, i32 } %240, 1
  store i32 %242, ptr %7, align 4
  br label %462

243:                                              ; preds = %229
  %244 = landingpad { ptr, i32 }
          cleanup
  %245 = extractvalue { ptr, i32 } %244, 0
  store ptr %245, ptr %6, align 8
  %246 = extractvalue { ptr, i32 } %244, 1
  store i32 %246, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #9
  br label %462

247:                                              ; preds = %218
  %248 = load float, ptr %3, align 4, !tbaa !9
  %249 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %23, ptr noundef nonnull align 8 dereferenceable(8) %22)
          to label %250 unwind label %239

250:                                              ; preds = %247
  %251 = invoke noundef float @_ZSt3absf(float noundef %249)
          to label %252 unwind label %239

252:                                              ; preds = %250
  %253 = fadd float %248, %251
  %254 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %23, ptr noundef nonnull align 8 dereferenceable(8) %22)
          to label %255 unwind label %239

255:                                              ; preds = %252
  %256 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %23, ptr noundef nonnull align 8 dereferenceable(8) %22)
          to label %257 unwind label %239

257:                                              ; preds = %255
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %29, float noundef %253, float noundef %254, float noundef %256)
          to label %258 unwind label %239

258:                                              ; preds = %257
  %259 = getelementptr inbounds { double, double }, ptr %29, i32 0, i32 0
  %260 = load double, ptr %259, align 16
  %261 = getelementptr inbounds { double, double }, ptr %29, i32 0, i32 1
  %262 = load double, ptr %261, align 8
  %263 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %16, double %260, double %262)
          to label %264 unwind label %239

264:                                              ; preds = %258
  call void @llvm.lifetime.start.p0(i64 16, ptr %30) #9
  %265 = invoke { double, double } @_ZN3JPH4Quat7sRandomISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEES0_RT_(ptr noundef nonnull align 8 dereferenceable(8) %22)
          to label %266 unwind label %274

266:                                              ; preds = %264
  %267 = getelementptr inbounds %"class.JPH::Quat", ptr %30, i32 0, i32 0
  %268 = getelementptr inbounds %"class.JPH::Vec4", ptr %267, i32 0, i32 0
  %269 = getelementptr inbounds %union.anon.4, ptr %268, i32 0, i32 0
  %270 = getelementptr inbounds { double, double }, ptr %269, i32 0, i32 0
  %271 = extractvalue { double, double } %265, 0
  store double %271, ptr %270, align 16
  %272 = getelementptr inbounds { double, double }, ptr %269, i32 0, i32 1
  %273 = extractvalue { double, double } %265, 1
  store double %273, ptr %272, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %26, ptr align 16 %30, i64 16, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #9
  br label %278

274:                                              ; preds = %264
  %275 = landingpad { ptr, i32 }
          cleanup
  %276 = extractvalue { ptr, i32 } %275, 0
  store ptr %276, ptr %6, align 8
  %277 = extractvalue { ptr, i32 } %275, 1
  store i32 %277, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #9
  br label %462

278:                                              ; preds = %266, %231
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #9
  %279 = getelementptr inbounds %class.Test, ptr %77, i32 0, i32 3
  %280 = load ptr, ptr %279, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 256, ptr %32) #9
  %281 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %4)
          to label %282 unwind label %351

282:                                              ; preds = %278
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %33, ptr align 16 %16, i64 16, i1 false), !tbaa.struct !23
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %34, ptr align 16 %26, i64 16, i1 false), !tbaa.struct !23
  %283 = getelementptr inbounds { double, double }, ptr %33, i32 0, i32 0
  %284 = load double, ptr %283, align 16
  %285 = getelementptr inbounds { double, double }, ptr %33, i32 0, i32 1
  %286 = load double, ptr %285, align 8
  %287 = getelementptr inbounds { double, double }, ptr %34, i32 0, i32 0
  %288 = load double, ptr %287, align 16
  %289 = getelementptr inbounds { double, double }, ptr %34, i32 0, i32 1
  %290 = load double, ptr %289, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %32, ptr noundef %281, double %284, double %286, double %288, double %290, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %291 unwind label %351

291:                                              ; preds = %282
  %292 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %280, ptr noundef nonnull align 16 dereferenceable(256) %32)
          to label %293 unwind label %355

293:                                              ; preds = %291
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %32) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr %32) #9
  store ptr %292, ptr %31, align 8, !tbaa !5
  %294 = load ptr, ptr %31, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %35) #9
  %295 = invoke noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %11)
          to label %296 unwind label %360

296:                                              ; preds = %293
  %297 = load i32, ptr %15, align 4, !tbaa !11
  %298 = load i32, ptr %25, align 4, !tbaa !11
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %35, ptr noundef %295, i32 noundef %297, i32 noundef %298)
          to label %299 unwind label %360

299:                                              ; preds = %296
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %294, ptr noundef nonnull align 8 dereferenceable(16) %35)
          to label %300 unwind label %364

300:                                              ; preds = %299
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %35) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #9
  %301 = getelementptr inbounds %class.Test, ptr %77, i32 0, i32 3
  %302 = load ptr, ptr %301, align 8, !tbaa !15
  %303 = load ptr, ptr %31, align 8, !tbaa !5
  %304 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %303)
          to label %305 unwind label %369

305:                                              ; preds = %300
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %302, ptr noundef nonnull align 4 dereferenceable(4) %304, i32 noundef 0)
          to label %306 unwind label %369

306:                                              ; preds = %305
  call void @llvm.lifetime.start.p0(i64 208, ptr %36) #9
  invoke void @_ZN3JPH23HingeConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(208) %36)
          to label %307 unwind label %373

307:                                              ; preds = %306
  %308 = load i32, ptr %25, align 4, !tbaa !11
  %309 = and i32 %308, 1
  %310 = icmp eq i32 %309, 0
  br i1 %310, label %311, label %389

311:                                              ; preds = %307
  call void @llvm.lifetime.start.p0(i64 16, ptr %37) #9
  %312 = load float, ptr %3, align 4, !tbaa !9
  %313 = fmul float -5.000000e-01, %312
  %314 = load float, ptr %3, align 4, !tbaa !9
  %315 = fmul float 5.000000e-01, %314
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %38, float noundef %313, float noundef 0.000000e+00, float noundef %315)
          to label %316 unwind label %377

316:                                              ; preds = %311
  %317 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 0
  %318 = load double, ptr %317, align 16
  %319 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 1
  %320 = load double, ptr %319, align 8
  %321 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %16, double %318, double %320)
          to label %322 unwind label %377

322:                                              ; preds = %316
  %323 = getelementptr inbounds %"class.JPH::Vec3", ptr %37, i32 0, i32 0
  %324 = getelementptr inbounds %union.anon, ptr %323, i32 0, i32 0
  %325 = getelementptr inbounds { double, double }, ptr %324, i32 0, i32 0
  %326 = extractvalue { double, double } %321, 0
  store double %326, ptr %325, align 16
  %327 = getelementptr inbounds { double, double }, ptr %324, i32 0, i32 1
  %328 = extractvalue { double, double } %321, 1
  store double %328, ptr %327, align 8
  %329 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %36, i32 0, i32 6
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %329, ptr align 16 %37, i64 16, i1 false), !tbaa.struct !23
  %330 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %36, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %330, ptr align 16 %329, i64 16, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %39) #9
  %331 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %332 unwind label %381

332:                                              ; preds = %322
  %333 = getelementptr inbounds %"class.JPH::Vec3", ptr %39, i32 0, i32 0
  %334 = getelementptr inbounds %union.anon, ptr %333, i32 0, i32 0
  %335 = getelementptr inbounds { double, double }, ptr %334, i32 0, i32 0
  %336 = extractvalue { double, double } %331, 0
  store double %336, ptr %335, align 16
  %337 = getelementptr inbounds { double, double }, ptr %334, i32 0, i32 1
  %338 = extractvalue { double, double } %331, 1
  store double %338, ptr %337, align 8
  %339 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %36, i32 0, i32 7
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %339, ptr align 16 %39, i64 16, i1 false), !tbaa.struct !23
  %340 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %36, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %340, ptr align 16 %339, i64 16, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %40) #9
  %341 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %342 unwind label %385

342:                                              ; preds = %332
  %343 = getelementptr inbounds %"class.JPH::Vec3", ptr %40, i32 0, i32 0
  %344 = getelementptr inbounds %union.anon, ptr %343, i32 0, i32 0
  %345 = getelementptr inbounds { double, double }, ptr %344, i32 0, i32 0
  %346 = extractvalue { double, double } %341, 0
  store double %346, ptr %345, align 16
  %347 = getelementptr inbounds { double, double }, ptr %344, i32 0, i32 1
  %348 = extractvalue { double, double } %341, 1
  store double %348, ptr %347, align 8
  %349 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %36, i32 0, i32 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %349, ptr align 16 %40, i64 16, i1 false), !tbaa.struct !23
  %350 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %36, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %350, ptr align 16 %349, i64 16, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #9
  br label %441

351:                                              ; preds = %282, %278
  %352 = landingpad { ptr, i32 }
          cleanup
  %353 = extractvalue { ptr, i32 } %352, 0
  store ptr %353, ptr %6, align 8
  %354 = extractvalue { ptr, i32 } %352, 1
  store i32 %354, ptr %7, align 4
  br label %359

355:                                              ; preds = %291
  %356 = landingpad { ptr, i32 }
          cleanup
  %357 = extractvalue { ptr, i32 } %356, 0
  store ptr %357, ptr %6, align 8
  %358 = extractvalue { ptr, i32 } %356, 1
  store i32 %358, ptr %7, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %32) #9
  br label %359

359:                                              ; preds = %355, %351
  call void @llvm.lifetime.end.p0(i64 256, ptr %32) #9
  br label %461

360:                                              ; preds = %296, %293
  %361 = landingpad { ptr, i32 }
          cleanup
  %362 = extractvalue { ptr, i32 } %361, 0
  store ptr %362, ptr %6, align 8
  %363 = extractvalue { ptr, i32 } %361, 1
  store i32 %363, ptr %7, align 4
  br label %368

364:                                              ; preds = %299
  %365 = landingpad { ptr, i32 }
          cleanup
  %366 = extractvalue { ptr, i32 } %365, 0
  store ptr %366, ptr %6, align 8
  %367 = extractvalue { ptr, i32 } %365, 1
  store i32 %367, ptr %7, align 4
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %35) #9
  br label %368

368:                                              ; preds = %364, %360
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #9
  br label %461

369:                                              ; preds = %305, %300
  %370 = landingpad { ptr, i32 }
          cleanup
  %371 = extractvalue { ptr, i32 } %370, 0
  store ptr %371, ptr %6, align 8
  %372 = extractvalue { ptr, i32 } %370, 1
  store i32 %372, ptr %7, align 4
  br label %461

373:                                              ; preds = %306
  %374 = landingpad { ptr, i32 }
          cleanup
  %375 = extractvalue { ptr, i32 } %374, 0
  store ptr %375, ptr %6, align 8
  %376 = extractvalue { ptr, i32 } %374, 1
  store i32 %376, ptr %7, align 4
  br label %460

377:                                              ; preds = %316, %311
  %378 = landingpad { ptr, i32 }
          cleanup
  %379 = extractvalue { ptr, i32 } %378, 0
  store ptr %379, ptr %6, align 8
  %380 = extractvalue { ptr, i32 } %378, 1
  store i32 %380, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #9
  br label %459

381:                                              ; preds = %322
  %382 = landingpad { ptr, i32 }
          cleanup
  %383 = extractvalue { ptr, i32 } %382, 0
  store ptr %383, ptr %6, align 8
  %384 = extractvalue { ptr, i32 } %382, 1
  store i32 %384, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #9
  br label %459

385:                                              ; preds = %332
  %386 = landingpad { ptr, i32 }
          cleanup
  %387 = extractvalue { ptr, i32 } %386, 0
  store ptr %387, ptr %6, align 8
  %388 = extractvalue { ptr, i32 } %386, 1
  store i32 %388, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #9
  br label %459

389:                                              ; preds = %307
  call void @llvm.lifetime.start.p0(i64 16, ptr %41) #9
  %390 = load float, ptr %3, align 4, !tbaa !9
  %391 = fmul float -5.000000e-01, %390
  %392 = load float, ptr %3, align 4, !tbaa !9
  %393 = fmul float -5.000000e-01, %392
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %42, float noundef %391, float noundef %393, float noundef 0.000000e+00)
          to label %394 unwind label %429

394:                                              ; preds = %389
  %395 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 0
  %396 = load double, ptr %395, align 16
  %397 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 1
  %398 = load double, ptr %397, align 8
  %399 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %16, double %396, double %398)
          to label %400 unwind label %429

400:                                              ; preds = %394
  %401 = getelementptr inbounds %"class.JPH::Vec3", ptr %41, i32 0, i32 0
  %402 = getelementptr inbounds %union.anon, ptr %401, i32 0, i32 0
  %403 = getelementptr inbounds { double, double }, ptr %402, i32 0, i32 0
  %404 = extractvalue { double, double } %399, 0
  store double %404, ptr %403, align 16
  %405 = getelementptr inbounds { double, double }, ptr %402, i32 0, i32 1
  %406 = extractvalue { double, double } %399, 1
  store double %406, ptr %405, align 8
  %407 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %36, i32 0, i32 6
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %407, ptr align 16 %41, i64 16, i1 false), !tbaa.struct !23
  %408 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %36, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %408, ptr align 16 %407, i64 16, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %43) #9
  %409 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %410 unwind label %433

410:                                              ; preds = %400
  %411 = getelementptr inbounds %"class.JPH::Vec3", ptr %43, i32 0, i32 0
  %412 = getelementptr inbounds %union.anon, ptr %411, i32 0, i32 0
  %413 = getelementptr inbounds { double, double }, ptr %412, i32 0, i32 0
  %414 = extractvalue { double, double } %409, 0
  store double %414, ptr %413, align 16
  %415 = getelementptr inbounds { double, double }, ptr %412, i32 0, i32 1
  %416 = extractvalue { double, double } %409, 1
  store double %416, ptr %415, align 8
  %417 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %36, i32 0, i32 7
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %417, ptr align 16 %43, i64 16, i1 false), !tbaa.struct !23
  %418 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %36, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %418, ptr align 16 %417, i64 16, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %44) #9
  %419 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %420 unwind label %437

420:                                              ; preds = %410
  %421 = getelementptr inbounds %"class.JPH::Vec3", ptr %44, i32 0, i32 0
  %422 = getelementptr inbounds %union.anon, ptr %421, i32 0, i32 0
  %423 = getelementptr inbounds { double, double }, ptr %422, i32 0, i32 0
  %424 = extractvalue { double, double } %419, 0
  store double %424, ptr %423, align 16
  %425 = getelementptr inbounds { double, double }, ptr %422, i32 0, i32 1
  %426 = extractvalue { double, double } %419, 1
  store double %426, ptr %425, align 8
  %427 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %36, i32 0, i32 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %427, ptr align 16 %44, i64 16, i1 false), !tbaa.struct !23
  %428 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %36, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %428, ptr align 16 %427, i64 16, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #9
  br label %441

429:                                              ; preds = %394, %389
  %430 = landingpad { ptr, i32 }
          cleanup
  %431 = extractvalue { ptr, i32 } %430, 0
  store ptr %431, ptr %6, align 8
  %432 = extractvalue { ptr, i32 } %430, 1
  store i32 %432, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #9
  br label %459

433:                                              ; preds = %400
  %434 = landingpad { ptr, i32 }
          cleanup
  %435 = extractvalue { ptr, i32 } %434, 0
  store ptr %435, ptr %6, align 8
  %436 = extractvalue { ptr, i32 } %434, 1
  store i32 %436, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #9
  br label %459

437:                                              ; preds = %410
  %438 = landingpad { ptr, i32 }
          cleanup
  %439 = extractvalue { ptr, i32 } %438, 0
  store ptr %439, ptr %6, align 8
  %440 = extractvalue { ptr, i32 } %438, 1
  store i32 %440, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #9
  br label %459

441:                                              ; preds = %420, %342
  %442 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %36, i32 0, i32 9
  store float 0xBFC6571840000000, ptr %442, align 16, !tbaa !25
  %443 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %36, i32 0, i32 10
  store float 0x3FD6571840000000, ptr %443, align 4, !tbaa !38
  %444 = getelementptr inbounds %class.Test, ptr %77, i32 0, i32 2
  %445 = load ptr, ptr %444, align 8, !tbaa !39
  %446 = load ptr, ptr %24, align 8, !tbaa !5
  %447 = load ptr, ptr %31, align 8, !tbaa !5
  %448 = invoke noundef ptr @_ZNK3JPH23HingeConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(208) %36, ptr noundef nonnull align 16 dereferenceable(122) %446, ptr noundef nonnull align 16 dereferenceable(122) %447)
          to label %449 unwind label %455

449:                                              ; preds = %441
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %445, ptr noundef %448)
          to label %450 unwind label %455

450:                                              ; preds = %449
  %451 = load ptr, ptr %31, align 8, !tbaa !5
  store ptr %451, ptr %24, align 8, !tbaa !5
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %36) #9
  call void @llvm.lifetime.end.p0(i64 208, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #9
  br label %452

452:                                              ; preds = %450
  %453 = load i32, ptr %25, align 4, !tbaa !11
  %454 = add nsw i32 %453, 1
  store i32 %454, ptr %25, align 4, !tbaa !11
  br label %180, !llvm.loop !40

455:                                              ; preds = %449, %441
  %456 = landingpad { ptr, i32 }
          cleanup
  %457 = extractvalue { ptr, i32 } %456, 0
  store ptr %457, ptr %6, align 8
  %458 = extractvalue { ptr, i32 } %456, 1
  store i32 %458, ptr %7, align 4
  br label %459

459:                                              ; preds = %455, %437, %433, %429, %385, %381, %377
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %36) #9
  br label %460

460:                                              ; preds = %459, %373
  call void @llvm.lifetime.end.p0(i64 208, ptr %36) #9
  br label %461

461:                                              ; preds = %460, %369, %368, %359
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #9
  br label %462

462:                                              ; preds = %461, %274, %243, %239
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  br label %467

463:                                              ; preds = %183
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #9
  br label %464

464:                                              ; preds = %463
  %465 = load i32, ptr %13, align 4, !tbaa !11
  %466 = add nsw i32 %465, 1
  store i32 %466, ptr %13, align 4, !tbaa !11
  br label %130, !llvm.loop !41

467:                                              ; preds = %462, %214
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  br label %468

468:                                              ; preds = %467, %210
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #9
  br label %469

469:                                              ; preds = %468, %206, %205, %196
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  br label %470

470:                                              ; preds = %469, %184
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #9
  br label %898

471:                                              ; preds = %133
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #9
  %472 = getelementptr inbounds %class.Test, ptr %77, i32 0, i32 3
  %473 = load ptr, ptr %472, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 256, ptr %46) #9
  %474 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %475 unwind label %746

475:                                              ; preds = %471
  %476 = invoke { double, double } @_ZN3JPH4Vec34sOneEv()
          to label %477 unwind label %750

477:                                              ; preds = %475
  %478 = getelementptr inbounds %"class.JPH::Vec3", ptr %47, i32 0, i32 0
  %479 = getelementptr inbounds %union.anon, ptr %478, i32 0, i32 0
  %480 = getelementptr inbounds { double, double }, ptr %479, i32 0, i32 0
  %481 = extractvalue { double, double } %476, 0
  store double %481, ptr %480, align 16
  %482 = getelementptr inbounds { double, double }, ptr %479, i32 0, i32 1
  %483 = extractvalue { double, double } %476, 1
  store double %483, ptr %482, align 8
  %484 = getelementptr inbounds { double, double }, ptr %47, i32 0, i32 0
  %485 = load double, ptr %484, align 16
  %486 = getelementptr inbounds { double, double }, ptr %47, i32 0, i32 1
  %487 = load double, ptr %486, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %474, double %485, double %487, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %488 unwind label %750

488:                                              ; preds = %477
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %48, float noundef 4.000000e+00, float noundef 5.000000e+00, float noundef 0.000000e+00)
          to label %489 unwind label %746

489:                                              ; preds = %488
  %490 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %491 unwind label %746

491:                                              ; preds = %489
  %492 = getelementptr inbounds %"class.JPH::Quat", ptr %49, i32 0, i32 0
  %493 = getelementptr inbounds %"class.JPH::Vec4", ptr %492, i32 0, i32 0
  %494 = getelementptr inbounds %union.anon.4, ptr %493, i32 0, i32 0
  %495 = getelementptr inbounds { double, double }, ptr %494, i32 0, i32 0
  %496 = extractvalue { double, double } %490, 0
  store double %496, ptr %495, align 16
  %497 = getelementptr inbounds { double, double }, ptr %494, i32 0, i32 1
  %498 = extractvalue { double, double } %490, 1
  store double %498, ptr %497, align 8
  %499 = getelementptr inbounds { double, double }, ptr %48, i32 0, i32 0
  %500 = load double, ptr %499, align 16
  %501 = getelementptr inbounds { double, double }, ptr %48, i32 0, i32 1
  %502 = load double, ptr %501, align 8
  %503 = getelementptr inbounds { double, double }, ptr %49, i32 0, i32 0
  %504 = load double, ptr %503, align 16
  %505 = getelementptr inbounds { double, double }, ptr %49, i32 0, i32 1
  %506 = load double, ptr %505, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %46, ptr noundef %474, double %500, double %502, double %504, double %506, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %507 unwind label %746

507:                                              ; preds = %491
  %508 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %473, ptr noundef nonnull align 16 dereferenceable(256) %46)
          to label %509 unwind label %754

509:                                              ; preds = %507
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %46) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr %46) #9
  store ptr %508, ptr %45, align 8, !tbaa !5
  %510 = load ptr, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %50) #9
  %511 = invoke noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %11)
          to label %512 unwind label %759

512:                                              ; preds = %509
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %50, ptr noundef %511, i32 noundef 0, i32 noundef 0)
          to label %513 unwind label %759

513:                                              ; preds = %512
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %510, ptr noundef nonnull align 8 dereferenceable(16) %50)
          to label %514 unwind label %763

514:                                              ; preds = %513
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %50) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %50) #9
  %515 = getelementptr inbounds %class.Test, ptr %77, i32 0, i32 3
  %516 = load ptr, ptr %515, align 8, !tbaa !15
  %517 = load ptr, ptr %45, align 8, !tbaa !5
  %518 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %517)
          to label %519 unwind label %768

519:                                              ; preds = %514
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %516, ptr noundef nonnull align 4 dereferenceable(4) %518, i32 noundef 1)
          to label %520 unwind label %768

520:                                              ; preds = %519
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #9
  %521 = getelementptr inbounds %class.Test, ptr %77, i32 0, i32 3
  %522 = load ptr, ptr %521, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 256, ptr %52) #9
  %523 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %524 unwind label %772

524:                                              ; preds = %520
  %525 = invoke { double, double } @_ZN3JPH4Vec34sOneEv()
          to label %526 unwind label %776

526:                                              ; preds = %524
  %527 = getelementptr inbounds %"class.JPH::Vec3", ptr %53, i32 0, i32 0
  %528 = getelementptr inbounds %union.anon, ptr %527, i32 0, i32 0
  %529 = getelementptr inbounds { double, double }, ptr %528, i32 0, i32 0
  %530 = extractvalue { double, double } %525, 0
  store double %530, ptr %529, align 16
  %531 = getelementptr inbounds { double, double }, ptr %528, i32 0, i32 1
  %532 = extractvalue { double, double } %525, 1
  store double %532, ptr %531, align 8
  %533 = getelementptr inbounds { double, double }, ptr %53, i32 0, i32 0
  %534 = load double, ptr %533, align 16
  %535 = getelementptr inbounds { double, double }, ptr %53, i32 0, i32 1
  %536 = load double, ptr %535, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %523, double %534, double %536, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %537 unwind label %776

537:                                              ; preds = %526
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %54, float noundef 6.000000e+00, float noundef 5.000000e+00, float noundef 0.000000e+00)
          to label %538 unwind label %772

538:                                              ; preds = %537
  %539 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %540 unwind label %772

540:                                              ; preds = %538
  %541 = getelementptr inbounds %"class.JPH::Quat", ptr %55, i32 0, i32 0
  %542 = getelementptr inbounds %"class.JPH::Vec4", ptr %541, i32 0, i32 0
  %543 = getelementptr inbounds %union.anon.4, ptr %542, i32 0, i32 0
  %544 = getelementptr inbounds { double, double }, ptr %543, i32 0, i32 0
  %545 = extractvalue { double, double } %539, 0
  store double %545, ptr %544, align 16
  %546 = getelementptr inbounds { double, double }, ptr %543, i32 0, i32 1
  %547 = extractvalue { double, double } %539, 1
  store double %547, ptr %546, align 8
  %548 = getelementptr inbounds { double, double }, ptr %54, i32 0, i32 0
  %549 = load double, ptr %548, align 16
  %550 = getelementptr inbounds { double, double }, ptr %54, i32 0, i32 1
  %551 = load double, ptr %550, align 8
  %552 = getelementptr inbounds { double, double }, ptr %55, i32 0, i32 0
  %553 = load double, ptr %552, align 16
  %554 = getelementptr inbounds { double, double }, ptr %55, i32 0, i32 1
  %555 = load double, ptr %554, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %52, ptr noundef %523, double %549, double %551, double %553, double %555, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %556 unwind label %772

556:                                              ; preds = %540
  %557 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %522, ptr noundef nonnull align 16 dereferenceable(256) %52)
          to label %558 unwind label %780

558:                                              ; preds = %556
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %52) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr %52) #9
  store ptr %557, ptr %51, align 8, !tbaa !5
  %559 = load ptr, ptr %51, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %56) #9
  %560 = invoke noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %11)
          to label %561 unwind label %785

561:                                              ; preds = %558
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %56, ptr noundef %560, i32 noundef 0, i32 noundef 1)
          to label %562 unwind label %785

562:                                              ; preds = %561
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %559, ptr noundef nonnull align 8 dereferenceable(16) %56)
          to label %563 unwind label %789

563:                                              ; preds = %562
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %56) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %56) #9
  %564 = getelementptr inbounds %class.Test, ptr %77, i32 0, i32 3
  %565 = load ptr, ptr %564, align 8, !tbaa !15
  %566 = load ptr, ptr %51, align 8, !tbaa !5
  %567 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %566)
          to label %568 unwind label %794

568:                                              ; preds = %563
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %565, ptr noundef nonnull align 4 dereferenceable(4) %567, i32 noundef 0)
          to label %569 unwind label %794

569:                                              ; preds = %568
  call void @llvm.lifetime.start.p0(i64 208, ptr %57) #9
  invoke void @_ZN3JPH23HingeConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(208) %57)
          to label %570 unwind label %798

570:                                              ; preds = %569
  call void @llvm.lifetime.start.p0(i64 16, ptr %58) #9
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %58, float noundef 5.000000e+00, float noundef 4.000000e+00, float noundef 0.000000e+00)
          to label %571 unwind label %802

571:                                              ; preds = %570
  %572 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %57, i32 0, i32 6
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %572, ptr align 16 %58, i64 16, i1 false), !tbaa.struct !23
  %573 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %57, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %573, ptr align 16 %572, i64 16, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.end.p0(i64 16, ptr %58) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %59) #9
  %574 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %575 unwind label %806

575:                                              ; preds = %571
  %576 = getelementptr inbounds %"class.JPH::Vec3", ptr %59, i32 0, i32 0
  %577 = getelementptr inbounds %union.anon, ptr %576, i32 0, i32 0
  %578 = getelementptr inbounds { double, double }, ptr %577, i32 0, i32 0
  %579 = extractvalue { double, double } %574, 0
  store double %579, ptr %578, align 16
  %580 = getelementptr inbounds { double, double }, ptr %577, i32 0, i32 1
  %581 = extractvalue { double, double } %574, 1
  store double %581, ptr %580, align 8
  %582 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %57, i32 0, i32 7
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %582, ptr align 16 %59, i64 16, i1 false), !tbaa.struct !23
  %583 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %57, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %583, ptr align 16 %582, i64 16, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.end.p0(i64 16, ptr %59) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %60) #9
  %584 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %585 unwind label %810

585:                                              ; preds = %575
  %586 = getelementptr inbounds %"class.JPH::Vec3", ptr %60, i32 0, i32 0
  %587 = getelementptr inbounds %union.anon, ptr %586, i32 0, i32 0
  %588 = getelementptr inbounds { double, double }, ptr %587, i32 0, i32 0
  %589 = extractvalue { double, double } %584, 0
  store double %589, ptr %588, align 16
  %590 = getelementptr inbounds { double, double }, ptr %587, i32 0, i32 1
  %591 = extractvalue { double, double } %584, 1
  store double %591, ptr %590, align 8
  %592 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %57, i32 0, i32 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %592, ptr align 16 %60, i64 16, i1 false), !tbaa.struct !23
  %593 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %57, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %593, ptr align 16 %592, i64 16, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.end.p0(i64 16, ptr %60) #9
  %594 = invoke noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef -1.000000e+01)
          to label %595 unwind label %814

595:                                              ; preds = %585
  %596 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %57, i32 0, i32 9
  store float %594, ptr %596, align 16, !tbaa !25
  %597 = invoke noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef 1.100000e+02)
          to label %598 unwind label %814

598:                                              ; preds = %595
  %599 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %57, i32 0, i32 10
  store float %597, ptr %599, align 4, !tbaa !38
  %600 = getelementptr inbounds %class.Test, ptr %77, i32 0, i32 2
  %601 = load ptr, ptr %600, align 8, !tbaa !39
  %602 = load ptr, ptr %45, align 8, !tbaa !5
  %603 = load ptr, ptr %51, align 8, !tbaa !5
  %604 = invoke noundef ptr @_ZNK3JPH23HingeConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(208) %57, ptr noundef nonnull align 16 dereferenceable(122) %602, ptr noundef nonnull align 16 dereferenceable(122) %603)
          to label %605 unwind label %814

605:                                              ; preds = %598
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %601, ptr noundef %604)
          to label %606 unwind label %814

606:                                              ; preds = %605
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %57) #9
  call void @llvm.lifetime.end.p0(i64 208, ptr %57) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #9
  %607 = getelementptr inbounds %class.Test, ptr %77, i32 0, i32 3
  %608 = load ptr, ptr %607, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 256, ptr %62) #9
  %609 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %610 unwind label %822

610:                                              ; preds = %606
  %611 = invoke { double, double } @_ZN3JPH4Vec34sOneEv()
          to label %612 unwind label %826

612:                                              ; preds = %610
  %613 = getelementptr inbounds %"class.JPH::Vec3", ptr %63, i32 0, i32 0
  %614 = getelementptr inbounds %union.anon, ptr %613, i32 0, i32 0
  %615 = getelementptr inbounds { double, double }, ptr %614, i32 0, i32 0
  %616 = extractvalue { double, double } %611, 0
  store double %616, ptr %615, align 16
  %617 = getelementptr inbounds { double, double }, ptr %614, i32 0, i32 1
  %618 = extractvalue { double, double } %611, 1
  store double %618, ptr %617, align 8
  %619 = getelementptr inbounds { double, double }, ptr %63, i32 0, i32 0
  %620 = load double, ptr %619, align 16
  %621 = getelementptr inbounds { double, double }, ptr %63, i32 0, i32 1
  %622 = load double, ptr %621, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %609, double %620, double %622, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %623 unwind label %826

623:                                              ; preds = %612
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %64, float noundef 1.000000e+01, float noundef 5.000000e+00, float noundef 0.000000e+00)
          to label %624 unwind label %822

624:                                              ; preds = %623
  %625 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %626 unwind label %822

626:                                              ; preds = %624
  %627 = getelementptr inbounds %"class.JPH::Quat", ptr %65, i32 0, i32 0
  %628 = getelementptr inbounds %"class.JPH::Vec4", ptr %627, i32 0, i32 0
  %629 = getelementptr inbounds %union.anon.4, ptr %628, i32 0, i32 0
  %630 = getelementptr inbounds { double, double }, ptr %629, i32 0, i32 0
  %631 = extractvalue { double, double } %625, 0
  store double %631, ptr %630, align 16
  %632 = getelementptr inbounds { double, double }, ptr %629, i32 0, i32 1
  %633 = extractvalue { double, double } %625, 1
  store double %633, ptr %632, align 8
  %634 = getelementptr inbounds { double, double }, ptr %64, i32 0, i32 0
  %635 = load double, ptr %634, align 16
  %636 = getelementptr inbounds { double, double }, ptr %64, i32 0, i32 1
  %637 = load double, ptr %636, align 8
  %638 = getelementptr inbounds { double, double }, ptr %65, i32 0, i32 0
  %639 = load double, ptr %638, align 16
  %640 = getelementptr inbounds { double, double }, ptr %65, i32 0, i32 1
  %641 = load double, ptr %640, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %62, ptr noundef %609, double %635, double %637, double %639, double %641, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %642 unwind label %822

642:                                              ; preds = %626
  %643 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %608, ptr noundef nonnull align 16 dereferenceable(256) %62)
          to label %644 unwind label %830

644:                                              ; preds = %642
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %62) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr %62) #9
  store ptr %643, ptr %61, align 8, !tbaa !5
  %645 = load ptr, ptr %61, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %66) #9
  %646 = invoke noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %11)
          to label %647 unwind label %835

647:                                              ; preds = %644
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %66, ptr noundef %646, i32 noundef 0, i32 noundef 0)
          to label %648 unwind label %835

648:                                              ; preds = %647
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %645, ptr noundef nonnull align 8 dereferenceable(16) %66)
          to label %649 unwind label %839

649:                                              ; preds = %648
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %66) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %66) #9
  %650 = getelementptr inbounds %class.Test, ptr %77, i32 0, i32 3
  %651 = load ptr, ptr %650, align 8, !tbaa !15
  %652 = load ptr, ptr %61, align 8, !tbaa !5
  %653 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %652)
          to label %654 unwind label %844

654:                                              ; preds = %649
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %651, ptr noundef nonnull align 4 dereferenceable(4) %653, i32 noundef 1)
          to label %655 unwind label %844

655:                                              ; preds = %654
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #9
  %656 = getelementptr inbounds %class.Test, ptr %77, i32 0, i32 3
  %657 = load ptr, ptr %656, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 256, ptr %68) #9
  %658 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %659 unwind label %848

659:                                              ; preds = %655
  %660 = invoke { double, double } @_ZN3JPH4Vec34sOneEv()
          to label %661 unwind label %852

661:                                              ; preds = %659
  %662 = getelementptr inbounds %"class.JPH::Vec3", ptr %69, i32 0, i32 0
  %663 = getelementptr inbounds %union.anon, ptr %662, i32 0, i32 0
  %664 = getelementptr inbounds { double, double }, ptr %663, i32 0, i32 0
  %665 = extractvalue { double, double } %660, 0
  store double %665, ptr %664, align 16
  %666 = getelementptr inbounds { double, double }, ptr %663, i32 0, i32 1
  %667 = extractvalue { double, double } %660, 1
  store double %667, ptr %666, align 8
  %668 = getelementptr inbounds { double, double }, ptr %69, i32 0, i32 0
  %669 = load double, ptr %668, align 16
  %670 = getelementptr inbounds { double, double }, ptr %69, i32 0, i32 1
  %671 = load double, ptr %670, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %658, double %669, double %671, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %672 unwind label %852

672:                                              ; preds = %661
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %70, float noundef 1.200000e+01, float noundef 5.000000e+00, float noundef 0.000000e+00)
          to label %673 unwind label %848

673:                                              ; preds = %672
  %674 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %675 unwind label %848

675:                                              ; preds = %673
  %676 = getelementptr inbounds %"class.JPH::Quat", ptr %71, i32 0, i32 0
  %677 = getelementptr inbounds %"class.JPH::Vec4", ptr %676, i32 0, i32 0
  %678 = getelementptr inbounds %union.anon.4, ptr %677, i32 0, i32 0
  %679 = getelementptr inbounds { double, double }, ptr %678, i32 0, i32 0
  %680 = extractvalue { double, double } %674, 0
  store double %680, ptr %679, align 16
  %681 = getelementptr inbounds { double, double }, ptr %678, i32 0, i32 1
  %682 = extractvalue { double, double } %674, 1
  store double %682, ptr %681, align 8
  %683 = getelementptr inbounds { double, double }, ptr %70, i32 0, i32 0
  %684 = load double, ptr %683, align 16
  %685 = getelementptr inbounds { double, double }, ptr %70, i32 0, i32 1
  %686 = load double, ptr %685, align 8
  %687 = getelementptr inbounds { double, double }, ptr %71, i32 0, i32 0
  %688 = load double, ptr %687, align 16
  %689 = getelementptr inbounds { double, double }, ptr %71, i32 0, i32 1
  %690 = load double, ptr %689, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %68, ptr noundef %658, double %684, double %686, double %688, double %690, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %691 unwind label %848

691:                                              ; preds = %675
  %692 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %657, ptr noundef nonnull align 16 dereferenceable(256) %68)
          to label %693 unwind label %856

693:                                              ; preds = %691
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %68) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr %68) #9
  store ptr %692, ptr %67, align 8, !tbaa !5
  %694 = load ptr, ptr %67, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %72) #9
  %695 = invoke noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %11)
          to label %696 unwind label %861

696:                                              ; preds = %693
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %72, ptr noundef %695, i32 noundef 0, i32 noundef 1)
          to label %697 unwind label %861

697:                                              ; preds = %696
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %694, ptr noundef nonnull align 8 dereferenceable(16) %72)
          to label %698 unwind label %865

698:                                              ; preds = %697
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %72) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %72) #9
  %699 = getelementptr inbounds %class.Test, ptr %77, i32 0, i32 3
  %700 = load ptr, ptr %699, align 8, !tbaa !15
  %701 = load ptr, ptr %67, align 8, !tbaa !5
  %702 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %701)
          to label %703 unwind label %870

703:                                              ; preds = %698
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %700, ptr noundef nonnull align 4 dereferenceable(4) %702, i32 noundef 0)
          to label %704 unwind label %870

704:                                              ; preds = %703
  call void @llvm.lifetime.start.p0(i64 208, ptr %73) #9
  invoke void @_ZN3JPH23HingeConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(208) %73)
          to label %705 unwind label %874

705:                                              ; preds = %704
  call void @llvm.lifetime.start.p0(i64 16, ptr %74) #9
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %74, float noundef 1.100000e+01, float noundef 4.000000e+00, float noundef 0.000000e+00)
          to label %706 unwind label %878

706:                                              ; preds = %705
  %707 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %73, i32 0, i32 6
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %707, ptr align 16 %74, i64 16, i1 false), !tbaa.struct !23
  %708 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %73, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %708, ptr align 16 %707, i64 16, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.end.p0(i64 16, ptr %74) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %75) #9
  %709 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %710 unwind label %882

710:                                              ; preds = %706
  %711 = getelementptr inbounds %"class.JPH::Vec3", ptr %75, i32 0, i32 0
  %712 = getelementptr inbounds %union.anon, ptr %711, i32 0, i32 0
  %713 = getelementptr inbounds { double, double }, ptr %712, i32 0, i32 0
  %714 = extractvalue { double, double } %709, 0
  store double %714, ptr %713, align 16
  %715 = getelementptr inbounds { double, double }, ptr %712, i32 0, i32 1
  %716 = extractvalue { double, double } %709, 1
  store double %716, ptr %715, align 8
  %717 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %73, i32 0, i32 7
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %717, ptr align 16 %75, i64 16, i1 false), !tbaa.struct !23
  %718 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %73, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %718, ptr align 16 %717, i64 16, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.end.p0(i64 16, ptr %75) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %76) #9
  %719 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %720 unwind label %886

720:                                              ; preds = %710
  %721 = getelementptr inbounds %"class.JPH::Vec3", ptr %76, i32 0, i32 0
  %722 = getelementptr inbounds %union.anon, ptr %721, i32 0, i32 0
  %723 = getelementptr inbounds { double, double }, ptr %722, i32 0, i32 0
  %724 = extractvalue { double, double } %719, 0
  store double %724, ptr %723, align 16
  %725 = getelementptr inbounds { double, double }, ptr %722, i32 0, i32 1
  %726 = extractvalue { double, double } %719, 1
  store double %726, ptr %725, align 8
  %727 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %73, i32 0, i32 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %727, ptr align 16 %76, i64 16, i1 false), !tbaa.struct !23
  %728 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %73, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %728, ptr align 16 %727, i64 16, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.end.p0(i64 16, ptr %76) #9
  %729 = invoke noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef -1.000000e+01)
          to label %730 unwind label %890

730:                                              ; preds = %720
  %731 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %73, i32 0, i32 9
  store float %729, ptr %731, align 16, !tbaa !25
  %732 = invoke noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef 1.100000e+02)
          to label %733 unwind label %890

733:                                              ; preds = %730
  %734 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %73, i32 0, i32 10
  store float %732, ptr %734, align 4, !tbaa !38
  %735 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %73, i32 0, i32 11
  %736 = getelementptr inbounds %"class.JPH::SpringSettings", ptr %735, i32 0, i32 1
  store float 1.000000e+00, ptr %736, align 4, !tbaa !24
  %737 = getelementptr inbounds %"class.JPH::HingeConstraintSettings", ptr %73, i32 0, i32 11
  %738 = getelementptr inbounds %"class.JPH::SpringSettings", ptr %737, i32 0, i32 2
  store float 5.000000e-01, ptr %738, align 8, !tbaa !42
  %739 = getelementptr inbounds %class.Test, ptr %77, i32 0, i32 2
  %740 = load ptr, ptr %739, align 8, !tbaa !39
  %741 = load ptr, ptr %61, align 8, !tbaa !5
  %742 = load ptr, ptr %67, align 8, !tbaa !5
  %743 = invoke noundef ptr @_ZNK3JPH23HingeConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(208) %73, ptr noundef nonnull align 16 dereferenceable(122) %741, ptr noundef nonnull align 16 dereferenceable(122) %742)
          to label %744 unwind label %890

744:                                              ; preds = %733
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %740, ptr noundef %743)
          to label %745 unwind label %890

745:                                              ; preds = %744
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %73) #9
  call void @llvm.lifetime.end.p0(i64 208, ptr %73) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #9
  call void @_ZN3JPH3RefINS_16GroupFilterTableEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %11) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #9
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %4) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #9
  ret void

746:                                              ; preds = %491, %489, %488, %471
  %747 = landingpad { ptr, i32 }
          cleanup
  %748 = extractvalue { ptr, i32 } %747, 0
  store ptr %748, ptr %6, align 8
  %749 = extractvalue { ptr, i32 } %747, 1
  store i32 %749, ptr %7, align 4
  br label %758

750:                                              ; preds = %477, %475
  %751 = landingpad { ptr, i32 }
          cleanup
  %752 = extractvalue { ptr, i32 } %751, 0
  store ptr %752, ptr %6, align 8
  %753 = extractvalue { ptr, i32 } %751, 1
  store i32 %753, ptr %7, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %474) #9
  br label %758

754:                                              ; preds = %507
  %755 = landingpad { ptr, i32 }
          cleanup
  %756 = extractvalue { ptr, i32 } %755, 0
  store ptr %756, ptr %6, align 8
  %757 = extractvalue { ptr, i32 } %755, 1
  store i32 %757, ptr %7, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %46) #9
  br label %758

758:                                              ; preds = %754, %750, %746
  call void @llvm.lifetime.end.p0(i64 256, ptr %46) #9
  br label %821

759:                                              ; preds = %512, %509
  %760 = landingpad { ptr, i32 }
          cleanup
  %761 = extractvalue { ptr, i32 } %760, 0
  store ptr %761, ptr %6, align 8
  %762 = extractvalue { ptr, i32 } %760, 1
  store i32 %762, ptr %7, align 4
  br label %767

763:                                              ; preds = %513
  %764 = landingpad { ptr, i32 }
          cleanup
  %765 = extractvalue { ptr, i32 } %764, 0
  store ptr %765, ptr %6, align 8
  %766 = extractvalue { ptr, i32 } %764, 1
  store i32 %766, ptr %7, align 4
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %50) #9
  br label %767

767:                                              ; preds = %763, %759
  call void @llvm.lifetime.end.p0(i64 16, ptr %50) #9
  br label %821

768:                                              ; preds = %519, %514
  %769 = landingpad { ptr, i32 }
          cleanup
  %770 = extractvalue { ptr, i32 } %769, 0
  store ptr %770, ptr %6, align 8
  %771 = extractvalue { ptr, i32 } %769, 1
  store i32 %771, ptr %7, align 4
  br label %821

772:                                              ; preds = %540, %538, %537, %520
  %773 = landingpad { ptr, i32 }
          cleanup
  %774 = extractvalue { ptr, i32 } %773, 0
  store ptr %774, ptr %6, align 8
  %775 = extractvalue { ptr, i32 } %773, 1
  store i32 %775, ptr %7, align 4
  br label %784

776:                                              ; preds = %526, %524
  %777 = landingpad { ptr, i32 }
          cleanup
  %778 = extractvalue { ptr, i32 } %777, 0
  store ptr %778, ptr %6, align 8
  %779 = extractvalue { ptr, i32 } %777, 1
  store i32 %779, ptr %7, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %523) #9
  br label %784

780:                                              ; preds = %556
  %781 = landingpad { ptr, i32 }
          cleanup
  %782 = extractvalue { ptr, i32 } %781, 0
  store ptr %782, ptr %6, align 8
  %783 = extractvalue { ptr, i32 } %781, 1
  store i32 %783, ptr %7, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %52) #9
  br label %784

784:                                              ; preds = %780, %776, %772
  call void @llvm.lifetime.end.p0(i64 256, ptr %52) #9
  br label %820

785:                                              ; preds = %561, %558
  %786 = landingpad { ptr, i32 }
          cleanup
  %787 = extractvalue { ptr, i32 } %786, 0
  store ptr %787, ptr %6, align 8
  %788 = extractvalue { ptr, i32 } %786, 1
  store i32 %788, ptr %7, align 4
  br label %793

789:                                              ; preds = %562
  %790 = landingpad { ptr, i32 }
          cleanup
  %791 = extractvalue { ptr, i32 } %790, 0
  store ptr %791, ptr %6, align 8
  %792 = extractvalue { ptr, i32 } %790, 1
  store i32 %792, ptr %7, align 4
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %56) #9
  br label %793

793:                                              ; preds = %789, %785
  call void @llvm.lifetime.end.p0(i64 16, ptr %56) #9
  br label %820

794:                                              ; preds = %568, %563
  %795 = landingpad { ptr, i32 }
          cleanup
  %796 = extractvalue { ptr, i32 } %795, 0
  store ptr %796, ptr %6, align 8
  %797 = extractvalue { ptr, i32 } %795, 1
  store i32 %797, ptr %7, align 4
  br label %820

798:                                              ; preds = %569
  %799 = landingpad { ptr, i32 }
          cleanup
  %800 = extractvalue { ptr, i32 } %799, 0
  store ptr %800, ptr %6, align 8
  %801 = extractvalue { ptr, i32 } %799, 1
  store i32 %801, ptr %7, align 4
  br label %819

802:                                              ; preds = %570
  %803 = landingpad { ptr, i32 }
          cleanup
  %804 = extractvalue { ptr, i32 } %803, 0
  store ptr %804, ptr %6, align 8
  %805 = extractvalue { ptr, i32 } %803, 1
  store i32 %805, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %58) #9
  br label %818

806:                                              ; preds = %571
  %807 = landingpad { ptr, i32 }
          cleanup
  %808 = extractvalue { ptr, i32 } %807, 0
  store ptr %808, ptr %6, align 8
  %809 = extractvalue { ptr, i32 } %807, 1
  store i32 %809, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %59) #9
  br label %818

810:                                              ; preds = %575
  %811 = landingpad { ptr, i32 }
          cleanup
  %812 = extractvalue { ptr, i32 } %811, 0
  store ptr %812, ptr %6, align 8
  %813 = extractvalue { ptr, i32 } %811, 1
  store i32 %813, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %60) #9
  br label %818

814:                                              ; preds = %605, %598, %595, %585
  %815 = landingpad { ptr, i32 }
          cleanup
  %816 = extractvalue { ptr, i32 } %815, 0
  store ptr %816, ptr %6, align 8
  %817 = extractvalue { ptr, i32 } %815, 1
  store i32 %817, ptr %7, align 4
  br label %818

818:                                              ; preds = %814, %810, %806, %802
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %57) #9
  br label %819

819:                                              ; preds = %818, %798
  call void @llvm.lifetime.end.p0(i64 208, ptr %57) #9
  br label %820

820:                                              ; preds = %819, %794, %793, %784
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #9
  br label %821

821:                                              ; preds = %820, %768, %767, %758
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #9
  br label %898

822:                                              ; preds = %626, %624, %623, %606
  %823 = landingpad { ptr, i32 }
          cleanup
  %824 = extractvalue { ptr, i32 } %823, 0
  store ptr %824, ptr %6, align 8
  %825 = extractvalue { ptr, i32 } %823, 1
  store i32 %825, ptr %7, align 4
  br label %834

826:                                              ; preds = %612, %610
  %827 = landingpad { ptr, i32 }
          cleanup
  %828 = extractvalue { ptr, i32 } %827, 0
  store ptr %828, ptr %6, align 8
  %829 = extractvalue { ptr, i32 } %827, 1
  store i32 %829, ptr %7, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %609) #9
  br label %834

830:                                              ; preds = %642
  %831 = landingpad { ptr, i32 }
          cleanup
  %832 = extractvalue { ptr, i32 } %831, 0
  store ptr %832, ptr %6, align 8
  %833 = extractvalue { ptr, i32 } %831, 1
  store i32 %833, ptr %7, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %62) #9
  br label %834

834:                                              ; preds = %830, %826, %822
  call void @llvm.lifetime.end.p0(i64 256, ptr %62) #9
  br label %897

835:                                              ; preds = %647, %644
  %836 = landingpad { ptr, i32 }
          cleanup
  %837 = extractvalue { ptr, i32 } %836, 0
  store ptr %837, ptr %6, align 8
  %838 = extractvalue { ptr, i32 } %836, 1
  store i32 %838, ptr %7, align 4
  br label %843

839:                                              ; preds = %648
  %840 = landingpad { ptr, i32 }
          cleanup
  %841 = extractvalue { ptr, i32 } %840, 0
  store ptr %841, ptr %6, align 8
  %842 = extractvalue { ptr, i32 } %840, 1
  store i32 %842, ptr %7, align 4
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %66) #9
  br label %843

843:                                              ; preds = %839, %835
  call void @llvm.lifetime.end.p0(i64 16, ptr %66) #9
  br label %897

844:                                              ; preds = %654, %649
  %845 = landingpad { ptr, i32 }
          cleanup
  %846 = extractvalue { ptr, i32 } %845, 0
  store ptr %846, ptr %6, align 8
  %847 = extractvalue { ptr, i32 } %845, 1
  store i32 %847, ptr %7, align 4
  br label %897

848:                                              ; preds = %675, %673, %672, %655
  %849 = landingpad { ptr, i32 }
          cleanup
  %850 = extractvalue { ptr, i32 } %849, 0
  store ptr %850, ptr %6, align 8
  %851 = extractvalue { ptr, i32 } %849, 1
  store i32 %851, ptr %7, align 4
  br label %860

852:                                              ; preds = %661, %659
  %853 = landingpad { ptr, i32 }
          cleanup
  %854 = extractvalue { ptr, i32 } %853, 0
  store ptr %854, ptr %6, align 8
  %855 = extractvalue { ptr, i32 } %853, 1
  store i32 %855, ptr %7, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %658) #9
  br label %860

856:                                              ; preds = %691
  %857 = landingpad { ptr, i32 }
          cleanup
  %858 = extractvalue { ptr, i32 } %857, 0
  store ptr %858, ptr %6, align 8
  %859 = extractvalue { ptr, i32 } %857, 1
  store i32 %859, ptr %7, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %68) #9
  br label %860

860:                                              ; preds = %856, %852, %848
  call void @llvm.lifetime.end.p0(i64 256, ptr %68) #9
  br label %896

861:                                              ; preds = %696, %693
  %862 = landingpad { ptr, i32 }
          cleanup
  %863 = extractvalue { ptr, i32 } %862, 0
  store ptr %863, ptr %6, align 8
  %864 = extractvalue { ptr, i32 } %862, 1
  store i32 %864, ptr %7, align 4
  br label %869

865:                                              ; preds = %697
  %866 = landingpad { ptr, i32 }
          cleanup
  %867 = extractvalue { ptr, i32 } %866, 0
  store ptr %867, ptr %6, align 8
  %868 = extractvalue { ptr, i32 } %866, 1
  store i32 %868, ptr %7, align 4
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %72) #9
  br label %869

869:                                              ; preds = %865, %861
  call void @llvm.lifetime.end.p0(i64 16, ptr %72) #9
  br label %896

870:                                              ; preds = %703, %698
  %871 = landingpad { ptr, i32 }
          cleanup
  %872 = extractvalue { ptr, i32 } %871, 0
  store ptr %872, ptr %6, align 8
  %873 = extractvalue { ptr, i32 } %871, 1
  store i32 %873, ptr %7, align 4
  br label %896

874:                                              ; preds = %704
  %875 = landingpad { ptr, i32 }
          cleanup
  %876 = extractvalue { ptr, i32 } %875, 0
  store ptr %876, ptr %6, align 8
  %877 = extractvalue { ptr, i32 } %875, 1
  store i32 %877, ptr %7, align 4
  br label %895

878:                                              ; preds = %705
  %879 = landingpad { ptr, i32 }
          cleanup
  %880 = extractvalue { ptr, i32 } %879, 0
  store ptr %880, ptr %6, align 8
  %881 = extractvalue { ptr, i32 } %879, 1
  store i32 %881, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %74) #9
  br label %894

882:                                              ; preds = %706
  %883 = landingpad { ptr, i32 }
          cleanup
  %884 = extractvalue { ptr, i32 } %883, 0
  store ptr %884, ptr %6, align 8
  %885 = extractvalue { ptr, i32 } %883, 1
  store i32 %885, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %75) #9
  br label %894

886:                                              ; preds = %710
  %887 = landingpad { ptr, i32 }
          cleanup
  %888 = extractvalue { ptr, i32 } %887, 0
  store ptr %888, ptr %6, align 8
  %889 = extractvalue { ptr, i32 } %887, 1
  store i32 %889, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %76) #9
  br label %894

890:                                              ; preds = %744, %733, %730, %720
  %891 = landingpad { ptr, i32 }
          cleanup
  %892 = extractvalue { ptr, i32 } %891, 0
  store ptr %892, ptr %6, align 8
  %893 = extractvalue { ptr, i32 } %891, 1
  store i32 %893, ptr %7, align 4
  br label %894

894:                                              ; preds = %890, %886, %882, %878
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %73) #9
  br label %895

895:                                              ; preds = %894, %874
  call void @llvm.lifetime.end.p0(i64 208, ptr %73) #9
  br label %896

896:                                              ; preds = %895, %870, %869, %860
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #9
  br label %897

897:                                              ; preds = %896, %844, %843, %834
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #9
  br label %898

898:                                              ; preds = %897, %821, %470, %125
  call void @_ZN3JPH3RefINS_16GroupFilterTableEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %11) #9
  br label %899

899:                                              ; preds = %898, %111, %107
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #9
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %4) #9
  br label %900

900:                                              ; preds = %899, %103
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #9
  br label %901

901:                                              ; preds = %900
  %902 = load ptr, ptr %6, align 8
  %903 = load i32, ptr %7, align 4
  %904 = insertvalue { ptr, i32 } poison, ptr %902, 0
  %905 = insertvalue { ptr, i32 } %904, i32 %903, 1
  resume { ptr, i32 } %905
}

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 @_ZN3JPH8BoxShapenwEm(i64 noundef) #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80), double, double, float noundef, ptr noundef) unnamed_addr #1 align 2

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_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) #5 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH16GroupFilterTable16DisableCollisionEjj(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef, i32 noundef) #1 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 #4 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: mustprogress uwtable
declare dso_local void @_ZNSt26linear_congruential_engineImLm16807ELm0ELm2147483647EEC2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #1 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt3absf(float noundef) #7

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

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

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

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

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

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

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

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

declare noundef ptr @_ZNK3JPH23HingeConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(208), ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 16 dereferenceable(122)) unnamed_addr #2

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

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

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="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 #5 = { alwaysinline mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { 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, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = !{!16, !6, i64 24}
!16 = !{!"_ZTS4Test", !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !17, i64 48, !18, i64 56}
!17 = !{!"bool", !7, i64 0}
!18 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !19, i64 0}
!19 = !{!"_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, !20, i64 8, !21, i64 16, !20, i64 24, !22, i64 32, !6, i64 48}
!20 = !{!"long", !7, i64 0}
!21 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!22 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !10, i64 0, !20, i64 8}
!23 = !{i64 0, i64 16, !24}
!24 = !{!7, !7, i64 0}
!25 = !{!26, !10, i64 144}
!26 = !{!"_ZTSN3JPH23HingeConstraintSettingsE", !27, i64 0, !33, i64 40, !34, i64 48, !34, i64 64, !34, i64 80, !34, i64 96, !34, i64 112, !34, i64 128, !10, i64 144, !10, i64 148, !35, i64 152, !10, i64 164, !37, i64 168}
!27 = !{!"_ZTSN3JPH25TwoBodyConstraintSettingsE", !28, i64 0}
!28 = !{!"_ZTSN3JPH18ConstraintSettingsE", !29, i64 0, !30, i64 8, !17, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !10, i64 28, !20, i64 32}
!29 = !{!"_ZTSN3JPH18SerializableObjectE"}
!30 = !{!"_ZTSN3JPH9RefTargetINS_18ConstraintSettingsEEE", !31, i64 0}
!31 = !{!"_ZTSSt6atomicIjE", !32, i64 0}
!32 = !{!"_ZTSSt13__atomic_baseIjE", !12, i64 0}
!33 = !{!"_ZTSN3JPH16EConstraintSpaceE", !7, i64 0}
!34 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!35 = !{!"_ZTSN3JPH14SpringSettingsE", !36, i64 0, !7, i64 4, !10, i64 8}
!36 = !{!"_ZTSN3JPH11ESpringModeE", !7, i64 0}
!37 = !{!"_ZTSN3JPH13MotorSettingsE", !35, i64 0, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24}
!38 = !{!26, !10, i64 148}
!39 = !{!16, !6, i64 16}
!40 = distinct !{!40, !14}
!41 = distinct !{!41, !14}
!42 = !{!26, !10, i64 160}


; 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::RefConst" = type { ptr }
%"class.JPH::Ref" = 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.std::linear_congruential_engine" = type { i64 }
%"class.std::uniform_real_distribution" = type { %"struct.std::uniform_real_distribution<float>::param_type" }
%"struct.std::uniform_real_distribution<float>::param_type" = type { float, float }
%"class.JPH::HingeConstraintSettings" = type <{ %"class.JPH::TwoBodyConstraintSettings", i32, [4 x i8], %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", float, float, %"class.JPH::SpringSettings", float, %"class.JPH::MotorSettings", [12 x i8] }>
%"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::SpringSettings" = type { i8, %union.anon.12, float }
%union.anon.12 = type { float }
%"class.JPH::MotorSettings" = type { %"class.JPH::SpringSettings", float, float, float, 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 @_ZN19HingeConstraintTest10InitializeEv(ptr noundef nonnull align 8 dereferenceable(112) %0) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.JPH::RefConst", align 8
  %3 = alloca %"class.JPH::Ref", 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.std::linear_congruential_engine", align 8
  %8 = alloca %"class.std::uniform_real_distribution", align 4
  %9 = alloca %"class.JPH::Vec3", align 16
  %10 = alloca %"class.JPH::Vec3", align 16
  %11 = alloca %"class.JPH::BodyCreationSettings", align 16
  %12 = alloca %"class.JPH::CollisionGroup", align 8
  %13 = alloca %"class.JPH::HingeConstraintSettings", align 16
  %14 = alloca %"class.JPH::Vec3", align 16
  %15 = alloca %"class.JPH::Vec3", align 16
  %16 = alloca %"class.JPH::BodyCreationSettings", align 16
  %17 = alloca %"class.JPH::Vec3", align 16
  %18 = alloca %"class.JPH::CollisionGroup", align 8
  %19 = alloca %"class.JPH::BodyCreationSettings", align 16
  %20 = alloca %"class.JPH::Vec3", align 16
  %21 = alloca %"class.JPH::CollisionGroup", align 8
  %22 = alloca %"class.JPH::HingeConstraintSettings", align 16
  %23 = alloca %"class.JPH::Vec3", align 16
  %24 = alloca %"class.JPH::BodyCreationSettings", align 16
  %25 = alloca %"class.JPH::Vec3", align 16
  %26 = alloca %"class.JPH::CollisionGroup", align 8
  %27 = alloca %"class.JPH::BodyCreationSettings", align 16
  %28 = alloca %"class.JPH::Vec3", align 16
  %29 = alloca %"class.JPH::CollisionGroup", align 8
  %30 = alloca %"class.JPH::HingeConstraintSettings", align 16
  %31 = alloca %"class.JPH::Vec3", align 16
  %32 = 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
  %33 = tail call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  %34 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 2.000000e+00)
          to label %35 unwind label %55

35:                                               ; preds = %1
  %36 = extractvalue { double, double } %34, 0
  %37 = extractvalue { double, double } %34, 1
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %33, double %36, double %37, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %38 unwind label %55

38:                                               ; preds = %35
  call void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull %33)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #9
  %39 = invoke noundef ptr @_ZN3JPH16GroupFilterTablenwEm(i64 noundef 40)
          to label %40 unwind label %57

40:                                               ; preds = %38
  invoke void @_ZN3JPH16GroupFilterTableC2Ej(ptr noundef nonnull align 8 dereferenceable(40) %39, i32 noundef 15)
          to label %41 unwind label %59

41:                                               ; preds = %40
  invoke void @_ZN3JPH3RefINS_16GroupFilterTableEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull %39)
          to label %.preheader176 unwind label %57

.preheader176:                                    ; preds = %41, %61
  %.0123 = phi i32 [ %63, %61 ], [ 0, %41 ]
  %exitcond.not = icmp eq i32 %.0123, 14
  br i1 %exitcond.not, label %.preheader175, label %61

.preheader175:                                    ; preds = %.preheader176
  %42 = getelementptr inbounds i8, ptr %0, i64 24
  %.sroa.265.0..sroa_idx = getelementptr inbounds i8, ptr %4, i64 8
  %43 = getelementptr inbounds i8, ptr %10, i64 8
  %44 = getelementptr inbounds i8, ptr %9, i64 8
  %45 = getelementptr inbounds i8, ptr %15, i64 8
  %46 = getelementptr inbounds i8, ptr %13, i64 96
  %.sroa.538.0..sroa_idx = getelementptr inbounds i8, ptr %13, i64 104
  %47 = getelementptr inbounds i8, ptr %13, i64 48
  %48 = getelementptr inbounds i8, ptr %13, i64 112
  %.sroa.536.0..sroa_idx = getelementptr inbounds i8, ptr %13, i64 120
  %49 = getelementptr inbounds i8, ptr %13, i64 64
  %50 = getelementptr inbounds i8, ptr %13, i64 128
  %.sroa.534.0..sroa_idx = getelementptr inbounds i8, ptr %13, i64 136
  %51 = getelementptr inbounds i8, ptr %13, i64 80
  %52 = getelementptr inbounds i8, ptr %14, i64 8
  %53 = getelementptr inbounds i8, ptr %13, i64 144
  %54 = getelementptr inbounds i8, ptr %0, i64 16
  br label %69

55:                                               ; preds = %35, %1
  %56 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %33) #9
  br label %449

57:                                               ; preds = %41, %38
  %58 = landingpad { ptr, i32 }
          cleanup
  br label %448

59:                                               ; preds = %40
  %60 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH16GroupFilterTabledlEPv(ptr noundef %39) #9
  br label %448

61:                                               ; preds = %.preheader176
  %62 = call noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %3)
  %63 = add nuw nsw i32 %.0123, 1
  invoke void @_ZN3JPH16GroupFilterTable16DisableCollisionEjj(ptr noundef nonnull align 8 dereferenceable(40) %62, i32 noundef %.0123, i32 noundef %63)
          to label %.preheader176 unwind label %64, !llvm.loop !5

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

66:                                               ; preds = %91
  %67 = load ptr, ptr %42, align 8, !tbaa !7
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %16) #9
  %68 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %220 unwind label %367

69:                                               ; preds = %.preheader175, %91
  %70 = phi i1 [ true, %.preheader175 ], [ false, %91 ]
  %.0124179 = phi i32 [ 0, %.preheader175 ], [ 1, %91 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #9
  %71 = sub nsw i32 0, %.0124179
  %72 = sitofp i32 %71 to float
  %73 = fmul float %72, 2.000000e+01
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %4, float noundef 0.000000e+00, float noundef 5.000000e+01, float noundef %73)
          to label %74 unwind label %92

74:                                               ; preds = %69
  %75 = load ptr, ptr %42, align 8, !tbaa !7
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %5) #9
  %76 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %2)
  %.sroa.064.0.copyload = load double, ptr %4, align 16
  %.sroa.265.0.copyload = load double, ptr %.sroa.265.0..sroa_idx, align 8, !tbaa !19
  %77 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %78 unwind label %94

78:                                               ; preds = %74
  %79 = extractvalue { double, double } %77, 0
  %80 = extractvalue { double, double } %77, 1
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %5, ptr noundef %76, double %.sroa.064.0.copyload, double %.sroa.265.0.copyload, double %79, double %80, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %81 unwind label %94

81:                                               ; preds = %78
  %82 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %75, ptr noundef nonnull align 16 dereferenceable(256) %5)
          to label %83 unwind label %96

83:                                               ; preds = %81
  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
  %84 = call noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %3)
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef %84, i32 noundef %.0124179, i32 noundef 0)
          to label %85 unwind label %99

85:                                               ; preds = %83
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %82, ptr noundef nonnull align 8 dereferenceable(16) %6)
          to label %86 unwind label %101

86:                                               ; preds = %85
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #9
  %87 = load ptr, ptr %42, align 8, !tbaa !7
  %88 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %82)
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %87, ptr noundef nonnull align 4 dereferenceable(4) %88, i32 noundef 1)
          to label %89 unwind label %104

89:                                               ; preds = %86
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #9
  invoke void @_ZNSt26linear_congruential_engineImLm16807ELm0ELm2147483647EEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %90 unwind label %106

90:                                               ; preds = %89
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #9
  invoke void @_ZNSt25uniform_real_distributionIfEC2Eff(ptr noundef nonnull align 4 dereferenceable(8) %8, float noundef -1.000000e+00, float noundef 1.000000e+00)
          to label %.preheader unwind label %108

91:                                               ; preds = %211
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #9
  br i1 %70, label %69, label %66, !llvm.loop !20

92:                                               ; preds = %69
  %93 = landingpad { ptr, i32 }
          cleanup
  br label %219

94:                                               ; preds = %78, %74
  %95 = landingpad { ptr, i32 }
          cleanup
  br label %98

96:                                               ; preds = %81
  %97 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %5) #9
  br label %98

98:                                               ; preds = %96, %94
  %.pn152 = phi { ptr, i32 } [ %97, %96 ], [ %95, %94 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %5) #9
  br label %219

99:                                               ; preds = %83
  %100 = landingpad { ptr, i32 }
          cleanup
  br label %103

101:                                              ; preds = %85
  %102 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #9
  br label %103

103:                                              ; preds = %101, %99
  %.pn154 = phi { ptr, i32 } [ %102, %101 ], [ %100, %99 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #9
  br label %219

104:                                              ; preds = %86
  %105 = landingpad { ptr, i32 }
          cleanup
  br label %219

106:                                              ; preds = %89
  %107 = landingpad { ptr, i32 }
          cleanup
  br label %218

108:                                              ; preds = %90
  %109 = landingpad { ptr, i32 }
          cleanup
  br label %217

.preheader:                                       ; preds = %90, %211
  %.0125178 = phi ptr [ %142, %211 ], [ %82, %90 ]
  %.0126177 = phi i32 [ %212, %211 ], [ 1, %90 ]
  br i1 %70, label %110, label %121

110:                                              ; preds = %.preheader
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %9, float noundef 4.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %111 unwind label %117

111:                                              ; preds = %110
  %112 = load double, ptr %9, align 16
  %113 = load double, ptr %44, align 8
  %114 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %4, double %112, double %113)
          to label %115 unwind label %117

115:                                              ; preds = %111
  %116 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %138 unwind label %119

117:                                              ; preds = %130, %129, %127, %123, %121, %111, %110
  %118 = landingpad { ptr, i32 }
          cleanup
  br label %217

119:                                              ; preds = %115
  %120 = landingpad { ptr, i32 }
          cleanup
  br label %217

121:                                              ; preds = %.preheader
  %122 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %123 unwind label %117

123:                                              ; preds = %121
  %124 = call noundef float @_ZSt3absf(float noundef %122)
  %125 = fadd float %124, 4.000000e+00
  %126 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %127 unwind label %117

127:                                              ; preds = %123
  %128 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %129 unwind label %117

129:                                              ; preds = %127
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %10, float noundef %125, float noundef %126, float noundef %128)
          to label %130 unwind label %117

130:                                              ; preds = %129
  %131 = load double, ptr %10, align 16
  %132 = load double, ptr %43, align 8
  %133 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %4, double %131, double %132)
          to label %134 unwind label %117

134:                                              ; preds = %130
  %135 = invoke { double, double } @_ZN3JPH4Quat7sRandomISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEES0_RT_(ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %138 unwind label %136

136:                                              ; preds = %134
  %137 = landingpad { ptr, i32 }
          cleanup
  br label %217

138:                                              ; preds = %134, %115
  %.pn156 = phi { double, double } [ %116, %115 ], [ %135, %134 ]
  %.sroa.6.0 = extractvalue { double, double } %.pn156, 1
  %.sroa.057.0 = extractvalue { double, double } %.pn156, 0
  %139 = load ptr, ptr %42, align 8, !tbaa !7
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %11) #9
  %140 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %2)
  %.sroa.047.0.copyload = load double, ptr %4, align 16
  %.sroa.248.0.copyload = load double, ptr %.sroa.265.0..sroa_idx, align 8, !tbaa !19
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %11, ptr noundef %140, double %.sroa.047.0.copyload, double %.sroa.248.0.copyload, double %.sroa.057.0, double %.sroa.6.0, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %141 unwind label %166

141:                                              ; preds = %138
  %142 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %139, ptr noundef nonnull align 16 dereferenceable(256) %11)
          to label %143 unwind label %168

143:                                              ; preds = %141
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %11) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %11) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #9
  %144 = call noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %3)
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %12, ptr noundef %144, i32 noundef %.0124179, i32 noundef %.0126177)
          to label %145 unwind label %171

145:                                              ; preds = %143
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %142, ptr noundef nonnull align 8 dereferenceable(16) %12)
          to label %146 unwind label %173

146:                                              ; preds = %145
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %12) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #9
  %147 = load ptr, ptr %42, align 8, !tbaa !7
  %148 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %142)
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %147, ptr noundef nonnull align 4 dereferenceable(4) %148, i32 noundef 0)
          to label %149 unwind label %176

149:                                              ; preds = %146
  call void @llvm.lifetime.start.p0(i64 208, ptr nonnull %13) #9
  invoke void @_ZN3JPH23HingeConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(208) %13)
          to label %150 unwind label %178

150:                                              ; preds = %149
  %151 = and i32 %.0126177, 1
  %152 = icmp eq i32 %151, 0
  br i1 %152, label %153, label %186

153:                                              ; preds = %150
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %14, float noundef -2.000000e+00, float noundef 0.000000e+00, float noundef 2.000000e+00)
          to label %154 unwind label %180

154:                                              ; preds = %153
  %155 = load double, ptr %14, align 16
  %156 = load double, ptr %52, align 8
  %157 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %4, double %155, double %156)
          to label %158 unwind label %180

158:                                              ; preds = %154
  %159 = extractvalue { double, double } %157, 0
  %160 = extractvalue { double, double } %157, 1
  store double %159, ptr %46, align 16
  store double %160, ptr %.sroa.538.0..sroa_idx, align 8, !tbaa !19
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %47, ptr noundef nonnull align 16 dereferenceable(16) %46, i64 16, i1 false), !tbaa.struct !21
  %161 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %162 unwind label %182

162:                                              ; preds = %158
  %163 = extractvalue { double, double } %161, 0
  %164 = extractvalue { double, double } %161, 1
  store double %163, ptr %48, align 16
  store double %164, ptr %.sroa.536.0..sroa_idx, align 8, !tbaa !19
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %49, ptr noundef nonnull align 16 dereferenceable(16) %48, i64 16, i1 false), !tbaa.struct !21
  %165 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %205 unwind label %184

166:                                              ; preds = %138
  %167 = landingpad { ptr, i32 }
          cleanup
  br label %170

168:                                              ; preds = %141
  %169 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %11) #9
  br label %170

170:                                              ; preds = %168, %166
  %.pn158 = phi { ptr, i32 } [ %169, %168 ], [ %167, %166 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %11) #9
  br label %217

171:                                              ; preds = %143
  %172 = landingpad { ptr, i32 }
          cleanup
  br label %175

173:                                              ; preds = %145
  %174 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %12) #9
  br label %175

175:                                              ; preds = %173, %171
  %.pn160 = phi { ptr, i32 } [ %174, %173 ], [ %172, %171 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #9
  br label %217

176:                                              ; preds = %146
  %177 = landingpad { ptr, i32 }
          cleanup
  br label %217

178:                                              ; preds = %149
  %179 = landingpad { ptr, i32 }
          cleanup
  br label %216

180:                                              ; preds = %154, %153
  %181 = landingpad { ptr, i32 }
          cleanup
  br label %215

182:                                              ; preds = %158
  %183 = landingpad { ptr, i32 }
          cleanup
  br label %215

184:                                              ; preds = %162
  %185 = landingpad { ptr, i32 }
          cleanup
  br label %215

186:                                              ; preds = %150
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %15, float noundef -2.000000e+00, float noundef -2.000000e+00, float noundef 0.000000e+00)
          to label %187 unwind label %199

187:                                              ; preds = %186
  %188 = load double, ptr %15, align 16
  %189 = load double, ptr %45, align 8
  %190 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %4, double %188, double %189)
          to label %191 unwind label %199

191:                                              ; preds = %187
  %192 = extractvalue { double, double } %190, 0
  %193 = extractvalue { double, double } %190, 1
  store double %192, ptr %46, align 16
  store double %193, ptr %.sroa.538.0..sroa_idx, align 8, !tbaa !19
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %47, ptr noundef nonnull align 16 dereferenceable(16) %46, i64 16, i1 false), !tbaa.struct !21
  %194 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %195 unwind label %201

195:                                              ; preds = %191
  %196 = extractvalue { double, double } %194, 0
  %197 = extractvalue { double, double } %194, 1
  store double %196, ptr %48, align 16
  store double %197, ptr %.sroa.536.0..sroa_idx, align 8, !tbaa !19
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %49, ptr noundef nonnull align 16 dereferenceable(16) %48, i64 16, i1 false), !tbaa.struct !21
  %198 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %205 unwind label %203

199:                                              ; preds = %187, %186
  %200 = landingpad { ptr, i32 }
          cleanup
  br label %215

201:                                              ; preds = %191
  %202 = landingpad { ptr, i32 }
          cleanup
  br label %215

203:                                              ; preds = %195
  %204 = landingpad { ptr, i32 }
          cleanup
  br label %215

205:                                              ; preds = %195, %162
  %.sink = phi { double, double } [ %165, %162 ], [ %198, %195 ]
  %206 = extractvalue { double, double } %.sink, 0
  %207 = extractvalue { double, double } %.sink, 1
  store double %206, ptr %50, align 16
  store double %207, ptr %.sroa.534.0..sroa_idx, align 8, !tbaa !19
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %51, ptr noundef nonnull align 16 dereferenceable(16) %50, i64 16, i1 false)
  store <2 x float> <float 0xBFC6571840000000, float 0x3FD6571840000000>, ptr %53, align 16, !tbaa !22
  %208 = load ptr, ptr %54, align 8, !tbaa !23
  %209 = invoke noundef ptr @_ZNK3JPH23HingeConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(208) %13, ptr noundef nonnull align 16 dereferenceable(122) %.0125178, ptr noundef nonnull align 16 dereferenceable(122) %142)
          to label %210 unwind label %213

210:                                              ; preds = %205
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %208, ptr noundef %209)
          to label %211 unwind label %213

211:                                              ; preds = %210
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %13) #9
  call void @llvm.lifetime.end.p0(i64 208, ptr nonnull %13) #9
  %212 = add nuw nsw i32 %.0126177, 1
  %exitcond180.not = icmp eq i32 %212, 15
  br i1 %exitcond180.not, label %91, label %.preheader, !llvm.loop !24

213:                                              ; preds = %210, %205
  %214 = landingpad { ptr, i32 }
          cleanup
  br label %215

215:                                              ; preds = %213, %203, %201, %199, %184, %182, %180
  %.pn162 = phi { ptr, i32 } [ %214, %213 ], [ %185, %184 ], [ %183, %182 ], [ %181, %180 ], [ %204, %203 ], [ %202, %201 ], [ %200, %199 ]
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %13) #9
  br label %216

216:                                              ; preds = %215, %178
  %.pn162.pn = phi { ptr, i32 } [ %.pn162, %215 ], [ %179, %178 ]
  call void @llvm.lifetime.end.p0(i64 208, ptr nonnull %13) #9
  br label %217

217:                                              ; preds = %117, %119, %136, %216, %176, %175, %170, %108
  %.pn162.pn.pn.pn.pn = phi { ptr, i32 } [ %109, %108 ], [ %120, %119 ], [ %118, %117 ], [ %137, %136 ], [ %.pn162.pn, %216 ], [ %177, %176 ], [ %.pn160, %175 ], [ %.pn158, %170 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #9
  br label %218

218:                                              ; preds = %217, %106
  %.pn162.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn162.pn.pn.pn.pn, %217 ], [ %107, %106 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #9
  br label %219

219:                                              ; preds = %98, %103, %104, %218, %92
  %.pn162.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %93, %92 ], [ %.pn162.pn.pn.pn.pn.pn, %218 ], [ %105, %104 ], [ %.pn154, %103 ], [ %.pn152, %98 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #9
  br label %447

220:                                              ; preds = %66
  %221 = invoke { double, double } @_ZN3JPH4Vec34sOneEv()
          to label %222 unwind label %369

222:                                              ; preds = %220
  %223 = extractvalue { double, double } %221, 0
  %224 = extractvalue { double, double } %221, 1
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %68, double %223, double %224, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %225 unwind label %369

225:                                              ; preds = %222
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %17, float noundef 4.000000e+00, float noundef 5.000000e+00, float noundef 0.000000e+00)
          to label %226 unwind label %367

226:                                              ; preds = %225
  %227 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %228 unwind label %367

228:                                              ; preds = %226
  %229 = extractvalue { double, double } %227, 0
  %230 = extractvalue { double, double } %227, 1
  %231 = load double, ptr %17, align 16
  %232 = getelementptr inbounds i8, ptr %17, i64 8
  %233 = load double, ptr %232, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %16, ptr noundef nonnull %68, double %231, double %233, double %229, double %230, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %234 unwind label %367

234:                                              ; preds = %228
  %235 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %67, ptr noundef nonnull align 16 dereferenceable(256) %16)
          to label %236 unwind label %371

236:                                              ; preds = %234
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %16) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %16) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #9
  %237 = call noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %3)
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %18, ptr noundef %237, i32 noundef 0, i32 noundef 0)
          to label %238 unwind label %374

238:                                              ; preds = %236
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %235, ptr noundef nonnull align 8 dereferenceable(16) %18)
          to label %239 unwind label %376

239:                                              ; preds = %238
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %18) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #9
  %240 = load ptr, ptr %42, align 8, !tbaa !7
  %241 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %235)
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %240, ptr noundef nonnull align 4 dereferenceable(4) %241, i32 noundef 1)
          to label %242 unwind label %379

242:                                              ; preds = %239
  %243 = load ptr, ptr %42, align 8, !tbaa !7
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %19) #9
  %244 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %245 unwind label %381

245:                                              ; preds = %242
  %246 = invoke { double, double } @_ZN3JPH4Vec34sOneEv()
          to label %247 unwind label %383

247:                                              ; preds = %245
  %248 = extractvalue { double, double } %246, 0
  %249 = extractvalue { double, double } %246, 1
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %244, double %248, double %249, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %250 unwind label %383

250:                                              ; preds = %247
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %20, float noundef 6.000000e+00, float noundef 5.000000e+00, float noundef 0.000000e+00)
          to label %251 unwind label %381

251:                                              ; preds = %250
  %252 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %253 unwind label %381

253:                                              ; preds = %251
  %254 = extractvalue { double, double } %252, 0
  %255 = extractvalue { double, double } %252, 1
  %256 = load double, ptr %20, align 16
  %257 = getelementptr inbounds i8, ptr %20, i64 8
  %258 = load double, ptr %257, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %19, ptr noundef nonnull %244, double %256, double %258, double %254, double %255, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %259 unwind label %381

259:                                              ; preds = %253
  %260 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %243, ptr noundef nonnull align 16 dereferenceable(256) %19)
          to label %261 unwind label %385

261:                                              ; preds = %259
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %19) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %19) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %21) #9
  %262 = call noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %3)
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %21, ptr noundef %262, i32 noundef 0, i32 noundef 1)
          to label %263 unwind label %388

263:                                              ; preds = %261
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %260, ptr noundef nonnull align 8 dereferenceable(16) %21)
          to label %264 unwind label %390

264:                                              ; preds = %263
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %21) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #9
  %265 = load ptr, ptr %42, align 8, !tbaa !7
  %266 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %260)
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %265, ptr noundef nonnull align 4 dereferenceable(4) %266, i32 noundef 0)
          to label %267 unwind label %393

267:                                              ; preds = %264
  call void @llvm.lifetime.start.p0(i64 208, ptr nonnull %22) #9
  invoke void @_ZN3JPH23HingeConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(208) %22)
          to label %268 unwind label %395

268:                                              ; preds = %267
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %23) #9
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %23, float noundef 5.000000e+00, float noundef 4.000000e+00, float noundef 0.000000e+00)
          to label %269 unwind label %397

269:                                              ; preds = %268
  %270 = getelementptr inbounds i8, ptr %22, i64 96
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %270, ptr noundef nonnull align 16 dereferenceable(16) %23, i64 16, i1 false), !tbaa.struct !21
  %271 = getelementptr inbounds i8, ptr %22, i64 48
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %271, ptr noundef nonnull align 16 dereferenceable(16) %23, i64 16, i1 false)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #9
  %272 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %273 unwind label %399

273:                                              ; preds = %269
  %274 = extractvalue { double, double } %272, 0
  %275 = extractvalue { double, double } %272, 1
  %276 = getelementptr inbounds i8, ptr %22, i64 112
  store double %274, ptr %276, align 16
  %.sroa.518.0..sroa_idx = getelementptr inbounds i8, ptr %22, i64 120
  store double %275, ptr %.sroa.518.0..sroa_idx, align 8, !tbaa !19
  %277 = getelementptr inbounds i8, ptr %22, i64 64
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %277, ptr noundef nonnull align 16 dereferenceable(16) %276, i64 16, i1 false), !tbaa.struct !21
  %278 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %279 unwind label %401

279:                                              ; preds = %273
  %280 = extractvalue { double, double } %278, 0
  %281 = extractvalue { double, double } %278, 1
  %282 = getelementptr inbounds i8, ptr %22, i64 128
  store double %280, ptr %282, align 16
  %.sroa.516.0..sroa_idx = getelementptr inbounds i8, ptr %22, i64 136
  store double %281, ptr %.sroa.516.0..sroa_idx, align 8, !tbaa !19
  %283 = getelementptr inbounds i8, ptr %22, i64 80
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %283, ptr noundef nonnull align 16 dereferenceable(16) %282, i64 16, i1 false), !tbaa.struct !21
  %284 = call noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef -1.000000e+01)
  %285 = getelementptr inbounds i8, ptr %22, i64 144
  store float %284, ptr %285, align 16, !tbaa !25
  %286 = call noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef 1.100000e+02)
  %287 = getelementptr inbounds i8, ptr %22, i64 148
  store float %286, ptr %287, align 4, !tbaa !39
  %288 = load ptr, ptr %54, align 8, !tbaa !23
  %289 = invoke noundef ptr @_ZNK3JPH23HingeConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(208) %22, ptr noundef nonnull align 16 dereferenceable(122) %235, ptr noundef nonnull align 16 dereferenceable(122) %260)
          to label %290 unwind label %403

290:                                              ; preds = %279
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %288, ptr noundef %289)
          to label %291 unwind label %403

291:                                              ; preds = %290
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %22) #9
  call void @llvm.lifetime.end.p0(i64 208, ptr nonnull %22) #9
  %292 = load ptr, ptr %42, align 8, !tbaa !7
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %24) #9
  %293 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %294 unwind label %407

294:                                              ; preds = %291
  %295 = invoke { double, double } @_ZN3JPH4Vec34sOneEv()
          to label %296 unwind label %409

296:                                              ; preds = %294
  %297 = extractvalue { double, double } %295, 0
  %298 = extractvalue { double, double } %295, 1
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %293, double %297, double %298, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %299 unwind label %409

299:                                              ; preds = %296
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %25, float noundef 1.000000e+01, float noundef 5.000000e+00, float noundef 0.000000e+00)
          to label %300 unwind label %407

300:                                              ; preds = %299
  %301 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %302 unwind label %407

302:                                              ; preds = %300
  %303 = extractvalue { double, double } %301, 0
  %304 = extractvalue { double, double } %301, 1
  %305 = load double, ptr %25, align 16
  %306 = getelementptr inbounds i8, ptr %25, i64 8
  %307 = load double, ptr %306, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %24, ptr noundef nonnull %293, double %305, double %307, double %303, double %304, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %308 unwind label %407

308:                                              ; preds = %302
  %309 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %292, ptr noundef nonnull align 16 dereferenceable(256) %24)
          to label %310 unwind label %411

310:                                              ; preds = %308
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %24) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %24) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %26) #9
  %311 = call noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %3)
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %26, ptr noundef %311, i32 noundef 0, i32 noundef 0)
          to label %312 unwind label %414

312:                                              ; preds = %310
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %309, ptr noundef nonnull align 8 dereferenceable(16) %26)
          to label %313 unwind label %416

313:                                              ; preds = %312
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %26) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %26) #9
  %314 = load ptr, ptr %42, align 8, !tbaa !7
  %315 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %309)
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %314, ptr noundef nonnull align 4 dereferenceable(4) %315, i32 noundef 1)
          to label %316 unwind label %419

316:                                              ; preds = %313
  %317 = load ptr, ptr %42, align 8, !tbaa !7
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %27) #9
  %318 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %319 unwind label %421

319:                                              ; preds = %316
  %320 = invoke { double, double } @_ZN3JPH4Vec34sOneEv()
          to label %321 unwind label %423

321:                                              ; preds = %319
  %322 = extractvalue { double, double } %320, 0
  %323 = extractvalue { double, double } %320, 1
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %318, double %322, double %323, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %324 unwind label %423

324:                                              ; preds = %321
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %28, float noundef 1.200000e+01, float noundef 5.000000e+00, float noundef 0.000000e+00)
          to label %325 unwind label %421

325:                                              ; preds = %324
  %326 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %327 unwind label %421

327:                                              ; preds = %325
  %328 = extractvalue { double, double } %326, 0
  %329 = extractvalue { double, double } %326, 1
  %330 = load double, ptr %28, align 16
  %331 = getelementptr inbounds i8, ptr %28, i64 8
  %332 = load double, ptr %331, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %27, ptr noundef nonnull %318, double %330, double %332, double %328, double %329, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %333 unwind label %421

333:                                              ; preds = %327
  %334 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %317, ptr noundef nonnull align 16 dereferenceable(256) %27)
          to label %335 unwind label %425

335:                                              ; preds = %333
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %27) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %27) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %29) #9
  %336 = call noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %3)
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %29, ptr noundef %336, i32 noundef 0, i32 noundef 1)
          to label %337 unwind label %428

337:                                              ; preds = %335
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %334, ptr noundef nonnull align 8 dereferenceable(16) %29)
          to label %338 unwind label %430

338:                                              ; preds = %337
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %29) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #9
  %339 = load ptr, ptr %42, align 8, !tbaa !7
  %340 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %334)
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %339, ptr noundef nonnull align 4 dereferenceable(4) %340, i32 noundef 0)
          to label %341 unwind label %433

341:                                              ; preds = %338
  call void @llvm.lifetime.start.p0(i64 208, ptr nonnull %30) #9
  invoke void @_ZN3JPH23HingeConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(208) %30)
          to label %342 unwind label %435

342:                                              ; preds = %341
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %31) #9
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %31, float noundef 1.100000e+01, float noundef 4.000000e+00, float noundef 0.000000e+00)
          to label %343 unwind label %437

343:                                              ; preds = %342
  %344 = getelementptr inbounds i8, ptr %30, i64 96
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %344, ptr noundef nonnull align 16 dereferenceable(16) %31, i64 16, i1 false), !tbaa.struct !21
  %345 = getelementptr inbounds i8, ptr %30, i64 48
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %345, ptr noundef nonnull align 16 dereferenceable(16) %31, i64 16, i1 false)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #9
  %346 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %347 unwind label %439

347:                                              ; preds = %343
  %348 = extractvalue { double, double } %346, 0
  %349 = extractvalue { double, double } %346, 1
  %350 = getelementptr inbounds i8, ptr %30, i64 112
  store double %348, ptr %350, align 16
  %.sroa.52.0..sroa_idx = getelementptr inbounds i8, ptr %30, i64 120
  store double %349, ptr %.sroa.52.0..sroa_idx, align 8, !tbaa !19
  %351 = getelementptr inbounds i8, ptr %30, i64 64
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %351, ptr noundef nonnull align 16 dereferenceable(16) %350, i64 16, i1 false), !tbaa.struct !21
  %352 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %353 unwind label %441

353:                                              ; preds = %347
  %354 = extractvalue { double, double } %352, 0
  %355 = extractvalue { double, double } %352, 1
  %356 = getelementptr inbounds i8, ptr %30, i64 128
  store double %354, ptr %356, align 16
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %30, i64 136
  store double %355, ptr %.sroa.5.0..sroa_idx, align 8, !tbaa !19
  %357 = getelementptr inbounds i8, ptr %30, i64 80
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %357, ptr noundef nonnull align 16 dereferenceable(16) %356, i64 16, i1 false), !tbaa.struct !21
  %358 = call noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef -1.000000e+01)
  %359 = getelementptr inbounds i8, ptr %30, i64 144
  store float %358, ptr %359, align 16, !tbaa !25
  %360 = call noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef 1.100000e+02)
  %361 = getelementptr inbounds i8, ptr %30, i64 148
  store float %360, ptr %361, align 4, !tbaa !39
  %362 = getelementptr inbounds i8, ptr %30, i64 156
  store <2 x float> <float 1.000000e+00, float 5.000000e-01>, ptr %362, align 4, !tbaa !19
  %363 = load ptr, ptr %54, align 8, !tbaa !23
  %364 = invoke noundef ptr @_ZNK3JPH23HingeConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(208) %30, ptr noundef nonnull align 16 dereferenceable(122) %309, ptr noundef nonnull align 16 dereferenceable(122) %334)
          to label %365 unwind label %443

365:                                              ; preds = %353
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %363, ptr noundef %364)
          to label %366 unwind label %443

366:                                              ; preds = %365
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %30) #9
  call void @llvm.lifetime.end.p0(i64 208, ptr nonnull %30) #9
  call void @_ZN3JPH3RefINS_16GroupFilterTableEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %3) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #9
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %2) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #9
  ret void

367:                                              ; preds = %228, %226, %225, %66
  %368 = landingpad { ptr, i32 }
          cleanup
  br label %373

369:                                              ; preds = %222, %220
  %370 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %68) #9
  br label %373

371:                                              ; preds = %234
  %372 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %16) #9
  br label %373

373:                                              ; preds = %371, %369, %367
  %.pn = phi { ptr, i32 } [ %372, %371 ], [ %368, %367 ], [ %370, %369 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %16) #9
  br label %447

374:                                              ; preds = %236
  %375 = landingpad { ptr, i32 }
          cleanup
  br label %378

376:                                              ; preds = %238
  %377 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %18) #9
  br label %378

378:                                              ; preds = %376, %374
  %.pn128 = phi { ptr, i32 } [ %377, %376 ], [ %375, %374 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #9
  br label %447

379:                                              ; preds = %239
  %380 = landingpad { ptr, i32 }
          cleanup
  br label %447

381:                                              ; preds = %253, %251, %250, %242
  %382 = landingpad { ptr, i32 }
          cleanup
  br label %387

383:                                              ; preds = %247, %245
  %384 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %244) #9
  br label %387

385:                                              ; preds = %259
  %386 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %19) #9
  br label %387

387:                                              ; preds = %385, %383, %381
  %.pn130 = phi { ptr, i32 } [ %386, %385 ], [ %382, %381 ], [ %384, %383 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %19) #9
  br label %447

388:                                              ; preds = %261
  %389 = landingpad { ptr, i32 }
          cleanup
  br label %392

390:                                              ; preds = %263
  %391 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %21) #9
  br label %392

392:                                              ; preds = %390, %388
  %.pn132 = phi { ptr, i32 } [ %391, %390 ], [ %389, %388 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #9
  br label %447

393:                                              ; preds = %264
  %394 = landingpad { ptr, i32 }
          cleanup
  br label %447

395:                                              ; preds = %267
  %396 = landingpad { ptr, i32 }
          cleanup
  br label %406

397:                                              ; preds = %268
  %398 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #9
  br label %405

399:                                              ; preds = %269
  %400 = landingpad { ptr, i32 }
          cleanup
  br label %405

401:                                              ; preds = %273
  %402 = landingpad { ptr, i32 }
          cleanup
  br label %405

403:                                              ; preds = %290, %279
  %404 = landingpad { ptr, i32 }
          cleanup
  br label %405

405:                                              ; preds = %403, %401, %399, %397
  %.pn134 = phi { ptr, i32 } [ %404, %403 ], [ %402, %401 ], [ %400, %399 ], [ %398, %397 ]
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %22) #9
  br label %406

406:                                              ; preds = %405, %395
  %.pn134.pn = phi { ptr, i32 } [ %.pn134, %405 ], [ %396, %395 ]
  call void @llvm.lifetime.end.p0(i64 208, ptr nonnull %22) #9
  br label %447

407:                                              ; preds = %302, %300, %299, %291
  %408 = landingpad { ptr, i32 }
          cleanup
  br label %413

409:                                              ; preds = %296, %294
  %410 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %293) #9
  br label %413

411:                                              ; preds = %308
  %412 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %24) #9
  br label %413

413:                                              ; preds = %411, %409, %407
  %.pn139 = phi { ptr, i32 } [ %412, %411 ], [ %408, %407 ], [ %410, %409 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %24) #9
  br label %447

414:                                              ; preds = %310
  %415 = landingpad { ptr, i32 }
          cleanup
  br label %418

416:                                              ; preds = %312
  %417 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %26) #9
  br label %418

418:                                              ; preds = %416, %414
  %.pn141 = phi { ptr, i32 } [ %417, %416 ], [ %415, %414 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %26) #9
  br label %447

419:                                              ; preds = %313
  %420 = landingpad { ptr, i32 }
          cleanup
  br label %447

421:                                              ; preds = %327, %325, %324, %316
  %422 = landingpad { ptr, i32 }
          cleanup
  br label %427

423:                                              ; preds = %321, %319
  %424 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %318) #9
  br label %427

425:                                              ; preds = %333
  %426 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %27) #9
  br label %427

427:                                              ; preds = %425, %423, %421
  %.pn143 = phi { ptr, i32 } [ %426, %425 ], [ %422, %421 ], [ %424, %423 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %27) #9
  br label %447

428:                                              ; preds = %335
  %429 = landingpad { ptr, i32 }
          cleanup
  br label %432

430:                                              ; preds = %337
  %431 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %29) #9
  br label %432

432:                                              ; preds = %430, %428
  %.pn145 = phi { ptr, i32 } [ %431, %430 ], [ %429, %428 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #9
  br label %447

433:                                              ; preds = %338
  %434 = landingpad { ptr, i32 }
          cleanup
  br label %447

435:                                              ; preds = %341
  %436 = landingpad { ptr, i32 }
          cleanup
  br label %446

437:                                              ; preds = %342
  %438 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #9
  br label %445

439:                                              ; preds = %343
  %440 = landingpad { ptr, i32 }
          cleanup
  br label %445

441:                                              ; preds = %347
  %442 = landingpad { ptr, i32 }
          cleanup
  br label %445

443:                                              ; preds = %365, %353
  %444 = landingpad { ptr, i32 }
          cleanup
  br label %445

445:                                              ; preds = %443, %441, %439, %437
  %.pn147 = phi { ptr, i32 } [ %444, %443 ], [ %442, %441 ], [ %440, %439 ], [ %438, %437 ]
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(208) %30) #9
  br label %446

446:                                              ; preds = %445, %435
  %.pn147.pn = phi { ptr, i32 } [ %.pn147, %445 ], [ %436, %435 ]
  call void @llvm.lifetime.end.p0(i64 208, ptr nonnull %30) #9
  br label %447

447:                                              ; preds = %413, %418, %419, %446, %433, %432, %427, %373, %378, %379, %406, %393, %392, %387, %219, %64
  %.pn171 = phi { ptr, i32 } [ %65, %64 ], [ %.pn162.pn.pn.pn.pn.pn.pn.pn, %219 ], [ %380, %379 ], [ %.pn128, %378 ], [ %.pn, %373 ], [ %.pn134.pn, %406 ], [ %394, %393 ], [ %.pn132, %392 ], [ %.pn130, %387 ], [ %420, %419 ], [ %.pn141, %418 ], [ %.pn139, %413 ], [ %.pn147.pn, %446 ], [ %434, %433 ], [ %.pn145, %432 ], [ %.pn143, %427 ]
  call void @_ZN3JPH3RefINS_16GroupFilterTableEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %3) #9
  br label %448

448:                                              ; preds = %447, %59, %57
  %.pn171.pn = phi { ptr, i32 } [ %.pn171, %447 ], [ %58, %57 ], [ %60, %59 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #9
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %2) #9
  br label %449

449:                                              ; preds = %448, %55
  %.pn171.pn.pn = phi { ptr, i32 } [ %.pn171.pn, %448 ], [ %56, %55 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #9
  resume { ptr, i32 } %.pn171.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 @_ZN3JPH8BoxShapenwEm(i64 noundef) local_unnamed_addr #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80), double, double, float noundef, ptr noundef) unnamed_addr #1 align 2

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_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 #5 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH16GroupFilterTable16DisableCollisionEjj(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef, i32 noundef) local_unnamed_addr #1 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 #4 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: mustprogress uwtable
declare dso_local void @_ZNSt26linear_congruential_engineImLm16807ELm0ELm2147483647EEC2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #1 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt3absf(float noundef) local_unnamed_addr #7

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH23HingeConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(208)) unnamed_addr #6 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 #4 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 { double, double } @_ZN3JPH4Vec36sAxisXEv() local_unnamed_addr #3 align 2

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

declare noundef ptr @_ZNK3JPH23HingeConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(208), ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 16 dereferenceable(122)) unnamed_addr #2

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

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="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 #5 = { alwaysinline mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { mustprogress 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 = distinct !{!5, !6}
!6 = !{!"llvm.loop.mustprogress"}
!7 = !{!8, !9, i64 24}
!8 = !{!"_ZTS4Test", !9, i64 8, !9, i64 16, !9, i64 24, !9, i64 32, !9, i64 40, !12, i64 48, !13, i64 56}
!9 = !{!"any pointer", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"bool", !10, i64 0}
!13 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !14, i64 0}
!14 = !{!"_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", !9, i64 0, !15, i64 8, !16, i64 16, !15, i64 24, !17, i64 32, !9, i64 48}
!15 = !{!"long", !10, i64 0}
!16 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !9, i64 0}
!17 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !18, i64 0, !15, i64 8}
!18 = !{!"float", !10, i64 0}
!19 = !{!10, !10, i64 0}
!20 = distinct !{!20, !6}
!21 = !{i64 0, i64 16, !19}
!22 = !{!18, !18, i64 0}
!23 = !{!8, !9, i64 16}
!24 = distinct !{!24, !6}
!25 = !{!26, !18, i64 144}
!26 = !{!"_ZTSN3JPH23HingeConstraintSettingsE", !27, i64 0, !34, i64 40, !35, i64 48, !35, i64 64, !35, i64 80, !35, i64 96, !35, i64 112, !35, i64 128, !18, i64 144, !18, i64 148, !36, i64 152, !18, i64 164, !38, i64 168}
!27 = !{!"_ZTSN3JPH25TwoBodyConstraintSettingsE", !28, i64 0}
!28 = !{!"_ZTSN3JPH18ConstraintSettingsE", !29, i64 0, !30, i64 8, !12, i64 12, !33, i64 16, !33, i64 20, !33, i64 24, !18, i64 28, !15, i64 32}
!29 = !{!"_ZTSN3JPH18SerializableObjectE"}
!30 = !{!"_ZTSN3JPH9RefTargetINS_18ConstraintSettingsEEE", !31, i64 0}
!31 = !{!"_ZTSSt6atomicIjE", !32, i64 0}
!32 = !{!"_ZTSSt13__atomic_baseIjE", !33, i64 0}
!33 = !{!"int", !10, i64 0}
!34 = !{!"_ZTSN3JPH16EConstraintSpaceE", !10, i64 0}
!35 = !{!"_ZTSN3JPH4Vec3E", !10, i64 0}
!36 = !{!"_ZTSN3JPH14SpringSettingsE", !37, i64 0, !10, i64 4, !18, i64 8}
!37 = !{!"_ZTSN3JPH11ESpringModeE", !10, i64 0}
!38 = !{!"_ZTSN3JPH13MotorSettingsE", !36, i64 0, !18, i64 12, !18, i64 16, !18, i64 20, !18, i64 24}
!39 = !{!26, !18, i64 148}


; Effective O3 passes: ADCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,MemCpyOptPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass