; LLVM IR from jrouwe/JoltPhysics :: Samples/Tests/Constraints/FixedConstraintTest.ll (ZN19FixedConstraintTest10InitializeEv)

; 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::FixedConstraintSettings" = type { %"class.JPH::TwoBodyConstraintSettings", i32, i8, %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"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::Ref.12" = type { ptr }
%"class.JPH::Ref.27" = type { ptr }
%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 }

@__const._ZN19FixedConstraintTest10InitializeEv.prev_pillars = external hidden unnamed_addr constant [4 x ptr], align 16

; 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 @_ZN19FixedConstraintTest10InitializeEv(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 %"class.JPH::Ref", align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca %"class.JPH::Vec3", align 16
  %15 = alloca ptr, align 8
  %16 = alloca %"class.JPH::BodyCreationSettings", align 16
  %17 = alloca %"class.JPH::Vec3", align 16
  %18 = alloca %"class.JPH::Quat", align 16
  %19 = alloca %"class.JPH::CollisionGroup", align 8
  %20 = alloca %"class.std::linear_congruential_engine", align 8
  %21 = alloca %"class.std::uniform_real_distribution", align 4
  %22 = alloca ptr, align 8
  %23 = alloca i32, align 4
  %24 = alloca %"class.JPH::Quat", align 16
  %25 = alloca %"class.JPH::Vec3", align 16
  %26 = alloca %"class.JPH::Quat", align 16
  %27 = alloca %"class.JPH::Vec3", align 16
  %28 = alloca %"class.JPH::Quat", align 16
  %29 = alloca ptr, align 8
  %30 = alloca %"class.JPH::BodyCreationSettings", align 16
  %31 = alloca %"class.JPH::Vec3", align 16
  %32 = alloca %"class.JPH::Quat", align 16
  %33 = alloca %"class.JPH::CollisionGroup", align 8
  %34 = alloca %"class.JPH::FixedConstraintSettings", align 16
  %35 = alloca %"class.JPH::Ref.12", align 8
  %36 = alloca ptr, align 8
  %37 = alloca %"class.JPH::BodyCreationSettings", align 16
  %38 = alloca %"class.JPH::Vec3", align 16
  %39 = alloca %"class.JPH::Vec3", align 16
  %40 = alloca %"class.JPH::Quat", align 16
  %41 = alloca ptr, align 8
  %42 = alloca %"class.JPH::BodyCreationSettings", align 16
  %43 = alloca %"class.JPH::Vec3", align 16
  %44 = alloca %"class.JPH::Vec3", align 16
  %45 = alloca %"class.JPH::Quat", align 16
  %46 = alloca ptr, align 8
  %47 = alloca %"class.JPH::BodyCreationSettings", align 16
  %48 = alloca %"class.JPH::Vec3", align 16
  %49 = alloca %"class.JPH::Vec3", align 16
  %50 = alloca %"class.JPH::Quat", align 16
  %51 = alloca %"class.JPH::FixedConstraintSettings", align 16
  %52 = alloca %"class.JPH::FixedConstraintSettings", align 16
  %53 = alloca %"class.JPH::Vec3", align 16
  %54 = alloca %"class.JPH::Quat", align 16
  %55 = alloca %"class.JPH::Vec3", align 16
  %56 = alloca %"class.JPH::Ref.27", align 8
  %57 = alloca %"class.JPH::Vec3", align 16
  %58 = alloca %"class.JPH::Ref.27", align 8
  %59 = alloca %"class.JPH::Vec3", align 16
  %60 = alloca [4 x ptr], align 16
  %61 = alloca %"class.JPH::Vec3", align 16
  %62 = alloca i32, align 4
  %63 = alloca [4 x ptr], align 16
  %64 = alloca i32, align 4
  %65 = alloca %"class.JPH::Quat", align 16
  %66 = alloca %"class.JPH::Vec3", align 16
  %67 = alloca %"class.JPH::BodyCreationSettings", align 16
  %68 = alloca %"class.JPH::Vec3", align 16
  %69 = alloca %"class.JPH::Vec3", align 16
  %70 = alloca %"class.JPH::Vec3", align 16
  %71 = alloca %"class.JPH::Vec3", align 16
  %72 = alloca %"class.JPH::Vec3", align 16
  %73 = alloca %"class.JPH::Quat", align 16
  %74 = alloca %"class.JPH::CollisionGroup", align 8
  %75 = alloca i32, align 4
  %76 = alloca %"class.JPH::Quat", align 16
  %77 = alloca %"class.JPH::Vec3", align 16
  %78 = alloca ptr, align 8
  %79 = alloca %"class.JPH::BodyCreationSettings", align 16
  %80 = alloca %"class.JPH::Vec3", align 16
  %81 = alloca %"class.JPH::Vec3", align 16
  %82 = alloca %"class.JPH::Vec3", align 16
  %83 = alloca %"class.JPH::Vec3", align 16
  %84 = alloca %"class.JPH::Vec3", align 16
  %85 = alloca %"class.JPH::Quat", align 16
  %86 = alloca %"class.JPH::Quat", align 16
  %87 = alloca %"class.JPH::Quat", align 16
  %88 = alloca %"class.JPH::Quat", align 16
  %89 = alloca %"class.JPH::Vec3", align 16
  %90 = alloca %"class.JPH::CollisionGroup", align 8
  %91 = alloca i32, align 4
  %92 = alloca %"class.JPH::FixedConstraintSettings", align 16
  %93 = alloca %"class.JPH::FixedConstraintSettings", align 16
  %94 = alloca %"class.JPH::Vec3", align 16
  %95 = alloca ptr, align 8
  %96 = alloca %"class.JPH::BodyCreationSettings", align 16
  %97 = alloca %"class.JPH::Vec3", align 16
  %98 = alloca %"class.JPH::Vec3", align 16
  %99 = alloca %"class.JPH::Vec3", align 16
  %100 = alloca %"class.JPH::Vec3", align 16
  %101 = alloca %"class.JPH::Vec3", align 16
  %102 = alloca %"class.JPH::Quat", align 16
  %103 = alloca %"class.JPH::CollisionGroup", align 8
  %104 = alloca i32, align 4
  %105 = alloca %"class.JPH::FixedConstraintSettings", align 16
  store ptr %0, ptr %2, align 8, !tbaa !5
  %106 = load ptr, ptr %2, align 8
  %107 = call noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test11CreateFloorEf(ptr noundef nonnull align 8 dereferenceable(112) %106, 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
  %108 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  %109 = load float, ptr %3, align 4, !tbaa !9
  %110 = fmul float 5.000000e-01, %109
  %111 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef %110)
          to label %112 unwind label %132

112:                                              ; preds = %1
  %113 = getelementptr inbounds %"class.JPH::Vec3", ptr %5, i32 0, i32 0
  %114 = getelementptr inbounds %union.anon, ptr %113, i32 0, i32 0
  %115 = getelementptr inbounds { double, double }, ptr %114, i32 0, i32 0
  %116 = extractvalue { double, double } %111, 0
  store double %116, ptr %115, align 16
  %117 = getelementptr inbounds { double, double }, ptr %114, i32 0, i32 1
  %118 = extractvalue { double, double } %111, 1
  store double %118, ptr %117, align 8
  %119 = getelementptr inbounds { double, double }, ptr %5, i32 0, i32 0
  %120 = load double, ptr %119, align 16
  %121 = getelementptr inbounds { double, double }, ptr %5, i32 0, i32 1
  %122 = load double, ptr %121, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %108, double %120, double %122, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %123 unwind label %132

123:                                              ; preds = %112
  call void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef %108)
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #9
  store i32 10, ptr %8, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #9
  %124 = invoke noundef ptr @_ZN3JPH16GroupFilterTablenwEm(i64 noundef 40)
          to label %125 unwind label %136

125:                                              ; preds = %123
  invoke void @_ZN3JPH16GroupFilterTableC2Ej(ptr noundef nonnull align 8 dereferenceable(40) %124, i32 noundef 10)
          to label %126 unwind label %140

126:                                              ; preds = %125
  invoke void @_ZN3JPH3RefINS_16GroupFilterTableEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef %124)
          to label %127 unwind label %136

127:                                              ; preds = %126
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #9
  store i32 0, ptr %10, align 4, !tbaa !11
  br label %128

128:                                              ; preds = %151, %127
  %129 = load i32, ptr %10, align 4, !tbaa !11
  %130 = icmp ult i32 %129, 9
  br i1 %130, label %144, label %131

131:                                              ; preds = %128
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #9
  br label %158

132:                                              ; preds = %112, %1
  %133 = landingpad { ptr, i32 }
          cleanup
  %134 = extractvalue { ptr, i32 } %133, 0
  store ptr %134, ptr %6, align 8
  %135 = extractvalue { ptr, i32 } %133, 1
  store i32 %135, ptr %7, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %108) #9
  br label %1257

136:                                              ; preds = %126, %123
  %137 = landingpad { ptr, i32 }
          cleanup
  %138 = extractvalue { ptr, i32 } %137, 0
  store ptr %138, ptr %6, align 8
  %139 = extractvalue { ptr, i32 } %137, 1
  store i32 %139, ptr %7, align 4
  br label %1256

140:                                              ; preds = %125
  %141 = landingpad { ptr, i32 }
          cleanup
  %142 = extractvalue { ptr, i32 } %141, 0
  store ptr %142, ptr %6, align 8
  %143 = extractvalue { ptr, i32 } %141, 1
  store i32 %143, ptr %7, align 4
  call void @_ZN3JPH16GroupFilterTabledlEPv(ptr noundef %124) #9
  br label %1256

144:                                              ; preds = %128
  %145 = invoke noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %9)
          to label %146 unwind label %154

146:                                              ; preds = %144
  %147 = load i32, ptr %10, align 4, !tbaa !11
  %148 = load i32, ptr %10, align 4, !tbaa !11
  %149 = add i32 %148, 1
  invoke void @_ZN3JPH16GroupFilterTable16DisableCollisionEjj(ptr noundef nonnull align 8 dereferenceable(40) %145, i32 noundef %147, i32 noundef %149)
          to label %150 unwind label %154

150:                                              ; preds = %146
  br label %151

151:                                              ; preds = %150
  %152 = load i32, ptr %10, align 4, !tbaa !11
  %153 = add i32 %152, 1
  store i32 %153, ptr %10, align 4, !tbaa !11
  br label %128, !llvm.loop !13

154:                                              ; preds = %146, %144
  %155 = landingpad { ptr, i32 }
          cleanup
  %156 = extractvalue { ptr, i32 } %155, 0
  store ptr %156, ptr %6, align 8
  %157 = extractvalue { ptr, i32 } %155, 1
  store i32 %157, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #9
  br label %1255

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

159:                                              ; preds = %391, %158
  %160 = load i32, ptr %11, align 4, !tbaa !11
  %161 = icmp slt i32 %160, 2
  br i1 %161, label %163, label %162

162:                                              ; preds = %159
  store i32 5, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #9
  br label %398

163:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #9
  %164 = load i32, ptr %11, align 4, !tbaa !11
  store i32 %164, ptr %13, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 16, ptr %14) #9
  %165 = load i32, ptr %11, align 4, !tbaa !11
  %166 = sub nsw i32 0, %165
  %167 = sitofp i32 %166 to float
  %168 = fmul float %167, 2.000000e+01
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %14, float noundef 0.000000e+00, float noundef 2.500000e+01, float noundef %168)
          to label %169 unwind label %213

169:                                              ; preds = %163
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #9
  %170 = getelementptr inbounds %class.Test, ptr %106, i32 0, i32 3
  %171 = load ptr, ptr %170, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 256, ptr %16) #9
  %172 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %4)
          to label %173 unwind label %217

173:                                              ; preds = %169
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %17, ptr align 16 %14, i64 16, i1 false), !tbaa.struct !23
  %174 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %175 unwind label %217

175:                                              ; preds = %173
  %176 = getelementptr inbounds %"class.JPH::Quat", ptr %18, i32 0, i32 0
  %177 = getelementptr inbounds %"class.JPH::Vec4", ptr %176, i32 0, i32 0
  %178 = getelementptr inbounds %union.anon.4, ptr %177, i32 0, i32 0
  %179 = getelementptr inbounds { double, double }, ptr %178, i32 0, i32 0
  %180 = extractvalue { double, double } %174, 0
  store double %180, ptr %179, align 16
  %181 = getelementptr inbounds { double, double }, ptr %178, i32 0, i32 1
  %182 = extractvalue { double, double } %174, 1
  store double %182, ptr %181, align 8
  %183 = getelementptr inbounds { double, double }, ptr %17, i32 0, i32 0
  %184 = load double, ptr %183, align 16
  %185 = getelementptr inbounds { double, double }, ptr %17, i32 0, i32 1
  %186 = load double, ptr %185, align 8
  %187 = getelementptr inbounds { double, double }, ptr %18, i32 0, i32 0
  %188 = load double, ptr %187, align 16
  %189 = getelementptr inbounds { double, double }, ptr %18, i32 0, i32 1
  %190 = load double, ptr %189, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %16, ptr noundef %172, double %184, double %186, double %188, double %190, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %191 unwind label %217

191:                                              ; preds = %175
  %192 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %171, ptr noundef nonnull align 16 dereferenceable(256) %16)
          to label %193 unwind label %221

193:                                              ; preds = %191
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %16) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr %16) #9
  store ptr %192, ptr %15, align 8, !tbaa !5
  %194 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %19) #9
  %195 = invoke noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %9)
          to label %196 unwind label %226

196:                                              ; preds = %193
  %197 = load i32, ptr %13, align 4, !tbaa !11
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %19, ptr noundef %195, i32 noundef %197, i32 noundef 0)
          to label %198 unwind label %226

198:                                              ; preds = %196
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %194, ptr noundef nonnull align 8 dereferenceable(16) %19)
          to label %199 unwind label %230

199:                                              ; preds = %198
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %19) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #9
  %200 = getelementptr inbounds %class.Test, ptr %106, i32 0, i32 3
  %201 = load ptr, ptr %200, align 8, !tbaa !15
  %202 = load ptr, ptr %15, align 8, !tbaa !5
  %203 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %202)
          to label %204 unwind label %235

204:                                              ; preds = %199
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %201, ptr noundef nonnull align 4 dereferenceable(4) %203, i32 noundef 1)
          to label %205 unwind label %235

205:                                              ; preds = %204
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #9
  invoke void @_ZNSt26linear_congruential_engineImLm16807ELm0ELm2147483647EEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %20)
          to label %206 unwind label %239

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

207:                                              ; preds = %206
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #9
  %208 = load ptr, ptr %15, align 8, !tbaa !5
  store ptr %208, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #9
  store i32 1, ptr %23, align 4, !tbaa !11
  br label %209

209:                                              ; preds = %349, %207
  %210 = load i32, ptr %23, align 4, !tbaa !11
  %211 = icmp slt i32 %210, 10
  br i1 %211, label %247, label %212

212:                                              ; preds = %209
  store i32 8, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #9
  br label %390

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

217:                                              ; preds = %175, %173, %169
  %218 = landingpad { ptr, i32 }
          cleanup
  %219 = extractvalue { ptr, i32 } %218, 0
  store ptr %219, ptr %6, align 8
  %220 = extractvalue { ptr, i32 } %218, 1
  store i32 %220, ptr %7, align 4
  br label %225

221:                                              ; preds = %191
  %222 = landingpad { ptr, i32 }
          cleanup
  %223 = extractvalue { ptr, i32 } %222, 0
  store ptr %223, ptr %6, align 8
  %224 = extractvalue { ptr, i32 } %222, 1
  store i32 %224, ptr %7, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %16) #9
  br label %225

225:                                              ; preds = %221, %217
  call void @llvm.lifetime.end.p0(i64 256, ptr %16) #9
  br label %396

226:                                              ; preds = %196, %193
  %227 = landingpad { ptr, i32 }
          cleanup
  %228 = extractvalue { ptr, i32 } %227, 0
  store ptr %228, ptr %6, align 8
  %229 = extractvalue { ptr, i32 } %227, 1
  store i32 %229, ptr %7, align 4
  br label %234

230:                                              ; preds = %198
  %231 = landingpad { ptr, i32 }
          cleanup
  %232 = extractvalue { ptr, i32 } %231, 0
  store ptr %232, ptr %6, align 8
  %233 = extractvalue { ptr, i32 } %231, 1
  store i32 %233, ptr %7, align 4
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %19) #9
  br label %234

234:                                              ; preds = %230, %226
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #9
  br label %396

235:                                              ; preds = %204, %199
  %236 = landingpad { ptr, i32 }
          cleanup
  %237 = extractvalue { ptr, i32 } %236, 0
  store ptr %237, ptr %6, align 8
  %238 = extractvalue { ptr, i32 } %236, 1
  store i32 %238, ptr %7, align 4
  br label %396

239:                                              ; preds = %205
  %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 %395

243:                                              ; preds = %206
  %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
  br label %394

247:                                              ; preds = %209
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #9
  %248 = load i32, ptr %11, align 4, !tbaa !11
  %249 = icmp eq i32 %248, 0
  br i1 %249, label %250, label %276

250:                                              ; preds = %247
  %251 = load float, ptr %3, align 4, !tbaa !9
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %25, float noundef %251, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %252 unwind label %268

252:                                              ; preds = %250
  %253 = getelementptr inbounds { double, double }, ptr %25, i32 0, i32 0
  %254 = load double, ptr %253, align 16
  %255 = getelementptr inbounds { double, double }, ptr %25, i32 0, i32 1
  %256 = load double, ptr %255, align 8
  %257 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %14, double %254, double %256)
          to label %258 unwind label %268

258:                                              ; preds = %252
  call void @llvm.lifetime.start.p0(i64 16, ptr %26) #9
  %259 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %260 unwind label %272

260:                                              ; preds = %258
  %261 = getelementptr inbounds %"class.JPH::Quat", ptr %26, i32 0, i32 0
  %262 = getelementptr inbounds %"class.JPH::Vec4", ptr %261, i32 0, i32 0
  %263 = getelementptr inbounds %union.anon.4, ptr %262, i32 0, i32 0
  %264 = getelementptr inbounds { double, double }, ptr %263, i32 0, i32 0
  %265 = extractvalue { double, double } %259, 0
  store double %265, ptr %264, align 16
  %266 = getelementptr inbounds { double, double }, ptr %263, i32 0, i32 1
  %267 = extractvalue { double, double } %259, 1
  store double %267, ptr %266, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %24, ptr align 16 %26, i64 16, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #9
  br label %307

268:                                              ; preds = %287, %286, %284, %281, %279, %276, %252, %250
  %269 = landingpad { ptr, i32 }
          cleanup
  %270 = extractvalue { ptr, i32 } %269, 0
  store ptr %270, ptr %6, align 8
  %271 = extractvalue { ptr, i32 } %269, 1
  store i32 %271, ptr %7, align 4
  br label %389

272:                                              ; preds = %258
  %273 = landingpad { ptr, i32 }
          cleanup
  %274 = extractvalue { ptr, i32 } %273, 0
  store ptr %274, ptr %6, align 8
  %275 = extractvalue { ptr, i32 } %273, 1
  store i32 %275, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #9
  br label %389

276:                                              ; preds = %247
  %277 = load float, ptr %3, align 4, !tbaa !9
  %278 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %21, ptr noundef nonnull align 8 dereferenceable(8) %20)
          to label %279 unwind label %268

279:                                              ; preds = %276
  %280 = invoke noundef float @_ZSt3absf(float noundef %278)
          to label %281 unwind label %268

281:                                              ; preds = %279
  %282 = fadd float %277, %280
  %283 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %21, ptr noundef nonnull align 8 dereferenceable(8) %20)
          to label %284 unwind label %268

284:                                              ; preds = %281
  %285 = invoke noundef float @_ZNSt25uniform_real_distributionIfEclISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(8) %21, ptr noundef nonnull align 8 dereferenceable(8) %20)
          to label %286 unwind label %268

286:                                              ; preds = %284
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %27, float noundef %282, float noundef %283, float noundef %285)
          to label %287 unwind label %268

287:                                              ; preds = %286
  %288 = getelementptr inbounds { double, double }, ptr %27, i32 0, i32 0
  %289 = load double, ptr %288, align 16
  %290 = getelementptr inbounds { double, double }, ptr %27, i32 0, i32 1
  %291 = load double, ptr %290, align 8
  %292 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %14, double %289, double %291)
          to label %293 unwind label %268

293:                                              ; preds = %287
  call void @llvm.lifetime.start.p0(i64 16, ptr %28) #9
  %294 = invoke { double, double } @_ZN3JPH4Quat7sRandomISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEES0_RT_(ptr noundef nonnull align 8 dereferenceable(8) %20)
          to label %295 unwind label %303

295:                                              ; preds = %293
  %296 = getelementptr inbounds %"class.JPH::Quat", ptr %28, i32 0, i32 0
  %297 = getelementptr inbounds %"class.JPH::Vec4", ptr %296, i32 0, i32 0
  %298 = getelementptr inbounds %union.anon.4, ptr %297, i32 0, i32 0
  %299 = getelementptr inbounds { double, double }, ptr %298, i32 0, i32 0
  %300 = extractvalue { double, double } %294, 0
  store double %300, ptr %299, align 16
  %301 = getelementptr inbounds { double, double }, ptr %298, i32 0, i32 1
  %302 = extractvalue { double, double } %294, 1
  store double %302, ptr %301, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %24, ptr align 16 %28, i64 16, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #9
  br label %307

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

307:                                              ; preds = %295, %260
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #9
  %308 = getelementptr inbounds %class.Test, ptr %106, i32 0, i32 3
  %309 = load ptr, ptr %308, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 256, ptr %30) #9
  %310 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %4)
          to label %311 unwind label %352

311:                                              ; preds = %307
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %31, ptr align 16 %14, i64 16, i1 false), !tbaa.struct !23
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %32, ptr align 16 %24, i64 16, i1 false), !tbaa.struct !23
  %312 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 0
  %313 = load double, ptr %312, align 16
  %314 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 1
  %315 = load double, ptr %314, align 8
  %316 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 0
  %317 = load double, ptr %316, align 16
  %318 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 1
  %319 = load double, ptr %318, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %30, ptr noundef %310, double %313, double %315, double %317, double %319, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %320 unwind label %352

320:                                              ; preds = %311
  %321 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %309, ptr noundef nonnull align 16 dereferenceable(256) %30)
          to label %322 unwind label %356

322:                                              ; preds = %320
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %30) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr %30) #9
  store ptr %321, ptr %29, align 8, !tbaa !5
  %323 = load ptr, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %33) #9
  %324 = invoke noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %9)
          to label %325 unwind label %361

325:                                              ; preds = %322
  %326 = load i32, ptr %13, align 4, !tbaa !11
  %327 = load i32, ptr %23, align 4, !tbaa !11
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %33, ptr noundef %324, i32 noundef %326, i32 noundef %327)
          to label %328 unwind label %361

328:                                              ; preds = %325
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %323, ptr noundef nonnull align 8 dereferenceable(16) %33)
          to label %329 unwind label %365

329:                                              ; preds = %328
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %33) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #9
  %330 = getelementptr inbounds %class.Test, ptr %106, i32 0, i32 3
  %331 = load ptr, ptr %330, align 8, !tbaa !15
  %332 = load ptr, ptr %29, align 8, !tbaa !5
  %333 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %332)
          to label %334 unwind label %370

334:                                              ; preds = %329
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %331, ptr noundef nonnull align 4 dereferenceable(4) %333, i32 noundef 0)
          to label %335 unwind label %370

335:                                              ; preds = %334
  call void @llvm.lifetime.start.p0(i64 144, ptr %34) #9
  invoke void @_ZN3JPH23FixedConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(144) %34)
          to label %336 unwind label %374

336:                                              ; preds = %335
  %337 = getelementptr inbounds %"class.JPH::FixedConstraintSettings", ptr %34, i32 0, i32 2
  store i8 1, ptr %337, align 4, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #9
  %338 = load ptr, ptr %22, align 8, !tbaa !5
  %339 = load ptr, ptr %29, align 8, !tbaa !5
  %340 = invoke noundef ptr @_ZNK3JPH23FixedConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(144) %34, ptr noundef nonnull align 16 dereferenceable(122) %338, ptr noundef nonnull align 16 dereferenceable(122) %339)
          to label %341 unwind label %378

341:                                              ; preds = %336
  invoke void @_ZN3JPH3RefINS_10ConstraintEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %35, ptr noundef %340)
          to label %342 unwind label %378

342:                                              ; preds = %341
  %343 = getelementptr inbounds %class.Test, ptr %106, i32 0, i32 2
  %344 = load ptr, ptr %343, align 8, !tbaa !35
  %345 = invoke noundef ptr @_ZNK3JPH3RefINS_10ConstraintEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %35)
          to label %346 unwind label %382

346:                                              ; preds = %342
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %344, ptr noundef %345)
          to label %347 unwind label %382

347:                                              ; preds = %346
  %348 = load ptr, ptr %29, align 8, !tbaa !5
  store ptr %348, ptr %22, align 8, !tbaa !5
  call void @_ZN3JPH3RefINS_10ConstraintEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %35) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %34) #9
  call void @llvm.lifetime.end.p0(i64 144, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #9
  br label %349

349:                                              ; preds = %347
  %350 = load i32, ptr %23, align 4, !tbaa !11
  %351 = add nsw i32 %350, 1
  store i32 %351, ptr %23, align 4, !tbaa !11
  br label %209, !llvm.loop !36

352:                                              ; preds = %311, %307
  %353 = landingpad { ptr, i32 }
          cleanup
  %354 = extractvalue { ptr, i32 } %353, 0
  store ptr %354, ptr %6, align 8
  %355 = extractvalue { ptr, i32 } %353, 1
  store i32 %355, ptr %7, align 4
  br label %360

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

360:                                              ; preds = %356, %352
  call void @llvm.lifetime.end.p0(i64 256, ptr %30) #9
  br label %388

361:                                              ; preds = %325, %322
  %362 = landingpad { ptr, i32 }
          cleanup
  %363 = extractvalue { ptr, i32 } %362, 0
  store ptr %363, ptr %6, align 8
  %364 = extractvalue { ptr, i32 } %362, 1
  store i32 %364, ptr %7, align 4
  br label %369

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

369:                                              ; preds = %365, %361
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #9
  br label %388

370:                                              ; preds = %334, %329
  %371 = landingpad { ptr, i32 }
          cleanup
  %372 = extractvalue { ptr, i32 } %371, 0
  store ptr %372, ptr %6, align 8
  %373 = extractvalue { ptr, i32 } %371, 1
  store i32 %373, ptr %7, align 4
  br label %388

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

378:                                              ; preds = %341, %336
  %379 = landingpad { ptr, i32 }
          cleanup
  %380 = extractvalue { ptr, i32 } %379, 0
  store ptr %380, ptr %6, align 8
  %381 = extractvalue { ptr, i32 } %379, 1
  store i32 %381, ptr %7, align 4
  br label %386

382:                                              ; preds = %346, %342
  %383 = landingpad { ptr, i32 }
          cleanup
  %384 = extractvalue { ptr, i32 } %383, 0
  store ptr %384, ptr %6, align 8
  %385 = extractvalue { ptr, i32 } %383, 1
  store i32 %385, ptr %7, align 4
  call void @_ZN3JPH3RefINS_10ConstraintEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %35) #9
  br label %386

386:                                              ; preds = %382, %378
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %34) #9
  br label %387

387:                                              ; preds = %386, %374
  call void @llvm.lifetime.end.p0(i64 144, ptr %34) #9
  br label %388

388:                                              ; preds = %387, %370, %369, %360
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  br label %389

389:                                              ; preds = %388, %303, %272, %268
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #9
  br label %394

390:                                              ; preds = %212
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #9
  br label %391

391:                                              ; preds = %390
  %392 = load i32, ptr %11, align 4, !tbaa !11
  %393 = add nsw i32 %392, 1
  store i32 %393, ptr %11, align 4, !tbaa !11
  br label %159, !llvm.loop !37

394:                                              ; preds = %389, %243
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  br label %395

395:                                              ; preds = %394, %239
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #9
  br label %396

396:                                              ; preds = %395, %235, %234, %225
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #9
  br label %397

397:                                              ; preds = %396, %213
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #9
  br label %1255

398:                                              ; preds = %162
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #9
  %399 = getelementptr inbounds %class.Test, ptr %106, i32 0, i32 3
  %400 = load ptr, ptr %399, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 256, ptr %37) #9
  %401 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %402 unwind label %601

402:                                              ; preds = %398
  %403 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 0x3FB99999A0000000)
          to label %404 unwind label %605

404:                                              ; preds = %402
  %405 = getelementptr inbounds %"class.JPH::Vec3", ptr %38, i32 0, i32 0
  %406 = getelementptr inbounds %union.anon, ptr %405, i32 0, i32 0
  %407 = getelementptr inbounds { double, double }, ptr %406, i32 0, i32 0
  %408 = extractvalue { double, double } %403, 0
  store double %408, ptr %407, align 16
  %409 = getelementptr inbounds { double, double }, ptr %406, i32 0, i32 1
  %410 = extractvalue { double, double } %403, 1
  store double %410, ptr %409, align 8
  %411 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 0
  %412 = load double, ptr %411, align 16
  %413 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 1
  %414 = load double, ptr %413, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %401, double %412, double %414, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %415 unwind label %605

415:                                              ; preds = %404
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %39, float noundef -5.000000e+00, float noundef 7.000000e+00, float noundef 0xC014CCCCC0000000)
          to label %416 unwind label %601

416:                                              ; preds = %415
  %417 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %418 unwind label %601

418:                                              ; preds = %416
  %419 = getelementptr inbounds %"class.JPH::Quat", ptr %40, i32 0, i32 0
  %420 = getelementptr inbounds %"class.JPH::Vec4", ptr %419, i32 0, i32 0
  %421 = getelementptr inbounds %union.anon.4, ptr %420, i32 0, i32 0
  %422 = getelementptr inbounds { double, double }, ptr %421, i32 0, i32 0
  %423 = extractvalue { double, double } %417, 0
  store double %423, ptr %422, align 16
  %424 = getelementptr inbounds { double, double }, ptr %421, i32 0, i32 1
  %425 = extractvalue { double, double } %417, 1
  store double %425, ptr %424, align 8
  %426 = getelementptr inbounds { double, double }, ptr %39, i32 0, i32 0
  %427 = load double, ptr %426, align 16
  %428 = getelementptr inbounds { double, double }, ptr %39, i32 0, i32 1
  %429 = load double, ptr %428, align 8
  %430 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 0
  %431 = load double, ptr %430, align 16
  %432 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 1
  %433 = load double, ptr %432, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %37, ptr noundef %401, double %427, double %429, double %431, double %433, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %434 unwind label %601

434:                                              ; preds = %418
  %435 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %400, ptr noundef nonnull align 16 dereferenceable(256) %37)
          to label %436 unwind label %609

436:                                              ; preds = %434
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %37) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr %37) #9
  store ptr %435, ptr %36, align 8, !tbaa !5
  %437 = getelementptr inbounds %class.Test, ptr %106, i32 0, i32 3
  %438 = load ptr, ptr %437, align 8, !tbaa !15
  %439 = load ptr, ptr %36, align 8, !tbaa !5
  %440 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %439)
          to label %441 unwind label %614

441:                                              ; preds = %436
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %438, ptr noundef nonnull align 4 dereferenceable(4) %440, i32 noundef 0)
          to label %442 unwind label %614

442:                                              ; preds = %441
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #9
  %443 = getelementptr inbounds %class.Test, ptr %106, i32 0, i32 3
  %444 = load ptr, ptr %443, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 256, ptr %42) #9
  %445 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %446 unwind label %618

446:                                              ; preds = %442
  %447 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 5.000000e+00)
          to label %448 unwind label %622

448:                                              ; preds = %446
  %449 = getelementptr inbounds %"class.JPH::Vec3", ptr %43, i32 0, i32 0
  %450 = getelementptr inbounds %union.anon, ptr %449, i32 0, i32 0
  %451 = getelementptr inbounds { double, double }, ptr %450, i32 0, i32 0
  %452 = extractvalue { double, double } %447, 0
  store double %452, ptr %451, align 16
  %453 = getelementptr inbounds { double, double }, ptr %450, i32 0, i32 1
  %454 = extractvalue { double, double } %447, 1
  store double %454, ptr %453, align 8
  %455 = getelementptr inbounds { double, double }, ptr %43, i32 0, i32 0
  %456 = load double, ptr %455, align 16
  %457 = getelementptr inbounds { double, double }, ptr %43, i32 0, i32 1
  %458 = load double, ptr %457, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %445, double %456, double %458, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %459 unwind label %622

459:                                              ; preds = %448
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %44, float noundef -5.000000e+00, float noundef 7.000000e+00, float noundef 0.000000e+00)
          to label %460 unwind label %618

460:                                              ; preds = %459
  %461 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %462 unwind label %618

462:                                              ; preds = %460
  %463 = getelementptr inbounds %"class.JPH::Quat", ptr %45, i32 0, i32 0
  %464 = getelementptr inbounds %"class.JPH::Vec4", ptr %463, i32 0, i32 0
  %465 = getelementptr inbounds %union.anon.4, ptr %464, i32 0, i32 0
  %466 = getelementptr inbounds { double, double }, ptr %465, i32 0, i32 0
  %467 = extractvalue { double, double } %461, 0
  store double %467, ptr %466, align 16
  %468 = getelementptr inbounds { double, double }, ptr %465, i32 0, i32 1
  %469 = extractvalue { double, double } %461, 1
  store double %469, ptr %468, align 8
  %470 = getelementptr inbounds { double, double }, ptr %44, i32 0, i32 0
  %471 = load double, ptr %470, align 16
  %472 = getelementptr inbounds { double, double }, ptr %44, i32 0, i32 1
  %473 = load double, ptr %472, align 8
  %474 = getelementptr inbounds { double, double }, ptr %45, i32 0, i32 0
  %475 = load double, ptr %474, align 16
  %476 = getelementptr inbounds { double, double }, ptr %45, i32 0, i32 1
  %477 = load double, ptr %476, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %42, ptr noundef %445, double %471, double %473, double %475, double %477, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %478 unwind label %618

478:                                              ; preds = %462
  %479 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %444, ptr noundef nonnull align 16 dereferenceable(256) %42)
          to label %480 unwind label %626

480:                                              ; preds = %478
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %42) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr %42) #9
  store ptr %479, ptr %41, align 8, !tbaa !5
  %481 = getelementptr inbounds %class.Test, ptr %106, i32 0, i32 3
  %482 = load ptr, ptr %481, align 8, !tbaa !15
  %483 = load ptr, ptr %41, align 8, !tbaa !5
  %484 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %483)
          to label %485 unwind label %631

485:                                              ; preds = %480
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %482, ptr noundef nonnull align 4 dereferenceable(4) %484, i32 noundef 0)
          to label %486 unwind label %631

486:                                              ; preds = %485
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #9
  %487 = getelementptr inbounds %class.Test, ptr %106, i32 0, i32 3
  %488 = load ptr, ptr %487, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 256, ptr %47) #9
  %489 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %490 unwind label %635

490:                                              ; preds = %486
  %491 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 0x3FB99999A0000000)
          to label %492 unwind label %639

492:                                              ; preds = %490
  %493 = getelementptr inbounds %"class.JPH::Vec3", ptr %48, i32 0, i32 0
  %494 = getelementptr inbounds %union.anon, ptr %493, i32 0, i32 0
  %495 = getelementptr inbounds { double, double }, ptr %494, i32 0, i32 0
  %496 = extractvalue { double, double } %491, 0
  store double %496, ptr %495, align 16
  %497 = getelementptr inbounds { double, double }, ptr %494, i32 0, i32 1
  %498 = extractvalue { double, double } %491, 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
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %489, double %500, double %502, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %503 unwind label %639

503:                                              ; preds = %492
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %49, float noundef -5.000000e+00, float noundef 7.000000e+00, float noundef 0x4014CCCCC0000000)
          to label %504 unwind label %635

504:                                              ; preds = %503
  %505 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %506 unwind label %635

506:                                              ; preds = %504
  %507 = getelementptr inbounds %"class.JPH::Quat", ptr %50, i32 0, i32 0
  %508 = getelementptr inbounds %"class.JPH::Vec4", ptr %507, i32 0, i32 0
  %509 = getelementptr inbounds %union.anon.4, ptr %508, i32 0, i32 0
  %510 = getelementptr inbounds { double, double }, ptr %509, i32 0, i32 0
  %511 = extractvalue { double, double } %505, 0
  store double %511, ptr %510, align 16
  %512 = getelementptr inbounds { double, double }, ptr %509, i32 0, i32 1
  %513 = extractvalue { double, double } %505, 1
  store double %513, ptr %512, align 8
  %514 = getelementptr inbounds { double, double }, ptr %49, i32 0, i32 0
  %515 = load double, ptr %514, align 16
  %516 = getelementptr inbounds { double, double }, ptr %49, i32 0, i32 1
  %517 = load double, ptr %516, align 8
  %518 = getelementptr inbounds { double, double }, ptr %50, i32 0, i32 0
  %519 = load double, ptr %518, align 16
  %520 = getelementptr inbounds { double, double }, ptr %50, i32 0, i32 1
  %521 = load double, ptr %520, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %47, ptr noundef %489, double %515, double %517, double %519, double %521, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %522 unwind label %635

522:                                              ; preds = %506
  %523 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %488, ptr noundef nonnull align 16 dereferenceable(256) %47)
          to label %524 unwind label %643

524:                                              ; preds = %522
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %47) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr %47) #9
  store ptr %523, ptr %46, align 8, !tbaa !5
  %525 = getelementptr inbounds %class.Test, ptr %106, i32 0, i32 3
  %526 = load ptr, ptr %525, align 8, !tbaa !15
  %527 = load ptr, ptr %46, align 8, !tbaa !5
  %528 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %527)
          to label %529 unwind label %648

529:                                              ; preds = %524
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %526, ptr noundef nonnull align 4 dereferenceable(4) %528, i32 noundef 0)
          to label %530 unwind label %648

530:                                              ; preds = %529
  call void @llvm.lifetime.start.p0(i64 144, ptr %51) #9
  invoke void @_ZN3JPH23FixedConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(144) %51)
          to label %531 unwind label %652

531:                                              ; preds = %530
  %532 = getelementptr inbounds %"class.JPH::FixedConstraintSettings", ptr %51, i32 0, i32 2
  store i8 1, ptr %532, align 4, !tbaa !25
  %533 = getelementptr inbounds %class.Test, ptr %106, i32 0, i32 2
  %534 = load ptr, ptr %533, align 8, !tbaa !35
  %535 = load ptr, ptr %36, align 8, !tbaa !5
  %536 = load ptr, ptr %41, align 8, !tbaa !5
  %537 = invoke noundef ptr @_ZNK3JPH23FixedConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(144) %51, ptr noundef nonnull align 16 dereferenceable(122) %535, ptr noundef nonnull align 16 dereferenceable(122) %536)
          to label %538 unwind label %656

538:                                              ; preds = %531
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %534, ptr noundef %537)
          to label %539 unwind label %656

539:                                              ; preds = %538
  call void @llvm.lifetime.start.p0(i64 144, ptr %52) #9
  invoke void @_ZN3JPH23FixedConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(144) %52)
          to label %540 unwind label %660

540:                                              ; preds = %539
  %541 = getelementptr inbounds %"class.JPH::FixedConstraintSettings", ptr %52, i32 0, i32 2
  store i8 1, ptr %541, align 4, !tbaa !25
  %542 = getelementptr inbounds %class.Test, ptr %106, i32 0, i32 2
  %543 = load ptr, ptr %542, align 8, !tbaa !35
  %544 = load ptr, ptr %41, align 8, !tbaa !5
  %545 = load ptr, ptr %46, align 8, !tbaa !5
  %546 = invoke noundef ptr @_ZNK3JPH23FixedConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(144) %52, ptr noundef nonnull align 16 dereferenceable(122) %544, ptr noundef nonnull align 16 dereferenceable(122) %545)
          to label %547 unwind label %664

547:                                              ; preds = %540
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %543, ptr noundef %546)
          to label %548 unwind label %664

548:                                              ; preds = %547
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %52) #9
  call void @llvm.lifetime.end.p0(i64 144, ptr %52) #9
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %51) #9
  call void @llvm.lifetime.end.p0(i64 144, ptr %51) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %53) #9
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %53, float noundef 0.000000e+00, float noundef 2.500000e+01, float noundef -4.000000e+01)
          to label %549 unwind label %674

549:                                              ; preds = %548
  call void @llvm.lifetime.start.p0(i64 16, ptr %54) #9
  %550 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %551 unwind label %678

551:                                              ; preds = %549
  %552 = getelementptr inbounds %"class.JPH::Vec3", ptr %55, i32 0, i32 0
  %553 = getelementptr inbounds %union.anon, ptr %552, i32 0, i32 0
  %554 = getelementptr inbounds { double, double }, ptr %553, i32 0, i32 0
  %555 = extractvalue { double, double } %550, 0
  store double %555, ptr %554, align 16
  %556 = getelementptr inbounds { double, double }, ptr %553, i32 0, i32 1
  %557 = extractvalue { double, double } %550, 1
  store double %557, ptr %556, align 8
  %558 = getelementptr inbounds { double, double }, ptr %55, i32 0, i32 0
  %559 = load double, ptr %558, align 16
  %560 = getelementptr inbounds { double, double }, ptr %55, i32 0, i32 1
  %561 = load double, ptr %560, align 8
  %562 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %559, double %561, float noundef 0xBFF921FB60000000)
          to label %563 unwind label %678

563:                                              ; preds = %551
  %564 = getelementptr inbounds %"class.JPH::Quat", ptr %54, i32 0, i32 0
  %565 = getelementptr inbounds %"class.JPH::Vec4", ptr %564, i32 0, i32 0
  %566 = getelementptr inbounds %union.anon.4, ptr %565, i32 0, i32 0
  %567 = getelementptr inbounds { double, double }, ptr %566, i32 0, i32 0
  %568 = extractvalue { double, double } %562, 0
  store double %568, ptr %567, align 16
  %569 = getelementptr inbounds { double, double }, ptr %566, i32 0, i32 1
  %570 = extractvalue { double, double } %562, 1
  store double %570, ptr %569, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #9
  %571 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %572 unwind label %682

572:                                              ; preds = %563
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %57, float noundef 0x3FB99999A0000000, float noundef 1.000000e+00, float noundef 0x3FB99999A0000000)
          to label %573 unwind label %686

573:                                              ; preds = %572
  %574 = getelementptr inbounds { double, double }, ptr %57, i32 0, i32 0
  %575 = load double, ptr %574, align 16
  %576 = getelementptr inbounds { double, double }, ptr %57, i32 0, i32 1
  %577 = load double, ptr %576, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %571, double %575, double %577, float noundef 0.000000e+00, ptr noundef null)
          to label %578 unwind label %686

578:                                              ; preds = %573
  invoke void @_ZN3JPH3RefINS_8BoxShapeEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %56, ptr noundef %571)
          to label %579 unwind label %682

579:                                              ; preds = %578
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #9
  %580 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %581 unwind label %690

581:                                              ; preds = %579
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %59, float noundef 0x3F847AE140000000, float noundef 1.500000e+00, float noundef 0x3FB99999A0000000)
          to label %582 unwind label %694

582:                                              ; preds = %581
  %583 = getelementptr inbounds { double, double }, ptr %59, i32 0, i32 0
  %584 = load double, ptr %583, align 16
  %585 = getelementptr inbounds { double, double }, ptr %59, i32 0, i32 1
  %586 = load double, ptr %585, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %580, double %584, double %586, float noundef 0.000000e+00, ptr noundef null)
          to label %587 unwind label %694

587:                                              ; preds = %582
  invoke void @_ZN3JPH3RefINS_8BoxShapeEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %58, ptr noundef %580)
          to label %588 unwind label %690

588:                                              ; preds = %587
  call void @llvm.lifetime.start.p0(i64 32, ptr %60) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %60, ptr align 16 @__const._ZN19FixedConstraintTest10InitializeEv.prev_pillars, i64 32, i1 false)
  call void @llvm.lifetime.start.p0(i64 16, ptr %61) #9
  %589 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %590 unwind label %698

590:                                              ; preds = %588
  %591 = getelementptr inbounds %"class.JPH::Vec3", ptr %61, i32 0, i32 0
  %592 = getelementptr inbounds %union.anon, ptr %591, i32 0, i32 0
  %593 = getelementptr inbounds { double, double }, ptr %592, i32 0, i32 0
  %594 = extractvalue { double, double } %589, 0
  store double %594, ptr %593, align 16
  %595 = getelementptr inbounds { double, double }, ptr %592, i32 0, i32 1
  %596 = extractvalue { double, double } %589, 1
  store double %596, ptr %595, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #9
  store i32 0, ptr %62, align 4, !tbaa !11
  br label %597

597:                                              ; preds = %1115, %590
  %598 = load i32, ptr %62, align 4, !tbaa !11
  %599 = icmp slt i32 %598, 10
  br i1 %599, label %702, label %600

600:                                              ; preds = %597
  store i32 11, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #9
  br label %1123

601:                                              ; preds = %418, %416, %415, %398
  %602 = landingpad { ptr, i32 }
          cleanup
  %603 = extractvalue { ptr, i32 } %602, 0
  store ptr %603, ptr %6, align 8
  %604 = extractvalue { ptr, i32 } %602, 1
  store i32 %604, ptr %7, align 4
  br label %613

605:                                              ; preds = %404, %402
  %606 = landingpad { ptr, i32 }
          cleanup
  %607 = extractvalue { ptr, i32 } %606, 0
  store ptr %607, ptr %6, align 8
  %608 = extractvalue { ptr, i32 } %606, 1
  store i32 %608, ptr %7, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %401) #9
  br label %613

609:                                              ; preds = %434
  %610 = landingpad { ptr, i32 }
          cleanup
  %611 = extractvalue { ptr, i32 } %610, 0
  store ptr %611, ptr %6, align 8
  %612 = extractvalue { ptr, i32 } %610, 1
  store i32 %612, ptr %7, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %37) #9
  br label %613

613:                                              ; preds = %609, %605, %601
  call void @llvm.lifetime.end.p0(i64 256, ptr %37) #9
  br label %673

614:                                              ; preds = %441, %436
  %615 = landingpad { ptr, i32 }
          cleanup
  %616 = extractvalue { ptr, i32 } %615, 0
  store ptr %616, ptr %6, align 8
  %617 = extractvalue { ptr, i32 } %615, 1
  store i32 %617, ptr %7, align 4
  br label %673

618:                                              ; preds = %462, %460, %459, %442
  %619 = landingpad { ptr, i32 }
          cleanup
  %620 = extractvalue { ptr, i32 } %619, 0
  store ptr %620, ptr %6, align 8
  %621 = extractvalue { ptr, i32 } %619, 1
  store i32 %621, ptr %7, align 4
  br label %630

622:                                              ; preds = %448, %446
  %623 = landingpad { ptr, i32 }
          cleanup
  %624 = extractvalue { ptr, i32 } %623, 0
  store ptr %624, ptr %6, align 8
  %625 = extractvalue { ptr, i32 } %623, 1
  store i32 %625, ptr %7, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %445) #9
  br label %630

626:                                              ; preds = %478
  %627 = landingpad { ptr, i32 }
          cleanup
  %628 = extractvalue { ptr, i32 } %627, 0
  store ptr %628, ptr %6, align 8
  %629 = extractvalue { ptr, i32 } %627, 1
  store i32 %629, ptr %7, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %42) #9
  br label %630

630:                                              ; preds = %626, %622, %618
  call void @llvm.lifetime.end.p0(i64 256, ptr %42) #9
  br label %672

631:                                              ; preds = %485, %480
  %632 = landingpad { ptr, i32 }
          cleanup
  %633 = extractvalue { ptr, i32 } %632, 0
  store ptr %633, ptr %6, align 8
  %634 = extractvalue { ptr, i32 } %632, 1
  store i32 %634, ptr %7, align 4
  br label %672

635:                                              ; preds = %506, %504, %503, %486
  %636 = landingpad { ptr, i32 }
          cleanup
  %637 = extractvalue { ptr, i32 } %636, 0
  store ptr %637, ptr %6, align 8
  %638 = extractvalue { ptr, i32 } %636, 1
  store i32 %638, ptr %7, align 4
  br label %647

639:                                              ; preds = %492, %490
  %640 = landingpad { ptr, i32 }
          cleanup
  %641 = extractvalue { ptr, i32 } %640, 0
  store ptr %641, ptr %6, align 8
  %642 = extractvalue { ptr, i32 } %640, 1
  store i32 %642, ptr %7, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %489) #9
  br label %647

643:                                              ; preds = %522
  %644 = landingpad { ptr, i32 }
          cleanup
  %645 = extractvalue { ptr, i32 } %644, 0
  store ptr %645, ptr %6, align 8
  %646 = extractvalue { ptr, i32 } %644, 1
  store i32 %646, ptr %7, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %47) #9
  br label %647

647:                                              ; preds = %643, %639, %635
  call void @llvm.lifetime.end.p0(i64 256, ptr %47) #9
  br label %671

648:                                              ; preds = %529, %524
  %649 = landingpad { ptr, i32 }
          cleanup
  %650 = extractvalue { ptr, i32 } %649, 0
  store ptr %650, ptr %6, align 8
  %651 = extractvalue { ptr, i32 } %649, 1
  store i32 %651, ptr %7, align 4
  br label %671

652:                                              ; preds = %530
  %653 = landingpad { ptr, i32 }
          cleanup
  %654 = extractvalue { ptr, i32 } %653, 0
  store ptr %654, ptr %6, align 8
  %655 = extractvalue { ptr, i32 } %653, 1
  store i32 %655, ptr %7, align 4
  br label %670

656:                                              ; preds = %538, %531
  %657 = landingpad { ptr, i32 }
          cleanup
  %658 = extractvalue { ptr, i32 } %657, 0
  store ptr %658, ptr %6, align 8
  %659 = extractvalue { ptr, i32 } %657, 1
  store i32 %659, ptr %7, align 4
  br label %669

660:                                              ; preds = %539
  %661 = landingpad { ptr, i32 }
          cleanup
  %662 = extractvalue { ptr, i32 } %661, 0
  store ptr %662, ptr %6, align 8
  %663 = extractvalue { ptr, i32 } %661, 1
  store i32 %663, ptr %7, align 4
  br label %668

664:                                              ; preds = %547, %540
  %665 = landingpad { ptr, i32 }
          cleanup
  %666 = extractvalue { ptr, i32 } %665, 0
  store ptr %666, ptr %6, align 8
  %667 = extractvalue { ptr, i32 } %665, 1
  store i32 %667, ptr %7, align 4
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %52) #9
  br label %668

668:                                              ; preds = %664, %660
  call void @llvm.lifetime.end.p0(i64 144, ptr %52) #9
  br label %669

669:                                              ; preds = %668, %656
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %51) #9
  br label %670

670:                                              ; preds = %669, %652
  call void @llvm.lifetime.end.p0(i64 144, ptr %51) #9
  br label %671

671:                                              ; preds = %670, %648, %647
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #9
  br label %672

672:                                              ; preds = %671, %631, %630
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #9
  br label %673

673:                                              ; preds = %672, %614, %613
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  br label %1255

674:                                              ; preds = %548
  %675 = landingpad { ptr, i32 }
          cleanup
  %676 = extractvalue { ptr, i32 } %675, 0
  store ptr %676, ptr %6, align 8
  %677 = extractvalue { ptr, i32 } %675, 1
  store i32 %677, ptr %7, align 4
  br label %1254

678:                                              ; preds = %551, %549
  %679 = landingpad { ptr, i32 }
          cleanup
  %680 = extractvalue { ptr, i32 } %679, 0
  store ptr %680, ptr %6, align 8
  %681 = extractvalue { ptr, i32 } %679, 1
  store i32 %681, ptr %7, align 4
  br label %1253

682:                                              ; preds = %578, %563
  %683 = landingpad { ptr, i32 }
          cleanup
  %684 = extractvalue { ptr, i32 } %683, 0
  store ptr %684, ptr %6, align 8
  %685 = extractvalue { ptr, i32 } %683, 1
  store i32 %685, ptr %7, align 4
  br label %1252

686:                                              ; preds = %573, %572
  %687 = landingpad { ptr, i32 }
          cleanup
  %688 = extractvalue { ptr, i32 } %687, 0
  store ptr %688, ptr %6, align 8
  %689 = extractvalue { ptr, i32 } %687, 1
  store i32 %689, ptr %7, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %571) #9
  br label %1252

690:                                              ; preds = %587, %579
  %691 = landingpad { ptr, i32 }
          cleanup
  %692 = extractvalue { ptr, i32 } %691, 0
  store ptr %692, ptr %6, align 8
  %693 = extractvalue { ptr, i32 } %691, 1
  store i32 %693, ptr %7, align 4
  br label %1251

694:                                              ; preds = %582, %581
  %695 = landingpad { ptr, i32 }
          cleanup
  %696 = extractvalue { ptr, i32 } %695, 0
  store ptr %696, ptr %6, align 8
  %697 = extractvalue { ptr, i32 } %695, 1
  store i32 %697, ptr %7, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %580) #9
  br label %1251

698:                                              ; preds = %588
  %699 = landingpad { ptr, i32 }
          cleanup
  %700 = extractvalue { ptr, i32 } %699, 0
  store ptr %700, ptr %6, align 8
  %701 = extractvalue { ptr, i32 } %699, 1
  store i32 %701, ptr %7, align 4
  br label %1250

702:                                              ; preds = %597
  call void @llvm.lifetime.start.p0(i64 32, ptr %63) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #9
  store i32 0, ptr %64, align 4, !tbaa !11
  br label %703

703:                                              ; preds = %817, %702
  %704 = load i32, ptr %64, align 4, !tbaa !11
  %705 = icmp slt i32 %704, 4
  br i1 %705, label %707, label %706

706:                                              ; preds = %703
  store i32 14, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #9
  br label %843

707:                                              ; preds = %703
  call void @llvm.lifetime.start.p0(i64 16, ptr %65) #9
  %708 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %709 unwind label %820

709:                                              ; preds = %707
  %710 = getelementptr inbounds %"class.JPH::Vec3", ptr %66, i32 0, i32 0
  %711 = getelementptr inbounds %union.anon, ptr %710, i32 0, i32 0
  %712 = getelementptr inbounds { double, double }, ptr %711, i32 0, i32 0
  %713 = extractvalue { double, double } %708, 0
  store double %713, ptr %712, align 16
  %714 = getelementptr inbounds { double, double }, ptr %711, i32 0, i32 1
  %715 = extractvalue { double, double } %708, 1
  store double %715, ptr %714, align 8
  %716 = load i32, ptr %64, align 4, !tbaa !11
  %717 = sitofp i32 %716 to float
  %718 = fmul float %717, 5.000000e-01
  %719 = fmul float %718, 0x400921FB60000000
  %720 = getelementptr inbounds { double, double }, ptr %66, i32 0, i32 0
  %721 = load double, ptr %720, align 16
  %722 = getelementptr inbounds { double, double }, ptr %66, i32 0, i32 1
  %723 = load double, ptr %722, align 8
  %724 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %721, double %723, float noundef %719)
          to label %725 unwind label %820

725:                                              ; preds = %709
  %726 = getelementptr inbounds %"class.JPH::Quat", ptr %65, i32 0, i32 0
  %727 = getelementptr inbounds %"class.JPH::Vec4", ptr %726, i32 0, i32 0
  %728 = getelementptr inbounds %union.anon.4, ptr %727, i32 0, i32 0
  %729 = getelementptr inbounds { double, double }, ptr %728, i32 0, i32 0
  %730 = extractvalue { double, double } %724, 0
  store double %730, ptr %729, align 16
  %731 = getelementptr inbounds { double, double }, ptr %728, i32 0, i32 1
  %732 = extractvalue { double, double } %724, 1
  store double %732, ptr %731, align 8
  %733 = getelementptr inbounds %class.Test, ptr %106, i32 0, i32 3
  %734 = load ptr, ptr %733, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 256, ptr %67) #9
  %735 = invoke noundef ptr @_ZNK3JPH3RefINS_8BoxShapeEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %56)
          to label %736 unwind label %824

736:                                              ; preds = %725
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %72, float noundef 1.000000e+00, float noundef 1.000000e+00, float noundef 1.000000e+00)
          to label %737 unwind label %824

737:                                              ; preds = %736
  %738 = getelementptr inbounds { double, double }, ptr %72, i32 0, i32 0
  %739 = load double, ptr %738, align 16
  %740 = getelementptr inbounds { double, double }, ptr %72, i32 0, i32 1
  %741 = load double, ptr %740, align 8
  %742 = invoke { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %65, double %739, double %741)
          to label %743 unwind label %824

743:                                              ; preds = %737
  %744 = getelementptr inbounds %"class.JPH::Vec3", ptr %71, i32 0, i32 0
  %745 = getelementptr inbounds %union.anon, ptr %744, i32 0, i32 0
  %746 = getelementptr inbounds { double, double }, ptr %745, i32 0, i32 0
  %747 = extractvalue { double, double } %742, 0
  store double %747, ptr %746, align 16
  %748 = getelementptr inbounds { double, double }, ptr %745, i32 0, i32 1
  %749 = extractvalue { double, double } %742, 1
  store double %749, ptr %748, align 8
  %750 = getelementptr inbounds { double, double }, ptr %71, i32 0, i32 0
  %751 = load double, ptr %750, align 16
  %752 = getelementptr inbounds { double, double }, ptr %71, i32 0, i32 1
  %753 = load double, ptr %752, align 8
  %754 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %61, double %751, double %753)
          to label %755 unwind label %824

755:                                              ; preds = %743
  %756 = getelementptr inbounds %"class.JPH::Vec3", ptr %70, i32 0, i32 0
  %757 = getelementptr inbounds %union.anon, ptr %756, i32 0, i32 0
  %758 = getelementptr inbounds { double, double }, ptr %757, i32 0, i32 0
  %759 = extractvalue { double, double } %754, 0
  store double %759, ptr %758, align 16
  %760 = getelementptr inbounds { double, double }, ptr %757, i32 0, i32 1
  %761 = extractvalue { double, double } %754, 1
  store double %761, ptr %760, align 8
  %762 = getelementptr inbounds { double, double }, ptr %70, i32 0, i32 0
  %763 = load double, ptr %762, align 16
  %764 = getelementptr inbounds { double, double }, ptr %70, i32 0, i32 1
  %765 = load double, ptr %764, align 8
  %766 = invoke { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %54, double %763, double %765)
          to label %767 unwind label %824

767:                                              ; preds = %755
  %768 = getelementptr inbounds %"class.JPH::Vec3", ptr %69, i32 0, i32 0
  %769 = getelementptr inbounds %union.anon, ptr %768, i32 0, i32 0
  %770 = getelementptr inbounds { double, double }, ptr %769, i32 0, i32 0
  %771 = extractvalue { double, double } %766, 0
  store double %771, ptr %770, align 16
  %772 = getelementptr inbounds { double, double }, ptr %769, i32 0, i32 1
  %773 = extractvalue { double, double } %766, 1
  store double %773, ptr %772, align 8
  %774 = getelementptr inbounds { double, double }, ptr %69, i32 0, i32 0
  %775 = load double, ptr %774, align 16
  %776 = getelementptr inbounds { double, double }, ptr %69, i32 0, i32 1
  %777 = load double, ptr %776, align 8
  %778 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %53, double %775, double %777)
          to label %779 unwind label %824

779:                                              ; preds = %767
  %780 = getelementptr inbounds %"class.JPH::Vec3", ptr %68, i32 0, i32 0
  %781 = getelementptr inbounds %union.anon, ptr %780, i32 0, i32 0
  %782 = getelementptr inbounds { double, double }, ptr %781, i32 0, i32 0
  %783 = extractvalue { double, double } %778, 0
  store double %783, ptr %782, align 16
  %784 = getelementptr inbounds { double, double }, ptr %781, i32 0, i32 1
  %785 = extractvalue { double, double } %778, 1
  store double %785, ptr %784, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %73, ptr align 16 %54, i64 16, i1 false), !tbaa.struct !23
  %786 = getelementptr inbounds { double, double }, ptr %68, i32 0, i32 0
  %787 = load double, ptr %786, align 16
  %788 = getelementptr inbounds { double, double }, ptr %68, i32 0, i32 1
  %789 = load double, ptr %788, align 8
  %790 = getelementptr inbounds { double, double }, ptr %73, i32 0, i32 0
  %791 = load double, ptr %790, align 16
  %792 = getelementptr inbounds { double, double }, ptr %73, i32 0, i32 1
  %793 = load double, ptr %792, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %67, ptr noundef %735, double %787, double %789, double %791, double %793, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %794 unwind label %824

794:                                              ; preds = %779
  %795 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %734, ptr noundef nonnull align 16 dereferenceable(256) %67)
          to label %796 unwind label %828

796:                                              ; preds = %794
  %797 = load i32, ptr %64, align 4, !tbaa !11
  %798 = sext i32 %797 to i64
  %799 = getelementptr inbounds [4 x ptr], ptr %63, i64 0, i64 %798
  store ptr %795, ptr %799, align 8, !tbaa !5
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %67) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr %67) #9
  %800 = load i32, ptr %64, align 4, !tbaa !11
  %801 = sext i32 %800 to i64
  %802 = getelementptr inbounds [4 x ptr], ptr %63, i64 0, i64 %801
  %803 = load ptr, ptr %802, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %74) #9
  %804 = invoke noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %9)
          to label %805 unwind label %833

805:                                              ; preds = %796
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %74, ptr noundef %804, i32 noundef 0, i32 noundef 0)
          to label %806 unwind label %833

806:                                              ; preds = %805
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %803, ptr noundef nonnull align 8 dereferenceable(16) %74)
          to label %807 unwind label %837

807:                                              ; preds = %806
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %74) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %74) #9
  %808 = getelementptr inbounds %class.Test, ptr %106, i32 0, i32 3
  %809 = load ptr, ptr %808, align 8, !tbaa !15
  %810 = load i32, ptr %64, align 4, !tbaa !11
  %811 = sext i32 %810 to i64
  %812 = getelementptr inbounds [4 x ptr], ptr %63, i64 0, i64 %811
  %813 = load ptr, ptr %812, align 8, !tbaa !5
  %814 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %813)
          to label %815 unwind label %820

815:                                              ; preds = %807
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %809, ptr noundef nonnull align 4 dereferenceable(4) %814, i32 noundef 0)
          to label %816 unwind label %820

816:                                              ; preds = %815
  call void @llvm.lifetime.end.p0(i64 16, ptr %65) #9
  br label %817

817:                                              ; preds = %816
  %818 = load i32, ptr %64, align 4, !tbaa !11
  %819 = add nsw i32 %818, 1
  store i32 %819, ptr %64, align 4, !tbaa !11
  br label %703, !llvm.loop !38

820:                                              ; preds = %815, %807, %709, %707
  %821 = landingpad { ptr, i32 }
          cleanup
  %822 = extractvalue { ptr, i32 } %821, 0
  store ptr %822, ptr %6, align 8
  %823 = extractvalue { ptr, i32 } %821, 1
  store i32 %823, ptr %7, align 4
  br label %842

824:                                              ; preds = %779, %767, %755, %743, %737, %736, %725
  %825 = landingpad { ptr, i32 }
          cleanup
  %826 = extractvalue { ptr, i32 } %825, 0
  store ptr %826, ptr %6, align 8
  %827 = extractvalue { ptr, i32 } %825, 1
  store i32 %827, ptr %7, align 4
  br label %832

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

832:                                              ; preds = %828, %824
  call void @llvm.lifetime.end.p0(i64 256, ptr %67) #9
  br label %842

833:                                              ; preds = %805, %796
  %834 = landingpad { ptr, i32 }
          cleanup
  %835 = extractvalue { ptr, i32 } %834, 0
  store ptr %835, ptr %6, align 8
  %836 = extractvalue { ptr, i32 } %834, 1
  store i32 %836, ptr %7, align 4
  br label %841

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

841:                                              ; preds = %837, %833
  call void @llvm.lifetime.end.p0(i64 16, ptr %74) #9
  br label %842

842:                                              ; preds = %841, %832, %820
  call void @llvm.lifetime.end.p0(i64 16, ptr %65) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #9
  br label %1122

843:                                              ; preds = %706
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #9
  store i32 0, ptr %75, align 4, !tbaa !11
  br label %844

844:                                              ; preds = %1102, %843
  %845 = load i32, ptr %75, align 4, !tbaa !11
  %846 = icmp slt i32 %845, 4
  br i1 %846, label %848, label %847

847:                                              ; preds = %844
  store i32 17, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #9
  br label %1107

848:                                              ; preds = %844
  call void @llvm.lifetime.start.p0(i64 16, ptr %76) #9
  %849 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %850 unwind label %1000

850:                                              ; preds = %848
  %851 = getelementptr inbounds %"class.JPH::Vec3", ptr %77, i32 0, i32 0
  %852 = getelementptr inbounds %union.anon, ptr %851, i32 0, i32 0
  %853 = getelementptr inbounds { double, double }, ptr %852, i32 0, i32 0
  %854 = extractvalue { double, double } %849, 0
  store double %854, ptr %853, align 16
  %855 = getelementptr inbounds { double, double }, ptr %852, i32 0, i32 1
  %856 = extractvalue { double, double } %849, 1
  store double %856, ptr %855, align 8
  %857 = load i32, ptr %75, align 4, !tbaa !11
  %858 = sitofp i32 %857 to float
  %859 = fmul float %858, 5.000000e-01
  %860 = fmul float %859, 0x400921FB60000000
  %861 = getelementptr inbounds { double, double }, ptr %77, i32 0, i32 0
  %862 = load double, ptr %861, align 16
  %863 = getelementptr inbounds { double, double }, ptr %77, i32 0, i32 1
  %864 = load double, ptr %863, align 8
  %865 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %862, double %864, float noundef %860)
          to label %866 unwind label %1000

866:                                              ; preds = %850
  %867 = getelementptr inbounds %"class.JPH::Quat", ptr %76, i32 0, i32 0
  %868 = getelementptr inbounds %"class.JPH::Vec4", ptr %867, i32 0, i32 0
  %869 = getelementptr inbounds %union.anon.4, ptr %868, i32 0, i32 0
  %870 = getelementptr inbounds { double, double }, ptr %869, i32 0, i32 0
  %871 = extractvalue { double, double } %865, 0
  store double %871, ptr %870, align 16
  %872 = getelementptr inbounds { double, double }, ptr %869, i32 0, i32 1
  %873 = extractvalue { double, double } %865, 1
  store double %873, ptr %872, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #9
  %874 = getelementptr inbounds %class.Test, ptr %106, i32 0, i32 3
  %875 = load ptr, ptr %874, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 256, ptr %79) #9
  %876 = invoke noundef ptr @_ZNK3JPH3RefINS_8BoxShapeEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %58)
          to label %877 unwind label %1004

877:                                              ; preds = %866
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %84, float noundef 0x3FF1AE1480000000, float noundef 1.000000e+00, float noundef 0.000000e+00)
          to label %878 unwind label %1004

878:                                              ; preds = %877
  %879 = getelementptr inbounds { double, double }, ptr %84, i32 0, i32 0
  %880 = load double, ptr %879, align 16
  %881 = getelementptr inbounds { double, double }, ptr %84, i32 0, i32 1
  %882 = load double, ptr %881, align 8
  %883 = invoke { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %76, double %880, double %882)
          to label %884 unwind label %1004

884:                                              ; preds = %878
  %885 = getelementptr inbounds %"class.JPH::Vec3", ptr %83, i32 0, i32 0
  %886 = getelementptr inbounds %union.anon, ptr %885, i32 0, i32 0
  %887 = getelementptr inbounds { double, double }, ptr %886, i32 0, i32 0
  %888 = extractvalue { double, double } %883, 0
  store double %888, ptr %887, align 16
  %889 = getelementptr inbounds { double, double }, ptr %886, i32 0, i32 1
  %890 = extractvalue { double, double } %883, 1
  store double %890, ptr %889, align 8
  %891 = getelementptr inbounds { double, double }, ptr %83, i32 0, i32 0
  %892 = load double, ptr %891, align 16
  %893 = getelementptr inbounds { double, double }, ptr %83, i32 0, i32 1
  %894 = load double, ptr %893, align 8
  %895 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %61, double %892, double %894)
          to label %896 unwind label %1004

896:                                              ; preds = %884
  %897 = getelementptr inbounds %"class.JPH::Vec3", ptr %82, i32 0, i32 0
  %898 = getelementptr inbounds %union.anon, ptr %897, i32 0, i32 0
  %899 = getelementptr inbounds { double, double }, ptr %898, i32 0, i32 0
  %900 = extractvalue { double, double } %895, 0
  store double %900, ptr %899, align 16
  %901 = getelementptr inbounds { double, double }, ptr %898, i32 0, i32 1
  %902 = extractvalue { double, double } %895, 1
  store double %902, ptr %901, align 8
  %903 = getelementptr inbounds { double, double }, ptr %82, i32 0, i32 0
  %904 = load double, ptr %903, align 16
  %905 = getelementptr inbounds { double, double }, ptr %82, i32 0, i32 1
  %906 = load double, ptr %905, align 8
  %907 = invoke { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %54, double %904, double %906)
          to label %908 unwind label %1004

908:                                              ; preds = %896
  %909 = getelementptr inbounds %"class.JPH::Vec3", ptr %81, i32 0, i32 0
  %910 = getelementptr inbounds %union.anon, ptr %909, i32 0, i32 0
  %911 = getelementptr inbounds { double, double }, ptr %910, i32 0, i32 0
  %912 = extractvalue { double, double } %907, 0
  store double %912, ptr %911, align 16
  %913 = getelementptr inbounds { double, double }, ptr %910, i32 0, i32 1
  %914 = extractvalue { double, double } %907, 1
  store double %914, ptr %913, align 8
  %915 = getelementptr inbounds { double, double }, ptr %81, i32 0, i32 0
  %916 = load double, ptr %915, align 16
  %917 = getelementptr inbounds { double, double }, ptr %81, i32 0, i32 1
  %918 = load double, ptr %917, align 8
  %919 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %53, double %916, double %918)
          to label %920 unwind label %1004

920:                                              ; preds = %908
  %921 = getelementptr inbounds %"class.JPH::Vec3", ptr %80, i32 0, i32 0
  %922 = getelementptr inbounds %union.anon, ptr %921, i32 0, i32 0
  %923 = getelementptr inbounds { double, double }, ptr %922, i32 0, i32 0
  %924 = extractvalue { double, double } %919, 0
  store double %924, ptr %923, align 16
  %925 = getelementptr inbounds { double, double }, ptr %922, i32 0, i32 1
  %926 = extractvalue { double, double } %919, 1
  store double %926, ptr %925, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %86) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %87, ptr align 16 %76, i64 16, i1 false), !tbaa.struct !23
  %927 = getelementptr inbounds { double, double }, ptr %87, i32 0, i32 0
  %928 = load double, ptr %927, align 16
  %929 = getelementptr inbounds { double, double }, ptr %87, i32 0, i32 1
  %930 = load double, ptr %929, align 8
  %931 = invoke { double, double } @_ZNK3JPH4QuatmlES0_(ptr noundef nonnull align 16 dereferenceable(16) %54, double %928, double %930)
          to label %932 unwind label %1008

932:                                              ; preds = %920
  %933 = getelementptr inbounds %"class.JPH::Quat", ptr %86, i32 0, i32 0
  %934 = getelementptr inbounds %"class.JPH::Vec4", ptr %933, i32 0, i32 0
  %935 = getelementptr inbounds %union.anon.4, ptr %934, i32 0, i32 0
  %936 = getelementptr inbounds { double, double }, ptr %935, i32 0, i32 0
  %937 = extractvalue { double, double } %931, 0
  store double %937, ptr %936, align 16
  %938 = getelementptr inbounds { double, double }, ptr %935, i32 0, i32 1
  %939 = extractvalue { double, double } %931, 1
  store double %939, ptr %938, align 8
  %940 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %941 unwind label %1008

941:                                              ; preds = %932
  %942 = getelementptr inbounds %"class.JPH::Vec3", ptr %89, i32 0, i32 0
  %943 = getelementptr inbounds %union.anon, ptr %942, i32 0, i32 0
  %944 = getelementptr inbounds { double, double }, ptr %943, i32 0, i32 0
  %945 = extractvalue { double, double } %940, 0
  store double %945, ptr %944, align 16
  %946 = getelementptr inbounds { double, double }, ptr %943, i32 0, i32 1
  %947 = extractvalue { double, double } %940, 1
  store double %947, ptr %946, align 8
  %948 = getelementptr inbounds { double, double }, ptr %89, i32 0, i32 0
  %949 = load double, ptr %948, align 16
  %950 = getelementptr inbounds { double, double }, ptr %89, i32 0, i32 1
  %951 = load double, ptr %950, align 8
  %952 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %949, double %951, float noundef 0x3FEE28C760000000)
          to label %953 unwind label %1008

953:                                              ; preds = %941
  %954 = getelementptr inbounds %"class.JPH::Quat", ptr %88, i32 0, i32 0
  %955 = getelementptr inbounds %"class.JPH::Vec4", ptr %954, i32 0, i32 0
  %956 = getelementptr inbounds %union.anon.4, ptr %955, i32 0, i32 0
  %957 = getelementptr inbounds { double, double }, ptr %956, i32 0, i32 0
  %958 = extractvalue { double, double } %952, 0
  store double %958, ptr %957, align 16
  %959 = getelementptr inbounds { double, double }, ptr %956, i32 0, i32 1
  %960 = extractvalue { double, double } %952, 1
  store double %960, ptr %959, align 8
  %961 = getelementptr inbounds { double, double }, ptr %88, i32 0, i32 0
  %962 = load double, ptr %961, align 16
  %963 = getelementptr inbounds { double, double }, ptr %88, i32 0, i32 1
  %964 = load double, ptr %963, align 8
  %965 = invoke { double, double } @_ZNK3JPH4QuatmlES0_(ptr noundef nonnull align 16 dereferenceable(16) %86, double %962, double %964)
          to label %966 unwind label %1008

966:                                              ; preds = %953
  %967 = getelementptr inbounds %"class.JPH::Quat", ptr %85, i32 0, i32 0
  %968 = getelementptr inbounds %"class.JPH::Vec4", ptr %967, i32 0, i32 0
  %969 = getelementptr inbounds %union.anon.4, ptr %968, i32 0, i32 0
  %970 = getelementptr inbounds { double, double }, ptr %969, i32 0, i32 0
  %971 = extractvalue { double, double } %965, 0
  store double %971, ptr %970, align 16
  %972 = getelementptr inbounds { double, double }, ptr %969, i32 0, i32 1
  %973 = extractvalue { double, double } %965, 1
  store double %973, ptr %972, align 8
  %974 = getelementptr inbounds { double, double }, ptr %80, i32 0, i32 0
  %975 = load double, ptr %974, align 16
  %976 = getelementptr inbounds { double, double }, ptr %80, i32 0, i32 1
  %977 = load double, ptr %976, align 8
  %978 = getelementptr inbounds { double, double }, ptr %85, i32 0, i32 0
  %979 = load double, ptr %978, align 16
  %980 = getelementptr inbounds { double, double }, ptr %85, i32 0, i32 1
  %981 = load double, ptr %980, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %79, ptr noundef %876, double %975, double %977, double %979, double %981, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %982 unwind label %1008

982:                                              ; preds = %966
  %983 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %875, ptr noundef nonnull align 16 dereferenceable(256) %79)
          to label %984 unwind label %1012

984:                                              ; preds = %982
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %79) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %86) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr %79) #9
  store ptr %983, ptr %78, align 8, !tbaa !5
  %985 = load ptr, ptr %78, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %90) #9
  %986 = invoke noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %9)
          to label %987 unwind label %1018

987:                                              ; preds = %984
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %90, ptr noundef %986, i32 noundef 0, i32 noundef 0)
          to label %988 unwind label %1018

988:                                              ; preds = %987
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %985, ptr noundef nonnull align 8 dereferenceable(16) %90)
          to label %989 unwind label %1022

989:                                              ; preds = %988
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %90) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %90) #9
  %990 = getelementptr inbounds %class.Test, ptr %106, i32 0, i32 3
  %991 = load ptr, ptr %990, align 8, !tbaa !15
  %992 = load ptr, ptr %78, align 8, !tbaa !5
  %993 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %992)
          to label %994 unwind label %1027

994:                                              ; preds = %989
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %991, ptr noundef nonnull align 4 dereferenceable(4) %993, i32 noundef 0)
          to label %995 unwind label %1027

995:                                              ; preds = %994
  call void @llvm.lifetime.start.p0(i64 4, ptr %91) #9
  store i32 0, ptr %91, align 4, !tbaa !11
  br label %996

996:                                              ; preds = %1049, %995
  %997 = load i32, ptr %91, align 4, !tbaa !11
  %998 = icmp slt i32 %997, 2
  br i1 %998, label %1031, label %999

999:                                              ; preds = %996
  store i32 20, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #9
  br label %1061

1000:                                             ; preds = %850, %848
  %1001 = landingpad { ptr, i32 }
          cleanup
  %1002 = extractvalue { ptr, i32 } %1001, 0
  store ptr %1002, ptr %6, align 8
  %1003 = extractvalue { ptr, i32 } %1001, 1
  store i32 %1003, ptr %7, align 4
  br label %1106

1004:                                             ; preds = %908, %896, %884, %878, %877, %866
  %1005 = landingpad { ptr, i32 }
          cleanup
  %1006 = extractvalue { ptr, i32 } %1005, 0
  store ptr %1006, ptr %6, align 8
  %1007 = extractvalue { ptr, i32 } %1005, 1
  store i32 %1007, ptr %7, align 4
  br label %1017

1008:                                             ; preds = %966, %953, %941, %932, %920
  %1009 = landingpad { ptr, i32 }
          cleanup
  %1010 = extractvalue { ptr, i32 } %1009, 0
  store ptr %1010, ptr %6, align 8
  %1011 = extractvalue { ptr, i32 } %1009, 1
  store i32 %1011, ptr %7, align 4
  br label %1016

1012:                                             ; preds = %982
  %1013 = landingpad { ptr, i32 }
          cleanup
  %1014 = extractvalue { ptr, i32 } %1013, 0
  store ptr %1014, ptr %6, align 8
  %1015 = extractvalue { ptr, i32 } %1013, 1
  store i32 %1015, ptr %7, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %79) #9
  br label %1016

1016:                                             ; preds = %1012, %1008
  call void @llvm.lifetime.end.p0(i64 16, ptr %86) #9
  br label %1017

1017:                                             ; preds = %1016, %1004
  call void @llvm.lifetime.end.p0(i64 256, ptr %79) #9
  br label %1105

1018:                                             ; preds = %987, %984
  %1019 = landingpad { ptr, i32 }
          cleanup
  %1020 = extractvalue { ptr, i32 } %1019, 0
  store ptr %1020, ptr %6, align 8
  %1021 = extractvalue { ptr, i32 } %1019, 1
  store i32 %1021, ptr %7, align 4
  br label %1026

1022:                                             ; preds = %988
  %1023 = landingpad { ptr, i32 }
          cleanup
  %1024 = extractvalue { ptr, i32 } %1023, 0
  store ptr %1024, ptr %6, align 8
  %1025 = extractvalue { ptr, i32 } %1023, 1
  store i32 %1025, ptr %7, align 4
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %90) #9
  br label %1026

1026:                                             ; preds = %1022, %1018
  call void @llvm.lifetime.end.p0(i64 16, ptr %90) #9
  br label %1105

1027:                                             ; preds = %994, %989
  %1028 = landingpad { ptr, i32 }
          cleanup
  %1029 = extractvalue { ptr, i32 } %1028, 0
  store ptr %1029, ptr %6, align 8
  %1030 = extractvalue { ptr, i32 } %1028, 1
  store i32 %1030, ptr %7, align 4
  br label %1105

1031:                                             ; preds = %996
  call void @llvm.lifetime.start.p0(i64 144, ptr %92) #9
  invoke void @_ZN3JPH23FixedConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(144) %92)
          to label %1032 unwind label %1052

1032:                                             ; preds = %1031
  %1033 = getelementptr inbounds %"class.JPH::FixedConstraintSettings", ptr %92, i32 0, i32 2
  store i8 1, ptr %1033, align 4, !tbaa !25
  %1034 = getelementptr inbounds %"class.JPH::ConstraintSettings", ptr %92, i32 0, i32 4
  store i32 64, ptr %1034, align 4, !tbaa !39
  %1035 = getelementptr inbounds %"class.JPH::ConstraintSettings", ptr %92, i32 0, i32 5
  store i32 8, ptr %1035, align 8, !tbaa !40
  %1036 = getelementptr inbounds %class.Test, ptr %106, i32 0, i32 2
  %1037 = load ptr, ptr %1036, align 8, !tbaa !35
  %1038 = load i32, ptr %75, align 4, !tbaa !11
  %1039 = load i32, ptr %91, align 4, !tbaa !11
  %1040 = add nsw i32 %1038, %1039
  %1041 = srem i32 %1040, 4
  %1042 = sext i32 %1041 to i64
  %1043 = getelementptr inbounds [4 x ptr], ptr %63, i64 0, i64 %1042
  %1044 = load ptr, ptr %1043, align 8, !tbaa !5
  %1045 = load ptr, ptr %78, align 8, !tbaa !5
  %1046 = invoke noundef ptr @_ZNK3JPH23FixedConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(144) %92, ptr noundef nonnull align 16 dereferenceable(122) %1044, ptr noundef nonnull align 16 dereferenceable(122) %1045)
          to label %1047 unwind label %1056

1047:                                             ; preds = %1032
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %1037, ptr noundef %1046)
          to label %1048 unwind label %1056

1048:                                             ; preds = %1047
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %92) #9
  call void @llvm.lifetime.end.p0(i64 144, ptr %92) #9
  br label %1049

1049:                                             ; preds = %1048
  %1050 = load i32, ptr %91, align 4, !tbaa !11
  %1051 = add nsw i32 %1050, 1
  store i32 %1051, ptr %91, align 4, !tbaa !11
  br label %996, !llvm.loop !41

1052:                                             ; preds = %1031
  %1053 = landingpad { ptr, i32 }
          cleanup
  %1054 = extractvalue { ptr, i32 } %1053, 0
  store ptr %1054, ptr %6, align 8
  %1055 = extractvalue { ptr, i32 } %1053, 1
  store i32 %1055, ptr %7, align 4
  br label %1060

1056:                                             ; preds = %1047, %1032
  %1057 = landingpad { ptr, i32 }
          cleanup
  %1058 = extractvalue { ptr, i32 } %1057, 0
  store ptr %1058, ptr %6, align 8
  %1059 = extractvalue { ptr, i32 } %1057, 1
  store i32 %1059, ptr %7, align 4
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %92) #9
  br label %1060

1060:                                             ; preds = %1056, %1052
  call void @llvm.lifetime.end.p0(i64 144, ptr %92) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #9
  br label %1105

1061:                                             ; preds = %999
  %1062 = load i32, ptr %75, align 4, !tbaa !11
  %1063 = sext i32 %1062 to i64
  %1064 = getelementptr inbounds [4 x ptr], ptr %60, i64 0, i64 %1063
  %1065 = load ptr, ptr %1064, align 8, !tbaa !5
  %1066 = icmp ne ptr %1065, null
  br i1 %1066, label %1067, label %1094

1067:                                             ; preds = %1061
  call void @llvm.lifetime.start.p0(i64 144, ptr %93) #9
  invoke void @_ZN3JPH23FixedConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(144) %93)
          to label %1068 unwind label %1085

1068:                                             ; preds = %1067
  %1069 = getelementptr inbounds %"class.JPH::FixedConstraintSettings", ptr %93, i32 0, i32 2
  store i8 1, ptr %1069, align 4, !tbaa !25
  %1070 = getelementptr inbounds %"class.JPH::ConstraintSettings", ptr %93, i32 0, i32 4
  store i32 64, ptr %1070, align 4, !tbaa !39
  %1071 = getelementptr inbounds %"class.JPH::ConstraintSettings", ptr %93, i32 0, i32 5
  store i32 8, ptr %1071, align 8, !tbaa !40
  %1072 = getelementptr inbounds %class.Test, ptr %106, i32 0, i32 2
  %1073 = load ptr, ptr %1072, align 8, !tbaa !35
  %1074 = load i32, ptr %75, align 4, !tbaa !11
  %1075 = sext i32 %1074 to i64
  %1076 = getelementptr inbounds [4 x ptr], ptr %60, i64 0, i64 %1075
  %1077 = load ptr, ptr %1076, align 8, !tbaa !5
  %1078 = load i32, ptr %75, align 4, !tbaa !11
  %1079 = sext i32 %1078 to i64
  %1080 = getelementptr inbounds [4 x ptr], ptr %63, i64 0, i64 %1079
  %1081 = load ptr, ptr %1080, align 8, !tbaa !5
  %1082 = invoke noundef ptr @_ZNK3JPH23FixedConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(144) %93, ptr noundef nonnull align 16 dereferenceable(122) %1077, ptr noundef nonnull align 16 dereferenceable(122) %1081)
          to label %1083 unwind label %1089

1083:                                             ; preds = %1068
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %1073, ptr noundef %1082)
          to label %1084 unwind label %1089

1084:                                             ; preds = %1083
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %93) #9
  call void @llvm.lifetime.end.p0(i64 144, ptr %93) #9
  br label %1094

1085:                                             ; preds = %1067
  %1086 = landingpad { ptr, i32 }
          cleanup
  %1087 = extractvalue { ptr, i32 } %1086, 0
  store ptr %1087, ptr %6, align 8
  %1088 = extractvalue { ptr, i32 } %1086, 1
  store i32 %1088, ptr %7, align 4
  br label %1093

1089:                                             ; preds = %1083, %1068
  %1090 = landingpad { ptr, i32 }
          cleanup
  %1091 = extractvalue { ptr, i32 } %1090, 0
  store ptr %1091, ptr %6, align 8
  %1092 = extractvalue { ptr, i32 } %1090, 1
  store i32 %1092, ptr %7, align 4
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %93) #9
  br label %1093

1093:                                             ; preds = %1089, %1085
  call void @llvm.lifetime.end.p0(i64 144, ptr %93) #9
  br label %1105

1094:                                             ; preds = %1084, %1061
  %1095 = load i32, ptr %75, align 4, !tbaa !11
  %1096 = sext i32 %1095 to i64
  %1097 = getelementptr inbounds [4 x ptr], ptr %63, i64 0, i64 %1096
  %1098 = load ptr, ptr %1097, align 8, !tbaa !5
  %1099 = load i32, ptr %75, align 4, !tbaa !11
  %1100 = sext i32 %1099 to i64
  %1101 = getelementptr inbounds [4 x ptr], ptr %60, i64 0, i64 %1100
  store ptr %1098, ptr %1101, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %76) #9
  br label %1102

1102:                                             ; preds = %1094
  %1103 = load i32, ptr %75, align 4, !tbaa !11
  %1104 = add nsw i32 %1103, 1
  store i32 %1104, ptr %75, align 4, !tbaa !11
  br label %844, !llvm.loop !42

1105:                                             ; preds = %1093, %1060, %1027, %1026, %1017
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #9
  br label %1106

1106:                                             ; preds = %1105, %1000
  call void @llvm.lifetime.end.p0(i64 16, ptr %76) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #9
  br label %1122

1107:                                             ; preds = %847
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %94, float noundef 0.000000e+00, float noundef 2.000000e+00, float noundef 0.000000e+00)
          to label %1108 unwind label %1118

1108:                                             ; preds = %1107
  %1109 = getelementptr inbounds { double, double }, ptr %94, i32 0, i32 0
  %1110 = load double, ptr %1109, align 16
  %1111 = getelementptr inbounds { double, double }, ptr %94, i32 0, i32 1
  %1112 = load double, ptr %1111, align 8
  %1113 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %61, double %1110, double %1112)
          to label %1114 unwind label %1118

1114:                                             ; preds = %1108
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #9
  br label %1115

1115:                                             ; preds = %1114
  %1116 = load i32, ptr %62, align 4, !tbaa !11
  %1117 = add nsw i32 %1116, 1
  store i32 %1117, ptr %62, align 4, !tbaa !11
  br label %597, !llvm.loop !43

1118:                                             ; preds = %1108, %1107
  %1119 = landingpad { ptr, i32 }
          cleanup
  %1120 = extractvalue { ptr, i32 } %1119, 0
  store ptr %1120, ptr %6, align 8
  %1121 = extractvalue { ptr, i32 } %1119, 1
  store i32 %1121, ptr %7, align 4
  br label %1122

1122:                                             ; preds = %1118, %1106, %842
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #9
  br label %1250

1123:                                             ; preds = %600
  call void @llvm.lifetime.start.p0(i64 8, ptr %95) #9
  %1124 = getelementptr inbounds %class.Test, ptr %106, i32 0, i32 3
  %1125 = load ptr, ptr %1124, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 256, ptr %96) #9
  %1126 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %1127 unwind label %1197

1127:                                             ; preds = %1123
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %97, float noundef 0x3FF3333340000000, float noundef 0x3FB99999A0000000, float noundef 0x3FF3333340000000)
          to label %1128 unwind label %1201

1128:                                             ; preds = %1127
  %1129 = getelementptr inbounds { double, double }, ptr %97, i32 0, i32 0
  %1130 = load double, ptr %1129, align 16
  %1131 = getelementptr inbounds { double, double }, ptr %97, i32 0, i32 1
  %1132 = load double, ptr %1131, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %1126, double %1130, double %1132, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %1133 unwind label %1201

1133:                                             ; preds = %1128
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %101, float noundef 0.000000e+00, float noundef 0x3FB99999A0000000, float noundef 0.000000e+00)
          to label %1134 unwind label %1197

1134:                                             ; preds = %1133
  %1135 = getelementptr inbounds { double, double }, ptr %101, i32 0, i32 0
  %1136 = load double, ptr %1135, align 16
  %1137 = getelementptr inbounds { double, double }, ptr %101, i32 0, i32 1
  %1138 = load double, ptr %1137, align 8
  %1139 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %61, double %1136, double %1138)
          to label %1140 unwind label %1197

1140:                                             ; preds = %1134
  %1141 = getelementptr inbounds %"class.JPH::Vec3", ptr %100, i32 0, i32 0
  %1142 = getelementptr inbounds %union.anon, ptr %1141, i32 0, i32 0
  %1143 = getelementptr inbounds { double, double }, ptr %1142, i32 0, i32 0
  %1144 = extractvalue { double, double } %1139, 0
  store double %1144, ptr %1143, align 16
  %1145 = getelementptr inbounds { double, double }, ptr %1142, i32 0, i32 1
  %1146 = extractvalue { double, double } %1139, 1
  store double %1146, ptr %1145, align 8
  %1147 = getelementptr inbounds { double, double }, ptr %100, i32 0, i32 0
  %1148 = load double, ptr %1147, align 16
  %1149 = getelementptr inbounds { double, double }, ptr %100, i32 0, i32 1
  %1150 = load double, ptr %1149, align 8
  %1151 = invoke { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %54, double %1148, double %1150)
          to label %1152 unwind label %1197

1152:                                             ; preds = %1140
  %1153 = getelementptr inbounds %"class.JPH::Vec3", ptr %99, i32 0, i32 0
  %1154 = getelementptr inbounds %union.anon, ptr %1153, i32 0, i32 0
  %1155 = getelementptr inbounds { double, double }, ptr %1154, i32 0, i32 0
  %1156 = extractvalue { double, double } %1151, 0
  store double %1156, ptr %1155, align 16
  %1157 = getelementptr inbounds { double, double }, ptr %1154, i32 0, i32 1
  %1158 = extractvalue { double, double } %1151, 1
  store double %1158, ptr %1157, align 8
  %1159 = getelementptr inbounds { double, double }, ptr %99, i32 0, i32 0
  %1160 = load double, ptr %1159, align 16
  %1161 = getelementptr inbounds { double, double }, ptr %99, i32 0, i32 1
  %1162 = load double, ptr %1161, align 8
  %1163 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %53, double %1160, double %1162)
          to label %1164 unwind label %1197

1164:                                             ; preds = %1152
  %1165 = getelementptr inbounds %"class.JPH::Vec3", ptr %98, i32 0, i32 0
  %1166 = getelementptr inbounds %union.anon, ptr %1165, i32 0, i32 0
  %1167 = getelementptr inbounds { double, double }, ptr %1166, i32 0, i32 0
  %1168 = extractvalue { double, double } %1163, 0
  store double %1168, ptr %1167, align 16
  %1169 = getelementptr inbounds { double, double }, ptr %1166, i32 0, i32 1
  %1170 = extractvalue { double, double } %1163, 1
  store double %1170, ptr %1169, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %102, ptr align 16 %54, i64 16, i1 false), !tbaa.struct !23
  %1171 = getelementptr inbounds { double, double }, ptr %98, i32 0, i32 0
  %1172 = load double, ptr %1171, align 16
  %1173 = getelementptr inbounds { double, double }, ptr %98, i32 0, i32 1
  %1174 = load double, ptr %1173, align 8
  %1175 = getelementptr inbounds { double, double }, ptr %102, i32 0, i32 0
  %1176 = load double, ptr %1175, align 16
  %1177 = getelementptr inbounds { double, double }, ptr %102, i32 0, i32 1
  %1178 = load double, ptr %1177, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %96, ptr noundef %1126, double %1172, double %1174, double %1176, double %1178, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %1179 unwind label %1197

1179:                                             ; preds = %1164
  %1180 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %1125, ptr noundef nonnull align 16 dereferenceable(256) %96)
          to label %1181 unwind label %1205

1181:                                             ; preds = %1179
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %96) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr %96) #9
  store ptr %1180, ptr %95, align 8, !tbaa !5
  %1182 = load ptr, ptr %95, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %103) #9
  %1183 = invoke noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %9)
          to label %1184 unwind label %1210

1184:                                             ; preds = %1181
  invoke void @_ZN3JPH14CollisionGroupC2EPKNS_11GroupFilterEjj(ptr noundef nonnull align 8 dereferenceable(16) %103, ptr noundef %1183, i32 noundef 0, i32 noundef 0)
          to label %1185 unwind label %1210

1185:                                             ; preds = %1184
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %1182, ptr noundef nonnull align 8 dereferenceable(16) %103)
          to label %1186 unwind label %1214

1186:                                             ; preds = %1185
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %103) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %103) #9
  %1187 = getelementptr inbounds %class.Test, ptr %106, i32 0, i32 3
  %1188 = load ptr, ptr %1187, align 8, !tbaa !15
  %1189 = load ptr, ptr %95, align 8, !tbaa !5
  %1190 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %1189)
          to label %1191 unwind label %1219

1191:                                             ; preds = %1186
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %1188, ptr noundef nonnull align 4 dereferenceable(4) %1190, i32 noundef 0)
          to label %1192 unwind label %1219

1192:                                             ; preds = %1191
  call void @llvm.lifetime.start.p0(i64 4, ptr %104) #9
  store i32 0, ptr %104, align 4, !tbaa !11
  br label %1193

1193:                                             ; preds = %1236, %1192
  %1194 = load i32, ptr %104, align 4, !tbaa !11
  %1195 = icmp slt i32 %1194, 4
  br i1 %1195, label %1223, label %1196

1196:                                             ; preds = %1193
  store i32 23, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %104) #9
  br label %1248

1197:                                             ; preds = %1164, %1152, %1140, %1134, %1133, %1123
  %1198 = landingpad { ptr, i32 }
          cleanup
  %1199 = extractvalue { ptr, i32 } %1198, 0
  store ptr %1199, ptr %6, align 8
  %1200 = extractvalue { ptr, i32 } %1198, 1
  store i32 %1200, ptr %7, align 4
  br label %1209

1201:                                             ; preds = %1128, %1127
  %1202 = landingpad { ptr, i32 }
          cleanup
  %1203 = extractvalue { ptr, i32 } %1202, 0
  store ptr %1203, ptr %6, align 8
  %1204 = extractvalue { ptr, i32 } %1202, 1
  store i32 %1204, ptr %7, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %1126) #9
  br label %1209

1205:                                             ; preds = %1179
  %1206 = landingpad { ptr, i32 }
          cleanup
  %1207 = extractvalue { ptr, i32 } %1206, 0
  store ptr %1207, ptr %6, align 8
  %1208 = extractvalue { ptr, i32 } %1206, 1
  store i32 %1208, ptr %7, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %96) #9
  br label %1209

1209:                                             ; preds = %1205, %1201, %1197
  call void @llvm.lifetime.end.p0(i64 256, ptr %96) #9
  br label %1249

1210:                                             ; preds = %1184, %1181
  %1211 = landingpad { ptr, i32 }
          cleanup
  %1212 = extractvalue { ptr, i32 } %1211, 0
  store ptr %1212, ptr %6, align 8
  %1213 = extractvalue { ptr, i32 } %1211, 1
  store i32 %1213, ptr %7, align 4
  br label %1218

1214:                                             ; preds = %1185
  %1215 = landingpad { ptr, i32 }
          cleanup
  %1216 = extractvalue { ptr, i32 } %1215, 0
  store ptr %1216, ptr %6, align 8
  %1217 = extractvalue { ptr, i32 } %1215, 1
  store i32 %1217, ptr %7, align 4
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %103) #9
  br label %1218

1218:                                             ; preds = %1214, %1210
  call void @llvm.lifetime.end.p0(i64 16, ptr %103) #9
  br label %1249

1219:                                             ; preds = %1191, %1186
  %1220 = landingpad { ptr, i32 }
          cleanup
  %1221 = extractvalue { ptr, i32 } %1220, 0
  store ptr %1221, ptr %6, align 8
  %1222 = extractvalue { ptr, i32 } %1220, 1
  store i32 %1222, ptr %7, align 4
  br label %1249

1223:                                             ; preds = %1193
  call void @llvm.lifetime.start.p0(i64 144, ptr %105) #9
  invoke void @_ZN3JPH23FixedConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(144) %105)
          to label %1224 unwind label %1239

1224:                                             ; preds = %1223
  %1225 = getelementptr inbounds %"class.JPH::FixedConstraintSettings", ptr %105, i32 0, i32 2
  store i8 1, ptr %1225, align 4, !tbaa !25
  %1226 = getelementptr inbounds %class.Test, ptr %106, i32 0, i32 2
  %1227 = load ptr, ptr %1226, align 8, !tbaa !35
  %1228 = load i32, ptr %104, align 4, !tbaa !11
  %1229 = sext i32 %1228 to i64
  %1230 = getelementptr inbounds [4 x ptr], ptr %60, i64 0, i64 %1229
  %1231 = load ptr, ptr %1230, align 8, !tbaa !5
  %1232 = load ptr, ptr %95, align 8, !tbaa !5
  %1233 = invoke noundef ptr @_ZNK3JPH23FixedConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(144) %105, ptr noundef nonnull align 16 dereferenceable(122) %1231, ptr noundef nonnull align 16 dereferenceable(122) %1232)
          to label %1234 unwind label %1243

1234:                                             ; preds = %1224
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %1227, ptr noundef %1233)
          to label %1235 unwind label %1243

1235:                                             ; preds = %1234
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %105) #9
  call void @llvm.lifetime.end.p0(i64 144, ptr %105) #9
  br label %1236

1236:                                             ; preds = %1235
  %1237 = load i32, ptr %104, align 4, !tbaa !11
  %1238 = add nsw i32 %1237, 1
  store i32 %1238, ptr %104, align 4, !tbaa !11
  br label %1193, !llvm.loop !44

1239:                                             ; preds = %1223
  %1240 = landingpad { ptr, i32 }
          cleanup
  %1241 = extractvalue { ptr, i32 } %1240, 0
  store ptr %1241, ptr %6, align 8
  %1242 = extractvalue { ptr, i32 } %1240, 1
  store i32 %1242, ptr %7, align 4
  br label %1247

1243:                                             ; preds = %1234, %1224
  %1244 = landingpad { ptr, i32 }
          cleanup
  %1245 = extractvalue { ptr, i32 } %1244, 0
  store ptr %1245, ptr %6, align 8
  %1246 = extractvalue { ptr, i32 } %1244, 1
  store i32 %1246, ptr %7, align 4
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %105) #9
  br label %1247

1247:                                             ; preds = %1243, %1239
  call void @llvm.lifetime.end.p0(i64 144, ptr %105) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %104) #9
  br label %1249

1248:                                             ; preds = %1196
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %61) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #9
  call void @_ZN3JPH3RefINS_8BoxShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %58) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #9
  call void @_ZN3JPH3RefINS_8BoxShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %56) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %54) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %53) #9
  call void @_ZN3JPH3RefINS_16GroupFilterTableEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %9) #9
  call void @llvm.lifetime.end.p0(i64 8, 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

1249:                                             ; preds = %1247, %1219, %1218, %1209
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #9
  br label %1250

1250:                                             ; preds = %1249, %1122, %698
  call void @llvm.lifetime.end.p0(i64 16, ptr %61) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #9
  call void @_ZN3JPH3RefINS_8BoxShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %58) #9
  br label %1251

1251:                                             ; preds = %1250, %694, %690
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #9
  call void @_ZN3JPH3RefINS_8BoxShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %56) #9
  br label %1252

1252:                                             ; preds = %1251, %686, %682
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #9
  br label %1253

1253:                                             ; preds = %1252, %678
  call void @llvm.lifetime.end.p0(i64 16, ptr %54) #9
  br label %1254

1254:                                             ; preds = %1253, %674
  call void @llvm.lifetime.end.p0(i64 16, ptr %53) #9
  br label %1255

1255:                                             ; preds = %1254, %673, %397, %154
  call void @_ZN3JPH3RefINS_16GroupFilterTableEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %9) #9
  br label %1256

1256:                                             ; preds = %1255, %140, %136
  call void @llvm.lifetime.end.p0(i64 8, 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 %1257

1257:                                             ; preds = %1256, %132
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #9
  br label %1258

1258:                                             ; preds = %1257
  %1259 = load ptr, ptr %6, align 8
  %1260 = load i32, ptr %7, align 4
  %1261 = insertvalue { ptr, i32 } poison, ptr %1259, 0
  %1262 = insertvalue { ptr, i32 } %1261, i32 %1260, 1
  resume { ptr, i32 } %1262
}

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 @_ZN3JPH23FixedConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(144)) unnamed_addr #6 align 2

declare noundef ptr @_ZNK3JPH23FixedConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(144), ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 16 dereferenceable(122)) unnamed_addr #2

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

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK3JPH3RefINS_8BoxShapeEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8)) #7 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 } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16), double, double) #3 align 2

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

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

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

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

; 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, !17, i64 44}
!26 = !{!"_ZTSN3JPH23FixedConstraintSettingsE", !27, i64 0, !33, i64 40, !17, i64 44, !34, i64 48, !34, i64 64, !34, i64 80, !34, i64 96, !34, i64 112, !34, i64 128}
!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 = !{!16, !6, i64 16}
!36 = distinct !{!36, !14}
!37 = distinct !{!37, !14}
!38 = distinct !{!38, !14}
!39 = !{!28, !12, i64 20}
!40 = !{!28, !12, i64 24}
!41 = distinct !{!41, !14}
!42 = distinct !{!42, !14}
!43 = distinct !{!43, !14}
!44 = distinct !{!44, !14}


; 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::FixedConstraintSettings" = type { %"class.JPH::TwoBodyConstraintSettings", i32, i8, %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"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::Ref.12" = type { ptr }
%"class.JPH::Ref.27" = type { ptr }

@__const._ZN19FixedConstraintTest10InitializeEv.prev_pillars = external hidden unnamed_addr constant [4 x ptr], align 16

; 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 @_ZN19FixedConstraintTest10InitializeEv(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::FixedConstraintSettings", align 16
  %14 = alloca %"class.JPH::Ref.12", align 8
  %15 = alloca %"class.JPH::BodyCreationSettings", align 16
  %16 = alloca %"class.JPH::Vec3", align 16
  %17 = alloca %"class.JPH::BodyCreationSettings", align 16
  %18 = alloca %"class.JPH::Vec3", align 16
  %19 = alloca %"class.JPH::BodyCreationSettings", align 16
  %20 = alloca %"class.JPH::Vec3", align 16
  %21 = alloca %"class.JPH::FixedConstraintSettings", align 16
  %22 = alloca %"class.JPH::FixedConstraintSettings", align 16
  %23 = alloca %"class.JPH::Vec3", align 16
  %24 = alloca %"class.JPH::Quat", align 16
  %25 = alloca %"class.JPH::Ref.27", align 8
  %26 = alloca %"class.JPH::Vec3", align 16
  %27 = alloca %"class.JPH::Ref.27", align 8
  %28 = alloca %"class.JPH::Vec3", align 16
  %29 = alloca [4 x ptr], align 16
  %30 = alloca %"class.JPH::Vec3", align 16
  %31 = alloca [4 x ptr], align 16
  %32 = alloca %"class.JPH::Quat", align 16
  %33 = alloca %"class.JPH::BodyCreationSettings", align 16
  %34 = alloca %"class.JPH::Vec3", align 16
  %35 = alloca %"class.JPH::CollisionGroup", align 8
  %36 = alloca %"class.JPH::Quat", align 16
  %37 = alloca %"class.JPH::BodyCreationSettings", align 16
  %38 = alloca %"class.JPH::Vec3", align 16
  %39 = alloca %"class.JPH::Quat", align 16
  %40 = alloca %"class.JPH::CollisionGroup", align 8
  %41 = alloca %"class.JPH::FixedConstraintSettings", align 16
  %42 = alloca %"class.JPH::FixedConstraintSettings", align 16
  %43 = alloca %"class.JPH::Vec3", align 16
  %44 = alloca %"class.JPH::BodyCreationSettings", align 16
  %45 = alloca %"class.JPH::Vec3", align 16
  %46 = alloca %"class.JPH::Vec3", align 16
  %47 = alloca %"class.JPH::CollisionGroup", align 8
  %48 = alloca %"class.JPH::FixedConstraintSettings", align 16
  %49 = 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
  %50 = tail call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  %51 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 2.000000e+00)
          to label %52 unwind label %64

52:                                               ; preds = %1
  %53 = extractvalue { double, double } %51, 0
  %54 = extractvalue { double, double } %51, 1
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %50, double %53, double %54, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %55 unwind label %64

55:                                               ; preds = %52
  call void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull %50)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #9
  %56 = invoke noundef ptr @_ZN3JPH16GroupFilterTablenwEm(i64 noundef 40)
          to label %57 unwind label %66

57:                                               ; preds = %55
  invoke void @_ZN3JPH16GroupFilterTableC2Ej(ptr noundef nonnull align 8 dereferenceable(40) %56, i32 noundef 10)
          to label %58 unwind label %68

58:                                               ; preds = %57
  invoke void @_ZN3JPH3RefINS_16GroupFilterTableEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull %56)
          to label %.preheader249 unwind label %66

.preheader249:                                    ; preds = %58, %70
  %.0172 = phi i32 [ %72, %70 ], [ 0, %58 ]
  %exitcond.not = icmp eq i32 %.0172, 9
  br i1 %exitcond.not, label %.preheader248, label %70

.preheader248:                                    ; preds = %.preheader249
  %59 = getelementptr inbounds i8, ptr %0, i64 24
  %.sroa.2104.0..sroa_idx = getelementptr inbounds i8, ptr %4, i64 8
  %60 = getelementptr inbounds i8, ptr %10, i64 8
  %61 = getelementptr inbounds i8, ptr %9, i64 8
  %62 = getelementptr inbounds i8, ptr %13, i64 44
  %63 = getelementptr inbounds i8, ptr %0, i64 16
  br label %78

64:                                               ; preds = %52, %1
  %65 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %50) #9
  br label %734

66:                                               ; preds = %58, %55
  %67 = landingpad { ptr, i32 }
          cleanup
  br label %733

68:                                               ; preds = %57
  %69 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH16GroupFilterTabledlEPv(ptr noundef %56) #9
  br label %733

70:                                               ; preds = %.preheader249
  %71 = call noundef ptr @_ZNK3JPH3RefINS_16GroupFilterTableEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %3)
  %72 = add nuw nsw i32 %.0172, 1
  invoke void @_ZN3JPH16GroupFilterTable16DisableCollisionEjj(ptr noundef nonnull align 8 dereferenceable(40) %71, i32 noundef %.0172, i32 noundef %72)
          to label %.preheader249 unwind label %73, !llvm.loop !5

73:                                               ; preds = %70
  %74 = landingpad { ptr, i32 }
          cleanup
  br label %732

75:                                               ; preds = %100
  %76 = load ptr, ptr %59, align 8, !tbaa !7
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %15) #9
  %77 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %190 unwind label %315

78:                                               ; preds = %.preheader248, %100
  %79 = phi i1 [ true, %.preheader248 ], [ false, %100 ]
  %.0173252 = phi i32 [ 0, %.preheader248 ], [ 1, %100 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #9
  %80 = sub nsw i32 0, %.0173252
  %81 = sitofp i32 %80 to float
  %82 = fmul float %81, 2.000000e+01
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %4, float noundef 0.000000e+00, float noundef 2.500000e+01, float noundef %82)
          to label %83 unwind label %101

83:                                               ; preds = %78
  %84 = load ptr, ptr %59, align 8, !tbaa !7
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %5) #9
  %85 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %2)
  %.sroa.0103.0.copyload = load double, ptr %4, align 16
  %.sroa.2104.0.copyload = load double, ptr %.sroa.2104.0..sroa_idx, align 8, !tbaa !19
  %86 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %87 unwind label %103

87:                                               ; preds = %83
  %88 = extractvalue { double, double } %86, 0
  %89 = extractvalue { double, double } %86, 1
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %5, ptr noundef %85, double %.sroa.0103.0.copyload, double %.sroa.2104.0.copyload, double %88, double %89, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %90 unwind label %103

90:                                               ; preds = %87
  %91 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %84, ptr noundef nonnull align 16 dereferenceable(256) %5)
          to label %92 unwind label %105

92:                                               ; preds = %90
  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
  %93 = 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 %93, i32 noundef %.0173252, i32 noundef 0)
          to label %94 unwind label %108

94:                                               ; preds = %92
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %91, ptr noundef nonnull align 8 dereferenceable(16) %6)
          to label %95 unwind label %110

95:                                               ; preds = %94
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #9
  %96 = load ptr, ptr %59, align 8, !tbaa !7
  %97 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %91)
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %96, ptr noundef nonnull align 4 dereferenceable(4) %97, i32 noundef 1)
          to label %98 unwind label %113

98:                                               ; preds = %95
  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 %99 unwind label %115

99:                                               ; preds = %98
  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 %.preheader247 unwind label %117

100:                                              ; preds = %165
  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 %79, label %78, label %75, !llvm.loop !20

101:                                              ; preds = %78
  %102 = landingpad { ptr, i32 }
          cleanup
  br label %189

103:                                              ; preds = %87, %83
  %104 = landingpad { ptr, i32 }
          cleanup
  br label %107

105:                                              ; preds = %90
  %106 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %5) #9
  br label %107

107:                                              ; preds = %105, %103
  %.pn222 = phi { ptr, i32 } [ %106, %105 ], [ %104, %103 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %5) #9
  br label %189

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

110:                                              ; preds = %94
  %111 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #9
  br label %112

112:                                              ; preds = %110, %108
  %.pn224 = phi { ptr, i32 } [ %111, %110 ], [ %109, %108 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #9
  br label %189

113:                                              ; preds = %95
  %114 = landingpad { ptr, i32 }
          cleanup
  br label %189

115:                                              ; preds = %98
  %116 = landingpad { ptr, i32 }
          cleanup
  br label %188

117:                                              ; preds = %99
  %118 = landingpad { ptr, i32 }
          cleanup
  br label %187

.preheader247:                                    ; preds = %99, %165
  %.0174251 = phi ptr [ %151, %165 ], [ %91, %99 ]
  %.0175250 = phi i32 [ %166, %165 ], [ 1, %99 ]
  br i1 %79, label %119, label %130

119:                                              ; preds = %.preheader247
  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 %120 unwind label %126

120:                                              ; preds = %119
  %121 = load double, ptr %9, align 16
  %122 = load double, ptr %61, align 8
  %123 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %4, double %121, double %122)
          to label %124 unwind label %126

124:                                              ; preds = %120
  %125 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %147 unwind label %128

126:                                              ; preds = %139, %138, %136, %132, %130, %120, %119
  %127 = landingpad { ptr, i32 }
          cleanup
  br label %187

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

130:                                              ; preds = %.preheader247
  %131 = 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 %132 unwind label %126

132:                                              ; preds = %130
  %133 = call noundef float @_ZSt3absf(float noundef %131)
  %134 = fadd float %133, 4.000000e+00
  %135 = 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 %136 unwind label %126

136:                                              ; preds = %132
  %137 = 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 %138 unwind label %126

138:                                              ; preds = %136
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %10, float noundef %134, float noundef %135, float noundef %137)
          to label %139 unwind label %126

139:                                              ; preds = %138
  %140 = load double, ptr %10, align 16
  %141 = load double, ptr %60, align 8
  %142 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %4, double %140, double %141)
          to label %143 unwind label %126

143:                                              ; preds = %139
  %144 = invoke { double, double } @_ZN3JPH4Quat7sRandomISt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEES0_RT_(ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %147 unwind label %145

145:                                              ; preds = %143
  %146 = landingpad { ptr, i32 }
          cleanup
  br label %187

147:                                              ; preds = %143, %124
  %.pn226 = phi { double, double } [ %125, %124 ], [ %144, %143 ]
  %.sroa.6.0 = extractvalue { double, double } %.pn226, 1
  %.sroa.096.0 = extractvalue { double, double } %.pn226, 0
  %148 = load ptr, ptr %59, align 8, !tbaa !7
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %11) #9
  %149 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %2)
  %.sroa.087.0.copyload = load double, ptr %4, align 16
  %.sroa.288.0.copyload = load double, ptr %.sroa.2104.0..sroa_idx, align 8, !tbaa !19
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %11, ptr noundef %149, double %.sroa.087.0.copyload, double %.sroa.288.0.copyload, double %.sroa.096.0, double %.sroa.6.0, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %150 unwind label %167

150:                                              ; preds = %147
  %151 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %148, ptr noundef nonnull align 16 dereferenceable(256) %11)
          to label %152 unwind label %169

152:                                              ; preds = %150
  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
  %153 = 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 %153, i32 noundef %.0173252, i32 noundef %.0175250)
          to label %154 unwind label %172

154:                                              ; preds = %152
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %151, ptr noundef nonnull align 8 dereferenceable(16) %12)
          to label %155 unwind label %174

155:                                              ; preds = %154
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %12) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #9
  %156 = load ptr, ptr %59, align 8, !tbaa !7
  %157 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %151)
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %156, ptr noundef nonnull align 4 dereferenceable(4) %157, i32 noundef 0)
          to label %158 unwind label %177

158:                                              ; preds = %155
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %13) #9
  invoke void @_ZN3JPH23FixedConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(144) %13)
          to label %159 unwind label %179

159:                                              ; preds = %158
  store i8 1, ptr %62, align 4, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #9
  %160 = invoke noundef ptr @_ZNK3JPH23FixedConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(144) %13, ptr noundef nonnull align 16 dereferenceable(122) %.0174251, ptr noundef nonnull align 16 dereferenceable(122) %151)
          to label %161 unwind label %181

161:                                              ; preds = %159
  invoke void @_ZN3JPH3RefINS_10ConstraintEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %14, ptr noundef %160)
          to label %162 unwind label %181

162:                                              ; preds = %161
  %163 = load ptr, ptr %63, align 8, !tbaa !32
  %164 = call noundef ptr @_ZNK3JPH3RefINS_10ConstraintEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %14)
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %163, ptr noundef %164)
          to label %165 unwind label %183

165:                                              ; preds = %162
  call void @_ZN3JPH3RefINS_10ConstraintEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %14) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #9
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %13) #9
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %13) #9
  %166 = add nuw nsw i32 %.0175250, 1
  %exitcond258.not = icmp eq i32 %166, 10
  br i1 %exitcond258.not, label %100, label %.preheader247, !llvm.loop !33

167:                                              ; preds = %147
  %168 = landingpad { ptr, i32 }
          cleanup
  br label %171

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

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

172:                                              ; preds = %152
  %173 = landingpad { ptr, i32 }
          cleanup
  br label %176

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

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

177:                                              ; preds = %155
  %178 = landingpad { ptr, i32 }
          cleanup
  br label %187

179:                                              ; preds = %158
  %180 = landingpad { ptr, i32 }
          cleanup
  br label %186

181:                                              ; preds = %161, %159
  %182 = landingpad { ptr, i32 }
          cleanup
  br label %185

183:                                              ; preds = %162
  %184 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH3RefINS_10ConstraintEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %14) #9
  br label %185

185:                                              ; preds = %183, %181
  %.pn232 = phi { ptr, i32 } [ %184, %183 ], [ %182, %181 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #9
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %13) #9
  br label %186

186:                                              ; preds = %185, %179
  %.pn232.pn = phi { ptr, i32 } [ %.pn232, %185 ], [ %180, %179 ]
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %13) #9
  br label %187

187:                                              ; preds = %126, %128, %145, %186, %177, %176, %171, %117
  %.pn232.pn.pn.pn.pn = phi { ptr, i32 } [ %118, %117 ], [ %129, %128 ], [ %127, %126 ], [ %146, %145 ], [ %.pn232.pn, %186 ], [ %178, %177 ], [ %.pn230, %176 ], [ %.pn228, %171 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #9
  br label %188

188:                                              ; preds = %187, %115
  %.pn232.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn232.pn.pn.pn.pn, %187 ], [ %116, %115 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #9
  br label %189

189:                                              ; preds = %107, %112, %113, %188, %101
  %.pn232.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %102, %101 ], [ %.pn232.pn.pn.pn.pn.pn, %188 ], [ %114, %113 ], [ %.pn224, %112 ], [ %.pn222, %107 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #9
  br label %732

190:                                              ; preds = %75
  %191 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 0x3FB99999A0000000)
          to label %192 unwind label %317

192:                                              ; preds = %190
  %193 = extractvalue { double, double } %191, 0
  %194 = extractvalue { double, double } %191, 1
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %77, double %193, double %194, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %195 unwind label %317

195:                                              ; preds = %192
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %16, float noundef -5.000000e+00, float noundef 7.000000e+00, float noundef 0xC014CCCCC0000000)
          to label %196 unwind label %315

196:                                              ; preds = %195
  %197 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %198 unwind label %315

198:                                              ; preds = %196
  %199 = extractvalue { double, double } %197, 0
  %200 = extractvalue { double, double } %197, 1
  %201 = load double, ptr %16, align 16
  %202 = getelementptr inbounds i8, ptr %16, i64 8
  %203 = load double, ptr %202, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %15, ptr noundef nonnull %77, double %201, double %203, double %199, double %200, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %204 unwind label %315

204:                                              ; preds = %198
  %205 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %76, ptr noundef nonnull align 16 dereferenceable(256) %15)
          to label %206 unwind label %319

206:                                              ; preds = %204
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %15) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %15) #9
  %207 = load ptr, ptr %59, align 8, !tbaa !7
  %208 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %205)
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %207, ptr noundef nonnull align 4 dereferenceable(4) %208, i32 noundef 0)
          to label %209 unwind label %322

209:                                              ; preds = %206
  %210 = load ptr, ptr %59, align 8, !tbaa !7
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %17) #9
  %211 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %212 unwind label %324

212:                                              ; preds = %209
  %213 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 5.000000e+00)
          to label %214 unwind label %326

214:                                              ; preds = %212
  %215 = extractvalue { double, double } %213, 0
  %216 = extractvalue { double, double } %213, 1
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %211, double %215, double %216, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %217 unwind label %326

217:                                              ; preds = %214
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %18, float noundef -5.000000e+00, float noundef 7.000000e+00, float noundef 0.000000e+00)
          to label %218 unwind label %324

218:                                              ; preds = %217
  %219 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %220 unwind label %324

220:                                              ; preds = %218
  %221 = extractvalue { double, double } %219, 0
  %222 = extractvalue { double, double } %219, 1
  %223 = load double, ptr %18, align 16
  %224 = getelementptr inbounds i8, ptr %18, i64 8
  %225 = load double, ptr %224, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %17, ptr noundef nonnull %211, double %223, double %225, double %221, double %222, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %226 unwind label %324

226:                                              ; preds = %220
  %227 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %210, ptr noundef nonnull align 16 dereferenceable(256) %17)
          to label %228 unwind label %328

228:                                              ; preds = %226
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %17) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %17) #9
  %229 = load ptr, ptr %59, align 8, !tbaa !7
  %230 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %227)
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %229, ptr noundef nonnull align 4 dereferenceable(4) %230, i32 noundef 0)
          to label %231 unwind label %331

231:                                              ; preds = %228
  %232 = load ptr, ptr %59, align 8, !tbaa !7
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %19) #9
  %233 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %234 unwind label %333

234:                                              ; preds = %231
  %235 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 0x3FB99999A0000000)
          to label %236 unwind label %335

236:                                              ; preds = %234
  %237 = extractvalue { double, double } %235, 0
  %238 = extractvalue { double, double } %235, 1
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %233, double %237, double %238, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %239 unwind label %335

239:                                              ; preds = %236
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %20, float noundef -5.000000e+00, float noundef 7.000000e+00, float noundef 0x4014CCCCC0000000)
          to label %240 unwind label %333

240:                                              ; preds = %239
  %241 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %242 unwind label %333

242:                                              ; preds = %240
  %243 = extractvalue { double, double } %241, 0
  %244 = extractvalue { double, double } %241, 1
  %245 = load double, ptr %20, align 16
  %246 = getelementptr inbounds i8, ptr %20, i64 8
  %247 = load double, ptr %246, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %19, ptr noundef nonnull %233, double %245, double %247, double %243, double %244, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %248 unwind label %333

248:                                              ; preds = %242
  %249 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %232, ptr noundef nonnull align 16 dereferenceable(256) %19)
          to label %250 unwind label %337

250:                                              ; preds = %248
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %19) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %19) #9
  %251 = load ptr, ptr %59, align 8, !tbaa !7
  %252 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %249)
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %251, ptr noundef nonnull align 4 dereferenceable(4) %252, i32 noundef 0)
          to label %253 unwind label %340

253:                                              ; preds = %250
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %21) #9
  invoke void @_ZN3JPH23FixedConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(144) %21)
          to label %254 unwind label %342

254:                                              ; preds = %253
  %255 = getelementptr inbounds i8, ptr %21, i64 44
  store i8 1, ptr %255, align 4, !tbaa !21
  %256 = load ptr, ptr %63, align 8, !tbaa !32
  %257 = invoke noundef ptr @_ZNK3JPH23FixedConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(144) %21, ptr noundef nonnull align 16 dereferenceable(122) %205, ptr noundef nonnull align 16 dereferenceable(122) %227)
          to label %258 unwind label %344

258:                                              ; preds = %254
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %256, ptr noundef %257)
          to label %259 unwind label %344

259:                                              ; preds = %258
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %22) #9
  invoke void @_ZN3JPH23FixedConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(144) %22)
          to label %260 unwind label %346

260:                                              ; preds = %259
  %261 = getelementptr inbounds i8, ptr %22, i64 44
  store i8 1, ptr %261, align 4, !tbaa !21
  %262 = load ptr, ptr %63, align 8, !tbaa !32
  %263 = invoke noundef ptr @_ZNK3JPH23FixedConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(144) %22, ptr noundef nonnull align 16 dereferenceable(122) %227, ptr noundef nonnull align 16 dereferenceable(122) %249)
          to label %264 unwind label %348

264:                                              ; preds = %260
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %262, ptr noundef %263)
          to label %265 unwind label %348

265:                                              ; preds = %264
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %22) #9
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %22) #9
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %21) #9
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %21) #9
  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 0.000000e+00, float noundef 2.500000e+01, float noundef -4.000000e+01)
          to label %266 unwind label %353

266:                                              ; preds = %265
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %24) #9
  %267 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %268 unwind label %355

268:                                              ; preds = %266
  %269 = extractvalue { double, double } %267, 0
  %270 = extractvalue { double, double } %267, 1
  %271 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %269, double %270, float noundef 0xBFF921FB60000000)
          to label %272 unwind label %355

272:                                              ; preds = %268
  %273 = extractvalue { double, double } %271, 0
  store double %273, ptr %24, align 16
  %274 = getelementptr inbounds i8, ptr %24, i64 8
  %275 = extractvalue { double, double } %271, 1
  store double %275, ptr %274, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #9
  %276 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %277 unwind label %357

277:                                              ; preds = %272
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %26, float noundef 0x3FB99999A0000000, float noundef 1.000000e+00, float noundef 0x3FB99999A0000000)
          to label %278 unwind label %359

278:                                              ; preds = %277
  %279 = load double, ptr %26, align 16
  %280 = getelementptr inbounds i8, ptr %26, i64 8
  %281 = load double, ptr %280, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %276, double %279, double %281, float noundef 0.000000e+00, ptr noundef null)
          to label %282 unwind label %359

282:                                              ; preds = %278
  invoke void @_ZN3JPH3RefINS_8BoxShapeEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %25, ptr noundef nonnull %276)
          to label %283 unwind label %357

283:                                              ; preds = %282
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #9
  %284 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %285 unwind label %361

285:                                              ; preds = %283
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %28, float noundef 0x3F847AE140000000, float noundef 1.500000e+00, float noundef 0x3FB99999A0000000)
          to label %286 unwind label %363

286:                                              ; preds = %285
  %287 = load double, ptr %28, align 16
  %288 = getelementptr inbounds i8, ptr %28, i64 8
  %289 = load double, ptr %288, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %284, double %287, double %289, float noundef 0.000000e+00, ptr noundef null)
          to label %290 unwind label %363

290:                                              ; preds = %286
  invoke void @_ZN3JPH3RefINS_8BoxShapeEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %27, ptr noundef nonnull %284)
          to label %291 unwind label %361

291:                                              ; preds = %290
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #9
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(32) %29, ptr noundef nonnull align 16 dereferenceable(32) @__const._ZN19FixedConstraintTest10InitializeEv.prev_pillars, i64 32, i1 false)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %30) #9
  %292 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %293 unwind label %365

293:                                              ; preds = %291
  %294 = extractvalue { double, double } %292, 0
  store double %294, ptr %30, align 16
  %295 = getelementptr inbounds i8, ptr %30, i64 8
  %296 = extractvalue { double, double } %292, 1
  store double %296, ptr %295, align 8
  %297 = getelementptr inbounds i8, ptr %32, i64 8
  %298 = getelementptr inbounds i8, ptr %34, i64 8
  %299 = getelementptr inbounds i8, ptr %36, i64 8
  %300 = getelementptr inbounds i8, ptr %38, i64 8
  %301 = getelementptr inbounds i8, ptr %39, i64 8
  %302 = getelementptr inbounds i8, ptr %41, i64 44
  %303 = getelementptr inbounds i8, ptr %41, i64 20
  %304 = getelementptr inbounds i8, ptr %41, i64 24
  %305 = getelementptr inbounds i8, ptr %42, i64 44
  %306 = getelementptr inbounds i8, ptr %42, i64 20
  %307 = getelementptr inbounds i8, ptr %42, i64 24
  %308 = getelementptr inbounds i8, ptr %43, i64 8
  %309 = getelementptr inbounds i8, ptr %31, i64 8
  %310 = getelementptr inbounds i8, ptr %31, i64 16
  %311 = getelementptr inbounds i8, ptr %31, i64 24
  br label %367

312:                                              ; preds = %645
  %313 = load ptr, ptr %59, align 8, !tbaa !7
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %44) #9
  %314 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %650 unwind label %681

315:                                              ; preds = %198, %196, %195, %75
  %316 = landingpad { ptr, i32 }
          cleanup
  br label %321

317:                                              ; preds = %192, %190
  %318 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %77) #9
  br label %321

319:                                              ; preds = %204
  %320 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %15) #9
  br label %321

321:                                              ; preds = %319, %317, %315
  %.pn = phi { ptr, i32 } [ %320, %319 ], [ %316, %315 ], [ %318, %317 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %15) #9
  br label %732

322:                                              ; preds = %206
  %323 = landingpad { ptr, i32 }
          cleanup
  br label %732

324:                                              ; preds = %220, %218, %217, %209
  %325 = landingpad { ptr, i32 }
          cleanup
  br label %330

326:                                              ; preds = %214, %212
  %327 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %211) #9
  br label %330

328:                                              ; preds = %226
  %329 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %17) #9
  br label %330

330:                                              ; preds = %328, %326, %324
  %.pn181 = phi { ptr, i32 } [ %329, %328 ], [ %325, %324 ], [ %327, %326 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %17) #9
  br label %732

331:                                              ; preds = %228
  %332 = landingpad { ptr, i32 }
          cleanup
  br label %732

333:                                              ; preds = %242, %240, %239, %231
  %334 = landingpad { ptr, i32 }
          cleanup
  br label %339

335:                                              ; preds = %236, %234
  %336 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %233) #9
  br label %339

337:                                              ; preds = %248
  %338 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %19) #9
  br label %339

339:                                              ; preds = %337, %335, %333
  %.pn183 = phi { ptr, i32 } [ %338, %337 ], [ %334, %333 ], [ %336, %335 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %19) #9
  br label %732

340:                                              ; preds = %250
  %341 = landingpad { ptr, i32 }
          cleanup
  br label %732

342:                                              ; preds = %253
  %343 = landingpad { ptr, i32 }
          cleanup
  br label %352

344:                                              ; preds = %258, %254
  %345 = landingpad { ptr, i32 }
          cleanup
  br label %351

346:                                              ; preds = %259
  %347 = landingpad { ptr, i32 }
          cleanup
  br label %350

348:                                              ; preds = %264, %260
  %349 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %22) #9
  br label %350

350:                                              ; preds = %348, %346
  %.pn185 = phi { ptr, i32 } [ %349, %348 ], [ %347, %346 ]
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %22) #9
  br label %351

351:                                              ; preds = %350, %344
  %.pn185.pn = phi { ptr, i32 } [ %.pn185, %350 ], [ %345, %344 ]
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %21) #9
  br label %352

352:                                              ; preds = %351, %342
  %.pn185.pn.pn = phi { ptr, i32 } [ %.pn185.pn, %351 ], [ %343, %342 ]
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %21) #9
  br label %732

353:                                              ; preds = %265
  %354 = landingpad { ptr, i32 }
          cleanup
  br label %731

355:                                              ; preds = %268, %266
  %356 = landingpad { ptr, i32 }
          cleanup
  br label %730

357:                                              ; preds = %282, %272
  %358 = landingpad { ptr, i32 }
          cleanup
  br label %729

359:                                              ; preds = %278, %277
  %360 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %276) #9
  br label %729

361:                                              ; preds = %290, %283
  %362 = landingpad { ptr, i32 }
          cleanup
  br label %728

363:                                              ; preds = %286, %285
  %364 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %284) #9
  br label %728

365:                                              ; preds = %291
  %366 = landingpad { ptr, i32 }
          cleanup
  br label %727

367:                                              ; preds = %293, %645
  %.0177256 = phi i32 [ 0, %293 ], [ %646, %645 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %31) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %32) #9
  %368 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %369 unwind label %519

369:                                              ; preds = %367
  %370 = extractvalue { double, double } %368, 0
  %371 = extractvalue { double, double } %368, 1
  %372 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %370, double %371, float noundef 0.000000e+00)
          to label %373 unwind label %519

373:                                              ; preds = %369
  %374 = extractvalue { double, double } %372, 0
  store double %374, ptr %32, align 16
  %375 = extractvalue { double, double } %372, 1
  store double %375, ptr %297, align 8
  %376 = load ptr, ptr %59, align 8, !tbaa !7
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %33) #9
  %377 = call noundef ptr @_ZNK3JPH3RefINS_8BoxShapeEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %25)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %34, float noundef 1.000000e+00, float noundef 1.000000e+00, float noundef 1.000000e+00)
          to label %378 unwind label %521

378:                                              ; preds = %373
  %379 = load double, ptr %34, align 16
  %380 = load double, ptr %298, align 8
  %381 = invoke { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %32, double %379, double %380)
          to label %382 unwind label %521

382:                                              ; preds = %378
  %383 = extractvalue { double, double } %381, 0
  %384 = extractvalue { double, double } %381, 1
  %385 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %30, double %383, double %384)
          to label %386 unwind label %521

386:                                              ; preds = %382
  %387 = extractvalue { double, double } %385, 0
  %388 = extractvalue { double, double } %385, 1
  %389 = invoke { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %24, double %387, double %388)
          to label %390 unwind label %521

390:                                              ; preds = %386
  %391 = extractvalue { double, double } %389, 0
  %392 = extractvalue { double, double } %389, 1
  %393 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %23, double %391, double %392)
          to label %394 unwind label %521

394:                                              ; preds = %390
  %395 = extractvalue { double, double } %393, 0
  %396 = extractvalue { double, double } %393, 1
  %.sroa.044.0.copyload = load double, ptr %24, align 16
  %.sroa.245.0.copyload = load double, ptr %274, align 8, !tbaa !19
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %33, ptr noundef %377, double %395, double %396, double %.sroa.044.0.copyload, double %.sroa.245.0.copyload, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %397 unwind label %521

397:                                              ; preds = %394
  %398 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %376, ptr noundef nonnull align 16 dereferenceable(256) %33)
          to label %399 unwind label %523

399:                                              ; preds = %397
  store ptr %398, ptr %31, align 16, !tbaa !34
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %33) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %33) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %35) #9
  %400 = 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) %35, ptr noundef %400, i32 noundef 0, i32 noundef 0)
          to label %401 unwind label %526

401:                                              ; preds = %399
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %398, ptr noundef nonnull align 8 dereferenceable(16) %35)
          to label %402 unwind label %528

402:                                              ; preds = %401
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %35) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %35) #9
  %403 = load ptr, ptr %59, align 8, !tbaa !7
  %404 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %398)
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %403, ptr noundef nonnull align 4 dereferenceable(4) %404, i32 noundef 0)
          to label %405 unwind label %519

405:                                              ; preds = %402
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %32) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %32) #9
  %406 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %407 unwind label %519

407:                                              ; preds = %405
  %408 = extractvalue { double, double } %406, 0
  %409 = extractvalue { double, double } %406, 1
  %410 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %408, double %409, float noundef 0x3FF921FB60000000)
          to label %411 unwind label %519

411:                                              ; preds = %407
  %412 = extractvalue { double, double } %410, 0
  store double %412, ptr %32, align 16
  %413 = extractvalue { double, double } %410, 1
  store double %413, ptr %297, align 8
  %414 = load ptr, ptr %59, align 8, !tbaa !7
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %33) #9
  %415 = call noundef ptr @_ZNK3JPH3RefINS_8BoxShapeEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %25)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %34, float noundef 1.000000e+00, float noundef 1.000000e+00, float noundef 1.000000e+00)
          to label %416 unwind label %521

416:                                              ; preds = %411
  %417 = load double, ptr %34, align 16
  %418 = load double, ptr %298, align 8
  %419 = invoke { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %32, double %417, double %418)
          to label %420 unwind label %521

420:                                              ; preds = %416
  %421 = extractvalue { double, double } %419, 0
  %422 = extractvalue { double, double } %419, 1
  %423 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %30, double %421, double %422)
          to label %424 unwind label %521

424:                                              ; preds = %420
  %425 = extractvalue { double, double } %423, 0
  %426 = extractvalue { double, double } %423, 1
  %427 = invoke { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %24, double %425, double %426)
          to label %428 unwind label %521

428:                                              ; preds = %424
  %429 = extractvalue { double, double } %427, 0
  %430 = extractvalue { double, double } %427, 1
  %431 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %23, double %429, double %430)
          to label %432 unwind label %521

432:                                              ; preds = %428
  %433 = extractvalue { double, double } %431, 0
  %434 = extractvalue { double, double } %431, 1
  %.sroa.044.0.copyload.1 = load double, ptr %24, align 16
  %.sroa.245.0.copyload.1 = load double, ptr %274, align 8, !tbaa !19
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %33, ptr noundef %415, double %433, double %434, double %.sroa.044.0.copyload.1, double %.sroa.245.0.copyload.1, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %435 unwind label %521

435:                                              ; preds = %432
  %436 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %414, ptr noundef nonnull align 16 dereferenceable(256) %33)
          to label %437 unwind label %523

437:                                              ; preds = %435
  store ptr %436, ptr %309, align 8, !tbaa !34
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %33) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %33) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %35) #9
  %438 = 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) %35, ptr noundef %438, i32 noundef 0, i32 noundef 0)
          to label %439 unwind label %526

439:                                              ; preds = %437
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %436, ptr noundef nonnull align 8 dereferenceable(16) %35)
          to label %440 unwind label %528

440:                                              ; preds = %439
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %35) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %35) #9
  %441 = load ptr, ptr %59, align 8, !tbaa !7
  %442 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %436)
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %441, ptr noundef nonnull align 4 dereferenceable(4) %442, i32 noundef 0)
          to label %443 unwind label %519

443:                                              ; preds = %440
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %32) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %32) #9
  %444 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %445 unwind label %519

445:                                              ; preds = %443
  %446 = extractvalue { double, double } %444, 0
  %447 = extractvalue { double, double } %444, 1
  %448 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %446, double %447, float noundef 0x400921FB60000000)
          to label %449 unwind label %519

449:                                              ; preds = %445
  %450 = extractvalue { double, double } %448, 0
  store double %450, ptr %32, align 16
  %451 = extractvalue { double, double } %448, 1
  store double %451, ptr %297, align 8
  %452 = load ptr, ptr %59, align 8, !tbaa !7
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %33) #9
  %453 = call noundef ptr @_ZNK3JPH3RefINS_8BoxShapeEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %25)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %34, float noundef 1.000000e+00, float noundef 1.000000e+00, float noundef 1.000000e+00)
          to label %454 unwind label %521

454:                                              ; preds = %449
  %455 = load double, ptr %34, align 16
  %456 = load double, ptr %298, align 8
  %457 = invoke { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %32, double %455, double %456)
          to label %458 unwind label %521

458:                                              ; preds = %454
  %459 = extractvalue { double, double } %457, 0
  %460 = extractvalue { double, double } %457, 1
  %461 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %30, double %459, double %460)
          to label %462 unwind label %521

462:                                              ; preds = %458
  %463 = extractvalue { double, double } %461, 0
  %464 = extractvalue { double, double } %461, 1
  %465 = invoke { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %24, double %463, double %464)
          to label %466 unwind label %521

466:                                              ; preds = %462
  %467 = extractvalue { double, double } %465, 0
  %468 = extractvalue { double, double } %465, 1
  %469 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %23, double %467, double %468)
          to label %470 unwind label %521

470:                                              ; preds = %466
  %471 = extractvalue { double, double } %469, 0
  %472 = extractvalue { double, double } %469, 1
  %.sroa.044.0.copyload.2 = load double, ptr %24, align 16
  %.sroa.245.0.copyload.2 = load double, ptr %274, align 8, !tbaa !19
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %33, ptr noundef %453, double %471, double %472, double %.sroa.044.0.copyload.2, double %.sroa.245.0.copyload.2, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %473 unwind label %521

473:                                              ; preds = %470
  %474 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %452, ptr noundef nonnull align 16 dereferenceable(256) %33)
          to label %475 unwind label %523

475:                                              ; preds = %473
  store ptr %474, ptr %310, align 16, !tbaa !34
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %33) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %33) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %35) #9
  %476 = 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) %35, ptr noundef %476, i32 noundef 0, i32 noundef 0)
          to label %477 unwind label %526

477:                                              ; preds = %475
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %474, ptr noundef nonnull align 8 dereferenceable(16) %35)
          to label %478 unwind label %528

478:                                              ; preds = %477
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %35) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %35) #9
  %479 = load ptr, ptr %59, align 8, !tbaa !7
  %480 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %474)
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %479, ptr noundef nonnull align 4 dereferenceable(4) %480, i32 noundef 0)
          to label %481 unwind label %519

481:                                              ; preds = %478
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %32) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %32) #9
  %482 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %483 unwind label %519

483:                                              ; preds = %481
  %484 = extractvalue { double, double } %482, 0
  %485 = extractvalue { double, double } %482, 1
  %486 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %484, double %485, float noundef 0x4012D97C80000000)
          to label %487 unwind label %519

487:                                              ; preds = %483
  %488 = extractvalue { double, double } %486, 0
  store double %488, ptr %32, align 16
  %489 = extractvalue { double, double } %486, 1
  store double %489, ptr %297, align 8
  %490 = load ptr, ptr %59, align 8, !tbaa !7
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %33) #9
  %491 = call noundef ptr @_ZNK3JPH3RefINS_8BoxShapeEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %25)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %34, float noundef 1.000000e+00, float noundef 1.000000e+00, float noundef 1.000000e+00)
          to label %492 unwind label %521

492:                                              ; preds = %487
  %493 = load double, ptr %34, align 16
  %494 = load double, ptr %298, align 8
  %495 = invoke { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %32, double %493, double %494)
          to label %496 unwind label %521

496:                                              ; preds = %492
  %497 = extractvalue { double, double } %495, 0
  %498 = extractvalue { double, double } %495, 1
  %499 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %30, double %497, double %498)
          to label %500 unwind label %521

500:                                              ; preds = %496
  %501 = extractvalue { double, double } %499, 0
  %502 = extractvalue { double, double } %499, 1
  %503 = invoke { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %24, double %501, double %502)
          to label %504 unwind label %521

504:                                              ; preds = %500
  %505 = extractvalue { double, double } %503, 0
  %506 = extractvalue { double, double } %503, 1
  %507 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %23, double %505, double %506)
          to label %508 unwind label %521

508:                                              ; preds = %504
  %509 = extractvalue { double, double } %507, 0
  %510 = extractvalue { double, double } %507, 1
  %.sroa.044.0.copyload.3 = load double, ptr %24, align 16
  %.sroa.245.0.copyload.3 = load double, ptr %274, align 8, !tbaa !19
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %33, ptr noundef %491, double %509, double %510, double %.sroa.044.0.copyload.3, double %.sroa.245.0.copyload.3, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %511 unwind label %521

511:                                              ; preds = %508
  %512 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %490, ptr noundef nonnull align 16 dereferenceable(256) %33)
          to label %513 unwind label %523

513:                                              ; preds = %511
  store ptr %512, ptr %311, align 8, !tbaa !34
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %33) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %33) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %35) #9
  %514 = 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) %35, ptr noundef %514, i32 noundef 0, i32 noundef 0)
          to label %515 unwind label %526

515:                                              ; preds = %513
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %512, ptr noundef nonnull align 8 dereferenceable(16) %35)
          to label %516 unwind label %528

516:                                              ; preds = %515
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %35) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %35) #9
  %517 = load ptr, ptr %59, align 8, !tbaa !7
  %518 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %512)
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %517, ptr noundef nonnull align 4 dereferenceable(4) %518, i32 noundef 0)
          to label %.preheader246.preheader unwind label %519

.preheader246.preheader:                          ; preds = %516
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %32) #9
  br label %.preheader246

519:                                              ; preds = %516, %483, %481, %478, %445, %443, %440, %407, %405, %402, %369, %367
  %520 = landingpad { ptr, i32 }
          cleanup
  br label %531

521:                                              ; preds = %508, %504, %500, %496, %492, %487, %470, %466, %462, %458, %454, %449, %432, %428, %424, %420, %416, %411, %394, %390, %386, %382, %378, %373
  %522 = landingpad { ptr, i32 }
          cleanup
  br label %525

523:                                              ; preds = %511, %473, %435, %397
  %524 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %33) #9
  br label %525

525:                                              ; preds = %523, %521
  %.pn210 = phi { ptr, i32 } [ %524, %523 ], [ %522, %521 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %33) #9
  br label %531

526:                                              ; preds = %513, %475, %437, %399
  %527 = landingpad { ptr, i32 }
          cleanup
  br label %530

528:                                              ; preds = %515, %477, %439, %401
  %529 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %35) #9
  br label %530

530:                                              ; preds = %528, %526
  %.pn212 = phi { ptr, i32 } [ %529, %528 ], [ %527, %526 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %35) #9
  br label %531

531:                                              ; preds = %530, %525, %519
  %.pn214 = phi { ptr, i32 } [ %520, %519 ], [ %.pn212, %530 ], [ %.pn210, %525 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %32) #9
  br label %649

532:                                              ; preds = %639
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %43, float noundef 0.000000e+00, float noundef 2.000000e+00, float noundef 0.000000e+00)
          to label %641 unwind label %647

.preheader246:                                    ; preds = %.preheader246.preheader, %639
  %indvars.iv = phi i64 [ 0, %.preheader246.preheader ], [ %indvars.iv.next, %639 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %36) #9
  %533 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %534 unwind label %590

534:                                              ; preds = %.preheader246
  %535 = extractvalue { double, double } %533, 0
  %536 = extractvalue { double, double } %533, 1
  %537 = trunc nuw nsw i64 %indvars.iv to i32
  %538 = uitofp nneg i32 %537 to float
  %539 = fmul float %538, 5.000000e-01
  %540 = fmul float %539, 0x400921FB60000000
  %541 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %535, double %536, float noundef %540)
          to label %542 unwind label %590

542:                                              ; preds = %534
  %543 = extractvalue { double, double } %541, 0
  store double %543, ptr %36, align 16
  %544 = extractvalue { double, double } %541, 1
  store double %544, ptr %299, align 8
  %545 = load ptr, ptr %59, align 8, !tbaa !7
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %37) #9
  %546 = call noundef ptr @_ZNK3JPH3RefINS_8BoxShapeEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %27)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %38, float noundef 0x3FF1AE1480000000, float noundef 1.000000e+00, float noundef 0.000000e+00)
          to label %547 unwind label %592

547:                                              ; preds = %542
  %548 = load double, ptr %38, align 16
  %549 = load double, ptr %300, align 8
  %550 = invoke { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %36, double %548, double %549)
          to label %551 unwind label %592

551:                                              ; preds = %547
  %552 = extractvalue { double, double } %550, 0
  %553 = extractvalue { double, double } %550, 1
  %554 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %30, double %552, double %553)
          to label %555 unwind label %592

555:                                              ; preds = %551
  %556 = extractvalue { double, double } %554, 0
  %557 = extractvalue { double, double } %554, 1
  %558 = invoke { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %24, double %556, double %557)
          to label %559 unwind label %592

559:                                              ; preds = %555
  %560 = extractvalue { double, double } %558, 0
  %561 = extractvalue { double, double } %558, 1
  %562 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %23, double %560, double %561)
          to label %563 unwind label %592

563:                                              ; preds = %559
  %564 = extractvalue { double, double } %562, 0
  %565 = extractvalue { double, double } %562, 1
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %39) #9
  %.sroa.018.0.copyload = load double, ptr %36, align 16
  %.sroa.219.0.copyload = load double, ptr %299, align 8, !tbaa !19
  %566 = invoke { double, double } @_ZNK3JPH4QuatmlES0_(ptr noundef nonnull align 16 dereferenceable(16) %24, double %.sroa.018.0.copyload, double %.sroa.219.0.copyload)
          to label %567 unwind label %594

567:                                              ; preds = %563
  %568 = extractvalue { double, double } %566, 0
  store double %568, ptr %39, align 16
  %569 = extractvalue { double, double } %566, 1
  store double %569, ptr %301, align 8
  %570 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %571 unwind label %594

571:                                              ; preds = %567
  %572 = extractvalue { double, double } %570, 0
  %573 = extractvalue { double, double } %570, 1
  %574 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %572, double %573, float noundef 0x3FEE28C760000000)
          to label %575 unwind label %594

575:                                              ; preds = %571
  %576 = extractvalue { double, double } %574, 0
  %577 = extractvalue { double, double } %574, 1
  %578 = invoke { double, double } @_ZNK3JPH4QuatmlES0_(ptr noundef nonnull align 16 dereferenceable(16) %39, double %576, double %577)
          to label %579 unwind label %594

579:                                              ; preds = %575
  %580 = extractvalue { double, double } %578, 0
  %581 = extractvalue { double, double } %578, 1
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %37, ptr noundef %546, double %564, double %565, double %580, double %581, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %582 unwind label %594

582:                                              ; preds = %579
  %583 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %545, ptr noundef nonnull align 16 dereferenceable(256) %37)
          to label %584 unwind label %596

584:                                              ; preds = %582
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %37) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %39) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %37) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %40) #9
  %585 = 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) %40, ptr noundef %585, i32 noundef 0, i32 noundef 0)
          to label %586 unwind label %600

586:                                              ; preds = %584
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %583, ptr noundef nonnull align 8 dereferenceable(16) %40)
          to label %587 unwind label %602

587:                                              ; preds = %586
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %40) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %40) #9
  %588 = load ptr, ptr %59, align 8, !tbaa !7
  %589 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %583)
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %588, ptr noundef nonnull align 4 dereferenceable(4) %589, i32 noundef 0)
          to label %.preheader245.preheader unwind label %605

.preheader245.preheader:                          ; preds = %587
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %41) #9
  invoke void @_ZN3JPH23FixedConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(144) %41)
          to label %607 unwind label %623

590:                                              ; preds = %534, %.preheader246
  %591 = landingpad { ptr, i32 }
          cleanup
  br label %640

592:                                              ; preds = %559, %555, %551, %547, %542
  %593 = landingpad { ptr, i32 }
          cleanup
  br label %599

594:                                              ; preds = %579, %575, %571, %567, %563
  %595 = landingpad { ptr, i32 }
          cleanup
  br label %598

596:                                              ; preds = %582
  %597 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %37) #9
  br label %598

598:                                              ; preds = %596, %594
  %.pn199 = phi { ptr, i32 } [ %597, %596 ], [ %595, %594 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %39) #9
  br label %599

599:                                              ; preds = %598, %592
  %.pn199.pn = phi { ptr, i32 } [ %.pn199, %598 ], [ %593, %592 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %37) #9
  br label %640

600:                                              ; preds = %584
  %601 = landingpad { ptr, i32 }
          cleanup
  br label %604

602:                                              ; preds = %586
  %603 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %40) #9
  br label %604

604:                                              ; preds = %602, %600
  %.pn202 = phi { ptr, i32 } [ %603, %602 ], [ %601, %600 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %40) #9
  br label %640

605:                                              ; preds = %587
  %606 = landingpad { ptr, i32 }
          cleanup
  br label %640

607:                                              ; preds = %.preheader245.preheader
  store i8 1, ptr %302, align 4, !tbaa !21
  store i32 64, ptr %303, align 4, !tbaa !35
  store i32 8, ptr %304, align 8, !tbaa !36
  %608 = load ptr, ptr %63, align 8, !tbaa !32
  %609 = getelementptr inbounds [4 x ptr], ptr %31, i64 0, i64 %indvars.iv
  %610 = load ptr, ptr %609, align 8, !tbaa !34
  %611 = invoke noundef ptr @_ZNK3JPH23FixedConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(144) %41, ptr noundef nonnull align 16 dereferenceable(122) %610, ptr noundef nonnull align 16 dereferenceable(122) %583)
          to label %612 unwind label %625

612:                                              ; preds = %607
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %608, ptr noundef %611)
          to label %.preheader245.1 unwind label %625

.preheader245.1:                                  ; preds = %612
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %41) #9
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %41) #9
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %41) #9
  invoke void @_ZN3JPH23FixedConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(144) %41)
          to label %613 unwind label %623

613:                                              ; preds = %.preheader245.1
  store i8 1, ptr %302, align 4, !tbaa !21
  store i32 64, ptr %303, align 4, !tbaa !35
  store i32 8, ptr %304, align 8, !tbaa !36
  %614 = load ptr, ptr %63, align 8, !tbaa !32
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %615 = and i64 %indvars.iv.next, 3
  %616 = getelementptr inbounds [4 x ptr], ptr %31, i64 0, i64 %615
  %617 = load ptr, ptr %616, align 8, !tbaa !34
  %618 = invoke noundef ptr @_ZNK3JPH23FixedConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(144) %41, ptr noundef nonnull align 16 dereferenceable(122) %617, ptr noundef nonnull align 16 dereferenceable(122) %583)
          to label %619 unwind label %625

619:                                              ; preds = %613
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %614, ptr noundef %618)
          to label %620 unwind label %625

620:                                              ; preds = %619
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %41) #9
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %41) #9
  %621 = getelementptr inbounds [4 x ptr], ptr %29, i64 0, i64 %indvars.iv
  %622 = load ptr, ptr %621, align 8, !tbaa !34
  %.not = icmp eq ptr %622, null
  br i1 %.not, label %639, label %628

623:                                              ; preds = %.preheader245.1, %.preheader245.preheader
  %624 = landingpad { ptr, i32 }
          cleanup
  br label %627

625:                                              ; preds = %619, %613, %612, %607
  %626 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %41) #9
  br label %627

627:                                              ; preds = %625, %623
  %.pn206 = phi { ptr, i32 } [ %626, %625 ], [ %624, %623 ]
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %41) #9
  br label %640

628:                                              ; preds = %620
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %42) #9
  invoke void @_ZN3JPH23FixedConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(144) %42)
          to label %629 unwind label %634

629:                                              ; preds = %628
  store i8 1, ptr %305, align 4, !tbaa !21
  store i32 64, ptr %306, align 4, !tbaa !35
  store i32 8, ptr %307, align 8, !tbaa !36
  %630 = load ptr, ptr %63, align 8, !tbaa !32
  %631 = invoke noundef ptr @_ZNK3JPH23FixedConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(144) %42, ptr noundef nonnull align 16 dereferenceable(122) %622, ptr noundef nonnull align 16 dereferenceable(122) %610)
          to label %632 unwind label %636

632:                                              ; preds = %629
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %630, ptr noundef %631)
          to label %633 unwind label %636

633:                                              ; preds = %632
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %42) #9
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %42) #9
  br label %639

634:                                              ; preds = %628
  %635 = landingpad { ptr, i32 }
          cleanup
  br label %638

636:                                              ; preds = %632, %629
  %637 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %42) #9
  br label %638

638:                                              ; preds = %636, %634
  %.pn204 = phi { ptr, i32 } [ %637, %636 ], [ %635, %634 ]
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %42) #9
  br label %640

639:                                              ; preds = %633, %620
  store ptr %610, ptr %621, align 8, !tbaa !34
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %36) #9
  %exitcond262.not = icmp eq i64 %indvars.iv.next, 4
  br i1 %exitcond262.not, label %532, label %.preheader246, !llvm.loop !37

640:                                              ; preds = %599, %604, %605, %627, %638, %590
  %.pn206.pn.pn = phi { ptr, i32 } [ %591, %590 ], [ %.pn206, %627 ], [ %.pn204, %638 ], [ %606, %605 ], [ %.pn202, %604 ], [ %.pn199.pn, %599 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %36) #9
  br label %649

641:                                              ; preds = %532
  %642 = load double, ptr %43, align 16
  %643 = load double, ptr %308, align 8
  %644 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %30, double %642, double %643)
          to label %645 unwind label %647

645:                                              ; preds = %641
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #9
  %646 = add nuw nsw i32 %.0177256, 1
  %exitcond263.not = icmp eq i32 %646, 10
  br i1 %exitcond263.not, label %312, label %367, !llvm.loop !38

647:                                              ; preds = %641, %532
  %648 = landingpad { ptr, i32 }
          cleanup
  br label %649

649:                                              ; preds = %647, %640, %531
  %.pn214.pn = phi { ptr, i32 } [ %.pn214, %531 ], [ %.pn206.pn.pn, %640 ], [ %648, %647 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #9
  br label %727

650:                                              ; preds = %312
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %45, float noundef 0x3FF3333340000000, float noundef 0x3FB99999A0000000, float noundef 0x3FF3333340000000)
          to label %651 unwind label %683

651:                                              ; preds = %650
  %652 = load double, ptr %45, align 16
  %653 = getelementptr inbounds i8, ptr %45, i64 8
  %654 = load double, ptr %653, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %314, double %652, double %654, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %655 unwind label %683

655:                                              ; preds = %651
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %46, float noundef 0.000000e+00, float noundef 0x3FB99999A0000000, float noundef 0.000000e+00)
          to label %656 unwind label %681

656:                                              ; preds = %655
  %657 = load double, ptr %46, align 16
  %658 = getelementptr inbounds i8, ptr %46, i64 8
  %659 = load double, ptr %658, align 8
  %660 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %30, double %657, double %659)
          to label %661 unwind label %681

661:                                              ; preds = %656
  %662 = extractvalue { double, double } %660, 0
  %663 = extractvalue { double, double } %660, 1
  %664 = invoke { double, double } @_ZNK3JPH4QuatmlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %24, double %662, double %663)
          to label %665 unwind label %681

665:                                              ; preds = %661
  %666 = extractvalue { double, double } %664, 0
  %667 = extractvalue { double, double } %664, 1
  %668 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %23, double %666, double %667)
          to label %669 unwind label %681

669:                                              ; preds = %665
  %670 = extractvalue { double, double } %668, 0
  %671 = extractvalue { double, double } %668, 1
  %.sroa.0.0.copyload = load double, ptr %24, align 16
  %.sroa.2.0.copyload = load double, ptr %274, align 8, !tbaa !19
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %44, ptr noundef nonnull %314, double %670, double %671, double %.sroa.0.0.copyload, double %.sroa.2.0.copyload, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %672 unwind label %681

672:                                              ; preds = %669
  %673 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %313, ptr noundef nonnull align 16 dereferenceable(256) %44)
          to label %674 unwind label %685

674:                                              ; preds = %672
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %44) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %44) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %47) #9
  %675 = 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) %47, ptr noundef %675, i32 noundef 0, i32 noundef 0)
          to label %676 unwind label %688

676:                                              ; preds = %674
  invoke void @_ZN3JPH4Body17SetCollisionGroupERKNS_14CollisionGroupE(ptr noundef nonnull align 16 dereferenceable(122) %673, ptr noundef nonnull align 8 dereferenceable(16) %47)
          to label %677 unwind label %690

677:                                              ; preds = %676
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %47) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %47) #9
  %678 = load ptr, ptr %59, align 8, !tbaa !7
  %679 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %673)
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %678, ptr noundef nonnull align 4 dereferenceable(4) %679, i32 noundef 0)
          to label %.preheader unwind label %693

.preheader:                                       ; preds = %677
  %680 = getelementptr inbounds i8, ptr %48, i64 44
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %48) #9
  invoke void @_ZN3JPH23FixedConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(144) %48)
          to label %695 unwind label %722

681:                                              ; preds = %669, %665, %661, %656, %655, %312
  %682 = landingpad { ptr, i32 }
          cleanup
  br label %687

683:                                              ; preds = %651, %650
  %684 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %314) #9
  br label %687

685:                                              ; preds = %672
  %686 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %44) #9
  br label %687

687:                                              ; preds = %685, %683, %681
  %.pn192 = phi { ptr, i32 } [ %686, %685 ], [ %682, %681 ], [ %684, %683 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %44) #9
  br label %727

688:                                              ; preds = %674
  %689 = landingpad { ptr, i32 }
          cleanup
  br label %692

690:                                              ; preds = %676
  %691 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH14CollisionGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %47) #9
  br label %692

692:                                              ; preds = %690, %688
  %.pn194 = phi { ptr, i32 } [ %691, %690 ], [ %689, %688 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %47) #9
  br label %727

693:                                              ; preds = %677
  %694 = landingpad { ptr, i32 }
          cleanup
  br label %727

695:                                              ; preds = %.preheader
  store i8 1, ptr %680, align 4, !tbaa !21
  %696 = load ptr, ptr %63, align 8, !tbaa !32
  %697 = load ptr, ptr %29, align 16, !tbaa !34
  %698 = invoke noundef ptr @_ZNK3JPH23FixedConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(144) %48, ptr noundef nonnull align 16 dereferenceable(122) %697, ptr noundef nonnull align 16 dereferenceable(122) %673)
          to label %699 unwind label %724

699:                                              ; preds = %695
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %696, ptr noundef %698)
          to label %700 unwind label %724

700:                                              ; preds = %699
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %48) #9
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %48) #9
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %48) #9
  invoke void @_ZN3JPH23FixedConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(144) %48)
          to label %701 unwind label %722

701:                                              ; preds = %700
  store i8 1, ptr %680, align 4, !tbaa !21
  %702 = load ptr, ptr %63, align 8, !tbaa !32
  %703 = getelementptr inbounds i8, ptr %29, i64 8
  %704 = load ptr, ptr %703, align 8, !tbaa !34
  %705 = invoke noundef ptr @_ZNK3JPH23FixedConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(144) %48, ptr noundef nonnull align 16 dereferenceable(122) %704, ptr noundef nonnull align 16 dereferenceable(122) %673)
          to label %706 unwind label %724

706:                                              ; preds = %701
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %702, ptr noundef %705)
          to label %707 unwind label %724

707:                                              ; preds = %706
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %48) #9
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %48) #9
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %48) #9
  invoke void @_ZN3JPH23FixedConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(144) %48)
          to label %708 unwind label %722

708:                                              ; preds = %707
  store i8 1, ptr %680, align 4, !tbaa !21
  %709 = load ptr, ptr %63, align 8, !tbaa !32
  %710 = getelementptr inbounds i8, ptr %29, i64 16
  %711 = load ptr, ptr %710, align 16, !tbaa !34
  %712 = invoke noundef ptr @_ZNK3JPH23FixedConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(144) %48, ptr noundef nonnull align 16 dereferenceable(122) %711, ptr noundef nonnull align 16 dereferenceable(122) %673)
          to label %713 unwind label %724

713:                                              ; preds = %708
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %709, ptr noundef %712)
          to label %714 unwind label %724

714:                                              ; preds = %713
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %48) #9
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %48) #9
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %48) #9
  invoke void @_ZN3JPH23FixedConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(144) %48)
          to label %715 unwind label %722

715:                                              ; preds = %714
  store i8 1, ptr %680, align 4, !tbaa !21
  %716 = load ptr, ptr %63, align 8, !tbaa !32
  %717 = getelementptr inbounds i8, ptr %29, i64 24
  %718 = load ptr, ptr %717, align 8, !tbaa !34
  %719 = invoke noundef ptr @_ZNK3JPH23FixedConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(144) %48, ptr noundef nonnull align 16 dereferenceable(122) %718, ptr noundef nonnull align 16 dereferenceable(122) %673)
          to label %720 unwind label %724

720:                                              ; preds = %715
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %716, ptr noundef %719)
          to label %721 unwind label %724

721:                                              ; preds = %720
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %48) #9
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %48) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #9
  call void @_ZN3JPH3RefINS_8BoxShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %27) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #9
  call void @_ZN3JPH3RefINS_8BoxShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #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

722:                                              ; preds = %714, %707, %700, %.preheader
  %723 = landingpad { ptr, i32 }
          cleanup
  br label %726

724:                                              ; preds = %720, %715, %713, %708, %706, %701, %699, %695
  %725 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %48) #9
  br label %726

726:                                              ; preds = %724, %722
  %.pn196 = phi { ptr, i32 } [ %725, %724 ], [ %723, %722 ]
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %48) #9
  br label %727

727:                                              ; preds = %687, %692, %693, %726, %649, %365
  %.pn214.pn.pn = phi { ptr, i32 } [ %.pn214.pn, %649 ], [ %366, %365 ], [ %.pn196, %726 ], [ %694, %693 ], [ %.pn194, %692 ], [ %.pn192, %687 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #9
  call void @_ZN3JPH3RefINS_8BoxShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %27) #9
  br label %728

728:                                              ; preds = %727, %363, %361
  %.pn214.pn.pn.pn = phi { ptr, i32 } [ %.pn214.pn.pn, %727 ], [ %362, %361 ], [ %364, %363 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #9
  call void @_ZN3JPH3RefINS_8BoxShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %25) #9
  br label %729

729:                                              ; preds = %728, %359, %357
  %.pn214.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn214.pn.pn.pn, %728 ], [ %358, %357 ], [ %360, %359 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #9
  br label %730

730:                                              ; preds = %729, %355
  %.pn214.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn214.pn.pn.pn.pn, %729 ], [ %356, %355 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #9
  br label %731

731:                                              ; preds = %730, %353
  %.pn214.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn214.pn.pn.pn.pn.pn, %730 ], [ %354, %353 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #9
  br label %732

732:                                              ; preds = %321, %322, %339, %340, %352, %331, %330, %731, %189, %73
  %.pn241 = phi { ptr, i32 } [ %74, %73 ], [ %.pn232.pn.pn.pn.pn.pn.pn.pn, %189 ], [ %.pn214.pn.pn.pn.pn.pn.pn, %731 ], [ %323, %322 ], [ %.pn, %321 ], [ %332, %331 ], [ %.pn181, %330 ], [ %.pn185.pn.pn, %352 ], [ %341, %340 ], [ %.pn183, %339 ]
  call void @_ZN3JPH3RefINS_16GroupFilterTableEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %3) #9
  br label %733

733:                                              ; preds = %732, %68, %66
  %.pn241.pn = phi { ptr, i32 } [ %.pn241, %732 ], [ %67, %66 ], [ %69, %68 ]
  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 %734

734:                                              ; preds = %733, %64
  %.pn241.pn.pn = phi { ptr, i32 } [ %.pn241.pn, %733 ], [ %65, %64 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #9
  resume { ptr, i32 } %.pn241.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 @_ZN3JPH23FixedConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(144)) unnamed_addr #6 align 2

declare noundef ptr @_ZNK3JPH23FixedConstraintSettings6CreateERNS_4BodyES2_(ptr noundef nonnull align 16 dereferenceable(144), ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 16 dereferenceable(122)) unnamed_addr #2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH3RefINS_10ConstraintEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) unnamed_addr #6 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

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double, double, float noundef) 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: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH3RefINS_8BoxShapeEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) unnamed_addr #6 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Vec35sZeroEv() 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: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK3JPH3RefINS_8BoxShapeEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #7 align 2

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4QuatmlES0_(ptr noundef nonnull align 16 dereferenceable(16), double, double) 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: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH3RefINS_8BoxShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #7 align 2

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

; 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 = !{!22, !12, i64 44}
!22 = !{!"_ZTSN3JPH23FixedConstraintSettingsE", !23, i64 0, !30, i64 40, !12, i64 44, !31, i64 48, !31, i64 64, !31, i64 80, !31, i64 96, !31, i64 112, !31, i64 128}
!23 = !{!"_ZTSN3JPH25TwoBodyConstraintSettingsE", !24, i64 0}
!24 = !{!"_ZTSN3JPH18ConstraintSettingsE", !25, i64 0, !26, i64 8, !12, i64 12, !29, i64 16, !29, i64 20, !29, i64 24, !18, i64 28, !15, i64 32}
!25 = !{!"_ZTSN3JPH18SerializableObjectE"}
!26 = !{!"_ZTSN3JPH9RefTargetINS_18ConstraintSettingsEEE", !27, i64 0}
!27 = !{!"_ZTSSt6atomicIjE", !28, i64 0}
!28 = !{!"_ZTSSt13__atomic_baseIjE", !29, i64 0}
!29 = !{!"int", !10, i64 0}
!30 = !{!"_ZTSN3JPH16EConstraintSpaceE", !10, i64 0}
!31 = !{!"_ZTSN3JPH4Vec3E", !10, i64 0}
!32 = !{!8, !9, i64 16}
!33 = distinct !{!33, !6}
!34 = !{!9, !9, i64 0}
!35 = !{!24, !29, i64 20}
!36 = !{!24, !29, i64 24}
!37 = distinct !{!37, !6}
!38 = distinct !{!38, !6}


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