; LLVM IR from zig-gamedev/zphysics :: libs/Jolt/Physics (PhysicsSystem)

; 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::Color" = type { %union.anon }
%union.anon = type { i32 }
%"struct.JPH::AssertLastParam" = type { i8 }
%"struct.JPH::BroadPhase::UpdateState" = type { [4 x ptr] }
%"class.JPH::PhysicsUpdateContext" = type <{ ptr, ptr, ptr, ptr, float, float, %"struct.std::atomic", [4 x i8], ptr, ptr, ptr, %"class.JPH::Array.19", i32, [4 x i8], ptr, %"struct.std::atomic", [4 x i8] }>
%"class.JPH::Array.19" = type { %"class.JPH::STLTempAllocator", i64, i64, ptr }
%"class.JPH::STLTempAllocator" = type { ptr }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::JobSystem::JobHandle" = type { %"class.JPH::Ref" }
%"class.JPH::Ref" = type { ptr }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%class.anon = type { ptr, ptr }
%class.anon.21 = type { ptr, ptr }
%class.anon.22 = type <{ ptr, i32, [4 x i8] }>
%class.anon.23 = type { ptr, ptr }
%class.anon.24 = type { ptr, ptr }
%class.anon.25 = type { ptr, ptr }
%class.anon.26 = type { ptr, ptr }
%class.anon.27 = type { ptr, ptr }
%class.anon.28 = type { ptr, ptr }
%class.anon.29 = type { ptr, ptr }
%class.anon.30 = type { ptr, ptr }
%class.anon.31 = type { ptr, ptr }
%class.anon.32 = type { ptr, ptr }
%class.anon.33 = type { ptr, ptr }
%class.anon.34 = type { ptr, ptr }
%class.anon.35 = type { ptr, ptr }
%class.anon.36 = type { ptr, ptr }
%class.anon.37 = type { ptr, ptr }
%class.anon.38 = type { ptr, ptr }
%"class.JPH::StaticArray.39" = type { i32, [4 x i8], [2048 x %"struct.JPH::StaticArray<JPH::JobSystem::JobHandle, 2048>::Storage"] }
%"struct.JPH::StaticArray<JPH::JobSystem::JobHandle, 2048>::Storage" = type { [8 x i8] }
%"class.JPH::PhysicsSystem" = type <{ ptr, ptr, %"class.JPH::BodyManager", %"class.JPH::BodyLockInterfaceNoLock", %"class.JPH::BodyLockInterfaceLocking", %"class.JPH::BodyInterface", %"class.JPH::BodyInterface", %"class.JPH::NarrowPhaseQuery", %"class.JPH::NarrowPhaseQuery", ptr, ptr, %"struct.JPH::PhysicsSettings", [4 x i8], %"class.JPH::ContactConstraintManager", %"class.JPH::ConstraintManager", %"class.JPH::IslandBuilder", %"class.JPH::LargeIslandSplitter", %"class.JPH::Mutex", %"class.JPH::Array.10", [8 x i8], %"class.JPH::Vec3", float, [12 x i8] }>
%"class.JPH::BodyManager" = type <{ %"class.JPH::Array", i32, [4 x i8], i64, %"class.JPH::Mutex", %"class.JPH::MutexArray", %"class.JPH::Array.0", %"class.JPH::Mutex", [2 x ptr], [2 x %"struct.std::atomic"], i32, [4 x i8], %"class.JPH::Mutex", %"class.JPH::Array.3", ptr, ptr, i8, [7 x i8] }>
%"class.JPH::Array" = type { i64, i64, ptr }
%"class.JPH::MutexArray" = type <{ ptr, i32, [4 x i8] }>
%"class.JPH::Array.0" = type { i64, i64, ptr }
%"class.JPH::Array.3" = type { i64, i64, ptr }
%"class.JPH::BodyLockInterfaceNoLock" = type { %"class.JPH::BodyLockInterface" }
%"class.JPH::BodyLockInterface" = type { ptr, ptr }
%"class.JPH::BodyLockInterfaceLocking" = type { %"class.JPH::BodyLockInterface" }
%"class.JPH::BodyInterface" = type { ptr, ptr, ptr }
%"class.JPH::NarrowPhaseQuery" = type { ptr, ptr }
%"struct.JPH::PhysicsSettings" = type <{ i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float, i32, i32, float, float, float, i8, i8, i8, i8, i8, i8, i8, i8 }>
%"class.JPH::ContactConstraintManager" = type { [8 x i8], [2 x %"class.JPH::ContactConstraintManager::ManifoldCache"], i32, ptr, ptr, ptr, ptr, ptr, i32, %"struct.std::atomic", ptr }
%"class.JPH::ContactConstraintManager::ManifoldCache" = type <{ %"class.JPH::LFHMAllocator", %"class.JPH::LockFreeHashMap", %"class.JPH::LockFreeHashMap.6", i8, [7 x i8] }>
%"class.JPH::LFHMAllocator" = type { ptr, i32, %"struct.std::atomic" }
%"class.JPH::LockFreeHashMap" = type { ptr, %"struct.std::atomic", ptr, i32, i32 }
%"class.JPH::LockFreeHashMap.6" = type { ptr, %"struct.std::atomic", ptr, i32, i32 }
%"class.JPH::ConstraintManager" = type { ptr, %"class.JPH::Array.7", %"class.JPH::Mutex" }
%"class.JPH::Array.7" = type { i64, i64, ptr }
%"class.JPH::IslandBuilder" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32, i32 }
%"class.JPH::LargeIslandSplitter" = type <{ i32, [4 x i8], ptr, ptr, ptr, i32, %"struct.std::atomic", i32, [4 x i8], ptr, %"struct.std::atomic", [4 x i8] }>
%"class.JPH::Mutex" = type { %"class.std::mutex", %"class.std::thread::id" }
%"class.std::mutex" = type { %"class.std::__mutex_base" }
%"class.std::__mutex_base" = type { %union.pthread_mutex_t }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%"class.std::thread::id" = type { i64 }
%"class.JPH::Array.10" = type { i64, i64, ptr }
%"class.JPH::Vec3" = type { %union.anon.13 }
%union.anon.13 = type { <4 x float> }
%"struct.JPH::PhysicsUpdateContext::Step" = type { ptr, i8, i8, %"struct.JPH::BroadPhase::UpdateState", i32, %"struct.std::atomic", [60 x i8], %"struct.std::atomic", [60 x i8], %"struct.std::atomic", [60 x i8], %"struct.std::atomic", [60 x i8], %"struct.std::atomic", [60 x i8], %"struct.std::atomic", [60 x i8], %"class.JPH::StaticArray", i32, %"struct.std::atomic", %"struct.std::atomic", %"struct.std::atomic", %"struct.std::atomic", %"struct.std::atomic", %"struct.std::atomic", ptr, i32, %"struct.std::atomic", %"struct.std::atomic", ptr, i32, %"class.JPH::JobSystem::JobHandle", %"class.JPH::StaticArray.20", %"class.JPH::StaticArray.20", %"class.JPH::StaticArray.20", %"class.JPH::StaticArray.20", %"class.JPH::JobSystem::JobHandle", %"class.JPH::StaticArray.20", %"class.JPH::JobSystem::JobHandle", %"class.JPH::JobSystem::JobHandle", %"class.JPH::JobSystem::JobHandle", %"class.JPH::StaticArray.20", %"class.JPH::JobSystem::JobHandle", %"class.JPH::StaticArray.20", %"class.JPH::JobSystem::JobHandle", %"class.JPH::JobSystem::JobHandle", %"class.JPH::StaticArray.20", %"class.JPH::JobSystem::JobHandle", %"class.JPH::JobSystem::JobHandle", %"class.JPH::StaticArray.20", %"class.JPH::StaticArray.20", %"class.JPH::JobSystem::JobHandle", %"class.JPH::JobSystem::JobHandle" }
%"class.JPH::StaticArray" = type { i32, [32 x %"struct.JPH::StaticArray<JPH::PhysicsUpdateContext::BodyPairQueue, 32>::Storage"] }
%"struct.JPH::StaticArray<JPH::PhysicsUpdateContext::BodyPairQueue, 32>::Storage" = type { [128 x i8] }
%"class.JPH::StaticArray.20" = type { i32, [4 x i8], [32 x %"struct.JPH::StaticArray<JPH::JobSystem::JobHandle, 32>::Storage"] }
%"struct.JPH::StaticArray<JPH::JobSystem::JobHandle, 32>::Storage" = type { [8 x i8] }

@_ZN3JPHL30cColorUpdateBroadPhaseFinalizeE = external hidden global %"class.JPH::Color", align 4
@_ZN3JPHL29cColorUpdateBroadPhasePrepareE = external hidden global %"class.JPH::Color", align 4
@_ZN3JPHL20cColorFindCollisionsE = external hidden global %"class.JPH::Color", align 4
@_ZN3JPHL18cColorApplyGravityE = external hidden global %"class.JPH::Color", align 4
@_ZN3JPHL30cColorSetupVelocityConstraintsE = external hidden global %"class.JPH::Color", align 4
@_ZN3JPHL33cColorBuildIslandsFromConstraintsE = external hidden global %"class.JPH::Color", align 4
@_ZN3JPHL32cColorDetermineActiveConstraintsE = external hidden global %"class.JPH::Color", align 4
@_ZN3JPHL21cColorFinalizeIslandsE = external hidden global %"class.JPH::Color", align 4
@_ZN3JPHL29cColorContactRemovedCallbacksE = external hidden global %"class.JPH::Color", align 4
@_ZN3JPHL24cColorBodySetIslandIndexE = external hidden global %"class.JPH::Color", align 4
@_ZN3JPHL19cColorStartNextStepE = external hidden global %"class.JPH::Color", align 4
@_ZN3JPHL30cColorSolveVelocityConstraintsE = external hidden global %"class.JPH::Color", align 4
@_ZN3JPHL26cColorPreIntegrateVelocityE = external hidden global %"class.JPH::Color", align 4
@_ZN3JPHL23cColorIntegrateVelocityE = external hidden global %"class.JPH::Color", align 4
@_ZN3JPHL27cColorPostIntegrateVelocityE = external hidden global %"class.JPH::Color", align 4
@_ZN3JPHL24cColorResolveCCDContactsE = external hidden global %"class.JPH::Color", align 4
@_ZN3JPHL30cColorSolvePositionConstraintsE = external hidden global %"class.JPH::Color", align 4
@_ZN3JPHL19cColorStepListenersE = external hidden global %"class.JPH::Color", align 4
@_ZN3JPHL21cColorSoftBodyPrepareE = external hidden global %"class.JPH::Color", align 4
@.str.24 = external hidden unnamed_addr constant [90 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [90 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN3JPH13PhysicsSystem6UpdateEfiPNS_13TempAllocatorEPNS_9JobSystemE(ptr noundef nonnull align 16 dereferenceable(1140) %0, float noundef %1, i32 noundef %2, ptr noundef %3, ptr noundef %4) #2 align 2 personality ptr @__gxx_personality_v0 {
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca float, align 4
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca %"struct.JPH::AssertLastParam", align 1
  %13 = alloca %"struct.JPH::AssertLastParam", align 1
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca %"struct.JPH::BroadPhase::UpdateState", align 8
  %17 = alloca i32, align 4
  %18 = alloca float, align 4
  %19 = alloca float, align 4
  %20 = alloca %"class.JPH::PhysicsUpdateContext", align 8
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca %"struct.JPH::AssertLastParam", align 1
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i8, align 1
  %47 = alloca i8, align 1
  %48 = alloca ptr, align 8
  %49 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %50 = alloca %"class.JPH::Color", align 4
  %51 = alloca %"class.std::function", align 8
  %52 = alloca %class.anon, align 8
  %53 = alloca i32, align 4
  %54 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %55 = alloca %"class.JPH::Color", align 4
  %56 = alloca %"class.std::function", align 8
  %57 = alloca %class.anon.21, align 8
  %58 = alloca i32, align 4
  %59 = alloca i32, align 4
  %60 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %61 = alloca %"class.JPH::Color", align 4
  %62 = alloca %"class.std::function", align 8
  %63 = alloca %class.anon.22, align 8
  %64 = alloca %"struct.JPH::AssertLastParam", align 1
  %65 = alloca i32, align 4
  %66 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %67 = alloca %"class.JPH::Color", align 4
  %68 = alloca %"class.std::function", align 8
  %69 = alloca %class.anon.23, align 8
  %70 = alloca i32, align 4
  %71 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %72 = alloca %"class.JPH::Color", align 4
  %73 = alloca %"class.std::function", align 8
  %74 = alloca %class.anon.24, align 8
  %75 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %76 = alloca %"class.JPH::Color", align 4
  %77 = alloca %"class.std::function", align 8
  %78 = alloca %class.anon.25, align 8
  %79 = alloca i32, align 4
  %80 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %81 = alloca %"class.JPH::Color", align 4
  %82 = alloca %"class.std::function", align 8
  %83 = alloca %class.anon.26, align 8
  %84 = alloca i32, align 4
  %85 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %86 = alloca %"class.JPH::Color", align 4
  %87 = alloca %"class.std::function", align 8
  %88 = alloca %class.anon.27, align 8
  %89 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %90 = alloca %"class.JPH::Color", align 4
  %91 = alloca %"class.std::function", align 8
  %92 = alloca %class.anon.28, align 8
  %93 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %94 = alloca %"class.JPH::Color", align 4
  %95 = alloca %"class.std::function", align 8
  %96 = alloca %class.anon.29, align 8
  %97 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %98 = alloca %"class.JPH::Color", align 4
  %99 = alloca %"class.std::function", align 8
  %100 = alloca %class.anon.30, align 8
  %101 = alloca ptr, align 8
  %102 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %103 = alloca %"class.JPH::Color", align 4
  %104 = alloca %"class.std::function", align 8
  %105 = alloca %class.anon.31, align 8
  %106 = alloca i32, align 4
  %107 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %108 = alloca %"class.JPH::Color", align 4
  %109 = alloca %"class.std::function", align 8
  %110 = alloca %class.anon.32, align 8
  %111 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %112 = alloca %"class.JPH::Color", align 4
  %113 = alloca %"class.std::function", align 8
  %114 = alloca %class.anon.33, align 8
  %115 = alloca i32, align 4
  %116 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %117 = alloca %"class.JPH::Color", align 4
  %118 = alloca %"class.std::function", align 8
  %119 = alloca %class.anon.34, align 8
  %120 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %121 = alloca %"class.JPH::Color", align 4
  %122 = alloca %"class.std::function", align 8
  %123 = alloca %class.anon.35, align 8
  %124 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %125 = alloca %"class.JPH::Color", align 4
  %126 = alloca %"class.std::function", align 8
  %127 = alloca %class.anon.36, align 8
  %128 = alloca i32, align 4
  %129 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %130 = alloca %"class.JPH::Color", align 4
  %131 = alloca %"class.std::function", align 8
  %132 = alloca %class.anon.37, align 8
  %133 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %134 = alloca %"class.JPH::Color", align 4
  %135 = alloca %"class.std::function", align 8
  %136 = alloca %class.anon.38, align 8
  %137 = alloca ptr, align 8
  %138 = alloca %"class.JPH::StaticArray.39", align 8
  %139 = alloca ptr, align 8
  %140 = alloca ptr, align 8
  %141 = alloca ptr, align 8
  %142 = alloca ptr, align 8
  %143 = alloca ptr, align 8
  %144 = alloca ptr, align 8
  %145 = alloca ptr, align 8
  %146 = alloca ptr, align 8
  %147 = alloca ptr, align 8
  %148 = alloca ptr, align 8
  %149 = alloca ptr, align 8
  %150 = alloca ptr, align 8
  %151 = alloca ptr, align 8
  %152 = alloca ptr, align 8
  %153 = alloca ptr, align 8
  %154 = alloca ptr, align 8
  %155 = alloca ptr, align 8
  %156 = alloca ptr, align 8
  %157 = alloca ptr, align 8
  %158 = alloca ptr, align 8
  %159 = alloca ptr, align 8
  %160 = alloca ptr, align 8
  %161 = alloca ptr, align 8
  %162 = alloca ptr, align 8
  %163 = alloca ptr, align 8
  %164 = alloca ptr, align 8
  %165 = alloca ptr, align 8
  %166 = alloca ptr, align 8
  %167 = alloca ptr, align 8
  %168 = alloca ptr, align 8
  %169 = alloca ptr, align 8
  %170 = alloca ptr, align 8
  %171 = alloca ptr, align 8
  %172 = alloca ptr, align 8
  %173 = alloca ptr, align 8
  %174 = alloca ptr, align 8
  %175 = alloca i32, align 4
  %176 = alloca %"struct.JPH::AssertLastParam", align 1
  store ptr %0, ptr %7, align 8, !tbaa !5
  store float %1, ptr %8, align 4, !tbaa !9
  store i32 %2, ptr %9, align 4, !tbaa !11
  store ptr %3, ptr %10, align 8, !tbaa !5
  store ptr %4, ptr %11, align 8, !tbaa !5
  %177 = load ptr, ptr %7, align 8
  br label %178

178:                                              ; preds = %5
  %179 = load i32, ptr %9, align 4, !tbaa !11
  %180 = icmp sgt i32 %179, 0
  br i1 %180, label %184, label %181

181:                                              ; preds = %178
  %182 = call noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.28, ptr noundef @.str.24, i32 noundef 135)
  br i1 %182, label %183, label %184

183:                                              ; preds = %181
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !13
  br label %184

184:                                              ; preds = %183, %181, %178
  br label %185

185:                                              ; preds = %184
  br label %186

186:                                              ; preds = %185
  %187 = load float, ptr %8, align 4, !tbaa !9
  %188 = fcmp oge float %187, 0.000000e+00
  br i1 %188, label %192, label %189

189:                                              ; preds = %186
  %190 = call noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.29, ptr noundef @.str.24, i32 noundef 136)
  br i1 %190, label %191, label %192

191:                                              ; preds = %189
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !14
  br label %192

192:                                              ; preds = %191, %189, %186
  br label %193

193:                                              ; preds = %192
  %194 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 9
  %195 = load ptr, ptr %194, align 16, !tbaa !15
  %196 = load ptr, ptr %195, align 8, !tbaa !43
  %197 = getelementptr inbounds ptr, ptr %196, i64 10
  %198 = load ptr, ptr %197, align 8
  call void %198(ptr noundef nonnull align 8 dereferenceable(16) %195)
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #9
  %199 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 2
  %200 = call noundef i32 @_ZNK3JPH11BodyManager18GetNumActiveBodiesENS_9EBodyTypeE(ptr noundef nonnull align 8 dereferenceable(297) %199, i8 noundef zeroext 0)
  store i32 %200, ptr %14, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #9
  %201 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 2
  %202 = call noundef i32 @_ZNK3JPH11BodyManager18GetNumActiveBodiesENS_9EBodyTypeE(ptr noundef nonnull align 8 dereferenceable(297) %201, i8 noundef zeroext 1)
  store i32 %202, ptr %15, align 4, !tbaa !11
  %203 = load i32, ptr %14, align 4, !tbaa !11
  %204 = icmp eq i32 %203, 0
  br i1 %204, label %205, label %208

205:                                              ; preds = %193
  %206 = load i32, ptr %15, align 4, !tbaa !11
  %207 = icmp eq i32 %206, 0
  br i1 %207, label %211, label %208

208:                                              ; preds = %205, %193
  %209 = load float, ptr %8, align 4, !tbaa !9
  %210 = fcmp ole float %209, 0.000000e+00
  br i1 %210, label %211, label %235

211:                                              ; preds = %208, %205
  %212 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 2
  call void @_ZNK3JPH11BodyManager13LockAllBodiesEv(ptr noundef nonnull align 8 dereferenceable(297) %212)
  %213 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 9
  %214 = load ptr, ptr %213, align 16, !tbaa !15
  %215 = load ptr, ptr %214, align 8, !tbaa !43
  %216 = getelementptr inbounds ptr, ptr %215, i64 11
  %217 = load ptr, ptr %216, align 8
  call void %217(ptr noundef nonnull align 8 dereferenceable(16) %214)
  call void @llvm.lifetime.start.p0(i64 32, ptr %16) #9
  %218 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 9
  %219 = load ptr, ptr %218, align 16, !tbaa !15
  %220 = load ptr, ptr %219, align 8, !tbaa !43
  %221 = getelementptr inbounds ptr, ptr %220, i64 12
  %222 = load ptr, ptr %221, align 8
  call void %222(ptr dead_on_unwind writable sret(%"struct.JPH::BroadPhase::UpdateState") align 8 %16, ptr noundef nonnull align 8 dereferenceable(16) %219)
  %223 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 9
  %224 = load ptr, ptr %223, align 16, !tbaa !15
  %225 = load ptr, ptr %224, align 8, !tbaa !43
  %226 = getelementptr inbounds ptr, ptr %225, i64 13
  %227 = load ptr, ptr %226, align 8
  call void %227(ptr noundef nonnull align 8 dereferenceable(16) %224, ptr noundef nonnull align 8 dereferenceable(32) %16)
  %228 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 9
  %229 = load ptr, ptr %228, align 16, !tbaa !15
  %230 = load ptr, ptr %229, align 8, !tbaa !43
  %231 = getelementptr inbounds ptr, ptr %230, i64 14
  %232 = load ptr, ptr %231, align 8
  call void %232(ptr noundef nonnull align 8 dereferenceable(16) %229)
  %233 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 13
  call void @_ZN3JPH24ContactConstraintManager55FinalizeContactCacheAndCallContactPointRemovedCallbacksEjj(ptr noundef nonnull align 8 dereferenceable(248) %233, i32 noundef 0, i32 noundef 0)
  %234 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 2
  call void @_ZNK3JPH11BodyManager15UnlockAllBodiesEv(ptr noundef nonnull align 8 dereferenceable(297) %234)
  store i32 0, ptr %6, align 4
  store i32 1, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #9
  br label %1656

235:                                              ; preds = %208
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #9
  %236 = load float, ptr %8, align 4, !tbaa !9
  %237 = load i32, ptr %9, align 4, !tbaa !11
  %238 = sitofp i32 %237 to float
  %239 = fdiv float %236, %238
  store float %239, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #9
  %240 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 11
  %241 = getelementptr inbounds %"struct.JPH::PhysicsSettings", ptr %240, i32 0, i32 20
  %242 = load i8, ptr %241, align 1, !tbaa !45, !range !46, !noundef !47
  %243 = trunc i8 %242 to i1
  br i1 %243, label %244, label %253

244:                                              ; preds = %235
  %245 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 21
  %246 = load float, ptr %245, align 16, !tbaa !48
  %247 = fcmp ogt float %246, 0.000000e+00
  br i1 %247, label %248, label %253

248:                                              ; preds = %244
  %249 = load float, ptr %18, align 4, !tbaa !9
  %250 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 21
  %251 = load float, ptr %250, align 16, !tbaa !48
  %252 = fdiv float %249, %251
  br label %254

253:                                              ; preds = %244, %235
  br label %254

254:                                              ; preds = %253, %248
  %255 = phi float [ %252, %248 ], [ 0.000000e+00, %253 ]
  store float %255, ptr %19, align 4, !tbaa !9
  %256 = load float, ptr %18, align 4, !tbaa !9
  %257 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 21
  store float %256, ptr %257, align 16, !tbaa !48
  call void @llvm.lifetime.start.p0(i64 128, ptr %20) #9
  %258 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZN3JPH20PhysicsUpdateContextC1ERNS_13TempAllocatorE(ptr noundef nonnull align 8 dereferenceable(124) %20, ptr noundef nonnull align 8 dereferenceable(8) %258)
  %259 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 0
  store ptr %177, ptr %259, align 8, !tbaa !49
  %260 = load ptr, ptr %11, align 8, !tbaa !5
  %261 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 2
  store ptr %260, ptr %261, align 8, !tbaa !53
  %262 = load ptr, ptr %11, align 8, !tbaa !5
  %263 = load ptr, ptr %262, align 8, !tbaa !43
  %264 = getelementptr inbounds ptr, ptr %263, i64 4
  %265 = load ptr, ptr %264, align 8
  %266 = invoke noundef ptr %265(ptr noundef nonnull align 8 dereferenceable(8) %262)
          to label %267 unwind label %287

267:                                              ; preds = %254
  %268 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 3
  store ptr %266, ptr %268, align 8, !tbaa !54
  %269 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 15
  %270 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 10
  store ptr %269, ptr %270, align 8, !tbaa !55
  %271 = load float, ptr %18, align 4, !tbaa !9
  %272 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 4
  store float %271, ptr %272, align 8, !tbaa !56
  %273 = load float, ptr %19, align 4, !tbaa !9
  %274 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 5
  store float %273, ptr %274, align 4, !tbaa !57
  %275 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 11
  %276 = load i32, ptr %9, align 4, !tbaa !11
  %277 = sext i32 %276 to i64
  invoke void @_ZN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(32) %275, i64 noundef %277)
          to label %278 unwind label %287

278:                                              ; preds = %267
  br label %279

279:                                              ; preds = %278
  %280 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 9
  %281 = load ptr, ptr %280, align 8, !tbaa !58
  %282 = icmp eq ptr %281, null
  br i1 %282, label %291, label %283

283:                                              ; preds = %279
  %284 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.30, ptr noundef @.str.24, i32 noundef 177)
          to label %285 unwind label %287

285:                                              ; preds = %283
  br i1 %284, label %286, label %291

286:                                              ; preds = %285
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !59
  br label %291

287:                                              ; preds = %310, %308, %305, %293, %283, %267, %254
  %288 = landingpad { ptr, i32 }
          cleanup
  %289 = extractvalue { ptr, i32 } %288, 0
  store ptr %289, ptr %21, align 8
  %290 = extractvalue { ptr, i32 } %288, 1
  store i32 %290, ptr %22, align 4
  br label %1655

291:                                              ; preds = %286, %285, %279
  br label %292

292:                                              ; preds = %291
  br label %293

293:                                              ; preds = %292
  %294 = load ptr, ptr %10, align 8, !tbaa !5
  %295 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 11
  %296 = getelementptr inbounds %"struct.JPH::PhysicsSettings", ptr %295, i32 0, i32 0
  %297 = load i32, ptr %296, align 16, !tbaa !60
  %298 = sext i32 %297 to i64
  %299 = mul i64 8, %298
  %300 = trunc i64 %299 to i32
  %301 = load ptr, ptr %294, align 8, !tbaa !43
  %302 = getelementptr inbounds ptr, ptr %301, i64 2
  %303 = load ptr, ptr %302, align 8
  %304 = invoke noundef ptr %303(ptr noundef nonnull align 8 dereferenceable(8) %294, i32 noundef %300)
          to label %305 unwind label %287

305:                                              ; preds = %293
  %306 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 9
  store ptr %304, ptr %306, align 8, !tbaa !58
  %307 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 17
  invoke void @_ZN3JPH5Mutex4lockEv(ptr noundef nonnull align 8 dereferenceable(48) %307)
          to label %308 unwind label %287

308:                                              ; preds = %305
  %309 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 2
  invoke void @_ZNK3JPH11BodyManager13LockAllBodiesEv(ptr noundef nonnull align 8 dereferenceable(297) %309)
          to label %310 unwind label %287

310:                                              ; preds = %308
  %311 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 9
  %312 = load ptr, ptr %311, align 16, !tbaa !15
  %313 = load ptr, ptr %312, align 8, !tbaa !43
  %314 = getelementptr inbounds ptr, ptr %313, i64 11
  %315 = load ptr, ptr %314, align 8
  invoke void %315(ptr noundef nonnull align 8 dereferenceable(16) %312)
          to label %316 unwind label %287

316:                                              ; preds = %310
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #9
  %317 = invoke noundef i32 @_ZNK3JPH20PhysicsUpdateContext17GetMaxConcurrencyEv(ptr noundef nonnull align 8 dereferenceable(124) %20)
          to label %318 unwind label %405

318:                                              ; preds = %316
  store i32 %317, ptr %24, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #9
  %319 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 18
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #9
  %320 = invoke noundef zeroext i1 @_ZNK3JPH5ArrayIPNS_19PhysicsStepListenerENS_12STLAllocatorIS2_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %319)
          to label %321 unwind label %409

321:                                              ; preds = %318
  br i1 %320, label %322, label %323

322:                                              ; preds = %321
  br label %341

323:                                              ; preds = %321
  store i32 1, ptr %26, align 4, !tbaa !11
  %324 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 18
  %325 = invoke noundef i64 @_ZNK3JPH5ArrayIPNS_19PhysicsStepListenerENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %324)
          to label %326 unwind label %413

326:                                              ; preds = %323
  %327 = trunc i64 %325 to i32
  %328 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 11
  %329 = getelementptr inbounds %"struct.JPH::PhysicsSettings", ptr %328, i32 0, i32 1
  %330 = load i32, ptr %329, align 4, !tbaa !61
  %331 = sdiv i32 %327, %330
  %332 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 11
  %333 = getelementptr inbounds %"struct.JPH::PhysicsSettings", ptr %332, i32 0, i32 2
  %334 = load i32, ptr %333, align 8, !tbaa !62
  %335 = sdiv i32 %331, %334
  store i32 %335, ptr %27, align 4, !tbaa !11
  %336 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %27, ptr noundef nonnull align 4 dereferenceable(4) %24)
          to label %337 unwind label %413

337:                                              ; preds = %326
  %338 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %26, ptr noundef nonnull align 4 dereferenceable(4) %336)
          to label %339 unwind label %413

339:                                              ; preds = %337
  %340 = load i32, ptr %338, align 4, !tbaa !11
  br label %341

341:                                              ; preds = %339, %322
  %342 = phi i32 [ 0, %322 ], [ %340, %339 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #9
  store i32 %342, ptr %25, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #9
  store i32 1, ptr %29, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #9
  %343 = load i32, ptr %14, align 4, !tbaa !11
  %344 = add nsw i32 %343, 64
  %345 = sub nsw i32 %344, 1
  %346 = sdiv i32 %345, 64
  store i32 %346, ptr %30, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #9
  %347 = load i32, ptr %24, align 4, !tbaa !11
  %348 = sub nsw i32 %347, 2
  store i32 %348, ptr %31, align 4, !tbaa !11
  %349 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %30, ptr noundef nonnull align 4 dereferenceable(4) %31)
          to label %350 unwind label %417

350:                                              ; preds = %341
  %351 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %29, ptr noundef nonnull align 4 dereferenceable(4) %349)
          to label %352 unwind label %417

352:                                              ; preds = %350
  %353 = load i32, ptr %351, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  store i32 %353, ptr %28, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #9
  store i32 1, ptr %33, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #9
  %354 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 14
  %355 = invoke noundef i32 @_ZNK3JPH17ConstraintManager17GetNumConstraintsEv(ptr noundef nonnull align 8 dereferenceable(80) %354)
          to label %356 unwind label %421

356:                                              ; preds = %352
  %357 = add nsw i32 %355, 64
  %358 = sub nsw i32 %357, 1
  %359 = sdiv i32 %358, 64
  store i32 %359, ptr %34, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #9
  %360 = load i32, ptr %24, align 4, !tbaa !11
  %361 = sub nsw i32 %360, 2
  store i32 %361, ptr %35, align 4, !tbaa !11
  %362 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %34, ptr noundef nonnull align 4 dereferenceable(4) %35)
          to label %363 unwind label %425

363:                                              ; preds = %356
  %364 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %33, ptr noundef nonnull align 4 dereferenceable(4) %362)
          to label %365 unwind label %425

365:                                              ; preds = %363
  %366 = load i32, ptr %364, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  store i32 %366, ptr %32, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #9
  store i32 1, ptr %37, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #9
  %367 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 14
  %368 = invoke noundef i32 @_ZNK3JPH17ConstraintManager17GetNumConstraintsEv(ptr noundef nonnull align 8 dereferenceable(80) %367)
          to label %369 unwind label %430

369:                                              ; preds = %365
  %370 = add nsw i32 %368, 256
  %371 = sub nsw i32 %370, 1
  %372 = sdiv i32 %371, 256
  store i32 %372, ptr %38, align 4, !tbaa !11
  %373 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %38, ptr noundef nonnull align 4 dereferenceable(4) %24)
          to label %374 unwind label %430

374:                                              ; preds = %369
  %375 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %37, ptr noundef nonnull align 4 dereferenceable(4) %373)
          to label %376 unwind label %430

376:                                              ; preds = %374
  %377 = load i32, ptr %375, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #9
  store i32 %377, ptr %36, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #9
  %378 = load i32, ptr %24, align 4, !tbaa !11
  %379 = icmp eq i32 %378, 1
  %380 = zext i1 %379 to i64
  %381 = select i1 %379, i32 1, i32 2
  store i32 %381, ptr %40, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #9
  %382 = load i32, ptr %14, align 4, !tbaa !11
  %383 = add nsw i32 %382, 16
  %384 = sub nsw i32 %383, 1
  %385 = sdiv i32 %384, 16
  store i32 %385, ptr %41, align 4, !tbaa !11
  %386 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %41, ptr noundef nonnull align 4 dereferenceable(4) %24)
          to label %387 unwind label %434

387:                                              ; preds = %376
  %388 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %40, ptr noundef nonnull align 4 dereferenceable(4) %386)
          to label %389 unwind label %434

389:                                              ; preds = %387
  %390 = load i32, ptr %388, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #9
  store i32 %390, ptr %39, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #9
  store i32 1, ptr %43, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #9
  %391 = load i32, ptr %14, align 4, !tbaa !11
  %392 = add nsw i32 %391, 64
  %393 = sub nsw i32 %392, 1
  %394 = sdiv i32 %393, 64
  store i32 %394, ptr %44, align 4, !tbaa !11
  %395 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %44, ptr noundef nonnull align 4 dereferenceable(4) %24)
          to label %396 unwind label %438

396:                                              ; preds = %389
  %397 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %43, ptr noundef nonnull align 4 dereferenceable(4) %395)
          to label %398 unwind label %438

398:                                              ; preds = %396
  %399 = load i32, ptr %397, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #9
  store i32 %399, ptr %42, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #9
  store i32 0, ptr %45, align 4, !tbaa !11
  br label %400

400:                                              ; preds = %1166, %398
  %401 = load i32, ptr %45, align 4, !tbaa !11
  %402 = load i32, ptr %9, align 4, !tbaa !11
  %403 = icmp slt i32 %401, %402
  br i1 %403, label %442, label %404

404:                                              ; preds = %400
  store i32 8, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #9
  br label %1175

405:                                              ; preds = %316
  %406 = landingpad { ptr, i32 }
          cleanup
  %407 = extractvalue { ptr, i32 } %406, 0
  store ptr %407, ptr %21, align 8
  %408 = extractvalue { ptr, i32 } %406, 1
  store i32 %408, ptr %22, align 4
  br label %1654

409:                                              ; preds = %318
  %410 = landingpad { ptr, i32 }
          cleanup
  %411 = extractvalue { ptr, i32 } %410, 0
  store ptr %411, ptr %21, align 8
  %412 = extractvalue { ptr, i32 } %410, 1
  store i32 %412, ptr %22, align 4
  br label %1653

413:                                              ; preds = %337, %326, %323
  %414 = landingpad { ptr, i32 }
          cleanup
  %415 = extractvalue { ptr, i32 } %414, 0
  store ptr %415, ptr %21, align 8
  %416 = extractvalue { ptr, i32 } %414, 1
  store i32 %416, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #9
  br label %1653

417:                                              ; preds = %350, %341
  %418 = landingpad { ptr, i32 }
          cleanup
  %419 = extractvalue { ptr, i32 } %418, 0
  store ptr %419, ptr %21, align 8
  %420 = extractvalue { ptr, i32 } %418, 1
  store i32 %420, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  br label %1652

421:                                              ; preds = %352
  %422 = landingpad { ptr, i32 }
          cleanup
  %423 = extractvalue { ptr, i32 } %422, 0
  store ptr %423, ptr %21, align 8
  %424 = extractvalue { ptr, i32 } %422, 1
  store i32 %424, ptr %22, align 4
  br label %429

425:                                              ; preds = %363, %356
  %426 = landingpad { ptr, i32 }
          cleanup
  %427 = extractvalue { ptr, i32 } %426, 0
  store ptr %427, ptr %21, align 8
  %428 = extractvalue { ptr, i32 } %426, 1
  store i32 %428, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #9
  br label %429

429:                                              ; preds = %425, %421
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  br label %1651

430:                                              ; preds = %374, %369, %365
  %431 = landingpad { ptr, i32 }
          cleanup
  %432 = extractvalue { ptr, i32 } %431, 0
  store ptr %432, ptr %21, align 8
  %433 = extractvalue { ptr, i32 } %431, 1
  store i32 %433, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #9
  br label %1650

434:                                              ; preds = %387, %376
  %435 = landingpad { ptr, i32 }
          cleanup
  %436 = extractvalue { ptr, i32 } %435, 0
  store ptr %436, ptr %21, align 8
  %437 = extractvalue { ptr, i32 } %435, 1
  store i32 %437, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #9
  br label %1649

438:                                              ; preds = %396, %389
  %439 = landingpad { ptr, i32 }
          cleanup
  %440 = extractvalue { ptr, i32 } %439, 0
  store ptr %440, ptr %21, align 8
  %441 = extractvalue { ptr, i32 } %439, 1
  store i32 %441, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #9
  br label %1648

442:                                              ; preds = %400
  call void @llvm.lifetime.start.p0(i64 1, ptr %46) #9
  %443 = load i32, ptr %45, align 4, !tbaa !11
  %444 = icmp eq i32 %443, 0
  %445 = zext i1 %444 to i8
  store i8 %445, ptr %46, align 1, !tbaa !63
  call void @llvm.lifetime.start.p0(i64 1, ptr %47) #9
  %446 = load i32, ptr %45, align 4, !tbaa !11
  %447 = load i32, ptr %9, align 4, !tbaa !11
  %448 = sub nsw i32 %447, 1
  %449 = icmp eq i32 %446, %448
  %450 = zext i1 %449 to i8
  store i8 %450, ptr %47, align 1, !tbaa !63
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #9
  %451 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 11
  %452 = load i32, ptr %45, align 4, !tbaa !11
  %453 = sext i32 %452 to i64
  %454 = invoke noundef nonnull align 8 dereferenceable(7344) ptr @_ZN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %451, i64 noundef %453)
          to label %455 unwind label %531

455:                                              ; preds = %442
  store ptr %454, ptr %48, align 8, !tbaa !5
  %456 = load ptr, ptr %48, align 8, !tbaa !5
  %457 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %456, i32 0, i32 0
  store ptr %20, ptr %457, align 8, !tbaa !64
  %458 = load i8, ptr %46, align 1, !tbaa !63, !range !46, !noundef !47
  %459 = trunc i8 %458 to i1
  %460 = load ptr, ptr %48, align 8, !tbaa !5
  %461 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %460, i32 0, i32 1
  %462 = zext i1 %459 to i8
  store i8 %462, ptr %461, align 8, !tbaa !71
  %463 = load i8, ptr %47, align 1, !tbaa !63, !range !46, !noundef !47
  %464 = trunc i8 %463 to i1
  %465 = load ptr, ptr %48, align 8, !tbaa !5
  %466 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %465, i32 0, i32 2
  %467 = zext i1 %464 to i8
  store i8 %467, ptr %466, align 1, !tbaa !72
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #9
  %468 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %50, ptr align 4 @_ZN3JPHL30cColorUpdateBroadPhaseFinalizeE, i64 4, i1 false), !tbaa.struct !73
  call void @llvm.lifetime.start.p0(i64 32, ptr %51) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %52) #9
  %469 = getelementptr inbounds %class.anon, ptr %52, i32 0, i32 0
  store ptr %20, ptr %469, align 8, !tbaa !5
  %470 = getelementptr inbounds %class.anon, ptr %52, i32 0, i32 1
  %471 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %471, ptr %470, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %51, ptr noundef nonnull align 8 dereferenceable(16) %52) #9
  %472 = load i32, ptr %39, align 4, !tbaa !11
  %473 = add nsw i32 %472, 2
  %474 = getelementptr inbounds %"class.JPH::Color", ptr %50, i32 0, i32 0
  %475 = getelementptr inbounds %union.anon, ptr %474, i32 0, i32 0
  %476 = load i32, ptr %475, align 4
  %477 = load ptr, ptr %468, align 8, !tbaa !43
  %478 = getelementptr inbounds ptr, ptr %477, i64 3
  %479 = load ptr, ptr %478, align 8
  invoke void %479(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %49, ptr noundef nonnull align 8 dereferenceable(8) %468, ptr noundef @.str.31, i32 %476, ptr noundef nonnull align 8 dereferenceable(32) %51, i32 noundef %473)
          to label %480 unwind label %535

480:                                              ; preds = %455
  %481 = load ptr, ptr %48, align 8, !tbaa !5
  %482 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %481, i32 0, i32 36
  %483 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %482, ptr noundef nonnull align 8 dereferenceable(8) %49) #9
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %49) #9
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %52) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %51) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #9
  %484 = load i8, ptr %46, align 1, !tbaa !63, !range !46, !noundef !47
  %485 = trunc i8 %484 to i1
  %486 = zext i1 %485 to i64
  %487 = select i1 %485, i32 0, i32 1
  store i32 %487, ptr %53, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #9
  %488 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %55, ptr align 4 @_ZN3JPHL29cColorUpdateBroadPhasePrepareE, i64 4, i1 false), !tbaa.struct !73
  call void @llvm.lifetime.start.p0(i64 32, ptr %56) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %57) #9
  %489 = getelementptr inbounds %class.anon.21, ptr %57, i32 0, i32 0
  store ptr %20, ptr %489, align 8, !tbaa !5
  %490 = getelementptr inbounds %class.anon.21, ptr %57, i32 0, i32 1
  %491 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %491, ptr %490, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %56, ptr noundef nonnull align 8 dereferenceable(16) %57) #9
  %492 = load i32, ptr %53, align 4, !tbaa !11
  %493 = getelementptr inbounds %"class.JPH::Color", ptr %55, i32 0, i32 0
  %494 = getelementptr inbounds %union.anon, ptr %493, i32 0, i32 0
  %495 = load i32, ptr %494, align 4
  %496 = load ptr, ptr %488, align 8, !tbaa !43
  %497 = getelementptr inbounds ptr, ptr %496, i64 3
  %498 = load ptr, ptr %497, align 8
  invoke void %498(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %54, ptr noundef nonnull align 8 dereferenceable(8) %488, ptr noundef @.str.32, i32 %495, ptr noundef nonnull align 8 dereferenceable(32) %56, i32 noundef %492)
          to label %499 unwind label %539

499:                                              ; preds = %480
  %500 = load ptr, ptr %48, align 8, !tbaa !5
  %501 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %500, i32 0, i32 31
  %502 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %501, ptr noundef nonnull align 8 dereferenceable(8) %54) #9
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %54) #9
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %57) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #9
  %503 = load ptr, ptr %48, align 8, !tbaa !5
  %504 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %503, i32 0, i32 17
  %505 = load i32, ptr %24, align 4, !tbaa !11
  invoke void @_ZN3JPH11StaticArrayINS_20PhysicsUpdateContext13BodyPairQueueELj32EE6resizeEj(ptr noundef nonnull align 4 dereferenceable(4100) %504, i32 noundef %505)
          to label %506 unwind label %543

506:                                              ; preds = %499
  %507 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 11
  %508 = getelementptr inbounds %"struct.JPH::PhysicsSettings", ptr %507, i32 0, i32 0
  %509 = load i32, ptr %508, align 16, !tbaa !60
  %510 = load i32, ptr %24, align 4, !tbaa !11
  %511 = sdiv i32 %509, %510
  %512 = load ptr, ptr %48, align 8, !tbaa !5
  %513 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %512, i32 0, i32 18
  store i32 %511, ptr %513, align 8, !tbaa !75
  %514 = load i32, ptr %39, align 4, !tbaa !11
  %515 = sext i32 %514 to i64
  %516 = sub i64 32, %515
  %517 = trunc i64 %516 to i32
  %518 = lshr i32 -1, %517
  %519 = load ptr, ptr %48, align 8, !tbaa !5
  %520 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %519, i32 0, i32 19
  %521 = call noundef i32 @_ZNSt13__atomic_baseIjEaSEj(ptr noundef nonnull align 4 dereferenceable(4) %520, i32 noundef %518) #9
  %522 = load ptr, ptr %48, align 8, !tbaa !5
  %523 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %522, i32 0, i32 35
  %524 = load i32, ptr %39, align 4, !tbaa !11
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %523, i32 noundef %524)
          to label %525 unwind label %543

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

526:                                              ; preds = %576, %525
  %527 = load i32, ptr %58, align 4, !tbaa !11
  %528 = load i32, ptr %39, align 4, !tbaa !11
  %529 = icmp slt i32 %527, %528
  br i1 %529, label %547, label %530

530:                                              ; preds = %526
  store i32 11, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #9
  br label %588

531:                                              ; preds = %442
  %532 = landingpad { ptr, i32 }
          cleanup
  %533 = extractvalue { ptr, i32 } %532, 0
  store ptr %533, ptr %21, align 8
  %534 = extractvalue { ptr, i32 } %532, 1
  store i32 %534, ptr %22, align 4
  br label %1174

535:                                              ; preds = %455
  %536 = landingpad { ptr, i32 }
          cleanup
  %537 = extractvalue { ptr, i32 } %536, 0
  store ptr %537, ptr %21, align 8
  %538 = extractvalue { ptr, i32 } %536, 1
  store i32 %538, ptr %22, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %52) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %51) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #9
  br label %1174

539:                                              ; preds = %480
  %540 = landingpad { ptr, i32 }
          cleanup
  %541 = extractvalue { ptr, i32 } %540, 0
  store ptr %541, ptr %21, align 8
  %542 = extractvalue { ptr, i32 } %540, 1
  store i32 %542, ptr %22, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %57) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #9
  br label %1173

543:                                              ; preds = %1159, %1144, %1141, %1093, %1087, %1070, %1054, %1010, %1007, %1001, %985, %982, %979, %937, %858, %842, %836, %792, %737, %682, %634, %630, %626, %623, %615, %611, %605, %596, %593, %591, %506, %499
  %544 = landingpad { ptr, i32 }
          cleanup
  %545 = extractvalue { ptr, i32 } %544, 0
  store ptr %545, ptr %21, align 8
  %546 = extractvalue { ptr, i32 } %544, 1
  store i32 %546, ptr %22, align 4
  br label %1173

547:                                              ; preds = %526
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #9
  %548 = load i32, ptr %58, align 4, !tbaa !11
  %549 = icmp eq i32 %548, 0
  %550 = zext i1 %549 to i64
  %551 = select i1 %549, i32 1, i32 0
  store i32 %551, ptr %59, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #9
  %552 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %61, ptr align 4 @_ZN3JPHL20cColorFindCollisionsE, i64 4, i1 false), !tbaa.struct !73
  call void @llvm.lifetime.start.p0(i64 32, ptr %62) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %63) #9
  %553 = getelementptr inbounds %class.anon.22, ptr %63, i32 0, i32 0
  %554 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %554, ptr %553, align 8, !tbaa !5
  %555 = getelementptr inbounds %class.anon.22, ptr %63, i32 0, i32 1
  %556 = load i32, ptr %58, align 4, !tbaa !11
  store i32 %556, ptr %555, align 8, !tbaa !76
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %62, ptr noundef nonnull align 8 dereferenceable(12) %63) #9
  %557 = load i32, ptr %28, align 4, !tbaa !11
  %558 = load i32, ptr %32, align 4, !tbaa !11
  %559 = add nsw i32 %557, %558
  %560 = add nsw i32 %559, 1
  %561 = load i32, ptr %59, align 4, !tbaa !11
  %562 = add nsw i32 %560, %561
  %563 = getelementptr inbounds %"class.JPH::Color", ptr %61, i32 0, i32 0
  %564 = getelementptr inbounds %union.anon, ptr %563, i32 0, i32 0
  %565 = load i32, ptr %564, align 4
  %566 = load ptr, ptr %552, align 8, !tbaa !43
  %567 = getelementptr inbounds ptr, ptr %566, i64 3
  %568 = load ptr, ptr %567, align 8
  invoke void %568(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %60, ptr noundef nonnull align 8 dereferenceable(8) %552, ptr noundef @.str.33, i32 %565, ptr noundef nonnull align 8 dereferenceable(32) %62, i32 noundef %562)
          to label %569 unwind label %579

569:                                              ; preds = %547
  %570 = load ptr, ptr %48, align 8, !tbaa !5
  %571 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %570, i32 0, i32 35
  %572 = load i32, ptr %58, align 4, !tbaa !11
  %573 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %571, i32 noundef %572)
          to label %574 unwind label %583

574:                                              ; preds = %569
  %575 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %573, ptr noundef nonnull align 8 dereferenceable(8) %60) #9
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %60) #9
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %63) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %62) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #9
  br label %576

576:                                              ; preds = %574
  %577 = load i32, ptr %58, align 4, !tbaa !11
  %578 = add nsw i32 %577, 1
  store i32 %578, ptr %58, align 4, !tbaa !11
  br label %526, !llvm.loop !78

579:                                              ; preds = %547
  %580 = landingpad { ptr, i32 }
          cleanup
  %581 = extractvalue { ptr, i32 } %580, 0
  store ptr %581, ptr %21, align 8
  %582 = extractvalue { ptr, i32 } %580, 1
  store i32 %582, ptr %22, align 4
  br label %587

583:                                              ; preds = %569
  %584 = landingpad { ptr, i32 }
          cleanup
  %585 = extractvalue { ptr, i32 } %584, 0
  store ptr %585, ptr %21, align 8
  %586 = extractvalue { ptr, i32 } %584, 1
  store i32 %586, ptr %22, align 4
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %60) #9
  br label %587

587:                                              ; preds = %583, %579
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %63) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %62) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #9
  br label %1173

588:                                              ; preds = %530
  %589 = load i8, ptr %46, align 1, !tbaa !63, !range !46, !noundef !47
  %590 = trunc i8 %589 to i1
  br i1 %590, label %591, label %634

591:                                              ; preds = %588
  %592 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 2
  invoke void @_ZN3JPH11BodyManager21SetActiveBodiesLockedEb(ptr noundef nonnull align 8 dereferenceable(297) %592, i1 noundef zeroext true)
          to label %593 unwind label %543

593:                                              ; preds = %591
  %594 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 2
  %595 = invoke noundef i32 @_ZNK3JPH11BodyManager18GetNumActiveBodiesENS_9EBodyTypeE(ptr noundef nonnull align 8 dereferenceable(297) %594, i8 noundef zeroext 0)
          to label %596 unwind label %543

596:                                              ; preds = %593
  %597 = load ptr, ptr %48, align 8, !tbaa !5
  %598 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %597, i32 0, i32 4
  store i32 %595, ptr %598, align 8, !tbaa !80
  %599 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 14
  invoke void @_ZN3JPH17ConstraintManager18LockAllConstraintsEv(ptr noundef nonnull align 8 dereferenceable(80) %599)
          to label %600 unwind label %543

600:                                              ; preds = %596
  br label %601

601:                                              ; preds = %600
  %602 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 8
  %603 = load ptr, ptr %602, align 8, !tbaa !81
  %604 = icmp eq ptr %603, null
  br i1 %604, label %609, label %605

605:                                              ; preds = %601
  %606 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.34, ptr noundef @.str.24, i32 noundef 283)
          to label %607 unwind label %543

607:                                              ; preds = %605
  br i1 %606, label %608, label %609

608:                                              ; preds = %607
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !82
  br label %609

609:                                              ; preds = %608, %607, %601
  br label %610

610:                                              ; preds = %609
  br label %611

611:                                              ; preds = %610
  %612 = load ptr, ptr %10, align 8, !tbaa !5
  %613 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 14
  %614 = invoke noundef i32 @_ZNK3JPH17ConstraintManager17GetNumConstraintsEv(ptr noundef nonnull align 8 dereferenceable(80) %613)
          to label %615 unwind label %543

615:                                              ; preds = %611
  %616 = zext i32 %614 to i64
  %617 = mul i64 %616, 8
  %618 = trunc i64 %617 to i32
  %619 = load ptr, ptr %612, align 8, !tbaa !43
  %620 = getelementptr inbounds ptr, ptr %619, i64 2
  %621 = load ptr, ptr %620, align 8
  %622 = invoke noundef ptr %621(ptr noundef nonnull align 8 dereferenceable(8) %612, i32 noundef %618)
          to label %623 unwind label %543

623:                                              ; preds = %615
  %624 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 8
  store ptr %622, ptr %624, align 8, !tbaa !81
  %625 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 13
  invoke void @_ZN3JPH24ContactConstraintManager23PrepareConstraintBufferEPNS_20PhysicsUpdateContextE(ptr noundef nonnull align 8 dereferenceable(248) %625, ptr noundef %20)
          to label %626 unwind label %543

626:                                              ; preds = %623
  %627 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 15
  %628 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 13
  %629 = invoke noundef i32 @_ZNK3JPH24ContactConstraintManager17GetMaxConstraintsEv(ptr noundef nonnull align 8 dereferenceable(248) %628)
          to label %630 unwind label %543

630:                                              ; preds = %626
  %631 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 1
  %632 = load ptr, ptr %631, align 8, !tbaa !83
  invoke void @_ZN3JPH13IslandBuilder25PrepareContactConstraintsEjPNS_13TempAllocatorE(ptr noundef nonnull align 8 dereferenceable(112) %627, i32 noundef %629, ptr noundef %632)
          to label %633 unwind label %543

633:                                              ; preds = %630
  br label %634

634:                                              ; preds = %633, %588
  %635 = load ptr, ptr %48, align 8, !tbaa !5
  %636 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %635, i32 0, i32 34
  %637 = load i32, ptr %28, align 4, !tbaa !11
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %636, i32 noundef %637)
          to label %638 unwind label %543

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

639:                                              ; preds = %670, %638
  %640 = load i32, ptr %65, align 4, !tbaa !11
  %641 = load i32, ptr %28, align 4, !tbaa !11
  %642 = icmp slt i32 %640, %641
  br i1 %642, label %644, label %643

643:                                              ; preds = %639
  store i32 16, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #9
  br label %682

644:                                              ; preds = %639
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #9
  %645 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %67, ptr align 4 @_ZN3JPHL18cColorApplyGravityE, i64 4, i1 false), !tbaa.struct !73
  call void @llvm.lifetime.start.p0(i64 32, ptr %68) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %69) #9
  %646 = getelementptr inbounds %class.anon.23, ptr %69, i32 0, i32 0
  store ptr %20, ptr %646, align 8, !tbaa !5
  %647 = getelementptr inbounds %class.anon.23, ptr %69, i32 0, i32 1
  %648 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %648, ptr %647, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %68, ptr noundef nonnull align 8 dereferenceable(16) %69) #9
  %649 = load i32, ptr %25, align 4, !tbaa !11
  %650 = icmp sgt i32 %649, 0
  br i1 %650, label %651, label %653

651:                                              ; preds = %644
  %652 = load i32, ptr %25, align 4, !tbaa !11
  br label %655

653:                                              ; preds = %644
  %654 = load i32, ptr %53, align 4, !tbaa !11
  br label %655

655:                                              ; preds = %653, %651
  %656 = phi i32 [ %652, %651 ], [ %654, %653 ]
  %657 = getelementptr inbounds %"class.JPH::Color", ptr %67, i32 0, i32 0
  %658 = getelementptr inbounds %union.anon, ptr %657, i32 0, i32 0
  %659 = load i32, ptr %658, align 4
  %660 = load ptr, ptr %645, align 8, !tbaa !43
  %661 = getelementptr inbounds ptr, ptr %660, i64 3
  %662 = load ptr, ptr %661, align 8
  invoke void %662(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %66, ptr noundef nonnull align 8 dereferenceable(8) %645, ptr noundef @.str.35, i32 %659, ptr noundef nonnull align 8 dereferenceable(32) %68, i32 noundef %656)
          to label %663 unwind label %673

663:                                              ; preds = %655
  %664 = load ptr, ptr %48, align 8, !tbaa !5
  %665 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %664, i32 0, i32 34
  %666 = load i32, ptr %65, align 4, !tbaa !11
  %667 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %665, i32 noundef %666)
          to label %668 unwind label %677

668:                                              ; preds = %663
  %669 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %667, ptr noundef nonnull align 8 dereferenceable(8) %66) #9
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %66) #9
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %69) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %68) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #9
  br label %670

670:                                              ; preds = %668
  %671 = load i32, ptr %65, align 4, !tbaa !11
  %672 = add nsw i32 %671, 1
  store i32 %672, ptr %65, align 4, !tbaa !11
  br label %639, !llvm.loop !84

673:                                              ; preds = %655
  %674 = landingpad { ptr, i32 }
          cleanup
  %675 = extractvalue { ptr, i32 } %674, 0
  store ptr %675, ptr %21, align 8
  %676 = extractvalue { ptr, i32 } %674, 1
  store i32 %676, ptr %22, align 4
  br label %681

677:                                              ; preds = %663
  %678 = landingpad { ptr, i32 }
          cleanup
  %679 = extractvalue { ptr, i32 } %678, 0
  store ptr %679, ptr %21, align 8
  %680 = extractvalue { ptr, i32 } %678, 1
  store i32 %680, ptr %22, align 4
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %66) #9
  br label %681

681:                                              ; preds = %677, %673
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %69) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %68) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #9
  br label %1173

682:                                              ; preds = %643
  %683 = load ptr, ptr %48, align 8, !tbaa !5
  %684 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %683, i32 0, i32 37
  %685 = load i32, ptr %36, align 4, !tbaa !11
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %684, i32 noundef %685)
          to label %686 unwind label %543

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

687:                                              ; preds = %712, %686
  %688 = load i32, ptr %70, align 4, !tbaa !11
  %689 = load i32, ptr %36, align 4, !tbaa !11
  %690 = icmp slt i32 %688, %689
  br i1 %690, label %692, label %691

691:                                              ; preds = %687
  store i32 19, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #9
  br label %724

692:                                              ; preds = %687
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #9
  %693 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %72, ptr align 4 @_ZN3JPHL30cColorSetupVelocityConstraintsE, i64 4, i1 false), !tbaa.struct !73
  call void @llvm.lifetime.start.p0(i64 32, ptr %73) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %74) #9
  %694 = getelementptr inbounds %class.anon.24, ptr %74, i32 0, i32 0
  store ptr %20, ptr %694, align 8, !tbaa !5
  %695 = getelementptr inbounds %class.anon.24, ptr %74, i32 0, i32 1
  %696 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %696, ptr %695, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %73, ptr noundef nonnull align 8 dereferenceable(16) %74) #9
  %697 = load i32, ptr %32, align 4, !tbaa !11
  %698 = add nsw i32 %697, 1
  %699 = getelementptr inbounds %"class.JPH::Color", ptr %72, i32 0, i32 0
  %700 = getelementptr inbounds %union.anon, ptr %699, i32 0, i32 0
  %701 = load i32, ptr %700, align 4
  %702 = load ptr, ptr %693, align 8, !tbaa !43
  %703 = getelementptr inbounds ptr, ptr %702, i64 3
  %704 = load ptr, ptr %703, align 8
  invoke void %704(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %71, ptr noundef nonnull align 8 dereferenceable(8) %693, ptr noundef @.str.36, i32 %701, ptr noundef nonnull align 8 dereferenceable(32) %73, i32 noundef %698)
          to label %705 unwind label %715

705:                                              ; preds = %692
  %706 = load ptr, ptr %48, align 8, !tbaa !5
  %707 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %706, i32 0, i32 37
  %708 = load i32, ptr %70, align 4, !tbaa !11
  %709 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %707, i32 noundef %708)
          to label %710 unwind label %719

710:                                              ; preds = %705
  %711 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %709, ptr noundef nonnull align 8 dereferenceable(8) %71) #9
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %71) #9
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %74) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %73) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #9
  br label %712

712:                                              ; preds = %710
  %713 = load i32, ptr %70, align 4, !tbaa !11
  %714 = add nsw i32 %713, 1
  store i32 %714, ptr %70, align 4, !tbaa !11
  br label %687, !llvm.loop !85

715:                                              ; preds = %692
  %716 = landingpad { ptr, i32 }
          cleanup
  %717 = extractvalue { ptr, i32 } %716, 0
  store ptr %717, ptr %21, align 8
  %718 = extractvalue { ptr, i32 } %716, 1
  store i32 %718, ptr %22, align 4
  br label %723

719:                                              ; preds = %705
  %720 = landingpad { ptr, i32 }
          cleanup
  %721 = extractvalue { ptr, i32 } %720, 0
  store ptr %721, ptr %21, align 8
  %722 = extractvalue { ptr, i32 } %720, 1
  store i32 %722, ptr %22, align 4
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %71) #9
  br label %723

723:                                              ; preds = %719, %715
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %74) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %73) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #9
  br label %1173

724:                                              ; preds = %691
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #9
  %725 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %76, ptr align 4 @_ZN3JPHL33cColorBuildIslandsFromConstraintsE, i64 4, i1 false), !tbaa.struct !73
  call void @llvm.lifetime.start.p0(i64 32, ptr %77) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %78) #9
  %726 = getelementptr inbounds %class.anon.25, ptr %78, i32 0, i32 0
  store ptr %20, ptr %726, align 8, !tbaa !5
  %727 = getelementptr inbounds %class.anon.25, ptr %78, i32 0, i32 1
  %728 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %728, ptr %727, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_5vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %77, ptr noundef nonnull align 8 dereferenceable(16) %78) #9
  %729 = load i32, ptr %32, align 4, !tbaa !11
  %730 = add nsw i32 %729, 1
  %731 = getelementptr inbounds %"class.JPH::Color", ptr %76, i32 0, i32 0
  %732 = getelementptr inbounds %union.anon, ptr %731, i32 0, i32 0
  %733 = load i32, ptr %732, align 4
  %734 = load ptr, ptr %725, align 8, !tbaa !43
  %735 = getelementptr inbounds ptr, ptr %734, i64 3
  %736 = load ptr, ptr %735, align 8
  invoke void %736(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %75, ptr noundef nonnull align 8 dereferenceable(8) %725, ptr noundef @.str.37, i32 %733, ptr noundef nonnull align 8 dereferenceable(32) %77, i32 noundef %730)
          to label %737 unwind label %750

737:                                              ; preds = %724
  %738 = load ptr, ptr %48, align 8, !tbaa !5
  %739 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %738, i32 0, i32 38
  %740 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %739, ptr noundef nonnull align 8 dereferenceable(8) %75) #9
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %75) #9
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %78) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %77) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #9
  %741 = load ptr, ptr %48, align 8, !tbaa !5
  %742 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %741, i32 0, i32 33
  %743 = load i32, ptr %32, align 4, !tbaa !11
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %742, i32 noundef %743)
          to label %744 unwind label %543

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

745:                                              ; preds = %780, %744
  %746 = load i32, ptr %79, align 4, !tbaa !11
  %747 = load i32, ptr %32, align 4, !tbaa !11
  %748 = icmp slt i32 %746, %747
  br i1 %748, label %754, label %749

749:                                              ; preds = %745
  store i32 22, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #9
  br label %792

750:                                              ; preds = %724
  %751 = landingpad { ptr, i32 }
          cleanup
  %752 = extractvalue { ptr, i32 } %751, 0
  store ptr %752, ptr %21, align 8
  %753 = extractvalue { ptr, i32 } %751, 1
  store i32 %753, ptr %22, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %78) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %77) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #9
  br label %1173

754:                                              ; preds = %745
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #9
  %755 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %81, ptr align 4 @_ZN3JPHL32cColorDetermineActiveConstraintsE, i64 4, i1 false), !tbaa.struct !73
  call void @llvm.lifetime.start.p0(i64 32, ptr %82) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %83) #9
  %756 = getelementptr inbounds %class.anon.26, ptr %83, i32 0, i32 0
  store ptr %20, ptr %756, align 8, !tbaa !5
  %757 = getelementptr inbounds %class.anon.26, ptr %83, i32 0, i32 1
  %758 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %758, ptr %757, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_6vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %82, ptr noundef nonnull align 8 dereferenceable(16) %83) #9
  %759 = load i32, ptr %25, align 4, !tbaa !11
  %760 = icmp sgt i32 %759, 0
  br i1 %760, label %761, label %763

761:                                              ; preds = %754
  %762 = load i32, ptr %25, align 4, !tbaa !11
  br label %765

763:                                              ; preds = %754
  %764 = load i32, ptr %53, align 4, !tbaa !11
  br label %765

765:                                              ; preds = %763, %761
  %766 = phi i32 [ %762, %761 ], [ %764, %763 ]
  %767 = getelementptr inbounds %"class.JPH::Color", ptr %81, i32 0, i32 0
  %768 = getelementptr inbounds %union.anon, ptr %767, i32 0, i32 0
  %769 = load i32, ptr %768, align 4
  %770 = load ptr, ptr %755, align 8, !tbaa !43
  %771 = getelementptr inbounds ptr, ptr %770, i64 3
  %772 = load ptr, ptr %771, align 8
  invoke void %772(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %80, ptr noundef nonnull align 8 dereferenceable(8) %755, ptr noundef @.str.38, i32 %769, ptr noundef nonnull align 8 dereferenceable(32) %82, i32 noundef %766)
          to label %773 unwind label %783

773:                                              ; preds = %765
  %774 = load ptr, ptr %48, align 8, !tbaa !5
  %775 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %774, i32 0, i32 33
  %776 = load i32, ptr %79, align 4, !tbaa !11
  %777 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %775, i32 noundef %776)
          to label %778 unwind label %787

778:                                              ; preds = %773
  %779 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %777, ptr noundef nonnull align 8 dereferenceable(8) %80) #9
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %80) #9
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %83) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %82) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #9
  br label %780

780:                                              ; preds = %778
  %781 = load i32, ptr %79, align 4, !tbaa !11
  %782 = add nsw i32 %781, 1
  store i32 %782, ptr %79, align 4, !tbaa !11
  br label %745, !llvm.loop !86

783:                                              ; preds = %765
  %784 = landingpad { ptr, i32 }
          cleanup
  %785 = extractvalue { ptr, i32 } %784, 0
  store ptr %785, ptr %21, align 8
  %786 = extractvalue { ptr, i32 } %784, 1
  store i32 %786, ptr %22, align 4
  br label %791

787:                                              ; preds = %773
  %788 = landingpad { ptr, i32 }
          cleanup
  %789 = extractvalue { ptr, i32 } %788, 0
  store ptr %789, ptr %21, align 8
  %790 = extractvalue { ptr, i32 } %788, 1
  store i32 %790, ptr %22, align 4
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %80) #9
  br label %791

791:                                              ; preds = %787, %783
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %83) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %82) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #9
  br label %1173

792:                                              ; preds = %749
  %793 = load ptr, ptr %48, align 8, !tbaa !5
  %794 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %793, i32 0, i32 32
  %795 = load i32, ptr %25, align 4, !tbaa !11
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %794, i32 noundef %795)
          to label %796 unwind label %543

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

797:                                              ; preds = %821, %796
  %798 = load i32, ptr %84, align 4, !tbaa !11
  %799 = load i32, ptr %25, align 4, !tbaa !11
  %800 = icmp slt i32 %798, %799
  br i1 %800, label %802, label %801

801:                                              ; preds = %797
  store i32 25, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #9
  br label %833

802:                                              ; preds = %797
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #9
  %803 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %86, ptr align 4 @_ZN3JPHL19cColorStepListenersE, i64 4, i1 false), !tbaa.struct !73
  call void @llvm.lifetime.start.p0(i64 32, ptr %87) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %88) #9
  %804 = getelementptr inbounds %class.anon.27, ptr %88, i32 0, i32 0
  store ptr %20, ptr %804, align 8, !tbaa !5
  %805 = getelementptr inbounds %class.anon.27, ptr %88, i32 0, i32 1
  %806 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %806, ptr %805, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_7vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %87, ptr noundef nonnull align 8 dereferenceable(16) %88) #9
  %807 = load i32, ptr %53, align 4, !tbaa !11
  %808 = getelementptr inbounds %"class.JPH::Color", ptr %86, i32 0, i32 0
  %809 = getelementptr inbounds %union.anon, ptr %808, i32 0, i32 0
  %810 = load i32, ptr %809, align 4
  %811 = load ptr, ptr %803, align 8, !tbaa !43
  %812 = getelementptr inbounds ptr, ptr %811, i64 3
  %813 = load ptr, ptr %812, align 8
  invoke void %813(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %85, ptr noundef nonnull align 8 dereferenceable(8) %803, ptr noundef @.str.39, i32 %810, ptr noundef nonnull align 8 dereferenceable(32) %87, i32 noundef %807)
          to label %814 unwind label %824

814:                                              ; preds = %802
  %815 = load ptr, ptr %48, align 8, !tbaa !5
  %816 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %815, i32 0, i32 32
  %817 = load i32, ptr %84, align 4, !tbaa !11
  %818 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %816, i32 noundef %817)
          to label %819 unwind label %828

819:                                              ; preds = %814
  %820 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %818, ptr noundef nonnull align 8 dereferenceable(8) %85) #9
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %85) #9
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %87) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %88) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %87) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #9
  br label %821

821:                                              ; preds = %819
  %822 = load i32, ptr %84, align 4, !tbaa !11
  %823 = add nsw i32 %822, 1
  store i32 %823, ptr %84, align 4, !tbaa !11
  br label %797, !llvm.loop !87

824:                                              ; preds = %802
  %825 = landingpad { ptr, i32 }
          cleanup
  %826 = extractvalue { ptr, i32 } %825, 0
  store ptr %826, ptr %21, align 8
  %827 = extractvalue { ptr, i32 } %825, 1
  store i32 %827, ptr %22, align 4
  br label %832

828:                                              ; preds = %814
  %829 = landingpad { ptr, i32 }
          cleanup
  %830 = extractvalue { ptr, i32 } %829, 0
  store ptr %830, ptr %21, align 8
  %831 = extractvalue { ptr, i32 } %829, 1
  store i32 %831, ptr %22, align 4
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %85) #9
  br label %832

832:                                              ; preds = %828, %824
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %87) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %88) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %87) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #9
  br label %1173

833:                                              ; preds = %801
  %834 = load i8, ptr %46, align 1, !tbaa !63, !range !46, !noundef !47
  %835 = trunc i8 %834 to i1
  br i1 %835, label %845, label %836

836:                                              ; preds = %833
  %837 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 11
  %838 = load i32, ptr %45, align 4, !tbaa !11
  %839 = sub nsw i32 %838, 1
  %840 = sext i32 %839 to i64
  %841 = invoke noundef nonnull align 8 dereferenceable(7344) ptr @_ZN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %837, i64 noundef %840)
          to label %842 unwind label %543

842:                                              ; preds = %836
  %843 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %841, i32 0, i32 52
  invoke void @_ZNK3JPH9JobSystem9JobHandle16RemoveDependencyEi(ptr noundef nonnull align 8 dereferenceable(8) %843, i32 noundef 1)
          to label %844 unwind label %543

844:                                              ; preds = %842
  br label %845

845:                                              ; preds = %844, %833
  call void @llvm.lifetime.start.p0(i64 8, ptr %89) #9
  %846 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %90, ptr align 4 @_ZN3JPHL21cColorFinalizeIslandsE, i64 4, i1 false), !tbaa.struct !73
  call void @llvm.lifetime.start.p0(i64 32, ptr %91) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %92) #9
  %847 = getelementptr inbounds %class.anon.28, ptr %92, i32 0, i32 0
  store ptr %20, ptr %847, align 8, !tbaa !5
  %848 = getelementptr inbounds %class.anon.28, ptr %92, i32 0, i32 1
  %849 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %849, ptr %848, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_8vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %91, ptr noundef nonnull align 8 dereferenceable(16) %92) #9
  %850 = load i32, ptr %39, align 4, !tbaa !11
  %851 = add nsw i32 %850, 2
  %852 = getelementptr inbounds %"class.JPH::Color", ptr %90, i32 0, i32 0
  %853 = getelementptr inbounds %union.anon, ptr %852, i32 0, i32 0
  %854 = load i32, ptr %853, align 4
  %855 = load ptr, ptr %846, align 8, !tbaa !43
  %856 = getelementptr inbounds ptr, ptr %855, i64 3
  %857 = load ptr, ptr %856, align 8
  invoke void %857(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %89, ptr noundef nonnull align 8 dereferenceable(8) %846, ptr noundef @.str.40, i32 %854, ptr noundef nonnull align 8 dereferenceable(32) %91, i32 noundef %851)
          to label %858 unwind label %916

858:                                              ; preds = %845
  %859 = load ptr, ptr %48, align 8, !tbaa !5
  %860 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %859, i32 0, i32 39
  %861 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %860, ptr noundef nonnull align 8 dereferenceable(8) %89) #9
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %89) #9
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %91) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %92) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %91) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #9
  %862 = load ptr, ptr %48, align 8, !tbaa !5
  %863 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %862, i32 0, i32 38
  invoke void @_ZNK3JPH9JobSystem9JobHandle16RemoveDependencyEi(ptr noundef nonnull align 8 dereferenceable(8) %863, i32 noundef 1)
          to label %864 unwind label %543

864:                                              ; preds = %858
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #9
  %865 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %94, ptr align 4 @_ZN3JPHL29cColorContactRemovedCallbacksE, i64 4, i1 false), !tbaa.struct !73
  call void @llvm.lifetime.start.p0(i64 32, ptr %95) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %96) #9
  %866 = getelementptr inbounds %class.anon.29, ptr %96, i32 0, i32 0
  store ptr %20, ptr %866, align 8, !tbaa !5
  %867 = getelementptr inbounds %class.anon.29, ptr %96, i32 0, i32 1
  %868 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %868, ptr %867, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_9vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %95, ptr noundef nonnull align 8 dereferenceable(16) %96) #9
  %869 = getelementptr inbounds %"class.JPH::Color", ptr %94, i32 0, i32 0
  %870 = getelementptr inbounds %union.anon, ptr %869, i32 0, i32 0
  %871 = load i32, ptr %870, align 4
  %872 = load ptr, ptr %865, align 8, !tbaa !43
  %873 = getelementptr inbounds ptr, ptr %872, i64 3
  %874 = load ptr, ptr %873, align 8
  invoke void %874(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %93, ptr noundef nonnull align 8 dereferenceable(8) %865, ptr noundef @.str.41, i32 %871, ptr noundef nonnull align 8 dereferenceable(32) %95, i32 noundef 1)
          to label %875 unwind label %920

875:                                              ; preds = %864
  %876 = load ptr, ptr %48, align 8, !tbaa !5
  %877 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %876, i32 0, i32 47
  %878 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %877, ptr noundef nonnull align 8 dereferenceable(8) %93) #9
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %93) #9
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %95) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %96) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %95) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %97) #9
  %879 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %98, ptr align 4 @_ZN3JPHL24cColorBodySetIslandIndexE, i64 4, i1 false), !tbaa.struct !73
  call void @llvm.lifetime.start.p0(i64 32, ptr %99) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %100) #9
  %880 = getelementptr inbounds %class.anon.30, ptr %100, i32 0, i32 0
  store ptr %20, ptr %880, align 8, !tbaa !5
  %881 = getelementptr inbounds %class.anon.30, ptr %100, i32 0, i32 1
  %882 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %882, ptr %881, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_10vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %99, ptr noundef nonnull align 8 dereferenceable(16) %100) #9
  %883 = getelementptr inbounds %"class.JPH::Color", ptr %98, i32 0, i32 0
  %884 = getelementptr inbounds %union.anon, ptr %883, i32 0, i32 0
  %885 = load i32, ptr %884, align 4
  %886 = load ptr, ptr %879, align 8, !tbaa !43
  %887 = getelementptr inbounds ptr, ptr %886, i64 3
  %888 = load ptr, ptr %887, align 8
  invoke void %888(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %97, ptr noundef nonnull align 8 dereferenceable(8) %879, ptr noundef @.str.42, i32 %885, ptr noundef nonnull align 8 dereferenceable(32) %99, i32 noundef 2)
          to label %889 unwind label %924

889:                                              ; preds = %875
  %890 = load ptr, ptr %48, align 8, !tbaa !5
  %891 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %890, i32 0, i32 40
  %892 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %891, ptr noundef nonnull align 8 dereferenceable(8) %97) #9
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %97) #9
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %99) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %100) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %99) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #9
  %893 = load i8, ptr %47, align 1, !tbaa !63, !range !46, !noundef !47
  %894 = trunc i8 %893 to i1
  br i1 %894, label %937, label %895

895:                                              ; preds = %889
  call void @llvm.lifetime.start.p0(i64 8, ptr %101) #9
  %896 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 11
  %897 = load i32, ptr %45, align 4, !tbaa !11
  %898 = add nsw i32 %897, 1
  %899 = sext i32 %898 to i64
  %900 = invoke noundef nonnull align 8 dereferenceable(7344) ptr @_ZN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %896, i64 noundef %899)
          to label %901 unwind label %928

901:                                              ; preds = %895
  store ptr %900, ptr %101, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %102) #9
  %902 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %103, ptr align 4 @_ZN3JPHL19cColorStartNextStepE, i64 4, i1 false), !tbaa.struct !73
  call void @llvm.lifetime.start.p0(i64 32, ptr %104) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %105) #9
  %903 = getelementptr inbounds %class.anon.31, ptr %105, i32 0, i32 0
  store ptr %177, ptr %903, align 8, !tbaa !88
  %904 = getelementptr inbounds %class.anon.31, ptr %105, i32 0, i32 1
  %905 = load ptr, ptr %101, align 8, !tbaa !5
  store ptr %905, ptr %904, align 8, !tbaa !90
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_11vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %104, ptr noundef nonnull align 8 dereferenceable(16) %105) #9
  %906 = getelementptr inbounds %"class.JPH::Color", ptr %103, i32 0, i32 0
  %907 = getelementptr inbounds %union.anon, ptr %906, i32 0, i32 0
  %908 = load i32, ptr %907, align 4
  %909 = load ptr, ptr %902, align 8, !tbaa !43
  %910 = getelementptr inbounds ptr, ptr %909, i64 3
  %911 = load ptr, ptr %910, align 8
  invoke void %911(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %102, ptr noundef nonnull align 8 dereferenceable(8) %902, ptr noundef @.str.43, i32 %908, ptr noundef nonnull align 8 dereferenceable(32) %104, i32 noundef 3)
          to label %912 unwind label %932

912:                                              ; preds = %901
  %913 = load ptr, ptr %48, align 8, !tbaa !5
  %914 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %913, i32 0, i32 52
  %915 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %914, ptr noundef nonnull align 8 dereferenceable(8) %102) #9
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %102) #9
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %104) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %105) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %104) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #9
  br label %937

916:                                              ; preds = %845
  %917 = landingpad { ptr, i32 }
          cleanup
  %918 = extractvalue { ptr, i32 } %917, 0
  store ptr %918, ptr %21, align 8
  %919 = extractvalue { ptr, i32 } %917, 1
  store i32 %919, ptr %22, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %91) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %92) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %91) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #9
  br label %1173

920:                                              ; preds = %864
  %921 = landingpad { ptr, i32 }
          cleanup
  %922 = extractvalue { ptr, i32 } %921, 0
  store ptr %922, ptr %21, align 8
  %923 = extractvalue { ptr, i32 } %921, 1
  store i32 %923, ptr %22, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %95) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %96) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %95) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #9
  br label %1173

924:                                              ; preds = %875
  %925 = landingpad { ptr, i32 }
          cleanup
  %926 = extractvalue { ptr, i32 } %925, 0
  store ptr %926, ptr %21, align 8
  %927 = extractvalue { ptr, i32 } %925, 1
  store i32 %927, ptr %22, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %99) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %100) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %99) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #9
  br label %1173

928:                                              ; preds = %895
  %929 = landingpad { ptr, i32 }
          cleanup
  %930 = extractvalue { ptr, i32 } %929, 0
  store ptr %930, ptr %21, align 8
  %931 = extractvalue { ptr, i32 } %929, 1
  store i32 %931, ptr %22, align 4
  br label %936

932:                                              ; preds = %901
  %933 = landingpad { ptr, i32 }
          cleanup
  %934 = extractvalue { ptr, i32 } %933, 0
  store ptr %934, ptr %21, align 8
  %935 = extractvalue { ptr, i32 } %933, 1
  store i32 %935, ptr %22, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %104) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %105) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %104) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #9
  br label %936

936:                                              ; preds = %932, %928
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #9
  br label %1173

937:                                              ; preds = %912, %889
  %938 = load ptr, ptr %48, align 8, !tbaa !5
  %939 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %938, i32 0, i32 41
  %940 = load i32, ptr %24, align 4, !tbaa !11
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %939, i32 noundef %940)
          to label %941 unwind label %543

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

942:                                              ; preds = %967, %941
  %943 = load i32, ptr %106, align 4, !tbaa !11
  %944 = load i32, ptr %24, align 4, !tbaa !11
  %945 = icmp slt i32 %943, %944
  br i1 %945, label %947, label %946

946:                                              ; preds = %942
  store i32 28, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %106) #9
  br label %979

947:                                              ; preds = %942
  call void @llvm.lifetime.start.p0(i64 8, ptr %107) #9
  %948 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %108, ptr align 4 @_ZN3JPHL30cColorSolveVelocityConstraintsE, i64 4, i1 false), !tbaa.struct !73
  call void @llvm.lifetime.start.p0(i64 32, ptr %109) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %110) #9
  %949 = getelementptr inbounds %class.anon.32, ptr %110, i32 0, i32 0
  store ptr %20, ptr %949, align 8, !tbaa !5
  %950 = getelementptr inbounds %class.anon.32, ptr %110, i32 0, i32 1
  %951 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %951, ptr %950, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_12vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %109, ptr noundef nonnull align 8 dereferenceable(16) %110) #9
  %952 = load i32, ptr %36, align 4, !tbaa !11
  %953 = add nsw i32 %952, 2
  %954 = getelementptr inbounds %"class.JPH::Color", ptr %108, i32 0, i32 0
  %955 = getelementptr inbounds %union.anon, ptr %954, i32 0, i32 0
  %956 = load i32, ptr %955, align 4
  %957 = load ptr, ptr %948, align 8, !tbaa !43
  %958 = getelementptr inbounds ptr, ptr %957, i64 3
  %959 = load ptr, ptr %958, align 8
  invoke void %959(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %107, ptr noundef nonnull align 8 dereferenceable(8) %948, ptr noundef @.str.44, i32 %956, ptr noundef nonnull align 8 dereferenceable(32) %109, i32 noundef %953)
          to label %960 unwind label %970

960:                                              ; preds = %947
  %961 = load ptr, ptr %48, align 8, !tbaa !5
  %962 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %961, i32 0, i32 41
  %963 = load i32, ptr %106, align 4, !tbaa !11
  %964 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %962, i32 noundef %963)
          to label %965 unwind label %974

965:                                              ; preds = %960
  %966 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %964, ptr noundef nonnull align 8 dereferenceable(8) %107) #9
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %107) #9
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %109) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %110) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %109) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #9
  br label %967

967:                                              ; preds = %965
  %968 = load i32, ptr %106, align 4, !tbaa !11
  %969 = add nsw i32 %968, 1
  store i32 %969, ptr %106, align 4, !tbaa !11
  br label %942, !llvm.loop !91

970:                                              ; preds = %947
  %971 = landingpad { ptr, i32 }
          cleanup
  %972 = extractvalue { ptr, i32 } %971, 0
  store ptr %972, ptr %21, align 8
  %973 = extractvalue { ptr, i32 } %971, 1
  store i32 %973, ptr %22, align 4
  br label %978

974:                                              ; preds = %960
  %975 = landingpad { ptr, i32 }
          cleanup
  %976 = extractvalue { ptr, i32 } %975, 0
  store ptr %976, ptr %21, align 8
  %977 = extractvalue { ptr, i32 } %975, 1
  store i32 %977, ptr %22, align 4
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %107) #9
  br label %978

978:                                              ; preds = %974, %970
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %109) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %110) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %109) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %106) #9
  br label %1173

979:                                              ; preds = %946
  %980 = load ptr, ptr %48, align 8, !tbaa !5
  %981 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %980, i32 0, i32 37
  invoke void @_ZN3JPH9JobSystem9JobHandle19sRemoveDependenciesILj32EEEvRNS_11StaticArrayIS1_XT_EEEi(ptr noundef nonnull align 8 dereferenceable(264) %981, i32 noundef 1)
          to label %982 unwind label %543

982:                                              ; preds = %979
  %983 = load ptr, ptr %48, align 8, !tbaa !5
  %984 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %983, i32 0, i32 35
  invoke void @_ZN3JPH9JobSystem9JobHandle19sRemoveDependenciesILj32EEEvRNS_11StaticArrayIS1_XT_EEEi(ptr noundef nonnull align 8 dereferenceable(264) %984, i32 noundef 1)
          to label %985 unwind label %543

985:                                              ; preds = %982
  %986 = load ptr, ptr %48, align 8, !tbaa !5
  %987 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %986, i32 0, i32 39
  invoke void @_ZNK3JPH9JobSystem9JobHandle16RemoveDependencyEi(ptr noundef nonnull align 8 dereferenceable(8) %987, i32 noundef 1)
          to label %988 unwind label %543

988:                                              ; preds = %985
  call void @llvm.lifetime.start.p0(i64 8, ptr %111) #9
  %989 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %112, ptr align 4 @_ZN3JPHL26cColorPreIntegrateVelocityE, i64 4, i1 false), !tbaa.struct !73
  call void @llvm.lifetime.start.p0(i64 32, ptr %113) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %114) #9
  %990 = getelementptr inbounds %class.anon.33, ptr %114, i32 0, i32 0
  store ptr %20, ptr %990, align 8, !tbaa !5
  %991 = getelementptr inbounds %class.anon.33, ptr %114, i32 0, i32 1
  %992 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %992, ptr %991, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_13vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %113, ptr noundef nonnull align 8 dereferenceable(16) %114) #9
  %993 = load i32, ptr %24, align 4, !tbaa !11
  %994 = add nsw i32 2, %993
  %995 = getelementptr inbounds %"class.JPH::Color", ptr %112, i32 0, i32 0
  %996 = getelementptr inbounds %union.anon, ptr %995, i32 0, i32 0
  %997 = load i32, ptr %996, align 4
  %998 = load ptr, ptr %989, align 8, !tbaa !43
  %999 = getelementptr inbounds ptr, ptr %998, i64 3
  %1000 = load ptr, ptr %999, align 8
  invoke void %1000(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %111, ptr noundef nonnull align 8 dereferenceable(8) %989, ptr noundef @.str.45, i32 %997, ptr noundef nonnull align 8 dereferenceable(32) %113, i32 noundef %994)
          to label %1001 unwind label %1020

1001:                                             ; preds = %988
  %1002 = load ptr, ptr %48, align 8, !tbaa !5
  %1003 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1002, i32 0, i32 42
  %1004 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %1003, ptr noundef nonnull align 8 dereferenceable(8) %111) #9
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %111) #9
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %113) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %114) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %113) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #9
  %1005 = load ptr, ptr %48, align 8, !tbaa !5
  %1006 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1005, i32 0, i32 36
  invoke void @_ZNK3JPH9JobSystem9JobHandle16RemoveDependencyEi(ptr noundef nonnull align 8 dereferenceable(8) %1006, i32 noundef 1)
          to label %1007 unwind label %543

1007:                                             ; preds = %1001
  %1008 = load ptr, ptr %48, align 8, !tbaa !5
  %1009 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1008, i32 0, i32 41
  invoke void @_ZN3JPH9JobSystem9JobHandle19sRemoveDependenciesILj32EEEvRNS_11StaticArrayIS1_XT_EEEi(ptr noundef nonnull align 8 dereferenceable(264) %1009, i32 noundef 1)
          to label %1010 unwind label %543

1010:                                             ; preds = %1007
  %1011 = load ptr, ptr %48, align 8, !tbaa !5
  %1012 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1011, i32 0, i32 43
  %1013 = load i32, ptr %42, align 4, !tbaa !11
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %1012, i32 noundef %1013)
          to label %1014 unwind label %543

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

1015:                                             ; preds = %1042, %1014
  %1016 = load i32, ptr %115, align 4, !tbaa !11
  %1017 = load i32, ptr %42, align 4, !tbaa !11
  %1018 = icmp slt i32 %1016, %1017
  br i1 %1018, label %1024, label %1019

1019:                                             ; preds = %1015
  store i32 31, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %115) #9
  br label %1054

1020:                                             ; preds = %988
  %1021 = landingpad { ptr, i32 }
          cleanup
  %1022 = extractvalue { ptr, i32 } %1021, 0
  store ptr %1022, ptr %21, align 8
  %1023 = extractvalue { ptr, i32 } %1021, 1
  store i32 %1023, ptr %22, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %113) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %114) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %113) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #9
  br label %1173

1024:                                             ; preds = %1015
  call void @llvm.lifetime.start.p0(i64 8, ptr %116) #9
  %1025 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %117, ptr align 4 @_ZN3JPHL23cColorIntegrateVelocityE, i64 4, i1 false), !tbaa.struct !73
  call void @llvm.lifetime.start.p0(i64 32, ptr %118) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %119) #9
  %1026 = getelementptr inbounds %class.anon.34, ptr %119, i32 0, i32 0
  store ptr %20, ptr %1026, align 8, !tbaa !5
  %1027 = getelementptr inbounds %class.anon.34, ptr %119, i32 0, i32 1
  %1028 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %1028, ptr %1027, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_14vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %118, ptr noundef nonnull align 8 dereferenceable(16) %119) #9
  %1029 = getelementptr inbounds %"class.JPH::Color", ptr %117, i32 0, i32 0
  %1030 = getelementptr inbounds %union.anon, ptr %1029, i32 0, i32 0
  %1031 = load i32, ptr %1030, align 4
  %1032 = load ptr, ptr %1025, align 8, !tbaa !43
  %1033 = getelementptr inbounds ptr, ptr %1032, i64 3
  %1034 = load ptr, ptr %1033, align 8
  invoke void %1034(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %116, ptr noundef nonnull align 8 dereferenceable(8) %1025, ptr noundef @.str.46, i32 %1031, ptr noundef nonnull align 8 dereferenceable(32) %118, i32 noundef 2)
          to label %1035 unwind label %1045

1035:                                             ; preds = %1024
  %1036 = load ptr, ptr %48, align 8, !tbaa !5
  %1037 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1036, i32 0, i32 43
  %1038 = load i32, ptr %115, align 4, !tbaa !11
  %1039 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %1037, i32 noundef %1038)
          to label %1040 unwind label %1049

1040:                                             ; preds = %1035
  %1041 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %1039, ptr noundef nonnull align 8 dereferenceable(8) %116) #9
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %116) #9
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %118) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %119) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %118) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #9
  br label %1042

1042:                                             ; preds = %1040
  %1043 = load i32, ptr %115, align 4, !tbaa !11
  %1044 = add nsw i32 %1043, 1
  store i32 %1044, ptr %115, align 4, !tbaa !11
  br label %1015, !llvm.loop !92

1045:                                             ; preds = %1024
  %1046 = landingpad { ptr, i32 }
          cleanup
  %1047 = extractvalue { ptr, i32 } %1046, 0
  store ptr %1047, ptr %21, align 8
  %1048 = extractvalue { ptr, i32 } %1046, 1
  store i32 %1048, ptr %22, align 4
  br label %1053

1049:                                             ; preds = %1035
  %1050 = landingpad { ptr, i32 }
          cleanup
  %1051 = extractvalue { ptr, i32 } %1050, 0
  store ptr %1051, ptr %21, align 8
  %1052 = extractvalue { ptr, i32 } %1050, 1
  store i32 %1052, ptr %22, align 4
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %116) #9
  br label %1053

1053:                                             ; preds = %1049, %1045
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %118) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %119) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %118) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %115) #9
  br label %1173

1054:                                             ; preds = %1019
  %1055 = load ptr, ptr %48, align 8, !tbaa !5
  %1056 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1055, i32 0, i32 42
  invoke void @_ZNK3JPH9JobSystem9JobHandle16RemoveDependencyEi(ptr noundef nonnull align 8 dereferenceable(8) %1056, i32 noundef 1)
          to label %1057 unwind label %543

1057:                                             ; preds = %1054
  call void @llvm.lifetime.start.p0(i64 8, ptr %120) #9
  %1058 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %121, ptr align 4 @_ZN3JPHL27cColorPostIntegrateVelocityE, i64 4, i1 false), !tbaa.struct !73
  call void @llvm.lifetime.start.p0(i64 32, ptr %122) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %123) #9
  %1059 = getelementptr inbounds %class.anon.35, ptr %123, i32 0, i32 0
  store ptr %20, ptr %1059, align 8, !tbaa !5
  %1060 = getelementptr inbounds %class.anon.35, ptr %123, i32 0, i32 1
  %1061 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %1061, ptr %1060, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_15vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %122, ptr noundef nonnull align 8 dereferenceable(16) %123) #9
  %1062 = load i32, ptr %42, align 4, !tbaa !11
  %1063 = add nsw i32 %1062, 1
  %1064 = getelementptr inbounds %"class.JPH::Color", ptr %121, i32 0, i32 0
  %1065 = getelementptr inbounds %union.anon, ptr %1064, i32 0, i32 0
  %1066 = load i32, ptr %1065, align 4
  %1067 = load ptr, ptr %1058, align 8, !tbaa !43
  %1068 = getelementptr inbounds ptr, ptr %1067, i64 3
  %1069 = load ptr, ptr %1068, align 8
  invoke void %1069(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %120, ptr noundef nonnull align 8 dereferenceable(8) %1058, ptr noundef @.str.47, i32 %1066, ptr noundef nonnull align 8 dereferenceable(32) %122, i32 noundef %1063)
          to label %1070 unwind label %1103

1070:                                             ; preds = %1057
  %1071 = load ptr, ptr %48, align 8, !tbaa !5
  %1072 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1071, i32 0, i32 44
  %1073 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %1072, ptr noundef nonnull align 8 dereferenceable(8) %120) #9
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %120) #9
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %122) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %123) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %122) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #9
  %1074 = load ptr, ptr %48, align 8, !tbaa !5
  %1075 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1074, i32 0, i32 43
  invoke void @_ZN3JPH9JobSystem9JobHandle19sRemoveDependenciesILj32EEEvRNS_11StaticArrayIS1_XT_EEEi(ptr noundef nonnull align 8 dereferenceable(264) %1075, i32 noundef 1)
          to label %1076 unwind label %543

1076:                                             ; preds = %1070
  call void @llvm.lifetime.start.p0(i64 8, ptr %124) #9
  %1077 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %125, ptr align 4 @_ZN3JPHL24cColorResolveCCDContactsE, i64 4, i1 false), !tbaa.struct !73
  call void @llvm.lifetime.start.p0(i64 32, ptr %126) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %127) #9
  %1078 = getelementptr inbounds %class.anon.36, ptr %127, i32 0, i32 0
  store ptr %20, ptr %1078, align 8, !tbaa !5
  %1079 = getelementptr inbounds %class.anon.36, ptr %127, i32 0, i32 1
  %1080 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %1080, ptr %1079, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_16vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %126, ptr noundef nonnull align 8 dereferenceable(16) %127) #9
  %1081 = getelementptr inbounds %"class.JPH::Color", ptr %125, i32 0, i32 0
  %1082 = getelementptr inbounds %union.anon, ptr %1081, i32 0, i32 0
  %1083 = load i32, ptr %1082, align 4
  %1084 = load ptr, ptr %1077, align 8, !tbaa !43
  %1085 = getelementptr inbounds ptr, ptr %1084, i64 3
  %1086 = load ptr, ptr %1085, align 8
  invoke void %1086(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %124, ptr noundef nonnull align 8 dereferenceable(8) %1077, ptr noundef @.str.48, i32 %1083, ptr noundef nonnull align 8 dereferenceable(32) %126, i32 noundef 2)
          to label %1087 unwind label %1107

1087:                                             ; preds = %1076
  %1088 = load ptr, ptr %48, align 8, !tbaa !5
  %1089 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1088, i32 0, i32 45
  %1090 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %1089, ptr noundef nonnull align 8 dereferenceable(8) %124) #9
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %124) #9
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %126) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %127) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %126) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %124) #9
  %1091 = load ptr, ptr %48, align 8, !tbaa !5
  %1092 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1091, i32 0, i32 44
  invoke void @_ZNK3JPH9JobSystem9JobHandle16RemoveDependencyEi(ptr noundef nonnull align 8 dereferenceable(8) %1092, i32 noundef 1)
          to label %1093 unwind label %543

1093:                                             ; preds = %1087
  %1094 = load ptr, ptr %48, align 8, !tbaa !5
  %1095 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1094, i32 0, i32 46
  %1096 = load i32, ptr %24, align 4, !tbaa !11
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %1095, i32 noundef %1096)
          to label %1097 unwind label %543

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

1098:                                             ; preds = %1129, %1097
  %1099 = load i32, ptr %128, align 4, !tbaa !11
  %1100 = load i32, ptr %24, align 4, !tbaa !11
  %1101 = icmp slt i32 %1099, %1100
  br i1 %1101, label %1111, label %1102

1102:                                             ; preds = %1098
  store i32 34, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %128) #9
  br label %1141

1103:                                             ; preds = %1057
  %1104 = landingpad { ptr, i32 }
          cleanup
  %1105 = extractvalue { ptr, i32 } %1104, 0
  store ptr %1105, ptr %21, align 8
  %1106 = extractvalue { ptr, i32 } %1104, 1
  store i32 %1106, ptr %22, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %122) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %123) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %122) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #9
  br label %1173

1107:                                             ; preds = %1076
  %1108 = landingpad { ptr, i32 }
          cleanup
  %1109 = extractvalue { ptr, i32 } %1108, 0
  store ptr %1109, ptr %21, align 8
  %1110 = extractvalue { ptr, i32 } %1108, 1
  store i32 %1110, ptr %22, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %126) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %127) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %126) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %124) #9
  br label %1173

1111:                                             ; preds = %1098
  call void @llvm.lifetime.start.p0(i64 8, ptr %129) #9
  %1112 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %130, ptr align 4 @_ZN3JPHL30cColorSolvePositionConstraintsE, i64 4, i1 false), !tbaa.struct !73
  call void @llvm.lifetime.start.p0(i64 32, ptr %131) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %132) #9
  %1113 = getelementptr inbounds %class.anon.37, ptr %132, i32 0, i32 0
  store ptr %20, ptr %1113, align 8, !tbaa !5
  %1114 = getelementptr inbounds %class.anon.37, ptr %132, i32 0, i32 1
  %1115 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %1115, ptr %1114, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_17vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %131, ptr noundef nonnull align 8 dereferenceable(16) %132) #9
  %1116 = getelementptr inbounds %"class.JPH::Color", ptr %130, i32 0, i32 0
  %1117 = getelementptr inbounds %union.anon, ptr %1116, i32 0, i32 0
  %1118 = load i32, ptr %1117, align 4
  %1119 = load ptr, ptr %1112, align 8, !tbaa !43
  %1120 = getelementptr inbounds ptr, ptr %1119, i64 3
  %1121 = load ptr, ptr %1120, align 8
  invoke void %1121(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %129, ptr noundef nonnull align 8 dereferenceable(8) %1112, ptr noundef @.str.49, i32 %1118, ptr noundef nonnull align 8 dereferenceable(32) %131, i32 noundef 3)
          to label %1122 unwind label %1132

1122:                                             ; preds = %1111
  %1123 = load ptr, ptr %48, align 8, !tbaa !5
  %1124 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1123, i32 0, i32 46
  %1125 = load i32, ptr %128, align 4, !tbaa !11
  %1126 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %1124, i32 noundef %1125)
          to label %1127 unwind label %1136

1127:                                             ; preds = %1122
  %1128 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %1126, ptr noundef nonnull align 8 dereferenceable(8) %129) #9
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %129) #9
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %131) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %132) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %131) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #9
  br label %1129

1129:                                             ; preds = %1127
  %1130 = load i32, ptr %128, align 4, !tbaa !11
  %1131 = add nsw i32 %1130, 1
  store i32 %1131, ptr %128, align 4, !tbaa !11
  br label %1098, !llvm.loop !93

1132:                                             ; preds = %1111
  %1133 = landingpad { ptr, i32 }
          cleanup
  %1134 = extractvalue { ptr, i32 } %1133, 0
  store ptr %1134, ptr %21, align 8
  %1135 = extractvalue { ptr, i32 } %1133, 1
  store i32 %1135, ptr %22, align 4
  br label %1140

1136:                                             ; preds = %1122
  %1137 = landingpad { ptr, i32 }
          cleanup
  %1138 = extractvalue { ptr, i32 } %1137, 0
  store ptr %1138, ptr %21, align 8
  %1139 = extractvalue { ptr, i32 } %1137, 1
  store i32 %1139, ptr %22, align 4
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %129) #9
  br label %1140

1140:                                             ; preds = %1136, %1132
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %131) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %132) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %131) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %128) #9
  br label %1173

1141:                                             ; preds = %1102
  %1142 = load ptr, ptr %48, align 8, !tbaa !5
  %1143 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1142, i32 0, i32 45
  invoke void @_ZNK3JPH9JobSystem9JobHandle16RemoveDependencyEi(ptr noundef nonnull align 8 dereferenceable(8) %1143, i32 noundef 1)
          to label %1144 unwind label %543

1144:                                             ; preds = %1141
  %1145 = load ptr, ptr %48, align 8, !tbaa !5
  %1146 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1145, i32 0, i32 40
  invoke void @_ZNK3JPH9JobSystem9JobHandle16RemoveDependencyEi(ptr noundef nonnull align 8 dereferenceable(8) %1146, i32 noundef 1)
          to label %1147 unwind label %543

1147:                                             ; preds = %1144
  call void @llvm.lifetime.start.p0(i64 8, ptr %133) #9
  %1148 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %134, ptr align 4 @_ZN3JPHL21cColorSoftBodyPrepareE, i64 4, i1 false), !tbaa.struct !73
  call void @llvm.lifetime.start.p0(i64 32, ptr %135) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %136) #9
  %1149 = getelementptr inbounds %class.anon.38, ptr %136, i32 0, i32 0
  store ptr %20, ptr %1149, align 8, !tbaa !5
  %1150 = getelementptr inbounds %class.anon.38, ptr %136, i32 0, i32 1
  %1151 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %1151, ptr %1150, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_18vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %135, ptr noundef nonnull align 8 dereferenceable(16) %136) #9
  %1152 = load i32, ptr %24, align 4, !tbaa !11
  %1153 = getelementptr inbounds %"class.JPH::Color", ptr %134, i32 0, i32 0
  %1154 = getelementptr inbounds %union.anon, ptr %1153, i32 0, i32 0
  %1155 = load i32, ptr %1154, align 4
  %1156 = load ptr, ptr %1148, align 8, !tbaa !43
  %1157 = getelementptr inbounds ptr, ptr %1156, i64 3
  %1158 = load ptr, ptr %1157, align 8
  invoke void %1158(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %133, ptr noundef nonnull align 8 dereferenceable(8) %1148, ptr noundef @.str.50, i32 %1155, ptr noundef nonnull align 8 dereferenceable(32) %135, i32 noundef %1152)
          to label %1159 unwind label %1169

1159:                                             ; preds = %1147
  %1160 = load ptr, ptr %48, align 8, !tbaa !5
  %1161 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1160, i32 0, i32 48
  %1162 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %1161, ptr noundef nonnull align 8 dereferenceable(8) %133) #9
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %133) #9
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %135) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %136) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %135) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %133) #9
  %1163 = load ptr, ptr %48, align 8, !tbaa !5
  %1164 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1163, i32 0, i32 46
  invoke void @_ZN3JPH9JobSystem9JobHandle19sRemoveDependenciesILj32EEEvRNS_11StaticArrayIS1_XT_EEEi(ptr noundef nonnull align 8 dereferenceable(264) %1164, i32 noundef 1)
          to label %1165 unwind label %543

1165:                                             ; preds = %1159
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %47) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #9
  br label %1166

1166:                                             ; preds = %1165
  %1167 = load i32, ptr %45, align 4, !tbaa !11
  %1168 = add nsw i32 %1167, 1
  store i32 %1168, ptr %45, align 4, !tbaa !11
  br label %400, !llvm.loop !94

1169:                                             ; preds = %1147
  %1170 = landingpad { ptr, i32 }
          cleanup
  %1171 = extractvalue { ptr, i32 } %1170, 0
  store ptr %1171, ptr %21, align 8
  %1172 = extractvalue { ptr, i32 } %1170, 1
  store i32 %1172, ptr %22, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %135) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %136) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %135) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %133) #9
  br label %1173

1173:                                             ; preds = %1169, %1140, %1107, %1103, %1053, %1020, %978, %936, %924, %920, %916, %832, %791, %750, %723, %681, %587, %543, %539
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #9
  br label %1174

1174:                                             ; preds = %1173, %535, %531
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %47) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #9
  br label %1648

1175:                                             ; preds = %404
  call void @llvm.lifetime.start.p0(i64 8, ptr %137) #9
  %1176 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 3
  %1177 = load ptr, ptr %1176, align 8, !tbaa !54
  store ptr %1177, ptr %137, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16392, ptr %138) #9
  call void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EEC2Ev(ptr noundef nonnull align 8 dereferenceable(16392) %138) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %139) #9
  %1178 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 11
  store ptr %1178, ptr %139, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %140) #9
  %1179 = load ptr, ptr %139, align 8, !tbaa !5
  %1180 = invoke noundef ptr @_ZN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(32) %1179)
          to label %1181 unwind label %1190

1181:                                             ; preds = %1175
  store ptr %1180, ptr %140, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %141) #9
  %1182 = load ptr, ptr %139, align 8, !tbaa !5
  %1183 = invoke noundef ptr @_ZN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(32) %1182)
          to label %1184 unwind label %1194

1184:                                             ; preds = %1181
  store ptr %1183, ptr %141, align 8, !tbaa !5
  br label %1185

1185:                                             ; preds = %1541, %1184
  %1186 = load ptr, ptr %140, align 8, !tbaa !5
  %1187 = load ptr, ptr %141, align 8, !tbaa !5
  %1188 = icmp ne ptr %1186, %1187
  br i1 %1188, label %1198, label %1189

1189:                                             ; preds = %1185
  store i32 37, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %141) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %140) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %139) #9
  br label %1547

1190:                                             ; preds = %1175
  %1191 = landingpad { ptr, i32 }
          cleanup
  %1192 = extractvalue { ptr, i32 } %1191, 0
  store ptr %1192, ptr %21, align 8
  %1193 = extractvalue { ptr, i32 } %1191, 1
  store i32 %1193, ptr %22, align 4
  br label %1546

1194:                                             ; preds = %1181
  %1195 = landingpad { ptr, i32 }
          cleanup
  %1196 = extractvalue { ptr, i32 } %1195, 0
  store ptr %1196, ptr %21, align 8
  %1197 = extractvalue { ptr, i32 } %1195, 1
  store i32 %1197, ptr %22, align 4
  br label %1545

1198:                                             ; preds = %1185
  call void @llvm.lifetime.start.p0(i64 8, ptr %142) #9
  %1199 = load ptr, ptr %140, align 8, !tbaa !5
  store ptr %1199, ptr %142, align 8, !tbaa !5
  %1200 = load ptr, ptr %142, align 8, !tbaa !5
  %1201 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1200, i32 0, i32 31
  %1202 = invoke noundef zeroext i1 @_ZNK3JPH9JobSystem9JobHandle7IsValidEv(ptr noundef nonnull align 8 dereferenceable(8) %1201)
          to label %1203 unwind label %1208

1203:                                             ; preds = %1198
  br i1 %1202, label %1204, label %1212

1204:                                             ; preds = %1203
  %1205 = load ptr, ptr %142, align 8, !tbaa !5
  %1206 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1205, i32 0, i32 31
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %138, ptr noundef nonnull align 8 dereferenceable(8) %1206)
          to label %1207 unwind label %1208

1207:                                             ; preds = %1204
  br label %1212

1208:                                             ; preds = %1536, %1531, %1527, %1522, %1519, %1481, %1478, %1440, %1402, %1399, %1396, %1357, %1352, %1204, %1198
  %1209 = landingpad { ptr, i32 }
          cleanup
  %1210 = extractvalue { ptr, i32 } %1209, 0
  store ptr %1210, ptr %21, align 8
  %1211 = extractvalue { ptr, i32 } %1209, 1
  store i32 %1211, ptr %22, align 4
  br label %1544

1212:                                             ; preds = %1207, %1203
  call void @llvm.lifetime.start.p0(i64 8, ptr %143) #9
  %1213 = load ptr, ptr %142, align 8, !tbaa !5
  %1214 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1213, i32 0, i32 32
  store ptr %1214, ptr %143, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %144) #9
  %1215 = load ptr, ptr %143, align 8, !tbaa !5
  %1216 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %1215)
          to label %1217 unwind label %1226

1217:                                             ; preds = %1212
  store ptr %1216, ptr %144, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %145) #9
  %1218 = load ptr, ptr %143, align 8, !tbaa !5
  %1219 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %1218)
          to label %1220 unwind label %1230

1220:                                             ; preds = %1217
  store ptr %1219, ptr %145, align 8, !tbaa !5
  br label %1221

1221:                                             ; preds = %1238, %1220
  %1222 = load ptr, ptr %144, align 8, !tbaa !5
  %1223 = load ptr, ptr %145, align 8, !tbaa !5
  %1224 = icmp ne ptr %1222, %1223
  br i1 %1224, label %1234, label %1225

1225:                                             ; preds = %1221
  store i32 39, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %145) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %144) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %143) #9
  br label %1247

1226:                                             ; preds = %1212
  %1227 = landingpad { ptr, i32 }
          cleanup
  %1228 = extractvalue { ptr, i32 } %1227, 0
  store ptr %1228, ptr %21, align 8
  %1229 = extractvalue { ptr, i32 } %1227, 1
  store i32 %1229, ptr %22, align 4
  br label %1246

1230:                                             ; preds = %1217
  %1231 = landingpad { ptr, i32 }
          cleanup
  %1232 = extractvalue { ptr, i32 } %1231, 0
  store ptr %1232, ptr %21, align 8
  %1233 = extractvalue { ptr, i32 } %1231, 1
  store i32 %1233, ptr %22, align 4
  br label %1245

1234:                                             ; preds = %1221
  call void @llvm.lifetime.start.p0(i64 8, ptr %146) #9
  %1235 = load ptr, ptr %144, align 8, !tbaa !5
  store ptr %1235, ptr %146, align 8, !tbaa !5
  %1236 = load ptr, ptr %146, align 8, !tbaa !5
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %138, ptr noundef nonnull align 8 dereferenceable(8) %1236)
          to label %1237 unwind label %1241

1237:                                             ; preds = %1234
  call void @llvm.lifetime.end.p0(i64 8, ptr %146) #9
  br label %1238

1238:                                             ; preds = %1237
  %1239 = load ptr, ptr %144, align 8, !tbaa !5
  %1240 = getelementptr inbounds %"class.JPH::JobSystem::JobHandle", ptr %1239, i32 1
  store ptr %1240, ptr %144, align 8, !tbaa !5
  br label %1221

1241:                                             ; preds = %1234
  %1242 = landingpad { ptr, i32 }
          cleanup
  %1243 = extractvalue { ptr, i32 } %1242, 0
  store ptr %1243, ptr %21, align 8
  %1244 = extractvalue { ptr, i32 } %1242, 1
  store i32 %1244, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %146) #9
  br label %1245

1245:                                             ; preds = %1241, %1230
  call void @llvm.lifetime.end.p0(i64 8, ptr %145) #9
  br label %1246

1246:                                             ; preds = %1245, %1226
  call void @llvm.lifetime.end.p0(i64 8, ptr %144) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %143) #9
  br label %1544

1247:                                             ; preds = %1225
  call void @llvm.lifetime.start.p0(i64 8, ptr %147) #9
  %1248 = load ptr, ptr %142, align 8, !tbaa !5
  %1249 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1248, i32 0, i32 33
  store ptr %1249, ptr %147, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %148) #9
  %1250 = load ptr, ptr %147, align 8, !tbaa !5
  %1251 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %1250)
          to label %1252 unwind label %1261

1252:                                             ; preds = %1247
  store ptr %1251, ptr %148, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %149) #9
  %1253 = load ptr, ptr %147, align 8, !tbaa !5
  %1254 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %1253)
          to label %1255 unwind label %1265

1255:                                             ; preds = %1252
  store ptr %1254, ptr %149, align 8, !tbaa !5
  br label %1256

1256:                                             ; preds = %1273, %1255
  %1257 = load ptr, ptr %148, align 8, !tbaa !5
  %1258 = load ptr, ptr %149, align 8, !tbaa !5
  %1259 = icmp ne ptr %1257, %1258
  br i1 %1259, label %1269, label %1260

1260:                                             ; preds = %1256
  store i32 41, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %149) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %148) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %147) #9
  br label %1282

1261:                                             ; preds = %1247
  %1262 = landingpad { ptr, i32 }
          cleanup
  %1263 = extractvalue { ptr, i32 } %1262, 0
  store ptr %1263, ptr %21, align 8
  %1264 = extractvalue { ptr, i32 } %1262, 1
  store i32 %1264, ptr %22, align 4
  br label %1281

1265:                                             ; preds = %1252
  %1266 = landingpad { ptr, i32 }
          cleanup
  %1267 = extractvalue { ptr, i32 } %1266, 0
  store ptr %1267, ptr %21, align 8
  %1268 = extractvalue { ptr, i32 } %1266, 1
  store i32 %1268, ptr %22, align 4
  br label %1280

1269:                                             ; preds = %1256
  call void @llvm.lifetime.start.p0(i64 8, ptr %150) #9
  %1270 = load ptr, ptr %148, align 8, !tbaa !5
  store ptr %1270, ptr %150, align 8, !tbaa !5
  %1271 = load ptr, ptr %150, align 8, !tbaa !5
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %138, ptr noundef nonnull align 8 dereferenceable(8) %1271)
          to label %1272 unwind label %1276

1272:                                             ; preds = %1269
  call void @llvm.lifetime.end.p0(i64 8, ptr %150) #9
  br label %1273

1273:                                             ; preds = %1272
  %1274 = load ptr, ptr %148, align 8, !tbaa !5
  %1275 = getelementptr inbounds %"class.JPH::JobSystem::JobHandle", ptr %1274, i32 1
  store ptr %1275, ptr %148, align 8, !tbaa !5
  br label %1256

1276:                                             ; preds = %1269
  %1277 = landingpad { ptr, i32 }
          cleanup
  %1278 = extractvalue { ptr, i32 } %1277, 0
  store ptr %1278, ptr %21, align 8
  %1279 = extractvalue { ptr, i32 } %1277, 1
  store i32 %1279, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %150) #9
  br label %1280

1280:                                             ; preds = %1276, %1265
  call void @llvm.lifetime.end.p0(i64 8, ptr %149) #9
  br label %1281

1281:                                             ; preds = %1280, %1261
  call void @llvm.lifetime.end.p0(i64 8, ptr %148) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %147) #9
  br label %1544

1282:                                             ; preds = %1260
  call void @llvm.lifetime.start.p0(i64 8, ptr %151) #9
  %1283 = load ptr, ptr %142, align 8, !tbaa !5
  %1284 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1283, i32 0, i32 34
  store ptr %1284, ptr %151, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %152) #9
  %1285 = load ptr, ptr %151, align 8, !tbaa !5
  %1286 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %1285)
          to label %1287 unwind label %1296

1287:                                             ; preds = %1282
  store ptr %1286, ptr %152, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %153) #9
  %1288 = load ptr, ptr %151, align 8, !tbaa !5
  %1289 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %1288)
          to label %1290 unwind label %1300

1290:                                             ; preds = %1287
  store ptr %1289, ptr %153, align 8, !tbaa !5
  br label %1291

1291:                                             ; preds = %1308, %1290
  %1292 = load ptr, ptr %152, align 8, !tbaa !5
  %1293 = load ptr, ptr %153, align 8, !tbaa !5
  %1294 = icmp ne ptr %1292, %1293
  br i1 %1294, label %1304, label %1295

1295:                                             ; preds = %1291
  store i32 43, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %153) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %152) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %151) #9
  br label %1317

1296:                                             ; preds = %1282
  %1297 = landingpad { ptr, i32 }
          cleanup
  %1298 = extractvalue { ptr, i32 } %1297, 0
  store ptr %1298, ptr %21, align 8
  %1299 = extractvalue { ptr, i32 } %1297, 1
  store i32 %1299, ptr %22, align 4
  br label %1316

1300:                                             ; preds = %1287
  %1301 = landingpad { ptr, i32 }
          cleanup
  %1302 = extractvalue { ptr, i32 } %1301, 0
  store ptr %1302, ptr %21, align 8
  %1303 = extractvalue { ptr, i32 } %1301, 1
  store i32 %1303, ptr %22, align 4
  br label %1315

1304:                                             ; preds = %1291
  call void @llvm.lifetime.start.p0(i64 8, ptr %154) #9
  %1305 = load ptr, ptr %152, align 8, !tbaa !5
  store ptr %1305, ptr %154, align 8, !tbaa !5
  %1306 = load ptr, ptr %154, align 8, !tbaa !5
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %138, ptr noundef nonnull align 8 dereferenceable(8) %1306)
          to label %1307 unwind label %1311

1307:                                             ; preds = %1304
  call void @llvm.lifetime.end.p0(i64 8, ptr %154) #9
  br label %1308

1308:                                             ; preds = %1307
  %1309 = load ptr, ptr %152, align 8, !tbaa !5
  %1310 = getelementptr inbounds %"class.JPH::JobSystem::JobHandle", ptr %1309, i32 1
  store ptr %1310, ptr %152, align 8, !tbaa !5
  br label %1291

1311:                                             ; preds = %1304
  %1312 = landingpad { ptr, i32 }
          cleanup
  %1313 = extractvalue { ptr, i32 } %1312, 0
  store ptr %1313, ptr %21, align 8
  %1314 = extractvalue { ptr, i32 } %1312, 1
  store i32 %1314, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %154) #9
  br label %1315

1315:                                             ; preds = %1311, %1300
  call void @llvm.lifetime.end.p0(i64 8, ptr %153) #9
  br label %1316

1316:                                             ; preds = %1315, %1296
  call void @llvm.lifetime.end.p0(i64 8, ptr %152) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %151) #9
  br label %1544

1317:                                             ; preds = %1295
  call void @llvm.lifetime.start.p0(i64 8, ptr %155) #9
  %1318 = load ptr, ptr %142, align 8, !tbaa !5
  %1319 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1318, i32 0, i32 35
  store ptr %1319, ptr %155, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %156) #9
  %1320 = load ptr, ptr %155, align 8, !tbaa !5
  %1321 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %1320)
          to label %1322 unwind label %1331

1322:                                             ; preds = %1317
  store ptr %1321, ptr %156, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %157) #9
  %1323 = load ptr, ptr %155, align 8, !tbaa !5
  %1324 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %1323)
          to label %1325 unwind label %1335

1325:                                             ; preds = %1322
  store ptr %1324, ptr %157, align 8, !tbaa !5
  br label %1326

1326:                                             ; preds = %1343, %1325
  %1327 = load ptr, ptr %156, align 8, !tbaa !5
  %1328 = load ptr, ptr %157, align 8, !tbaa !5
  %1329 = icmp ne ptr %1327, %1328
  br i1 %1329, label %1339, label %1330

1330:                                             ; preds = %1326
  store i32 45, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %157) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %156) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %155) #9
  br label %1352

1331:                                             ; preds = %1317
  %1332 = landingpad { ptr, i32 }
          cleanup
  %1333 = extractvalue { ptr, i32 } %1332, 0
  store ptr %1333, ptr %21, align 8
  %1334 = extractvalue { ptr, i32 } %1332, 1
  store i32 %1334, ptr %22, align 4
  br label %1351

1335:                                             ; preds = %1322
  %1336 = landingpad { ptr, i32 }
          cleanup
  %1337 = extractvalue { ptr, i32 } %1336, 0
  store ptr %1337, ptr %21, align 8
  %1338 = extractvalue { ptr, i32 } %1336, 1
  store i32 %1338, ptr %22, align 4
  br label %1350

1339:                                             ; preds = %1326
  call void @llvm.lifetime.start.p0(i64 8, ptr %158) #9
  %1340 = load ptr, ptr %156, align 8, !tbaa !5
  store ptr %1340, ptr %158, align 8, !tbaa !5
  %1341 = load ptr, ptr %158, align 8, !tbaa !5
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %138, ptr noundef nonnull align 8 dereferenceable(8) %1341)
          to label %1342 unwind label %1346

1342:                                             ; preds = %1339
  call void @llvm.lifetime.end.p0(i64 8, ptr %158) #9
  br label %1343

1343:                                             ; preds = %1342
  %1344 = load ptr, ptr %156, align 8, !tbaa !5
  %1345 = getelementptr inbounds %"class.JPH::JobSystem::JobHandle", ptr %1344, i32 1
  store ptr %1345, ptr %156, align 8, !tbaa !5
  br label %1326

1346:                                             ; preds = %1339
  %1347 = landingpad { ptr, i32 }
          cleanup
  %1348 = extractvalue { ptr, i32 } %1347, 0
  store ptr %1348, ptr %21, align 8
  %1349 = extractvalue { ptr, i32 } %1347, 1
  store i32 %1349, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %158) #9
  br label %1350

1350:                                             ; preds = %1346, %1335
  call void @llvm.lifetime.end.p0(i64 8, ptr %157) #9
  br label %1351

1351:                                             ; preds = %1350, %1331
  call void @llvm.lifetime.end.p0(i64 8, ptr %156) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %155) #9
  br label %1544

1352:                                             ; preds = %1330
  %1353 = load ptr, ptr %142, align 8, !tbaa !5
  %1354 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1353, i32 0, i32 36
  %1355 = invoke noundef zeroext i1 @_ZNK3JPH9JobSystem9JobHandle7IsValidEv(ptr noundef nonnull align 8 dereferenceable(8) %1354)
          to label %1356 unwind label %1208

1356:                                             ; preds = %1352
  br i1 %1355, label %1357, label %1361

1357:                                             ; preds = %1356
  %1358 = load ptr, ptr %142, align 8, !tbaa !5
  %1359 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1358, i32 0, i32 36
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %138, ptr noundef nonnull align 8 dereferenceable(8) %1359)
          to label %1360 unwind label %1208

1360:                                             ; preds = %1357
  br label %1361

1361:                                             ; preds = %1360, %1356
  call void @llvm.lifetime.start.p0(i64 8, ptr %159) #9
  %1362 = load ptr, ptr %142, align 8, !tbaa !5
  %1363 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1362, i32 0, i32 37
  store ptr %1363, ptr %159, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %160) #9
  %1364 = load ptr, ptr %159, align 8, !tbaa !5
  %1365 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %1364)
          to label %1366 unwind label %1375

1366:                                             ; preds = %1361
  store ptr %1365, ptr %160, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %161) #9
  %1367 = load ptr, ptr %159, align 8, !tbaa !5
  %1368 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %1367)
          to label %1369 unwind label %1379

1369:                                             ; preds = %1366
  store ptr %1368, ptr %161, align 8, !tbaa !5
  br label %1370

1370:                                             ; preds = %1387, %1369
  %1371 = load ptr, ptr %160, align 8, !tbaa !5
  %1372 = load ptr, ptr %161, align 8, !tbaa !5
  %1373 = icmp ne ptr %1371, %1372
  br i1 %1373, label %1383, label %1374

1374:                                             ; preds = %1370
  store i32 47, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %161) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %160) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %159) #9
  br label %1396

1375:                                             ; preds = %1361
  %1376 = landingpad { ptr, i32 }
          cleanup
  %1377 = extractvalue { ptr, i32 } %1376, 0
  store ptr %1377, ptr %21, align 8
  %1378 = extractvalue { ptr, i32 } %1376, 1
  store i32 %1378, ptr %22, align 4
  br label %1395

1379:                                             ; preds = %1366
  %1380 = landingpad { ptr, i32 }
          cleanup
  %1381 = extractvalue { ptr, i32 } %1380, 0
  store ptr %1381, ptr %21, align 8
  %1382 = extractvalue { ptr, i32 } %1380, 1
  store i32 %1382, ptr %22, align 4
  br label %1394

1383:                                             ; preds = %1370
  call void @llvm.lifetime.start.p0(i64 8, ptr %162) #9
  %1384 = load ptr, ptr %160, align 8, !tbaa !5
  store ptr %1384, ptr %162, align 8, !tbaa !5
  %1385 = load ptr, ptr %162, align 8, !tbaa !5
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %138, ptr noundef nonnull align 8 dereferenceable(8) %1385)
          to label %1386 unwind label %1390

1386:                                             ; preds = %1383
  call void @llvm.lifetime.end.p0(i64 8, ptr %162) #9
  br label %1387

1387:                                             ; preds = %1386
  %1388 = load ptr, ptr %160, align 8, !tbaa !5
  %1389 = getelementptr inbounds %"class.JPH::JobSystem::JobHandle", ptr %1388, i32 1
  store ptr %1389, ptr %160, align 8, !tbaa !5
  br label %1370

1390:                                             ; preds = %1383
  %1391 = landingpad { ptr, i32 }
          cleanup
  %1392 = extractvalue { ptr, i32 } %1391, 0
  store ptr %1392, ptr %21, align 8
  %1393 = extractvalue { ptr, i32 } %1391, 1
  store i32 %1393, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %162) #9
  br label %1394

1394:                                             ; preds = %1390, %1379
  call void @llvm.lifetime.end.p0(i64 8, ptr %161) #9
  br label %1395

1395:                                             ; preds = %1394, %1375
  call void @llvm.lifetime.end.p0(i64 8, ptr %160) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %159) #9
  br label %1544

1396:                                             ; preds = %1374
  %1397 = load ptr, ptr %142, align 8, !tbaa !5
  %1398 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1397, i32 0, i32 38
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %138, ptr noundef nonnull align 8 dereferenceable(8) %1398)
          to label %1399 unwind label %1208

1399:                                             ; preds = %1396
  %1400 = load ptr, ptr %142, align 8, !tbaa !5
  %1401 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1400, i32 0, i32 39
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %138, ptr noundef nonnull align 8 dereferenceable(8) %1401)
          to label %1402 unwind label %1208

1402:                                             ; preds = %1399
  %1403 = load ptr, ptr %142, align 8, !tbaa !5
  %1404 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1403, i32 0, i32 40
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %138, ptr noundef nonnull align 8 dereferenceable(8) %1404)
          to label %1405 unwind label %1208

1405:                                             ; preds = %1402
  call void @llvm.lifetime.start.p0(i64 8, ptr %163) #9
  %1406 = load ptr, ptr %142, align 8, !tbaa !5
  %1407 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1406, i32 0, i32 41
  store ptr %1407, ptr %163, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %164) #9
  %1408 = load ptr, ptr %163, align 8, !tbaa !5
  %1409 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %1408)
          to label %1410 unwind label %1419

1410:                                             ; preds = %1405
  store ptr %1409, ptr %164, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %165) #9
  %1411 = load ptr, ptr %163, align 8, !tbaa !5
  %1412 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %1411)
          to label %1413 unwind label %1423

1413:                                             ; preds = %1410
  store ptr %1412, ptr %165, align 8, !tbaa !5
  br label %1414

1414:                                             ; preds = %1431, %1413
  %1415 = load ptr, ptr %164, align 8, !tbaa !5
  %1416 = load ptr, ptr %165, align 8, !tbaa !5
  %1417 = icmp ne ptr %1415, %1416
  br i1 %1417, label %1427, label %1418

1418:                                             ; preds = %1414
  store i32 49, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %165) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %164) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %163) #9
  br label %1440

1419:                                             ; preds = %1405
  %1420 = landingpad { ptr, i32 }
          cleanup
  %1421 = extractvalue { ptr, i32 } %1420, 0
  store ptr %1421, ptr %21, align 8
  %1422 = extractvalue { ptr, i32 } %1420, 1
  store i32 %1422, ptr %22, align 4
  br label %1439

1423:                                             ; preds = %1410
  %1424 = landingpad { ptr, i32 }
          cleanup
  %1425 = extractvalue { ptr, i32 } %1424, 0
  store ptr %1425, ptr %21, align 8
  %1426 = extractvalue { ptr, i32 } %1424, 1
  store i32 %1426, ptr %22, align 4
  br label %1438

1427:                                             ; preds = %1414
  call void @llvm.lifetime.start.p0(i64 8, ptr %166) #9
  %1428 = load ptr, ptr %164, align 8, !tbaa !5
  store ptr %1428, ptr %166, align 8, !tbaa !5
  %1429 = load ptr, ptr %166, align 8, !tbaa !5
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %138, ptr noundef nonnull align 8 dereferenceable(8) %1429)
          to label %1430 unwind label %1434

1430:                                             ; preds = %1427
  call void @llvm.lifetime.end.p0(i64 8, ptr %166) #9
  br label %1431

1431:                                             ; preds = %1430
  %1432 = load ptr, ptr %164, align 8, !tbaa !5
  %1433 = getelementptr inbounds %"class.JPH::JobSystem::JobHandle", ptr %1432, i32 1
  store ptr %1433, ptr %164, align 8, !tbaa !5
  br label %1414

1434:                                             ; preds = %1427
  %1435 = landingpad { ptr, i32 }
          cleanup
  %1436 = extractvalue { ptr, i32 } %1435, 0
  store ptr %1436, ptr %21, align 8
  %1437 = extractvalue { ptr, i32 } %1435, 1
  store i32 %1437, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %166) #9
  br label %1438

1438:                                             ; preds = %1434, %1423
  call void @llvm.lifetime.end.p0(i64 8, ptr %165) #9
  br label %1439

1439:                                             ; preds = %1438, %1419
  call void @llvm.lifetime.end.p0(i64 8, ptr %164) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %163) #9
  br label %1544

1440:                                             ; preds = %1418
  %1441 = load ptr, ptr %142, align 8, !tbaa !5
  %1442 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1441, i32 0, i32 42
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %138, ptr noundef nonnull align 8 dereferenceable(8) %1442)
          to label %1443 unwind label %1208

1443:                                             ; preds = %1440
  call void @llvm.lifetime.start.p0(i64 8, ptr %167) #9
  %1444 = load ptr, ptr %142, align 8, !tbaa !5
  %1445 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1444, i32 0, i32 43
  store ptr %1445, ptr %167, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %168) #9
  %1446 = load ptr, ptr %167, align 8, !tbaa !5
  %1447 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %1446)
          to label %1448 unwind label %1457

1448:                                             ; preds = %1443
  store ptr %1447, ptr %168, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %169) #9
  %1449 = load ptr, ptr %167, align 8, !tbaa !5
  %1450 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %1449)
          to label %1451 unwind label %1461

1451:                                             ; preds = %1448
  store ptr %1450, ptr %169, align 8, !tbaa !5
  br label %1452

1452:                                             ; preds = %1469, %1451
  %1453 = load ptr, ptr %168, align 8, !tbaa !5
  %1454 = load ptr, ptr %169, align 8, !tbaa !5
  %1455 = icmp ne ptr %1453, %1454
  br i1 %1455, label %1465, label %1456

1456:                                             ; preds = %1452
  store i32 51, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %169) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %168) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %167) #9
  br label %1478

1457:                                             ; preds = %1443
  %1458 = landingpad { ptr, i32 }
          cleanup
  %1459 = extractvalue { ptr, i32 } %1458, 0
  store ptr %1459, ptr %21, align 8
  %1460 = extractvalue { ptr, i32 } %1458, 1
  store i32 %1460, ptr %22, align 4
  br label %1477

1461:                                             ; preds = %1448
  %1462 = landingpad { ptr, i32 }
          cleanup
  %1463 = extractvalue { ptr, i32 } %1462, 0
  store ptr %1463, ptr %21, align 8
  %1464 = extractvalue { ptr, i32 } %1462, 1
  store i32 %1464, ptr %22, align 4
  br label %1476

1465:                                             ; preds = %1452
  call void @llvm.lifetime.start.p0(i64 8, ptr %170) #9
  %1466 = load ptr, ptr %168, align 8, !tbaa !5
  store ptr %1466, ptr %170, align 8, !tbaa !5
  %1467 = load ptr, ptr %170, align 8, !tbaa !5
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %138, ptr noundef nonnull align 8 dereferenceable(8) %1467)
          to label %1468 unwind label %1472

1468:                                             ; preds = %1465
  call void @llvm.lifetime.end.p0(i64 8, ptr %170) #9
  br label %1469

1469:                                             ; preds = %1468
  %1470 = load ptr, ptr %168, align 8, !tbaa !5
  %1471 = getelementptr inbounds %"class.JPH::JobSystem::JobHandle", ptr %1470, i32 1
  store ptr %1471, ptr %168, align 8, !tbaa !5
  br label %1452

1472:                                             ; preds = %1465
  %1473 = landingpad { ptr, i32 }
          cleanup
  %1474 = extractvalue { ptr, i32 } %1473, 0
  store ptr %1474, ptr %21, align 8
  %1475 = extractvalue { ptr, i32 } %1473, 1
  store i32 %1475, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %170) #9
  br label %1476

1476:                                             ; preds = %1472, %1461
  call void @llvm.lifetime.end.p0(i64 8, ptr %169) #9
  br label %1477

1477:                                             ; preds = %1476, %1457
  call void @llvm.lifetime.end.p0(i64 8, ptr %168) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %167) #9
  br label %1544

1478:                                             ; preds = %1456
  %1479 = load ptr, ptr %142, align 8, !tbaa !5
  %1480 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1479, i32 0, i32 44
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %138, ptr noundef nonnull align 8 dereferenceable(8) %1480)
          to label %1481 unwind label %1208

1481:                                             ; preds = %1478
  %1482 = load ptr, ptr %142, align 8, !tbaa !5
  %1483 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1482, i32 0, i32 45
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %138, ptr noundef nonnull align 8 dereferenceable(8) %1483)
          to label %1484 unwind label %1208

1484:                                             ; preds = %1481
  call void @llvm.lifetime.start.p0(i64 8, ptr %171) #9
  %1485 = load ptr, ptr %142, align 8, !tbaa !5
  %1486 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1485, i32 0, i32 46
  store ptr %1486, ptr %171, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %172) #9
  %1487 = load ptr, ptr %171, align 8, !tbaa !5
  %1488 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %1487)
          to label %1489 unwind label %1498

1489:                                             ; preds = %1484
  store ptr %1488, ptr %172, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %173) #9
  %1490 = load ptr, ptr %171, align 8, !tbaa !5
  %1491 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %1490)
          to label %1492 unwind label %1502

1492:                                             ; preds = %1489
  store ptr %1491, ptr %173, align 8, !tbaa !5
  br label %1493

1493:                                             ; preds = %1510, %1492
  %1494 = load ptr, ptr %172, align 8, !tbaa !5
  %1495 = load ptr, ptr %173, align 8, !tbaa !5
  %1496 = icmp ne ptr %1494, %1495
  br i1 %1496, label %1506, label %1497

1497:                                             ; preds = %1493
  store i32 53, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %173) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %172) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %171) #9
  br label %1519

1498:                                             ; preds = %1484
  %1499 = landingpad { ptr, i32 }
          cleanup
  %1500 = extractvalue { ptr, i32 } %1499, 0
  store ptr %1500, ptr %21, align 8
  %1501 = extractvalue { ptr, i32 } %1499, 1
  store i32 %1501, ptr %22, align 4
  br label %1518

1502:                                             ; preds = %1489
  %1503 = landingpad { ptr, i32 }
          cleanup
  %1504 = extractvalue { ptr, i32 } %1503, 0
  store ptr %1504, ptr %21, align 8
  %1505 = extractvalue { ptr, i32 } %1503, 1
  store i32 %1505, ptr %22, align 4
  br label %1517

1506:                                             ; preds = %1493
  call void @llvm.lifetime.start.p0(i64 8, ptr %174) #9
  %1507 = load ptr, ptr %172, align 8, !tbaa !5
  store ptr %1507, ptr %174, align 8, !tbaa !5
  %1508 = load ptr, ptr %174, align 8, !tbaa !5
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %138, ptr noundef nonnull align 8 dereferenceable(8) %1508)
          to label %1509 unwind label %1513

1509:                                             ; preds = %1506
  call void @llvm.lifetime.end.p0(i64 8, ptr %174) #9
  br label %1510

1510:                                             ; preds = %1509
  %1511 = load ptr, ptr %172, align 8, !tbaa !5
  %1512 = getelementptr inbounds %"class.JPH::JobSystem::JobHandle", ptr %1511, i32 1
  store ptr %1512, ptr %172, align 8, !tbaa !5
  br label %1493

1513:                                             ; preds = %1506
  %1514 = landingpad { ptr, i32 }
          cleanup
  %1515 = extractvalue { ptr, i32 } %1514, 0
  store ptr %1515, ptr %21, align 8
  %1516 = extractvalue { ptr, i32 } %1514, 1
  store i32 %1516, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %174) #9
  br label %1517

1517:                                             ; preds = %1513, %1502
  call void @llvm.lifetime.end.p0(i64 8, ptr %173) #9
  br label %1518

1518:                                             ; preds = %1517, %1498
  call void @llvm.lifetime.end.p0(i64 8, ptr %172) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %171) #9
  br label %1544

1519:                                             ; preds = %1497
  %1520 = load ptr, ptr %142, align 8, !tbaa !5
  %1521 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1520, i32 0, i32 47
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %138, ptr noundef nonnull align 8 dereferenceable(8) %1521)
          to label %1522 unwind label %1208

1522:                                             ; preds = %1519
  %1523 = load ptr, ptr %142, align 8, !tbaa !5
  %1524 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1523, i32 0, i32 48
  %1525 = invoke noundef zeroext i1 @_ZNK3JPH9JobSystem9JobHandle7IsValidEv(ptr noundef nonnull align 8 dereferenceable(8) %1524)
          to label %1526 unwind label %1208

1526:                                             ; preds = %1522
  br i1 %1525, label %1527, label %1531

1527:                                             ; preds = %1526
  %1528 = load ptr, ptr %142, align 8, !tbaa !5
  %1529 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1528, i32 0, i32 48
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %138, ptr noundef nonnull align 8 dereferenceable(8) %1529)
          to label %1530 unwind label %1208

1530:                                             ; preds = %1527
  br label %1531

1531:                                             ; preds = %1530, %1526
  %1532 = load ptr, ptr %142, align 8, !tbaa !5
  %1533 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1532, i32 0, i32 52
  %1534 = invoke noundef zeroext i1 @_ZNK3JPH9JobSystem9JobHandle7IsValidEv(ptr noundef nonnull align 8 dereferenceable(8) %1533)
          to label %1535 unwind label %1208

1535:                                             ; preds = %1531
  br i1 %1534, label %1536, label %1540

1536:                                             ; preds = %1535
  %1537 = load ptr, ptr %142, align 8, !tbaa !5
  %1538 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1537, i32 0, i32 52
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %138, ptr noundef nonnull align 8 dereferenceable(8) %1538)
          to label %1539 unwind label %1208

1539:                                             ; preds = %1536
  br label %1540

1540:                                             ; preds = %1539, %1535
  call void @llvm.lifetime.end.p0(i64 8, ptr %142) #9
  br label %1541

1541:                                             ; preds = %1540
  %1542 = load ptr, ptr %140, align 8, !tbaa !5
  %1543 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1542, i32 1
  store ptr %1543, ptr %140, align 8, !tbaa !5
  br label %1185

1544:                                             ; preds = %1518, %1477, %1439, %1395, %1351, %1316, %1281, %1246, %1208
  call void @llvm.lifetime.end.p0(i64 8, ptr %142) #9
  br label %1545

1545:                                             ; preds = %1544, %1194
  call void @llvm.lifetime.end.p0(i64 8, ptr %141) #9
  br label %1546

1546:                                             ; preds = %1545, %1190
  call void @llvm.lifetime.end.p0(i64 8, ptr %140) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %139) #9
  br label %1634

1547:                                             ; preds = %1189
  %1548 = load ptr, ptr %137, align 8, !tbaa !5
  %1549 = invoke noundef ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE4dataEv(ptr noundef nonnull align 8 dereferenceable(16392) %138)
          to label %1550 unwind label %1630

1550:                                             ; preds = %1547
  %1551 = invoke noundef i32 @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16392) %138)
          to label %1552 unwind label %1630

1552:                                             ; preds = %1550
  %1553 = load ptr, ptr %1548, align 8, !tbaa !43
  %1554 = getelementptr inbounds ptr, ptr %1553, i64 1
  %1555 = load ptr, ptr %1554, align 8
  invoke void %1555(ptr noundef nonnull align 8 dereferenceable(8) %1548, ptr noundef %1549, i32 noundef %1551)
          to label %1556 unwind label %1630

1556:                                             ; preds = %1552
  call void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EED2Ev(ptr noundef nonnull align 8 dereferenceable(16392) %138) #9
  call void @llvm.lifetime.end.p0(i64 16392, ptr %138) #9
  %1557 = load ptr, ptr %11, align 8, !tbaa !5
  %1558 = load ptr, ptr %137, align 8, !tbaa !5
  %1559 = load ptr, ptr %1557, align 8, !tbaa !43
  %1560 = getelementptr inbounds ptr, ptr %1559, i64 6
  %1561 = load ptr, ptr %1560, align 8
  invoke void %1561(ptr noundef nonnull align 8 dereferenceable(8) %1557, ptr noundef %1558)
          to label %1562 unwind label %1635

1562:                                             ; preds = %1556
  %1563 = load ptr, ptr %11, align 8, !tbaa !5
  %1564 = load ptr, ptr %137, align 8, !tbaa !5
  %1565 = load ptr, ptr %1563, align 8, !tbaa !43
  %1566 = getelementptr inbounds ptr, ptr %1565, i64 5
  %1567 = load ptr, ptr %1566, align 8
  invoke void %1567(ptr noundef nonnull align 8 dereferenceable(8) %1563, ptr noundef %1564)
          to label %1568 unwind label %1635

1568:                                             ; preds = %1562
  %1569 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 2
  invoke void @_ZN3JPH11BodyManager24ValidateActiveBodyBoundsEv(ptr noundef nonnull align 8 dereferenceable(297) %1569)
          to label %1570 unwind label %1635

1570:                                             ; preds = %1568
  %1571 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 16
  %1572 = load ptr, ptr %10, align 8, !tbaa !5
  invoke void @_ZN3JPH19LargeIslandSplitter5ResetEPNS_13TempAllocatorE(ptr noundef nonnull align 8 dereferenceable(60) %1571, ptr noundef %1572)
          to label %1573 unwind label %1635

1573:                                             ; preds = %1570
  %1574 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 15
  %1575 = load ptr, ptr %10, align 8, !tbaa !5
  invoke void @_ZN3JPH13IslandBuilder12ResetIslandsEPNS_13TempAllocatorE(ptr noundef nonnull align 8 dereferenceable(112) %1574, ptr noundef %1575)
          to label %1576 unwind label %1635

1576:                                             ; preds = %1573
  %1577 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 13
  invoke void @_ZN3JPH24ContactConstraintManager22FinishConstraintBufferEv(ptr noundef nonnull align 8 dereferenceable(248) %1577)
          to label %1578 unwind label %1635

1578:                                             ; preds = %1576
  %1579 = load ptr, ptr %10, align 8, !tbaa !5
  %1580 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 8
  %1581 = load ptr, ptr %1580, align 8, !tbaa !81
  %1582 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 14
  %1583 = invoke noundef i32 @_ZNK3JPH17ConstraintManager17GetNumConstraintsEv(ptr noundef nonnull align 8 dereferenceable(80) %1582)
          to label %1584 unwind label %1635

1584:                                             ; preds = %1578
  %1585 = zext i32 %1583 to i64
  %1586 = mul i64 %1585, 8
  %1587 = trunc i64 %1586 to i32
  %1588 = load ptr, ptr %1579, align 8, !tbaa !43
  %1589 = getelementptr inbounds ptr, ptr %1588, i64 3
  %1590 = load ptr, ptr %1589, align 8
  invoke void %1590(ptr noundef nonnull align 8 dereferenceable(8) %1579, ptr noundef %1581, i32 noundef %1587)
          to label %1591 unwind label %1635

1591:                                             ; preds = %1584
  %1592 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 8
  store ptr null, ptr %1592, align 8, !tbaa !81
  %1593 = load ptr, ptr %10, align 8, !tbaa !5
  %1594 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 9
  %1595 = load ptr, ptr %1594, align 8, !tbaa !58
  %1596 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 11
  %1597 = getelementptr inbounds %"struct.JPH::PhysicsSettings", ptr %1596, i32 0, i32 0
  %1598 = load i32, ptr %1597, align 16, !tbaa !60
  %1599 = sext i32 %1598 to i64
  %1600 = mul i64 8, %1599
  %1601 = trunc i64 %1600 to i32
  %1602 = load ptr, ptr %1593, align 8, !tbaa !43
  %1603 = getelementptr inbounds ptr, ptr %1602, i64 3
  %1604 = load ptr, ptr %1603, align 8
  invoke void %1604(ptr noundef nonnull align 8 dereferenceable(8) %1593, ptr noundef %1595, i32 noundef %1601)
          to label %1605 unwind label %1635

1605:                                             ; preds = %1591
  %1606 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 9
  store ptr null, ptr %1606, align 8, !tbaa !58
  %1607 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 9
  %1608 = load ptr, ptr %1607, align 16, !tbaa !15
  %1609 = load ptr, ptr %1608, align 8, !tbaa !43
  %1610 = getelementptr inbounds ptr, ptr %1609, i64 14
  %1611 = load ptr, ptr %1610, align 8
  invoke void %1611(ptr noundef nonnull align 8 dereferenceable(16) %1608)
          to label %1612 unwind label %1635

1612:                                             ; preds = %1605
  %1613 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 14
  invoke void @_ZN3JPH17ConstraintManager20UnlockAllConstraintsEv(ptr noundef nonnull align 8 dereferenceable(80) %1613)
          to label %1614 unwind label %1635

1614:                                             ; preds = %1612
  %1615 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 2
  invoke void @_ZN3JPH11BodyManager21SetActiveBodiesLockedEb(ptr noundef nonnull align 8 dereferenceable(297) %1615, i1 noundef zeroext false)
          to label %1616 unwind label %1635

1616:                                             ; preds = %1614
  %1617 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 2
  invoke void @_ZNK3JPH11BodyManager15UnlockAllBodiesEv(ptr noundef nonnull align 8 dereferenceable(297) %1617)
          to label %1618 unwind label %1635

1618:                                             ; preds = %1616
  %1619 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 17
  invoke void @_ZN3JPH5Mutex6unlockEv(ptr noundef nonnull align 8 dereferenceable(48) %1619)
          to label %1620 unwind label %1635

1620:                                             ; preds = %1618
  call void @llvm.lifetime.start.p0(i64 4, ptr %175) #9
  %1621 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 6
  %1622 = call noundef i32 @_ZNKSt13__atomic_baseIjE4loadESt12memory_order(ptr noundef nonnull align 4 dereferenceable(4) %1621, i32 noundef 2) #9
  store i32 %1622, ptr %175, align 4, !tbaa !95
  br label %1623

1623:                                             ; preds = %1620
  %1624 = load i32, ptr %175, align 4, !tbaa !95
  %1625 = icmp eq i32 %1624, 0
  br i1 %1625, label %1643, label %1626

1626:                                             ; preds = %1623
  %1627 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jS1_NS_15AssertLastParamE(ptr noundef @.str.51, ptr noundef @.str.24, i32 noundef 615, ptr noundef @.str.52)
          to label %1628 unwind label %1639

1628:                                             ; preds = %1626
  br i1 %1627, label %1629, label %1643

1629:                                             ; preds = %1628
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !97
  br label %1643

1630:                                             ; preds = %1552, %1550, %1547
  %1631 = landingpad { ptr, i32 }
          cleanup
  %1632 = extractvalue { ptr, i32 } %1631, 0
  store ptr %1632, ptr %21, align 8
  %1633 = extractvalue { ptr, i32 } %1631, 1
  store i32 %1633, ptr %22, align 4
  br label %1634

1634:                                             ; preds = %1630, %1546
  call void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EED2Ev(ptr noundef nonnull align 8 dereferenceable(16392) %138) #9
  call void @llvm.lifetime.end.p0(i64 16392, ptr %138) #9
  br label %1647

1635:                                             ; preds = %1618, %1616, %1614, %1612, %1605, %1591, %1584, %1578, %1576, %1573, %1570, %1568, %1562, %1556
  %1636 = landingpad { ptr, i32 }
          cleanup
  %1637 = extractvalue { ptr, i32 } %1636, 0
  store ptr %1637, ptr %21, align 8
  %1638 = extractvalue { ptr, i32 } %1636, 1
  store i32 %1638, ptr %22, align 4
  br label %1647

1639:                                             ; preds = %1626
  %1640 = landingpad { ptr, i32 }
          cleanup
  %1641 = extractvalue { ptr, i32 } %1640, 0
  store ptr %1641, ptr %21, align 8
  %1642 = extractvalue { ptr, i32 } %1640, 1
  store i32 %1642, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %175) #9
  br label %1647

1643:                                             ; preds = %1629, %1628, %1623
  br label %1644

1644:                                             ; preds = %1643
  br label %1645

1645:                                             ; preds = %1644
  %1646 = load i32, ptr %175, align 4, !tbaa !95
  store i32 %1646, ptr %6, align 4
  store i32 1, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %175) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %137) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #9
  call void @_ZN3JPH20PhysicsUpdateContextD1Ev(ptr noundef nonnull align 8 dereferenceable(124) %20) #9
  call void @llvm.lifetime.end.p0(i64 128, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #9
  br label %1656

1647:                                             ; preds = %1639, %1635, %1634
  call void @llvm.lifetime.end.p0(i64 8, ptr %137) #9
  br label %1648

1648:                                             ; preds = %1647, %1174, %438
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #9
  br label %1649

1649:                                             ; preds = %1648, %434
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #9
  br label %1650

1650:                                             ; preds = %1649, %430
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #9
  br label %1651

1651:                                             ; preds = %1650, %429
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #9
  br label %1652

1652:                                             ; preds = %1651, %417
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #9
  br label %1653

1653:                                             ; preds = %1652, %413, %409
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  br label %1654

1654:                                             ; preds = %1653, %405
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #9
  br label %1655

1655:                                             ; preds = %1654, %287
  call void @_ZN3JPH20PhysicsUpdateContextD1Ev(ptr noundef nonnull align 8 dereferenceable(124) %20) #9
  call void @llvm.lifetime.end.p0(i64 128, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #9
  br label %1658

1656:                                             ; preds = %1645, %211
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #9
  %1657 = load i32, ptr %6, align 4
  ret i32 %1657

1658:                                             ; preds = %1655
  %1659 = load ptr, ptr %21, align 8
  %1660 = load i32, ptr %22, align 4
  %1661 = insertvalue { ptr, i32 } poison, ptr %1659, 0
  %1662 = insertvalue { ptr, i32 } %1661, i32 %1660, 1
  resume { ptr, i32 } %1662
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3JPH11BodyManager18GetNumActiveBodiesENS_9EBodyTypeE(ptr noundef nonnull align 8 dereferenceable(297), i8 noundef zeroext) #3 align 2

declare void @_ZNK3JPH11BodyManager13LockAllBodiesEv(ptr noundef nonnull align 8 dereferenceable(297)) #4

declare void @_ZN3JPH24ContactConstraintManager55FinalizeContactCacheAndCallContactPointRemovedCallbacksEjj(ptr noundef nonnull align 8 dereferenceable(248), i32 noundef, i32 noundef) #4

declare void @_ZNK3JPH11BodyManager15UnlockAllBodiesEv(ptr noundef nonnull align 8 dereferenceable(297)) #4

declare void @_ZN3JPH20PhysicsUpdateContextC1ERNS_13TempAllocatorE(ptr noundef nonnull align 8 dereferenceable(124), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(32), i64 noundef) #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH5Mutex4lockEv(ptr noundef nonnull align 8 dereferenceable(48)) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK3JPH20PhysicsUpdateContext17GetMaxConcurrencyEv(ptr noundef nonnull align 8 dereferenceable(124)) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH5ArrayIPNS_19PhysicsStepListenerENS_12STLAllocatorIS2_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) #5 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #5

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #5

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK3JPH5ArrayIPNS_19PhysicsStepListenerENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_ZNK3JPH17ConstraintManager17GetNumConstraintsEv(ptr noundef nonnull align 8 dereferenceable(80)) #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(7344) ptr @_ZN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(32), i64 noundef) #1 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH11StaticArrayINS_20PhysicsUpdateContext13BodyPairQueueELj32EE6resizeEj(ptr noundef nonnull align 4 dereferenceable(4100), i32 noundef) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNSt13__atomic_baseIjEaSEj(ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264), i32 noundef) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(12)) unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264), i32 noundef) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH11BodyManager21SetActiveBodiesLockedEb(ptr noundef nonnull align 8 dereferenceable(297), i1 noundef zeroext) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH17ConstraintManager18LockAllConstraintsEv(ptr noundef nonnull align 8 dereferenceable(80)) #2 align 2

declare void @_ZN3JPH24ContactConstraintManager23PrepareConstraintBufferEPNS_20PhysicsUpdateContextE(ptr noundef nonnull align 8 dereferenceable(248), ptr noundef) #4

declare void @_ZN3JPH13IslandBuilder25PrepareContactConstraintsEjPNS_13TempAllocatorE(ptr noundef nonnull align 8 dereferenceable(112), i32 noundef, ptr noundef) #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3JPH24ContactConstraintManager17GetMaxConstraintsEv(ptr noundef nonnull align 8 dereferenceable(248)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_5vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_6vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_7vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_8vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_9vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_10vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_11vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_12vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH9JobSystem9JobHandle19sRemoveDependenciesILj32EEEvRNS_11StaticArrayIS1_XT_EEEi(ptr noundef nonnull align 8 dereferenceable(264), i32 noundef) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_13vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_14vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_15vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_16vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_17vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_18vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EEC2Ev(ptr noundef nonnull align 8 dereferenceable(16392)) unnamed_addr #3 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH9JobSystem9JobHandle7IsValidEv(ptr noundef nonnull align 8 dereferenceable(8)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392), ptr noundef nonnull align 8 dereferenceable(8)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE4dataEv(ptr noundef nonnull align 8 dereferenceable(16392)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16392)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EED2Ev(ptr noundef nonnull align 8 dereferenceable(16392)) unnamed_addr #3 align 2

declare void @_ZN3JPH11BodyManager24ValidateActiveBodyBoundsEv(ptr noundef nonnull align 8 dereferenceable(297)) #4

declare void @_ZN3JPH19LargeIslandSplitter5ResetEPNS_13TempAllocatorE(ptr noundef nonnull align 8 dereferenceable(60), ptr noundef) #4

declare void @_ZN3JPH13IslandBuilder12ResetIslandsEPNS_13TempAllocatorE(ptr noundef nonnull align 8 dereferenceable(112), ptr noundef) #4

declare void @_ZN3JPH24ContactConstraintManager22FinishConstraintBufferEv(ptr noundef nonnull align 8 dereferenceable(248)) #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH17ConstraintManager20UnlockAllConstraintsEv(ptr noundef nonnull align 8 dereferenceable(80)) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH5Mutex6unlockEv(ptr noundef nonnull align 8 dereferenceable(48)) #1 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNKSt13__atomic_baseIjE4loadESt12memory_order(ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) #7 align 2

; Function Attrs: nounwind
declare void @_ZN3JPH20PhysicsUpdateContextD1Ev(ptr noundef nonnull align 8 dereferenceable(124)) unnamed_addr #8

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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 #3 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { inlinehint mustprogress 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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #7 = { 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 #8 = { nounwind "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 #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 = !{i64 2159695847}
!14 = !{i64 2159696183}
!15 = !{!16, !6, i64 432}
!16 = !{!"_ZTSN3JPH13PhysicsSystemE", !6, i64 0, !6, i64 8, !17, i64 16, !28, i64 320, !30, i64 336, !31, i64 352, !31, i64 376, !32, i64 400, !32, i64 416, !6, i64 432, !6, i64 440, !33, i64 448, !34, i64 536, !37, i64 784, !39, i64 864, !40, i64 976, !20, i64 1040, !41, i64 1088, !42, i64 1120, !10, i64 1136}
!17 = !{!"_ZTSN3JPH11BodyManagerE", !18, i64 0, !12, i64 24, !19, i64 32, !20, i64 40, !24, i64 88, !25, i64 104, !20, i64 128, !7, i64 176, !7, i64 192, !12, i64 200, !20, i64 208, !26, i64 256, !6, i64 280, !6, i64 288, !27, i64 296}
!18 = !{!"_ZTSN3JPH5ArrayIPNS_4BodyENS_12STLAllocatorIS2_EEEE", !19, i64 0, !19, i64 8, !6, i64 16}
!19 = !{!"long", !7, i64 0}
!20 = !{!"_ZTSN3JPH5MutexE", !21, i64 0, !23, i64 40}
!21 = !{!"_ZTSSt5mutex", !22, i64 0}
!22 = !{!"_ZTSSt12__mutex_base", !7, i64 0}
!23 = !{!"_ZTSNSt6thread2idE", !19, i64 0}
!24 = !{!"_ZTSN3JPH10MutexArrayINS_11SharedMutexEEE", !6, i64 0, !12, i64 8}
!25 = !{!"_ZTSN3JPH5ArrayIhNS_12STLAllocatorIhEEEE", !19, i64 0, !19, i64 8, !6, i64 16}
!26 = !{!"_ZTSN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEEE", !19, i64 0, !19, i64 8, !6, i64 16}
!27 = !{!"bool", !7, i64 0}
!28 = !{!"_ZTSN3JPH23BodyLockInterfaceNoLockE", !29, i64 0}
!29 = !{!"_ZTSN3JPH17BodyLockInterfaceE", !6, i64 8}
!30 = !{!"_ZTSN3JPH24BodyLockInterfaceLockingE", !29, i64 0}
!31 = !{!"_ZTSN3JPH13BodyInterfaceE", !6, i64 0, !6, i64 8, !6, i64 16}
!32 = !{!"_ZTSN3JPH16NarrowPhaseQueryE", !6, i64 0, !6, i64 8}
!33 = !{!"_ZTSN3JPH15PhysicsSettingsE", !12, i64 0, !12, i64 4, !12, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !12, i64 56, !12, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !27, i64 76, !27, i64 77, !27, i64 78, !27, i64 79, !27, i64 80, !27, i64 81, !27, i64 82}
!34 = !{!"_ZTSN3JPH24ContactConstraintManagerE", !7, i64 8, !12, i64 184, !6, i64 192, !6, i64 200, !6, i64 208, !6, i64 216, !6, i64 224, !12, i64 232, !35, i64 236, !6, i64 240}
!35 = !{!"_ZTSSt6atomicIjE", !36, i64 0}
!36 = !{!"_ZTSSt13__atomic_baseIjE", !12, i64 0}
!37 = !{!"_ZTSN3JPH17ConstraintManagerE", !6, i64 0, !38, i64 8, !20, i64 32}
!38 = !{!"_ZTSN3JPH5ArrayINS_3RefINS_10ConstraintEEENS_12STLAllocatorIS3_EEEE", !19, i64 0, !19, i64 8, !6, i64 16}
!39 = !{!"_ZTSN3JPH13IslandBuilderE", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !12, i64 88, !12, i64 92, !12, i64 96, !12, i64 100, !12, i64 104, !12, i64 108}
!40 = !{!"_ZTSN3JPH19LargeIslandSplitterE", !12, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !12, i64 32, !35, i64 36, !12, i64 40, !6, i64 48, !35, i64 56}
!41 = !{!"_ZTSN3JPH5ArrayIPNS_19PhysicsStepListenerENS_12STLAllocatorIS2_EEEE", !19, i64 0, !19, i64 8, !6, i64 16}
!42 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!43 = !{!44, !44, i64 0}
!44 = !{!"vtable pointer", !8, i64 0}
!45 = !{!16, !27, i64 525}
!46 = !{i8 0, i8 2}
!47 = !{}
!48 = !{!16, !10, i64 1136}
!49 = !{!50, !6, i64 0}
!50 = !{!"_ZTSN3JPH20PhysicsUpdateContextE", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !10, i64 32, !10, i64 36, !35, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !51, i64 72, !12, i64 104, !6, i64 112, !35, i64 120}
!51 = !{!"_ZTSN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEEE", !52, i64 0, !19, i64 8, !19, i64 16, !6, i64 24}
!52 = !{!"_ZTSN3JPH16STLTempAllocatorINS_20PhysicsUpdateContext4StepEEE", !6, i64 0}
!53 = !{!50, !6, i64 16}
!54 = !{!50, !6, i64 24}
!55 = !{!50, !6, i64 64}
!56 = !{!50, !10, i64 32}
!57 = !{!50, !10, i64 36}
!58 = !{!50, !6, i64 56}
!59 = !{i64 2159696539}
!60 = !{!16, !12, i64 448}
!61 = !{!16, !12, i64 452}
!62 = !{!16, !12, i64 456}
!63 = !{!27, !27, i64 0}
!64 = !{!65, !6, i64 0}
!65 = !{!"_ZTSN3JPH20PhysicsUpdateContext4StepE", !6, i64 0, !27, i64 8, !27, i64 9, !66, i64 16, !12, i64 48, !35, i64 52, !7, i64 56, !35, i64 116, !7, i64 120, !35, i64 180, !7, i64 184, !35, i64 244, !7, i64 248, !35, i64 308, !7, i64 312, !35, i64 372, !7, i64 376, !67, i64 436, !12, i64 4536, !35, i64 4540, !35, i64 4544, !35, i64 4548, !35, i64 4552, !35, i64 4556, !35, i64 4560, !6, i64 4568, !12, i64 4576, !35, i64 4580, !35, i64 4584, !6, i64 4592, !12, i64 4600, !68, i64 4608, !70, i64 4616, !70, i64 4880, !70, i64 5144, !70, i64 5408, !68, i64 5672, !70, i64 5680, !68, i64 5944, !68, i64 5952, !68, i64 5960, !70, i64 5968, !68, i64 6232, !70, i64 6240, !68, i64 6504, !68, i64 6512, !70, i64 6520, !68, i64 6784, !68, i64 6792, !70, i64 6800, !70, i64 7064, !68, i64 7328, !68, i64 7336}
!66 = !{!"_ZTSN3JPH10BroadPhase11UpdateStateE", !7, i64 0}
!67 = !{!"_ZTSN3JPH11StaticArrayINS_20PhysicsUpdateContext13BodyPairQueueELj32EEE", !12, i64 0, !7, i64 4}
!68 = !{!"_ZTSN3JPH9JobSystem9JobHandleE", !69, i64 0}
!69 = !{!"_ZTSN3JPH3RefINS_9JobSystem3JobEEE", !6, i64 0}
!70 = !{!"_ZTSN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEE", !12, i64 0, !7, i64 8}
!71 = !{!65, !27, i64 8}
!72 = !{!65, !27, i64 9}
!73 = !{i64 0, i64 4, !74}
!74 = !{!7, !7, i64 0}
!75 = !{!65, !12, i64 4536}
!76 = !{!77, !12, i64 8}
!77 = !{!"_ZTSZN3JPH13PhysicsSystem6UpdateEfiPNS_13TempAllocatorEPNS_9JobSystemEE3$_2", !6, i64 0, !12, i64 8}
!78 = distinct !{!78, !79}
!79 = !{!"llvm.loop.mustprogress"}
!80 = !{!65, !12, i64 48}
!81 = !{!50, !6, i64 48}
!82 = !{i64 2159697277}
!83 = !{!50, !6, i64 8}
!84 = distinct !{!84, !79}
!85 = distinct !{!85, !79}
!86 = distinct !{!86, !79}
!87 = distinct !{!87, !79}
!88 = !{!89, !6, i64 0}
!89 = !{!"_ZTSZN3JPH13PhysicsSystem6UpdateEfiPNS_13TempAllocatorEPNS_9JobSystemEE4$_11", !6, i64 0, !6, i64 8}
!90 = !{!89, !6, i64 8}
!91 = distinct !{!91, !79}
!92 = distinct !{!92, !79}
!93 = distinct !{!93, !79}
!94 = distinct !{!94, !79}
!95 = !{!96, !96, i64 0}
!96 = !{!"_ZTSN3JPH19EPhysicsUpdateErrorE", !7, i64 0}
!97 = !{i64 2159698103}


; 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::Color" = type { %union.anon }
%union.anon = type { i32 }
%"struct.JPH::BroadPhase::UpdateState" = type { [4 x ptr] }
%"class.JPH::PhysicsUpdateContext" = type <{ ptr, ptr, ptr, ptr, float, float, %"struct.std::atomic", [4 x i8], ptr, ptr, ptr, %"class.JPH::Array.19", i32, [4 x i8], ptr, %"struct.std::atomic", [4 x i8] }>
%"class.JPH::Array.19" = type { %"class.JPH::STLTempAllocator", i64, i64, ptr }
%"class.JPH::STLTempAllocator" = type { ptr }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::JobSystem::JobHandle" = type { %"class.JPH::Ref" }
%"class.JPH::Ref" = type { ptr }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%class.anon = type { ptr, ptr }
%class.anon.21 = type { ptr, ptr }
%class.anon.22 = type <{ ptr, i32, [4 x i8] }>
%class.anon.23 = type { ptr, ptr }
%class.anon.24 = type { ptr, ptr }
%class.anon.25 = type { ptr, ptr }
%class.anon.26 = type { ptr, ptr }
%class.anon.27 = type { ptr, ptr }
%class.anon.28 = type { ptr, ptr }
%class.anon.29 = type { ptr, ptr }
%class.anon.30 = type { ptr, ptr }
%class.anon.31 = type { ptr, ptr }
%class.anon.32 = type { ptr, ptr }
%class.anon.33 = type { ptr, ptr }
%class.anon.34 = type { ptr, ptr }
%class.anon.35 = type { ptr, ptr }
%class.anon.36 = type { ptr, ptr }
%class.anon.37 = type { ptr, ptr }
%class.anon.38 = type { ptr, ptr }
%"class.JPH::StaticArray.39" = type { i32, [4 x i8], [2048 x %"struct.JPH::StaticArray<JPH::JobSystem::JobHandle, 2048>::Storage"] }
%"struct.JPH::StaticArray<JPH::JobSystem::JobHandle, 2048>::Storage" = type { [8 x i8] }

@_ZN3JPHL30cColorUpdateBroadPhaseFinalizeE = external hidden local_unnamed_addr global %"class.JPH::Color", align 4
@_ZN3JPHL29cColorUpdateBroadPhasePrepareE = external hidden local_unnamed_addr global %"class.JPH::Color", align 4
@_ZN3JPHL20cColorFindCollisionsE = external hidden local_unnamed_addr global %"class.JPH::Color", align 4
@_ZN3JPHL18cColorApplyGravityE = external hidden local_unnamed_addr global %"class.JPH::Color", align 4
@_ZN3JPHL30cColorSetupVelocityConstraintsE = external hidden local_unnamed_addr global %"class.JPH::Color", align 4
@_ZN3JPHL33cColorBuildIslandsFromConstraintsE = external hidden local_unnamed_addr global %"class.JPH::Color", align 4
@_ZN3JPHL32cColorDetermineActiveConstraintsE = external hidden local_unnamed_addr global %"class.JPH::Color", align 4
@_ZN3JPHL21cColorFinalizeIslandsE = external hidden local_unnamed_addr global %"class.JPH::Color", align 4
@_ZN3JPHL29cColorContactRemovedCallbacksE = external hidden local_unnamed_addr global %"class.JPH::Color", align 4
@_ZN3JPHL24cColorBodySetIslandIndexE = external hidden local_unnamed_addr global %"class.JPH::Color", align 4
@_ZN3JPHL19cColorStartNextStepE = external hidden local_unnamed_addr global %"class.JPH::Color", align 4
@_ZN3JPHL30cColorSolveVelocityConstraintsE = external hidden local_unnamed_addr global %"class.JPH::Color", align 4
@_ZN3JPHL26cColorPreIntegrateVelocityE = external hidden local_unnamed_addr global %"class.JPH::Color", align 4
@_ZN3JPHL23cColorIntegrateVelocityE = external hidden local_unnamed_addr global %"class.JPH::Color", align 4
@_ZN3JPHL27cColorPostIntegrateVelocityE = external hidden local_unnamed_addr global %"class.JPH::Color", align 4
@_ZN3JPHL24cColorResolveCCDContactsE = external hidden local_unnamed_addr global %"class.JPH::Color", align 4
@_ZN3JPHL30cColorSolvePositionConstraintsE = external hidden local_unnamed_addr global %"class.JPH::Color", align 4
@_ZN3JPHL19cColorStepListenersE = external hidden local_unnamed_addr global %"class.JPH::Color", align 4
@_ZN3JPHL21cColorSoftBodyPrepareE = external hidden local_unnamed_addr global %"class.JPH::Color", align 4
@.str.24 = external hidden unnamed_addr constant [90 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [90 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jS1_NS_15AssertLastParamE(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #1

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN3JPH13PhysicsSystem6UpdateEfiPNS_13TempAllocatorEPNS_9JobSystemE(ptr noundef nonnull align 16 dereferenceable(1140) %0, float noundef %1, i32 noundef %2, ptr noundef %3, ptr noundef %4) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %6 = alloca %"struct.JPH::BroadPhase::UpdateState", align 8
  %7 = alloca %"class.JPH::PhysicsUpdateContext", align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %24 = alloca %"class.std::function", align 8
  %25 = alloca %class.anon, align 8
  %26 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %27 = alloca %"class.std::function", align 8
  %28 = alloca %class.anon.21, align 8
  %29 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %30 = alloca %"class.std::function", align 8
  %31 = alloca %class.anon.22, align 8
  %32 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %33 = alloca %"class.std::function", align 8
  %34 = alloca %class.anon.23, align 8
  %35 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %36 = alloca %"class.std::function", align 8
  %37 = alloca %class.anon.24, align 8
  %38 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %39 = alloca %"class.std::function", align 8
  %40 = alloca %class.anon.25, align 8
  %41 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %42 = alloca %"class.std::function", align 8
  %43 = alloca %class.anon.26, align 8
  %44 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %45 = alloca %"class.std::function", align 8
  %46 = alloca %class.anon.27, align 8
  %47 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %48 = alloca %"class.std::function", align 8
  %49 = alloca %class.anon.28, align 8
  %50 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %51 = alloca %"class.std::function", align 8
  %52 = alloca %class.anon.29, align 8
  %53 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %54 = alloca %"class.std::function", align 8
  %55 = alloca %class.anon.30, align 8
  %56 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %57 = alloca %"class.std::function", align 8
  %58 = alloca %class.anon.31, align 8
  %59 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %60 = alloca %"class.std::function", align 8
  %61 = alloca %class.anon.32, align 8
  %62 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %63 = alloca %"class.std::function", align 8
  %64 = alloca %class.anon.33, align 8
  %65 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %66 = alloca %"class.std::function", align 8
  %67 = alloca %class.anon.34, align 8
  %68 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %69 = alloca %"class.std::function", align 8
  %70 = alloca %class.anon.35, align 8
  %71 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %72 = alloca %"class.std::function", align 8
  %73 = alloca %class.anon.36, align 8
  %74 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %75 = alloca %"class.std::function", align 8
  %76 = alloca %class.anon.37, align 8
  %77 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %78 = alloca %"class.std::function", align 8
  %79 = alloca %class.anon.38, align 8
  %80 = alloca %"class.JPH::StaticArray.39", align 8
  %81 = icmp sgt i32 %2, 0
  br i1 %81, label %85, label %82

82:                                               ; preds = %5
  %83 = tail call noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.28, ptr noundef nonnull @.str.24, i32 noundef 135)
  br i1 %83, label %84, label %85

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

85:                                               ; preds = %84, %82, %5
  %86 = fcmp ult float %1, 0.000000e+00
  br i1 %86, label %87, label %90

87:                                               ; preds = %85
  %88 = tail call noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.29, ptr noundef nonnull @.str.24, i32 noundef 136)
  br i1 %88, label %89, label %90

89:                                               ; preds = %87
  tail call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #8, !srcloc !6
  br label %90

90:                                               ; preds = %85, %87, %89
  %91 = getelementptr inbounds i8, ptr %0, i64 432
  %92 = load ptr, ptr %91, align 16, !tbaa !7
  %93 = load ptr, ptr %92, align 8, !tbaa !40
  %94 = getelementptr inbounds i8, ptr %93, i64 80
  %95 = load ptr, ptr %94, align 8
  tail call void %95(ptr noundef nonnull align 8 dereferenceable(16) %92)
  %96 = getelementptr inbounds i8, ptr %0, i64 16
  %97 = tail call noundef i32 @_ZNK3JPH11BodyManager18GetNumActiveBodiesENS_9EBodyTypeE(ptr noundef nonnull align 8 dereferenceable(297) %96, i8 noundef zeroext 0)
  %98 = tail call noundef i32 @_ZNK3JPH11BodyManager18GetNumActiveBodiesENS_9EBodyTypeE(ptr noundef nonnull align 8 dereferenceable(297) %96, i8 noundef zeroext 1)
  %99 = or i32 %98, %97
  %or.cond = icmp eq i32 %99, 0
  %100 = fcmp ole float %1, 0.000000e+00
  %or.cond3 = or i1 %100, %or.cond
  br i1 %or.cond3, label %101, label %119

101:                                              ; preds = %90
  tail call void @_ZNK3JPH11BodyManager13LockAllBodiesEv(ptr noundef nonnull align 8 dereferenceable(297) %96)
  %102 = load ptr, ptr %91, align 16, !tbaa !7
  %103 = load ptr, ptr %102, align 8, !tbaa !40
  %104 = getelementptr inbounds i8, ptr %103, i64 88
  %105 = load ptr, ptr %104, align 8
  tail call void %105(ptr noundef nonnull align 8 dereferenceable(16) %102)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #8
  %106 = load ptr, ptr %91, align 16, !tbaa !7
  %107 = load ptr, ptr %106, align 8, !tbaa !40
  %108 = getelementptr inbounds i8, ptr %107, i64 96
  %109 = load ptr, ptr %108, align 8
  call void %109(ptr dead_on_unwind nonnull writable sret(%"struct.JPH::BroadPhase::UpdateState") align 8 %6, ptr noundef nonnull align 8 dereferenceable(16) %106)
  %110 = load ptr, ptr %91, align 16, !tbaa !7
  %111 = load ptr, ptr %110, align 8, !tbaa !40
  %112 = getelementptr inbounds i8, ptr %111, i64 104
  %113 = load ptr, ptr %112, align 8
  call void %113(ptr noundef nonnull align 8 dereferenceable(16) %110, ptr noundef nonnull align 8 dereferenceable(32) %6)
  %114 = load ptr, ptr %91, align 16, !tbaa !7
  %115 = load ptr, ptr %114, align 8, !tbaa !40
  %116 = getelementptr inbounds i8, ptr %115, i64 112
  %117 = load ptr, ptr %116, align 8
  call void %117(ptr noundef nonnull align 8 dereferenceable(16) %114)
  %118 = getelementptr inbounds i8, ptr %0, i64 536
  call void @_ZN3JPH24ContactConstraintManager55FinalizeContactCacheAndCallContactPointRemovedCallbacksEjj(ptr noundef nonnull align 8 dereferenceable(248) %118, i32 noundef 0, i32 noundef 0)
  call void @_ZNK3JPH11BodyManager15UnlockAllBodiesEv(ptr noundef nonnull align 8 dereferenceable(297) %96)
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #8
  br label %715

119:                                              ; preds = %90
  %120 = sitofp i32 %2 to float
  %121 = fdiv float %1, %120
  %122 = getelementptr inbounds i8, ptr %0, i64 448
  %123 = getelementptr inbounds i8, ptr %0, i64 525
  %124 = load i8, ptr %123, align 1, !tbaa !42, !range !43, !noundef !44
  %125 = trunc nuw i8 %124 to i1
  br i1 %125, label %126, label %132

126:                                              ; preds = %119
  %127 = getelementptr inbounds i8, ptr %0, i64 1136
  %128 = load float, ptr %127, align 16, !tbaa !45
  %129 = fcmp ogt float %128, 0.000000e+00
  br i1 %129, label %130, label %132

130:                                              ; preds = %126
  %131 = fdiv float %121, %128
  br label %132

132:                                              ; preds = %119, %126, %130
  %133 = phi float [ %131, %130 ], [ 0.000000e+00, %126 ], [ 0.000000e+00, %119 ]
  %134 = getelementptr inbounds i8, ptr %0, i64 1136
  store float %121, ptr %134, align 16, !tbaa !45
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %7) #8
  call void @_ZN3JPH20PhysicsUpdateContextC1ERNS_13TempAllocatorE(ptr noundef nonnull align 8 dereferenceable(124) %7, ptr noundef nonnull align 8 dereferenceable(8) %3)
  store ptr %0, ptr %7, align 8, !tbaa !46
  %135 = getelementptr inbounds i8, ptr %7, i64 16
  store ptr %4, ptr %135, align 8, !tbaa !50
  %136 = load ptr, ptr %4, align 8, !tbaa !40
  %137 = getelementptr inbounds i8, ptr %136, i64 32
  %138 = load ptr, ptr %137, align 8
  %139 = invoke noundef ptr %138(ptr noundef nonnull align 8 dereferenceable(8) %4)
          to label %140 unwind label %156

140:                                              ; preds = %132
  %141 = getelementptr inbounds i8, ptr %7, i64 24
  store ptr %139, ptr %141, align 8, !tbaa !51
  %142 = getelementptr inbounds i8, ptr %0, i64 864
  %143 = getelementptr inbounds i8, ptr %7, i64 64
  store ptr %142, ptr %143, align 8, !tbaa !52
  %144 = getelementptr inbounds i8, ptr %7, i64 32
  store float %121, ptr %144, align 8, !tbaa !53
  %145 = getelementptr inbounds i8, ptr %7, i64 36
  store float %133, ptr %145, align 4, !tbaa !54
  %146 = getelementptr inbounds i8, ptr %7, i64 72
  %147 = sext i32 %2 to i64
  invoke void @_ZN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(32) %146, i64 noundef %147)
          to label %148 unwind label %156

148:                                              ; preds = %140
  %149 = getelementptr inbounds i8, ptr %7, i64 56
  %150 = load ptr, ptr %149, align 8, !tbaa !55
  %151 = icmp eq ptr %150, null
  br i1 %151, label %158, label %152

152:                                              ; preds = %148
  %153 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.30, ptr noundef nonnull @.str.24, i32 noundef 177)
          to label %154 unwind label %156

154:                                              ; preds = %152
  br i1 %153, label %155, label %158

155:                                              ; preds = %154
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #8, !srcloc !56
  br label %158

156:                                              ; preds = %168, %167, %165, %158, %152, %140, %132
  %157 = landingpad { ptr, i32 }
          cleanup
  br label %714

158:                                              ; preds = %155, %154, %148
  %159 = load i32, ptr %122, align 16, !tbaa !57
  %160 = shl i32 %159, 3
  %161 = load ptr, ptr %3, align 8, !tbaa !40
  %162 = getelementptr inbounds i8, ptr %161, i64 16
  %163 = load ptr, ptr %162, align 8
  %164 = invoke noundef ptr %163(ptr noundef nonnull align 8 dereferenceable(8) %3, i32 noundef %160)
          to label %165 unwind label %156

165:                                              ; preds = %158
  store ptr %164, ptr %149, align 8, !tbaa !55
  %166 = getelementptr inbounds i8, ptr %0, i64 1040
  invoke void @_ZN3JPH5Mutex4lockEv(ptr noundef nonnull align 8 dereferenceable(48) %166)
          to label %167 unwind label %156

167:                                              ; preds = %165
  invoke void @_ZNK3JPH11BodyManager13LockAllBodiesEv(ptr noundef nonnull align 8 dereferenceable(297) %96)
          to label %168 unwind label %156

168:                                              ; preds = %167
  %169 = load ptr, ptr %91, align 16, !tbaa !7
  %170 = load ptr, ptr %169, align 8, !tbaa !40
  %171 = getelementptr inbounds i8, ptr %170, i64 88
  %172 = load ptr, ptr %171, align 8
  invoke void %172(ptr noundef nonnull align 8 dereferenceable(16) %169)
          to label %173 unwind label %156

173:                                              ; preds = %168
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #8
  %174 = invoke noundef i32 @_ZNK3JPH20PhysicsUpdateContext17GetMaxConcurrencyEv(ptr noundef nonnull align 8 dereferenceable(124) %7)
          to label %175 unwind label %268

175:                                              ; preds = %173
  store i32 %174, ptr %8, align 4, !tbaa !58
  %176 = getelementptr inbounds i8, ptr %0, i64 1088
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #8
  %177 = call noundef zeroext i1 @_ZNK3JPH5ArrayIPNS_19PhysicsStepListenerENS_12STLAllocatorIS2_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %176)
  br i1 %177, label %190, label %178

178:                                              ; preds = %175
  store i32 1, ptr %9, align 4, !tbaa !58
  %179 = call noundef i64 @_ZNK3JPH5ArrayIPNS_19PhysicsStepListenerENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %176)
  %180 = trunc i64 %179 to i32
  %181 = getelementptr inbounds i8, ptr %0, i64 452
  %182 = load i32, ptr %181, align 4, !tbaa !59
  %183 = sdiv i32 %180, %182
  %184 = getelementptr inbounds i8, ptr %0, i64 456
  %185 = load i32, ptr %184, align 8, !tbaa !60
  %186 = sdiv i32 %183, %185
  store i32 %186, ptr %10, align 4, !tbaa !58
  %187 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 4 dereferenceable(4) %8)
  %188 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %9, ptr noundef nonnull align 4 dereferenceable(4) %187)
  %189 = load i32, ptr %188, align 4, !tbaa !58
  br label %190

190:                                              ; preds = %175, %178
  %191 = phi i32 [ %189, %178 ], [ 0, %175 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #8
  store i32 1, ptr %11, align 4, !tbaa !58
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #8
  %192 = add nsw i32 %97, 63
  %193 = sdiv i32 %192, 64
  store i32 %193, ptr %12, align 4, !tbaa !58
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #8
  %194 = load i32, ptr %8, align 4, !tbaa !58
  %195 = add nsw i32 %194, -2
  store i32 %195, ptr %13, align 4, !tbaa !58
  %196 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %12, ptr noundef nonnull align 4 dereferenceable(4) %13)
  %197 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %11, ptr noundef nonnull align 4 dereferenceable(4) %196)
  %198 = load i32, ptr %197, align 4, !tbaa !58
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #8
  store i32 1, ptr %14, align 4, !tbaa !58
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #8
  %199 = getelementptr inbounds i8, ptr %0, i64 784
  %200 = invoke noundef i32 @_ZNK3JPH17ConstraintManager17GetNumConstraintsEv(ptr noundef nonnull align 8 dereferenceable(80) %199)
          to label %201 unwind label %270

201:                                              ; preds = %190
  %202 = add nsw i32 %200, 63
  %203 = sdiv i32 %202, 64
  store i32 %203, ptr %15, align 4, !tbaa !58
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #8
  %204 = load i32, ptr %8, align 4, !tbaa !58
  %205 = add nsw i32 %204, -2
  store i32 %205, ptr %16, align 4, !tbaa !58
  %206 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %15, ptr noundef nonnull align 4 dereferenceable(4) %16)
  %207 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %14, ptr noundef nonnull align 4 dereferenceable(4) %206)
  %208 = load i32, ptr %207, align 4, !tbaa !58
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #8
  store i32 1, ptr %17, align 4, !tbaa !58
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #8
  %209 = invoke noundef i32 @_ZNK3JPH17ConstraintManager17GetNumConstraintsEv(ptr noundef nonnull align 8 dereferenceable(80) %199)
          to label %210 unwind label %272

210:                                              ; preds = %201
  %211 = add nsw i32 %209, 255
  %212 = sdiv i32 %211, 256
  store i32 %212, ptr %18, align 4, !tbaa !58
  %213 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %18, ptr noundef nonnull align 4 dereferenceable(4) %8)
  %214 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %17, ptr noundef nonnull align 4 dereferenceable(4) %213)
  %215 = load i32, ptr %214, align 4, !tbaa !58
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #8
  %216 = load i32, ptr %8, align 4, !tbaa !58
  %217 = icmp eq i32 %216, 1
  %218 = select i1 %217, i32 1, i32 2
  store i32 %218, ptr %19, align 4, !tbaa !58
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #8
  %219 = add nsw i32 %97, 15
  %220 = sdiv i32 %219, 16
  store i32 %220, ptr %20, align 4, !tbaa !58
  %221 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %20, ptr noundef nonnull align 4 dereferenceable(4) %8)
  %222 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %19, ptr noundef nonnull align 4 dereferenceable(4) %221)
  %223 = load i32, ptr %222, align 4, !tbaa !58
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #8
  store i32 1, ptr %21, align 4, !tbaa !58
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #8
  store i32 %193, ptr %22, align 4, !tbaa !58
  %224 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %22, ptr noundef nonnull align 4 dereferenceable(4) %8)
  %225 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %21, ptr noundef nonnull align 4 dereferenceable(4) %224)
  %226 = load i32, ptr %225, align 4, !tbaa !58
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #8
  br i1 %81, label %.lr.ph405, label %._crit_edge406

.lr.ph405:                                        ; preds = %210
  %227 = add nsw i32 %2, -1
  %228 = getelementptr inbounds i8, ptr %25, i64 8
  %229 = add nsw i32 %223, 2
  %230 = getelementptr inbounds i8, ptr %28, i64 8
  %231 = sub i32 32, %223
  %232 = lshr i32 -1, %231
  %233 = icmp sgt i32 %223, 0
  %234 = getelementptr inbounds i8, ptr %31, i64 8
  %235 = add i32 %198, 1
  %236 = add i32 %235, %208
  %237 = getelementptr inbounds i8, ptr %7, i64 48
  %238 = getelementptr inbounds i8, ptr %0, i64 536
  %239 = getelementptr inbounds i8, ptr %7, i64 8
  %240 = icmp sgt i32 %198, 0
  %241 = getelementptr inbounds i8, ptr %34, i64 8
  %242 = icmp sgt i32 %191, 0
  %243 = icmp sgt i32 %215, 0
  %244 = getelementptr inbounds i8, ptr %37, i64 8
  %245 = add nsw i32 %208, 1
  %246 = getelementptr inbounds i8, ptr %40, i64 8
  %247 = icmp sgt i32 %208, 0
  %248 = getelementptr inbounds i8, ptr %43, i64 8
  %249 = getelementptr inbounds i8, ptr %46, i64 8
  %250 = getelementptr inbounds i8, ptr %49, i64 8
  %251 = getelementptr inbounds i8, ptr %52, i64 8
  %252 = getelementptr inbounds i8, ptr %55, i64 8
  %253 = getelementptr inbounds i8, ptr %58, i64 8
  %254 = getelementptr inbounds i8, ptr %61, i64 8
  %255 = add nsw i32 %215, 2
  %256 = getelementptr inbounds i8, ptr %64, i64 8
  %257 = icmp sgt i32 %226, 0
  %258 = getelementptr inbounds i8, ptr %67, i64 8
  %259 = getelementptr inbounds i8, ptr %70, i64 8
  %260 = add nsw i32 %226, 1
  %261 = getelementptr inbounds i8, ptr %73, i64 8
  %262 = getelementptr inbounds i8, ptr %76, i64 8
  %263 = getelementptr inbounds i8, ptr %79, i64 8
  %264 = zext nneg i32 %227 to i64
  %wide.trip.count = zext nneg i32 %2 to i64
  br label %274

._crit_edge406:                                   ; preds = %562, %210
  %265 = load ptr, ptr %141, align 8, !tbaa !51
  call void @llvm.lifetime.start.p0(i64 16392, ptr nonnull %80) #8
  call void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EEC2Ev(ptr noundef nonnull align 8 dereferenceable(16392) %80) #8
  %266 = call noundef ptr @_ZN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(32) %146)
  %267 = call noundef ptr @_ZN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(32) %146)
  %.not447 = icmp eq ptr %266, %267
  br i1 %.not447, label %._crit_edge451, label %.lr.ph450

268:                                              ; preds = %173
  %269 = landingpad { ptr, i32 }
          cleanup
  br label %713

270:                                              ; preds = %190
  %271 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #8
  br label %713

272:                                              ; preds = %201
  %273 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #8
  br label %713

274:                                              ; preds = %.lr.ph405, %562
  %indvars.iv = phi i64 [ 0, %.lr.ph405 ], [ %indvars.iv.next, %562 ]
  %275 = icmp eq i64 %indvars.iv, 0
  %276 = icmp eq i64 %indvars.iv, %264
  %277 = invoke noundef nonnull align 8 dereferenceable(7344) ptr @_ZN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %146, i64 noundef %indvars.iv)
          to label %278 unwind label %306

278:                                              ; preds = %274
  %279 = zext i1 %276 to i8
  %280 = zext i1 %275 to i8
  store ptr %7, ptr %277, align 8, !tbaa !61
  %281 = getelementptr inbounds i8, ptr %277, i64 8
  store i8 %280, ptr %281, align 8, !tbaa !68
  %282 = getelementptr inbounds i8, ptr %277, i64 9
  store i8 %279, ptr %282, align 1, !tbaa !69
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #8
  %.sroa.0141.0.copyload = load i32, ptr @_ZN3JPHL30cColorUpdateBroadPhaseFinalizeE, align 4, !tbaa !70
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %25) #8
  store ptr %7, ptr %25, align 8, !tbaa !71
  store ptr %277, ptr %228, align 8, !tbaa !71
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull align 8 dereferenceable(16) %25) #8
  %283 = load ptr, ptr %4, align 8, !tbaa !40
  %284 = getelementptr inbounds i8, ptr %283, i64 24
  %285 = load ptr, ptr %284, align 8
  invoke void %285(ptr dead_on_unwind nonnull writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %23, ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull @.str.31, i32 %.sroa.0141.0.copyload, ptr noundef nonnull align 8 dereferenceable(32) %24, i32 noundef %229)
          to label %286 unwind label %308

286:                                              ; preds = %278
  %287 = getelementptr inbounds i8, ptr %277, i64 5672
  %288 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %287, ptr noundef nonnull align 8 dereferenceable(8) %23) #8
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %23) #8
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %25) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #8
  %not. = xor i1 %275, true
  %289 = zext i1 %not. to i32
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #8
  %.sroa.0136.0.copyload = load i32, ptr @_ZN3JPHL29cColorUpdateBroadPhasePrepareE, align 4, !tbaa !70
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %27) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %28) #8
  store ptr %7, ptr %28, align 8, !tbaa !71
  store ptr %277, ptr %230, align 8, !tbaa !71
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(16) %28) #8
  %290 = load ptr, ptr %4, align 8, !tbaa !40
  %291 = getelementptr inbounds i8, ptr %290, i64 24
  %292 = load ptr, ptr %291, align 8
  invoke void %292(ptr dead_on_unwind nonnull writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %26, ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull @.str.32, i32 %.sroa.0136.0.copyload, ptr noundef nonnull align 8 dereferenceable(32) %27, i32 noundef %289)
          to label %293 unwind label %310

293:                                              ; preds = %286
  %294 = getelementptr inbounds i8, ptr %277, i64 4608
  %295 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %294, ptr noundef nonnull align 8 dereferenceable(8) %26) #8
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %26) #8
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %28) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #8
  %296 = getelementptr inbounds i8, ptr %277, i64 436
  %297 = load i32, ptr %8, align 4, !tbaa !58
  invoke void @_ZN3JPH11StaticArrayINS_20PhysicsUpdateContext13BodyPairQueueELj32EE6resizeEj(ptr noundef nonnull align 4 dereferenceable(4100) %296, i32 noundef %297)
          to label %298 unwind label %312

298:                                              ; preds = %293
  %299 = load i32, ptr %122, align 16, !tbaa !57
  %300 = load i32, ptr %8, align 4, !tbaa !58
  %301 = sdiv i32 %299, %300
  %302 = getelementptr inbounds i8, ptr %277, i64 4536
  store i32 %301, ptr %302, align 8, !tbaa !72
  %303 = getelementptr inbounds i8, ptr %277, i64 4540
  %304 = call noundef i32 @_ZNSt13__atomic_baseIjEaSEj(ptr noundef nonnull align 4 dereferenceable(4) %303, i32 noundef %232) #8
  %305 = getelementptr inbounds i8, ptr %277, i64 5408
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %305, i32 noundef %223)
          to label %.preheader380 unwind label %312

.preheader380:                                    ; preds = %298
  br i1 %233, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %322, %.preheader380
  br i1 %275, label %330, label %352

306:                                              ; preds = %274
  %307 = landingpad { ptr, i32 }
          cleanup
  br label %713

308:                                              ; preds = %278
  %309 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %25) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #8
  br label %713

310:                                              ; preds = %286
  %311 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %28) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #8
  br label %713

312:                                              ; preds = %559, %553, %._crit_edge402, %529, %526, %519, %._crit_edge399, %498, %497, %494, %487, %486, %._crit_edge396, %466, %430, %424, %421, %._crit_edge390, %386, %._crit_edge384, %352, %349, %348, %342, %340, %336, %330, %298, %293
  %313 = landingpad { ptr, i32 }
          cleanup
  br label %713

.lr.ph:                                           ; preds = %.preheader380, %322
  %.0317381 = phi i32 [ %324, %322 ], [ 0, %.preheader380 ]
  %314 = icmp eq i32 %.0317381, 0
  %315 = zext i1 %314 to i32
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #8
  %.sroa.0129.0.copyload = load i32, ptr @_ZN3JPHL20cColorFindCollisionsE, align 4, !tbaa !70
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %30) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %31) #8
  store ptr %277, ptr %31, align 8, !tbaa !71
  store i32 %.0317381, ptr %234, align 8, !tbaa !73
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull align 8 dereferenceable(12) %31) #8
  %316 = add nsw i32 %236, %315
  %317 = load ptr, ptr %4, align 8, !tbaa !40
  %318 = getelementptr inbounds i8, ptr %317, i64 24
  %319 = load ptr, ptr %318, align 8
  invoke void %319(ptr dead_on_unwind nonnull writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %29, ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull @.str.33, i32 %.sroa.0129.0.copyload, ptr noundef nonnull align 8 dereferenceable(32) %30, i32 noundef %316)
          to label %320 unwind label %325

320:                                              ; preds = %.lr.ph
  %321 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %305, i32 noundef %.0317381)
          to label %322 unwind label %327

322:                                              ; preds = %320
  %323 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %321, ptr noundef nonnull align 8 dereferenceable(8) %29) #8
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %29) #8
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #8
  %324 = add nuw nsw i32 %.0317381, 1
  %exitcond.not = icmp eq i32 %324, %223
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !75

325:                                              ; preds = %.lr.ph
  %326 = landingpad { ptr, i32 }
          cleanup
  br label %329

327:                                              ; preds = %320
  %328 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %29) #8
  br label %329

329:                                              ; preds = %327, %325
  %.pn365 = phi { ptr, i32 } [ %328, %327 ], [ %326, %325 ]
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #8
  br label %713

330:                                              ; preds = %._crit_edge
  call void @_ZN3JPH11BodyManager21SetActiveBodiesLockedEb(ptr noundef nonnull align 8 dereferenceable(297) %96, i1 noundef zeroext true)
  %331 = call noundef i32 @_ZNK3JPH11BodyManager18GetNumActiveBodiesENS_9EBodyTypeE(ptr noundef nonnull align 8 dereferenceable(297) %96, i8 noundef zeroext 0)
  %332 = getelementptr inbounds i8, ptr %277, i64 48
  store i32 %331, ptr %332, align 8, !tbaa !77
  invoke void @_ZN3JPH17ConstraintManager18LockAllConstraintsEv(ptr noundef nonnull align 8 dereferenceable(80) %199)
          to label %333 unwind label %312

333:                                              ; preds = %330
  %334 = load ptr, ptr %237, align 8, !tbaa !78
  %335 = icmp eq ptr %334, null
  br i1 %335, label %340, label %336

336:                                              ; preds = %333
  %337 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.34, ptr noundef nonnull @.str.24, i32 noundef 283)
          to label %338 unwind label %312

338:                                              ; preds = %336
  br i1 %337, label %339, label %340

339:                                              ; preds = %338
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #8, !srcloc !79
  br label %340

340:                                              ; preds = %339, %338, %333
  %341 = invoke noundef i32 @_ZNK3JPH17ConstraintManager17GetNumConstraintsEv(ptr noundef nonnull align 8 dereferenceable(80) %199)
          to label %342 unwind label %312

342:                                              ; preds = %340
  %343 = shl i32 %341, 3
  %344 = load ptr, ptr %3, align 8, !tbaa !40
  %345 = getelementptr inbounds i8, ptr %344, i64 16
  %346 = load ptr, ptr %345, align 8
  %347 = invoke noundef ptr %346(ptr noundef nonnull align 8 dereferenceable(8) %3, i32 noundef %343)
          to label %348 unwind label %312

348:                                              ; preds = %342
  store ptr %347, ptr %237, align 8, !tbaa !78
  invoke void @_ZN3JPH24ContactConstraintManager23PrepareConstraintBufferEPNS_20PhysicsUpdateContextE(ptr noundef nonnull align 8 dereferenceable(248) %238, ptr noundef nonnull %7)
          to label %349 unwind label %312

349:                                              ; preds = %348
  %350 = call noundef i32 @_ZNK3JPH24ContactConstraintManager17GetMaxConstraintsEv(ptr noundef nonnull align 8 dereferenceable(248) %238)
  %351 = load ptr, ptr %239, align 8, !tbaa !80
  invoke void @_ZN3JPH13IslandBuilder25PrepareContactConstraintsEjPNS_13TempAllocatorE(ptr noundef nonnull align 8 dereferenceable(112) %142, i32 noundef %350, ptr noundef %351)
          to label %352 unwind label %312

352:                                              ; preds = %349, %._crit_edge
  %353 = getelementptr inbounds i8, ptr %277, i64 5144
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %353, i32 noundef %198)
          to label %.preheader379 unwind label %312

.preheader379:                                    ; preds = %352
  br i1 %240, label %.lr.ph383, label %._crit_edge384

.lr.ph383:                                        ; preds = %.preheader379
  %354 = select i1 %242, i32 %191, i32 %289
  br label %356

._crit_edge384:                                   ; preds = %362, %.preheader379
  %355 = getelementptr inbounds i8, ptr %277, i64 5680
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %355, i32 noundef %215)
          to label %.preheader378 unwind label %312

.preheader378:                                    ; preds = %._crit_edge384
  br i1 %243, label %.lr.ph386, label %._crit_edge387

356:                                              ; preds = %.lr.ph383, %362
  %.0319382 = phi i32 [ 0, %.lr.ph383 ], [ %364, %362 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %32) #8
  %.sroa.0125.0.copyload = load i32, ptr @_ZN3JPHL18cColorApplyGravityE, align 4, !tbaa !70
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %33) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %34) #8
  store ptr %7, ptr %34, align 8, !tbaa !71
  store ptr %277, ptr %241, align 8, !tbaa !71
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull align 8 dereferenceable(16) %34) #8
  %357 = load ptr, ptr %4, align 8, !tbaa !40
  %358 = getelementptr inbounds i8, ptr %357, i64 24
  %359 = load ptr, ptr %358, align 8
  invoke void %359(ptr dead_on_unwind nonnull writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %32, ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull @.str.35, i32 %.sroa.0125.0.copyload, ptr noundef nonnull align 8 dereferenceable(32) %33, i32 noundef %354)
          to label %360 unwind label %365

360:                                              ; preds = %356
  %361 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %353, i32 noundef %.0319382)
          to label %362 unwind label %367

362:                                              ; preds = %360
  %363 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %361, ptr noundef nonnull align 8 dereferenceable(8) %32) #8
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %32) #8
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %34) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #8
  %364 = add nuw nsw i32 %.0319382, 1
  %exitcond452.not = icmp eq i32 %364, %198
  br i1 %exitcond452.not, label %._crit_edge384, label %356, !llvm.loop !81

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

367:                                              ; preds = %360
  %368 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %32) #8
  br label %369

369:                                              ; preds = %367, %365
  %.pn363 = phi { ptr, i32 } [ %368, %367 ], [ %366, %365 ]
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %34) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #8
  br label %713

._crit_edge387:                                   ; preds = %378, %.preheader378
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %38) #8
  %.sroa.0120.0.copyload = load i32, ptr @_ZN3JPHL33cColorBuildIslandsFromConstraintsE, align 4, !tbaa !70
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %39) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %40) #8
  store ptr %7, ptr %40, align 8, !tbaa !71
  store ptr %277, ptr %246, align 8, !tbaa !71
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_5vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 8 dereferenceable(16) %40) #8
  %370 = load ptr, ptr %4, align 8, !tbaa !40
  %371 = getelementptr inbounds i8, ptr %370, i64 24
  %372 = load ptr, ptr %371, align 8
  invoke void %372(ptr dead_on_unwind nonnull writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %38, ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull @.str.37, i32 %.sroa.0120.0.copyload, ptr noundef nonnull align 8 dereferenceable(32) %39, i32 noundef %245)
          to label %386 unwind label %392

.lr.ph386:                                        ; preds = %.preheader378, %378
  %.0320385 = phi i32 [ %380, %378 ], [ 0, %.preheader378 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %35) #8
  %.sroa.0121.0.copyload = load i32, ptr @_ZN3JPHL30cColorSetupVelocityConstraintsE, align 4, !tbaa !70
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %36) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %37) #8
  store ptr %7, ptr %37, align 8, !tbaa !71
  store ptr %277, ptr %244, align 8, !tbaa !71
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef nonnull align 8 dereferenceable(16) %37) #8
  %373 = load ptr, ptr %4, align 8, !tbaa !40
  %374 = getelementptr inbounds i8, ptr %373, i64 24
  %375 = load ptr, ptr %374, align 8
  invoke void %375(ptr dead_on_unwind nonnull writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %35, ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull @.str.36, i32 %.sroa.0121.0.copyload, ptr noundef nonnull align 8 dereferenceable(32) %36, i32 noundef %245)
          to label %376 unwind label %381

376:                                              ; preds = %.lr.ph386
  %377 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %355, i32 noundef %.0320385)
          to label %378 unwind label %383

378:                                              ; preds = %376
  %379 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %377, ptr noundef nonnull align 8 dereferenceable(8) %35) #8
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %35) #8
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %37) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #8
  %380 = add nuw nsw i32 %.0320385, 1
  %exitcond453.not = icmp eq i32 %380, %215
  br i1 %exitcond453.not, label %._crit_edge387, label %.lr.ph386, !llvm.loop !82

381:                                              ; preds = %.lr.ph386
  %382 = landingpad { ptr, i32 }
          cleanup
  br label %385

383:                                              ; preds = %376
  %384 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %35) #8
  br label %385

385:                                              ; preds = %383, %381
  %.pn361 = phi { ptr, i32 } [ %384, %383 ], [ %382, %381 ]
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %37) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #8
  br label %713

386:                                              ; preds = %._crit_edge387
  %387 = getelementptr inbounds i8, ptr %277, i64 5944
  %388 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %387, ptr noundef nonnull align 8 dereferenceable(8) %38) #8
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %38) #8
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %40) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #8
  %389 = getelementptr inbounds i8, ptr %277, i64 4880
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %389, i32 noundef %208)
          to label %.preheader377 unwind label %312

.preheader377:                                    ; preds = %386
  br i1 %247, label %.lr.ph389, label %._crit_edge390

.lr.ph389:                                        ; preds = %.preheader377
  %390 = select i1 %242, i32 %191, i32 %289
  br label %394

._crit_edge390:                                   ; preds = %400, %.preheader377
  %391 = getelementptr inbounds i8, ptr %277, i64 4616
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %391, i32 noundef %191)
          to label %.preheader376 unwind label %312

.preheader376:                                    ; preds = %._crit_edge390
  br i1 %242, label %.lr.ph392, label %._crit_edge393

392:                                              ; preds = %._crit_edge387
  %393 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %40) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #8
  br label %713

394:                                              ; preds = %.lr.ph389, %400
  %.0321388 = phi i32 [ 0, %.lr.ph389 ], [ %402, %400 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %41) #8
  %.sroa.0116.0.copyload = load i32, ptr @_ZN3JPHL32cColorDetermineActiveConstraintsE, align 4, !tbaa !70
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %42) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %43) #8
  store ptr %7, ptr %43, align 8, !tbaa !71
  store ptr %277, ptr %248, align 8, !tbaa !71
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_6vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %42, ptr noundef nonnull align 8 dereferenceable(16) %43) #8
  %395 = load ptr, ptr %4, align 8, !tbaa !40
  %396 = getelementptr inbounds i8, ptr %395, i64 24
  %397 = load ptr, ptr %396, align 8
  invoke void %397(ptr dead_on_unwind nonnull writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %41, ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull @.str.38, i32 %.sroa.0116.0.copyload, ptr noundef nonnull align 8 dereferenceable(32) %42, i32 noundef %390)
          to label %398 unwind label %403

398:                                              ; preds = %394
  %399 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %389, i32 noundef %.0321388)
          to label %400 unwind label %405

400:                                              ; preds = %398
  %401 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %399, ptr noundef nonnull align 8 dereferenceable(8) %41) #8
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %41) #8
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %43) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %42) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #8
  %402 = add nuw nsw i32 %.0321388, 1
  %exitcond454.not = icmp eq i32 %402, %208
  br i1 %exitcond454.not, label %._crit_edge390, label %394, !llvm.loop !83

403:                                              ; preds = %394
  %404 = landingpad { ptr, i32 }
          cleanup
  br label %407

405:                                              ; preds = %398
  %406 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %41) #8
  br label %407

407:                                              ; preds = %405, %403
  %.pn359 = phi { ptr, i32 } [ %406, %405 ], [ %404, %403 ]
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %43) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %42) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #8
  br label %713

._crit_edge393:                                   ; preds = %413, %.preheader376
  br i1 %275, label %426, label %421

.lr.ph392:                                        ; preds = %.preheader376, %413
  %.0323391 = phi i32 [ %415, %413 ], [ 0, %.preheader376 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %44) #8
  %.sroa.0112.0.copyload = load i32, ptr @_ZN3JPHL19cColorStepListenersE, align 4, !tbaa !70
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %45) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %46) #8
  store ptr %7, ptr %46, align 8, !tbaa !71
  store ptr %277, ptr %249, align 8, !tbaa !71
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_7vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull align 8 dereferenceable(16) %46) #8
  %408 = load ptr, ptr %4, align 8, !tbaa !40
  %409 = getelementptr inbounds i8, ptr %408, i64 24
  %410 = load ptr, ptr %409, align 8
  invoke void %410(ptr dead_on_unwind nonnull writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %44, ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull @.str.39, i32 %.sroa.0112.0.copyload, ptr noundef nonnull align 8 dereferenceable(32) %45, i32 noundef %289)
          to label %411 unwind label %416

411:                                              ; preds = %.lr.ph392
  %412 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %391, i32 noundef %.0323391)
          to label %413 unwind label %418

413:                                              ; preds = %411
  %414 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %412, ptr noundef nonnull align 8 dereferenceable(8) %44) #8
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %44) #8
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %46) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %44) #8
  %415 = add nuw nsw i32 %.0323391, 1
  %exitcond455.not = icmp eq i32 %415, %191
  br i1 %exitcond455.not, label %._crit_edge393, label %.lr.ph392, !llvm.loop !84

416:                                              ; preds = %.lr.ph392
  %417 = landingpad { ptr, i32 }
          cleanup
  br label %420

418:                                              ; preds = %411
  %419 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %44) #8
  br label %420

420:                                              ; preds = %418, %416
  %.pn357 = phi { ptr, i32 } [ %419, %418 ], [ %417, %416 ]
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %46) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %44) #8
  br label %713

421:                                              ; preds = %._crit_edge393
  %422 = add nsw i64 %indvars.iv, -1
  %423 = invoke noundef nonnull align 8 dereferenceable(7344) ptr @_ZN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %146, i64 noundef %422)
          to label %424 unwind label %312

424:                                              ; preds = %421
  %425 = getelementptr inbounds i8, ptr %423, i64 7336
  invoke void @_ZNK3JPH9JobSystem9JobHandle16RemoveDependencyEi(ptr noundef nonnull align 8 dereferenceable(8) %425, i32 noundef 1)
          to label %426 unwind label %312

426:                                              ; preds = %424, %._crit_edge393
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %47) #8
  %.sroa.0111.0.copyload = load i32, ptr @_ZN3JPHL21cColorFinalizeIslandsE, align 4, !tbaa !70
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %48) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %49) #8
  store ptr %7, ptr %49, align 8, !tbaa !71
  store ptr %277, ptr %250, align 8, !tbaa !71
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_8vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %48, ptr noundef nonnull align 8 dereferenceable(16) %49) #8
  %427 = load ptr, ptr %4, align 8, !tbaa !40
  %428 = getelementptr inbounds i8, ptr %427, i64 24
  %429 = load ptr, ptr %428, align 8
  invoke void %429(ptr dead_on_unwind nonnull writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %47, ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull @.str.40, i32 %.sroa.0111.0.copyload, ptr noundef nonnull align 8 dereferenceable(32) %48, i32 noundef %229)
          to label %430 unwind label %456

430:                                              ; preds = %426
  %431 = getelementptr inbounds i8, ptr %277, i64 5952
  %432 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %431, ptr noundef nonnull align 8 dereferenceable(8) %47) #8
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %47) #8
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %49) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %47) #8
  invoke void @_ZNK3JPH9JobSystem9JobHandle16RemoveDependencyEi(ptr noundef nonnull align 8 dereferenceable(8) %387, i32 noundef 1)
          to label %433 unwind label %312

433:                                              ; preds = %430
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %50) #8
  %.sroa.0110.0.copyload = load i32, ptr @_ZN3JPHL29cColorContactRemovedCallbacksE, align 4, !tbaa !70
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %51) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %52) #8
  store ptr %7, ptr %52, align 8, !tbaa !71
  store ptr %277, ptr %251, align 8, !tbaa !71
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_9vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %51, ptr noundef nonnull align 8 dereferenceable(16) %52) #8
  %434 = load ptr, ptr %4, align 8, !tbaa !40
  %435 = getelementptr inbounds i8, ptr %434, i64 24
  %436 = load ptr, ptr %435, align 8
  invoke void %436(ptr dead_on_unwind nonnull writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %50, ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull @.str.41, i32 %.sroa.0110.0.copyload, ptr noundef nonnull align 8 dereferenceable(32) %51, i32 noundef 1)
          to label %437 unwind label %458

437:                                              ; preds = %433
  %438 = getelementptr inbounds i8, ptr %277, i64 6784
  %439 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %438, ptr noundef nonnull align 8 dereferenceable(8) %50) #8
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %50) #8
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %52) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %50) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %53) #8
  %.sroa.0109.0.copyload = load i32, ptr @_ZN3JPHL24cColorBodySetIslandIndexE, align 4, !tbaa !70
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %54) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %55) #8
  store ptr %7, ptr %55, align 8, !tbaa !71
  store ptr %277, ptr %252, align 8, !tbaa !71
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_10vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %54, ptr noundef nonnull align 8 dereferenceable(16) %55) #8
  %440 = load ptr, ptr %4, align 8, !tbaa !40
  %441 = getelementptr inbounds i8, ptr %440, i64 24
  %442 = load ptr, ptr %441, align 8
  invoke void %442(ptr dead_on_unwind nonnull writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %53, ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull @.str.42, i32 %.sroa.0109.0.copyload, ptr noundef nonnull align 8 dereferenceable(32) %54, i32 noundef 2)
          to label %443 unwind label %460

443:                                              ; preds = %437
  %444 = getelementptr inbounds i8, ptr %277, i64 5960
  %445 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %444, ptr noundef nonnull align 8 dereferenceable(8) %53) #8
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %53) #8
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %55) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %54) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %53) #8
  br i1 %276, label %466, label %446

446:                                              ; preds = %443
  %447 = add nuw nsw i64 %indvars.iv, 1
  %448 = invoke noundef nonnull align 8 dereferenceable(7344) ptr @_ZN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %146, i64 noundef %447)
          to label %449 unwind label %462

449:                                              ; preds = %446
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %56) #8
  %.sroa.0107.0.copyload = load i32, ptr @_ZN3JPHL19cColorStartNextStepE, align 4, !tbaa !70
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %57) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %58) #8
  store ptr %0, ptr %58, align 8, !tbaa !85
  store ptr %448, ptr %253, align 8, !tbaa !87
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_11vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %57, ptr noundef nonnull align 8 dereferenceable(16) %58) #8
  %450 = load ptr, ptr %4, align 8, !tbaa !40
  %451 = getelementptr inbounds i8, ptr %450, i64 24
  %452 = load ptr, ptr %451, align 8
  invoke void %452(ptr dead_on_unwind nonnull writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %56, ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull @.str.43, i32 %.sroa.0107.0.copyload, ptr noundef nonnull align 8 dereferenceable(32) %57, i32 noundef 3)
          to label %453 unwind label %464

453:                                              ; preds = %449
  %454 = getelementptr inbounds i8, ptr %277, i64 7336
  %455 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %454, ptr noundef nonnull align 8 dereferenceable(8) %56) #8
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %56) #8
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %58) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %57) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %56) #8
  br label %466

456:                                              ; preds = %426
  %457 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %49) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %47) #8
  br label %713

458:                                              ; preds = %433
  %459 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %52) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %50) #8
  br label %713

460:                                              ; preds = %437
  %461 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %55) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %54) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %53) #8
  br label %713

462:                                              ; preds = %446
  %463 = landingpad { ptr, i32 }
          cleanup
  br label %713

464:                                              ; preds = %449
  %465 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %58) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %57) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %56) #8
  br label %713

466:                                              ; preds = %453, %443
  %467 = getelementptr inbounds i8, ptr %277, i64 5968
  %468 = load i32, ptr %8, align 4, !tbaa !58
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %467, i32 noundef %468)
          to label %.preheader375 unwind label %312

.preheader375:                                    ; preds = %466
  %469 = load i32, ptr %8, align 4, !tbaa !58
  %470 = icmp sgt i32 %469, 0
  br i1 %470, label %.lr.ph395, label %._crit_edge396

._crit_edge396:                                   ; preds = %476, %.preheader375
  invoke void @_ZN3JPH9JobSystem9JobHandle19sRemoveDependenciesILj32EEEvRNS_11StaticArrayIS1_XT_EEEi(ptr noundef nonnull align 8 dereferenceable(264) %355, i32 noundef 1)
          to label %486 unwind label %312

.lr.ph395:                                        ; preds = %.preheader375, %476
  %.0324394 = phi i32 [ %478, %476 ], [ 0, %.preheader375 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %59) #8
  %.sroa.0103.0.copyload = load i32, ptr @_ZN3JPHL30cColorSolveVelocityConstraintsE, align 4, !tbaa !70
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %60) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %61) #8
  store ptr %7, ptr %61, align 8, !tbaa !71
  store ptr %277, ptr %254, align 8, !tbaa !71
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_12vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %60, ptr noundef nonnull align 8 dereferenceable(16) %61) #8
  %471 = load ptr, ptr %4, align 8, !tbaa !40
  %472 = getelementptr inbounds i8, ptr %471, i64 24
  %473 = load ptr, ptr %472, align 8
  invoke void %473(ptr dead_on_unwind nonnull writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %59, ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull @.str.44, i32 %.sroa.0103.0.copyload, ptr noundef nonnull align 8 dereferenceable(32) %60, i32 noundef %255)
          to label %474 unwind label %481

474:                                              ; preds = %.lr.ph395
  %475 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %467, i32 noundef %.0324394)
          to label %476 unwind label %483

476:                                              ; preds = %474
  %477 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %475, ptr noundef nonnull align 8 dereferenceable(8) %59) #8
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %59) #8
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %61) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %60) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %59) #8
  %478 = add nuw nsw i32 %.0324394, 1
  %479 = load i32, ptr %8, align 4, !tbaa !58
  %480 = icmp slt i32 %478, %479
  br i1 %480, label %.lr.ph395, label %._crit_edge396, !llvm.loop !88

481:                                              ; preds = %.lr.ph395
  %482 = landingpad { ptr, i32 }
          cleanup
  br label %485

483:                                              ; preds = %474
  %484 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %59) #8
  br label %485

485:                                              ; preds = %483, %481
  %.pn355 = phi { ptr, i32 } [ %484, %483 ], [ %482, %481 ]
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %61) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %60) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %59) #8
  br label %713

486:                                              ; preds = %._crit_edge396
  invoke void @_ZN3JPH9JobSystem9JobHandle19sRemoveDependenciesILj32EEEvRNS_11StaticArrayIS1_XT_EEEi(ptr noundef nonnull align 8 dereferenceable(264) %305, i32 noundef 1)
          to label %487 unwind label %312

487:                                              ; preds = %486
  invoke void @_ZNK3JPH9JobSystem9JobHandle16RemoveDependencyEi(ptr noundef nonnull align 8 dereferenceable(8) %431, i32 noundef 1)
          to label %488 unwind label %312

488:                                              ; preds = %487
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %62) #8
  %.sroa.0102.0.copyload = load i32, ptr @_ZN3JPHL26cColorPreIntegrateVelocityE, align 4, !tbaa !70
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %63) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %64) #8
  store ptr %7, ptr %64, align 8, !tbaa !71
  store ptr %277, ptr %256, align 8, !tbaa !71
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_13vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %63, ptr noundef nonnull align 8 dereferenceable(16) %64) #8
  %489 = load i32, ptr %8, align 4, !tbaa !58
  %490 = add nsw i32 %489, 2
  %491 = load ptr, ptr %4, align 8, !tbaa !40
  %492 = getelementptr inbounds i8, ptr %491, i64 24
  %493 = load ptr, ptr %492, align 8
  invoke void %493(ptr dead_on_unwind nonnull writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %62, ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull @.str.45, i32 %.sroa.0102.0.copyload, ptr noundef nonnull align 8 dereferenceable(32) %63, i32 noundef %490)
          to label %494 unwind label %500

494:                                              ; preds = %488
  %495 = getelementptr inbounds i8, ptr %277, i64 6232
  %496 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %495, ptr noundef nonnull align 8 dereferenceable(8) %62) #8
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %62) #8
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %64) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %63) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %62) #8
  invoke void @_ZNK3JPH9JobSystem9JobHandle16RemoveDependencyEi(ptr noundef nonnull align 8 dereferenceable(8) %287, i32 noundef 1)
          to label %497 unwind label %312

497:                                              ; preds = %494
  invoke void @_ZN3JPH9JobSystem9JobHandle19sRemoveDependenciesILj32EEEvRNS_11StaticArrayIS1_XT_EEEi(ptr noundef nonnull align 8 dereferenceable(264) %467, i32 noundef 1)
          to label %498 unwind label %312

498:                                              ; preds = %497
  %499 = getelementptr inbounds i8, ptr %277, i64 6240
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %499, i32 noundef %226)
          to label %.preheader374 unwind label %312

.preheader374:                                    ; preds = %498
  br i1 %257, label %.lr.ph398, label %._crit_edge399

._crit_edge399:                                   ; preds = %507, %.preheader374
  invoke void @_ZNK3JPH9JobSystem9JobHandle16RemoveDependencyEi(ptr noundef nonnull align 8 dereferenceable(8) %495, i32 noundef 1)
          to label %515 unwind label %312

500:                                              ; preds = %488
  %501 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %64) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %63) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %62) #8
  br label %713

.lr.ph398:                                        ; preds = %.preheader374, %507
  %.0325397 = phi i32 [ %509, %507 ], [ 0, %.preheader374 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %65) #8
  %.sroa.098.0.copyload = load i32, ptr @_ZN3JPHL23cColorIntegrateVelocityE, align 4, !tbaa !70
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %66) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %67) #8
  store ptr %7, ptr %67, align 8, !tbaa !71
  store ptr %277, ptr %258, align 8, !tbaa !71
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_14vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %66, ptr noundef nonnull align 8 dereferenceable(16) %67) #8
  %502 = load ptr, ptr %4, align 8, !tbaa !40
  %503 = getelementptr inbounds i8, ptr %502, i64 24
  %504 = load ptr, ptr %503, align 8
  invoke void %504(ptr dead_on_unwind nonnull writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %65, ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull @.str.46, i32 %.sroa.098.0.copyload, ptr noundef nonnull align 8 dereferenceable(32) %66, i32 noundef 2)
          to label %505 unwind label %510

505:                                              ; preds = %.lr.ph398
  %506 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %499, i32 noundef %.0325397)
          to label %507 unwind label %512

507:                                              ; preds = %505
  %508 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %506, ptr noundef nonnull align 8 dereferenceable(8) %65) #8
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %65) #8
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %67) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %66) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %65) #8
  %509 = add nuw nsw i32 %.0325397, 1
  %exitcond456.not = icmp eq i32 %509, %226
  br i1 %exitcond456.not, label %._crit_edge399, label %.lr.ph398, !llvm.loop !89

510:                                              ; preds = %.lr.ph398
  %511 = landingpad { ptr, i32 }
          cleanup
  br label %514

512:                                              ; preds = %505
  %513 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %65) #8
  br label %514

514:                                              ; preds = %512, %510
  %.pn353 = phi { ptr, i32 } [ %513, %512 ], [ %511, %510 ]
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %67) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %66) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %65) #8
  br label %713

515:                                              ; preds = %._crit_edge399
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %68) #8
  %.sroa.097.0.copyload = load i32, ptr @_ZN3JPHL27cColorPostIntegrateVelocityE, align 4, !tbaa !70
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %69) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %70) #8
  store ptr %7, ptr %70, align 8, !tbaa !71
  store ptr %277, ptr %259, align 8, !tbaa !71
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_15vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %69, ptr noundef nonnull align 8 dereferenceable(16) %70) #8
  %516 = load ptr, ptr %4, align 8, !tbaa !40
  %517 = getelementptr inbounds i8, ptr %516, i64 24
  %518 = load ptr, ptr %517, align 8
  invoke void %518(ptr dead_on_unwind nonnull writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %68, ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull @.str.47, i32 %.sroa.097.0.copyload, ptr noundef nonnull align 8 dereferenceable(32) %69, i32 noundef %260)
          to label %519 unwind label %534

519:                                              ; preds = %515
  %520 = getelementptr inbounds i8, ptr %277, i64 6504
  %521 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %520, ptr noundef nonnull align 8 dereferenceable(8) %68) #8
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %68) #8
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %70) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %69) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %68) #8
  invoke void @_ZN3JPH9JobSystem9JobHandle19sRemoveDependenciesILj32EEEvRNS_11StaticArrayIS1_XT_EEEi(ptr noundef nonnull align 8 dereferenceable(264) %499, i32 noundef 1)
          to label %522 unwind label %312

522:                                              ; preds = %519
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %71) #8
  %.sroa.096.0.copyload = load i32, ptr @_ZN3JPHL24cColorResolveCCDContactsE, align 4, !tbaa !70
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %72) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %73) #8
  store ptr %7, ptr %73, align 8, !tbaa !71
  store ptr %277, ptr %261, align 8, !tbaa !71
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_16vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %72, ptr noundef nonnull align 8 dereferenceable(16) %73) #8
  %523 = load ptr, ptr %4, align 8, !tbaa !40
  %524 = getelementptr inbounds i8, ptr %523, i64 24
  %525 = load ptr, ptr %524, align 8
  invoke void %525(ptr dead_on_unwind nonnull writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %71, ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull @.str.48, i32 %.sroa.096.0.copyload, ptr noundef nonnull align 8 dereferenceable(32) %72, i32 noundef 2)
          to label %526 unwind label %536

526:                                              ; preds = %522
  %527 = getelementptr inbounds i8, ptr %277, i64 6512
  %528 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %527, ptr noundef nonnull align 8 dereferenceable(8) %71) #8
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %71) #8
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %73) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %72) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %71) #8
  invoke void @_ZNK3JPH9JobSystem9JobHandle16RemoveDependencyEi(ptr noundef nonnull align 8 dereferenceable(8) %520, i32 noundef 1)
          to label %529 unwind label %312

529:                                              ; preds = %526
  %530 = getelementptr inbounds i8, ptr %277, i64 6520
  %531 = load i32, ptr %8, align 4, !tbaa !58
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %530, i32 noundef %531)
          to label %.preheader unwind label %312

.preheader:                                       ; preds = %529
  %532 = load i32, ptr %8, align 4, !tbaa !58
  %533 = icmp sgt i32 %532, 0
  br i1 %533, label %.lr.ph401, label %._crit_edge402

._crit_edge402:                                   ; preds = %543, %.preheader
  invoke void @_ZNK3JPH9JobSystem9JobHandle16RemoveDependencyEi(ptr noundef nonnull align 8 dereferenceable(8) %527, i32 noundef 1)
          to label %553 unwind label %312

534:                                              ; preds = %515
  %535 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %70) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %69) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %68) #8
  br label %713

536:                                              ; preds = %522
  %537 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %73) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %72) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %71) #8
  br label %713

.lr.ph401:                                        ; preds = %.preheader, %543
  %.0327400 = phi i32 [ %545, %543 ], [ 0, %.preheader ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %74) #8
  %.sroa.092.0.copyload = load i32, ptr @_ZN3JPHL30cColorSolvePositionConstraintsE, align 4, !tbaa !70
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %75) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %76) #8
  store ptr %7, ptr %76, align 8, !tbaa !71
  store ptr %277, ptr %262, align 8, !tbaa !71
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_17vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %75, ptr noundef nonnull align 8 dereferenceable(16) %76) #8
  %538 = load ptr, ptr %4, align 8, !tbaa !40
  %539 = getelementptr inbounds i8, ptr %538, i64 24
  %540 = load ptr, ptr %539, align 8
  invoke void %540(ptr dead_on_unwind nonnull writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %74, ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull @.str.49, i32 %.sroa.092.0.copyload, ptr noundef nonnull align 8 dereferenceable(32) %75, i32 noundef 3)
          to label %541 unwind label %548

541:                                              ; preds = %.lr.ph401
  %542 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %530, i32 noundef %.0327400)
          to label %543 unwind label %550

543:                                              ; preds = %541
  %544 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %542, ptr noundef nonnull align 8 dereferenceable(8) %74) #8
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %74) #8
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %76) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %75) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %74) #8
  %545 = add nuw nsw i32 %.0327400, 1
  %546 = load i32, ptr %8, align 4, !tbaa !58
  %547 = icmp slt i32 %545, %546
  br i1 %547, label %.lr.ph401, label %._crit_edge402, !llvm.loop !90

548:                                              ; preds = %.lr.ph401
  %549 = landingpad { ptr, i32 }
          cleanup
  br label %552

550:                                              ; preds = %541
  %551 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %74) #8
  br label %552

552:                                              ; preds = %550, %548
  %.pn351 = phi { ptr, i32 } [ %551, %550 ], [ %549, %548 ]
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %76) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %75) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %74) #8
  br label %713

553:                                              ; preds = %._crit_edge402
  invoke void @_ZNK3JPH9JobSystem9JobHandle16RemoveDependencyEi(ptr noundef nonnull align 8 dereferenceable(8) %444, i32 noundef 1)
          to label %554 unwind label %312

554:                                              ; preds = %553
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %77) #8
  %.sroa.0.0.copyload = load i32, ptr @_ZN3JPHL21cColorSoftBodyPrepareE, align 4, !tbaa !70
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %78) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %79) #8
  store ptr %7, ptr %79, align 8, !tbaa !71
  store ptr %277, ptr %263, align 8, !tbaa !71
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_18vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %78, ptr noundef nonnull align 8 dereferenceable(16) %79) #8
  %555 = load i32, ptr %8, align 4, !tbaa !58
  %556 = load ptr, ptr %4, align 8, !tbaa !40
  %557 = getelementptr inbounds i8, ptr %556, i64 24
  %558 = load ptr, ptr %557, align 8
  invoke void %558(ptr dead_on_unwind nonnull writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %77, ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull @.str.50, i32 %.sroa.0.0.copyload, ptr noundef nonnull align 8 dereferenceable(32) %78, i32 noundef %555)
          to label %559 unwind label %563

559:                                              ; preds = %554
  %560 = getelementptr inbounds i8, ptr %277, i64 6792
  %561 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %560, ptr noundef nonnull align 8 dereferenceable(8) %77) #8
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %77) #8
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %79) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %78) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %77) #8
  invoke void @_ZN3JPH9JobSystem9JobHandle19sRemoveDependenciesILj32EEEvRNS_11StaticArrayIS1_XT_EEEi(ptr noundef nonnull align 8 dereferenceable(264) %530, i32 noundef 1)
          to label %562 unwind label %312

562:                                              ; preds = %559
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond458.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond458.not, label %._crit_edge406, label %274, !llvm.loop !91

563:                                              ; preds = %554
  %564 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %79) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %78) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %77) #8
  br label %713

._crit_edge451:                                   ; preds = %657, %._crit_edge406
  %565 = call noundef ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE4dataEv(ptr noundef nonnull align 8 dereferenceable(16392) %80)
  %566 = call noundef i32 @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16392) %80)
  %567 = load ptr, ptr %265, align 8, !tbaa !40
  %568 = getelementptr inbounds i8, ptr %567, i64 8
  %569 = load ptr, ptr %568, align 8
  invoke void %569(ptr noundef nonnull align 8 dereferenceable(8) %265, ptr noundef %565, i32 noundef %566)
          to label %659 unwind label %705

.lr.ph450:                                        ; preds = %._crit_edge406, %657
  %.0328448 = phi ptr [ %658, %657 ], [ %266, %._crit_edge406 ]
  %570 = getelementptr inbounds i8, ptr %.0328448, i64 4608
  %571 = call noundef zeroext i1 @_ZNK3JPH9JobSystem9JobHandle7IsValidEv(ptr noundef nonnull align 8 dereferenceable(8) %570)
  br i1 %571, label %572, label %575

572:                                              ; preds = %.lr.ph450
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %570)
          to label %575 unwind label %573

573:                                              ; preds = %656, %652, %._crit_edge446, %638, %._crit_edge441, %._crit_edge436, %618, %616, %._crit_edge431, %606, %572
  %574 = landingpad { ptr, i32 }
          cleanup
  br label %707

575:                                              ; preds = %572, %.lr.ph450
  %576 = getelementptr inbounds i8, ptr %.0328448, i64 4616
  %577 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %576)
  %578 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %576)
  %.not338407 = icmp eq ptr %577, %578
  br i1 %.not338407, label %._crit_edge411, label %.lr.ph410

._crit_edge411:                                   ; preds = %582, %575
  %579 = getelementptr inbounds i8, ptr %.0328448, i64 4880
  %580 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %579)
  %581 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %579)
  %.not339412 = icmp eq ptr %580, %581
  br i1 %.not339412, label %._crit_edge416, label %.lr.ph415

.lr.ph410:                                        ; preds = %575, %582
  %.0329408 = phi ptr [ %583, %582 ], [ %577, %575 ]
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %.0329408)
          to label %582 unwind label %584

582:                                              ; preds = %.lr.ph410
  %583 = getelementptr inbounds i8, ptr %.0329408, i64 8
  %.not338 = icmp eq ptr %583, %578
  br i1 %.not338, label %._crit_edge411, label %.lr.ph410

584:                                              ; preds = %.lr.ph410
  %585 = landingpad { ptr, i32 }
          cleanup
  br label %707

._crit_edge416:                                   ; preds = %589, %._crit_edge411
  %586 = getelementptr inbounds i8, ptr %.0328448, i64 5144
  %587 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %586)
  %588 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %586)
  %.not340417 = icmp eq ptr %587, %588
  br i1 %.not340417, label %._crit_edge421, label %.lr.ph420

.lr.ph415:                                        ; preds = %._crit_edge411, %589
  %.0331413 = phi ptr [ %590, %589 ], [ %580, %._crit_edge411 ]
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %.0331413)
          to label %589 unwind label %591

589:                                              ; preds = %.lr.ph415
  %590 = getelementptr inbounds i8, ptr %.0331413, i64 8
  %.not339 = icmp eq ptr %590, %581
  br i1 %.not339, label %._crit_edge416, label %.lr.ph415

591:                                              ; preds = %.lr.ph415
  %592 = landingpad { ptr, i32 }
          cleanup
  br label %707

._crit_edge421:                                   ; preds = %596, %._crit_edge416
  %593 = getelementptr inbounds i8, ptr %.0328448, i64 5408
  %594 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %593)
  %595 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %593)
  %.not341422 = icmp eq ptr %594, %595
  br i1 %.not341422, label %._crit_edge426, label %.lr.ph425

.lr.ph420:                                        ; preds = %._crit_edge416, %596
  %.0332418 = phi ptr [ %597, %596 ], [ %587, %._crit_edge416 ]
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %.0332418)
          to label %596 unwind label %598

596:                                              ; preds = %.lr.ph420
  %597 = getelementptr inbounds i8, ptr %.0332418, i64 8
  %.not340 = icmp eq ptr %597, %588
  br i1 %.not340, label %._crit_edge421, label %.lr.ph420

598:                                              ; preds = %.lr.ph420
  %599 = landingpad { ptr, i32 }
          cleanup
  br label %707

._crit_edge426:                                   ; preds = %602, %._crit_edge421
  %600 = getelementptr inbounds i8, ptr %.0328448, i64 5672
  %601 = call noundef zeroext i1 @_ZNK3JPH9JobSystem9JobHandle7IsValidEv(ptr noundef nonnull align 8 dereferenceable(8) %600)
  br i1 %601, label %606, label %607

.lr.ph425:                                        ; preds = %._crit_edge421, %602
  %.0330423 = phi ptr [ %603, %602 ], [ %594, %._crit_edge421 ]
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %.0330423)
          to label %602 unwind label %604

602:                                              ; preds = %.lr.ph425
  %603 = getelementptr inbounds i8, ptr %.0330423, i64 8
  %.not341 = icmp eq ptr %603, %595
  br i1 %.not341, label %._crit_edge426, label %.lr.ph425

604:                                              ; preds = %.lr.ph425
  %605 = landingpad { ptr, i32 }
          cleanup
  br label %707

606:                                              ; preds = %._crit_edge426
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %600)
          to label %607 unwind label %573

607:                                              ; preds = %606, %._crit_edge426
  %608 = getelementptr inbounds i8, ptr %.0328448, i64 5680
  %609 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %608)
  %610 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %608)
  %.not342427 = icmp eq ptr %609, %610
  br i1 %.not342427, label %._crit_edge431, label %.lr.ph430

._crit_edge431:                                   ; preds = %612, %607
  %611 = getelementptr inbounds i8, ptr %.0328448, i64 5944
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %611)
          to label %616 unwind label %573

.lr.ph430:                                        ; preds = %607, %612
  %.0326428 = phi ptr [ %613, %612 ], [ %609, %607 ]
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %.0326428)
          to label %612 unwind label %614

612:                                              ; preds = %.lr.ph430
  %613 = getelementptr inbounds i8, ptr %.0326428, i64 8
  %.not342 = icmp eq ptr %613, %610
  br i1 %.not342, label %._crit_edge431, label %.lr.ph430

614:                                              ; preds = %.lr.ph430
  %615 = landingpad { ptr, i32 }
          cleanup
  br label %707

616:                                              ; preds = %._crit_edge431
  %617 = getelementptr inbounds i8, ptr %.0328448, i64 5952
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %617)
          to label %618 unwind label %573

618:                                              ; preds = %616
  %619 = getelementptr inbounds i8, ptr %.0328448, i64 5960
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %619)
          to label %620 unwind label %573

620:                                              ; preds = %618
  %621 = getelementptr inbounds i8, ptr %.0328448, i64 5968
  %622 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %621)
  %623 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %621)
  %.not343432 = icmp eq ptr %622, %623
  br i1 %.not343432, label %._crit_edge436, label %.lr.ph435

._crit_edge436:                                   ; preds = %625, %620
  %624 = getelementptr inbounds i8, ptr %.0328448, i64 6232
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %624)
          to label %629 unwind label %573

.lr.ph435:                                        ; preds = %620, %625
  %.0322433 = phi ptr [ %626, %625 ], [ %622, %620 ]
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %.0322433)
          to label %625 unwind label %627

625:                                              ; preds = %.lr.ph435
  %626 = getelementptr inbounds i8, ptr %.0322433, i64 8
  %.not343 = icmp eq ptr %626, %623
  br i1 %.not343, label %._crit_edge436, label %.lr.ph435

627:                                              ; preds = %.lr.ph435
  %628 = landingpad { ptr, i32 }
          cleanup
  br label %707

629:                                              ; preds = %._crit_edge436
  %630 = getelementptr inbounds i8, ptr %.0328448, i64 6240
  %631 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %630)
  %632 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %630)
  %.not344437 = icmp eq ptr %631, %632
  br i1 %.not344437, label %._crit_edge441, label %.lr.ph440

._crit_edge441:                                   ; preds = %634, %629
  %633 = getelementptr inbounds i8, ptr %.0328448, i64 6504
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %633)
          to label %638 unwind label %573

.lr.ph440:                                        ; preds = %629, %634
  %.0318438 = phi ptr [ %635, %634 ], [ %631, %629 ]
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %.0318438)
          to label %634 unwind label %636

634:                                              ; preds = %.lr.ph440
  %635 = getelementptr inbounds i8, ptr %.0318438, i64 8
  %.not344 = icmp eq ptr %635, %632
  br i1 %.not344, label %._crit_edge441, label %.lr.ph440

636:                                              ; preds = %.lr.ph440
  %637 = landingpad { ptr, i32 }
          cleanup
  br label %707

638:                                              ; preds = %._crit_edge441
  %639 = getelementptr inbounds i8, ptr %.0328448, i64 6512
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %639)
          to label %640 unwind label %573

640:                                              ; preds = %638
  %641 = getelementptr inbounds i8, ptr %.0328448, i64 6520
  %642 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %641)
  %643 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %641)
  %.not345442 = icmp eq ptr %642, %643
  br i1 %.not345442, label %._crit_edge446, label %.lr.ph445

._crit_edge446:                                   ; preds = %645, %640
  %644 = getelementptr inbounds i8, ptr %.0328448, i64 6784
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %644)
          to label %649 unwind label %573

.lr.ph445:                                        ; preds = %640, %645
  %.0296443 = phi ptr [ %646, %645 ], [ %642, %640 ]
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %.0296443)
          to label %645 unwind label %647

645:                                              ; preds = %.lr.ph445
  %646 = getelementptr inbounds i8, ptr %.0296443, i64 8
  %.not345 = icmp eq ptr %646, %643
  br i1 %.not345, label %._crit_edge446, label %.lr.ph445

647:                                              ; preds = %.lr.ph445
  %648 = landingpad { ptr, i32 }
          cleanup
  br label %707

649:                                              ; preds = %._crit_edge446
  %650 = getelementptr inbounds i8, ptr %.0328448, i64 6792
  %651 = call noundef zeroext i1 @_ZNK3JPH9JobSystem9JobHandle7IsValidEv(ptr noundef nonnull align 8 dereferenceable(8) %650)
  br i1 %651, label %652, label %653

652:                                              ; preds = %649
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %650)
          to label %653 unwind label %573

653:                                              ; preds = %652, %649
  %654 = getelementptr inbounds i8, ptr %.0328448, i64 7336
  %655 = call noundef zeroext i1 @_ZNK3JPH9JobSystem9JobHandle7IsValidEv(ptr noundef nonnull align 8 dereferenceable(8) %654)
  br i1 %655, label %656, label %657

656:                                              ; preds = %653
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %654)
          to label %657 unwind label %573

657:                                              ; preds = %656, %653
  %658 = getelementptr inbounds i8, ptr %.0328448, i64 7344
  %.not = icmp eq ptr %658, %267
  br i1 %.not, label %._crit_edge451, label %.lr.ph450

659:                                              ; preds = %._crit_edge451
  call void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EED2Ev(ptr noundef nonnull align 8 dereferenceable(16392) %80) #8
  call void @llvm.lifetime.end.p0(i64 16392, ptr nonnull %80) #8
  %660 = load ptr, ptr %4, align 8, !tbaa !40
  %661 = getelementptr inbounds i8, ptr %660, i64 48
  %662 = load ptr, ptr %661, align 8
  invoke void %662(ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull %265)
          to label %663 unwind label %708

663:                                              ; preds = %659
  %664 = load ptr, ptr %4, align 8, !tbaa !40
  %665 = getelementptr inbounds i8, ptr %664, i64 40
  %666 = load ptr, ptr %665, align 8
  invoke void %666(ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull %265)
          to label %667 unwind label %708

667:                                              ; preds = %663
  invoke void @_ZN3JPH11BodyManager24ValidateActiveBodyBoundsEv(ptr noundef nonnull align 8 dereferenceable(297) %96)
          to label %668 unwind label %708

668:                                              ; preds = %667
  %669 = getelementptr inbounds i8, ptr %0, i64 976
  invoke void @_ZN3JPH19LargeIslandSplitter5ResetEPNS_13TempAllocatorE(ptr noundef nonnull align 8 dereferenceable(60) %669, ptr noundef nonnull %3)
          to label %670 unwind label %708

670:                                              ; preds = %668
  invoke void @_ZN3JPH13IslandBuilder12ResetIslandsEPNS_13TempAllocatorE(ptr noundef nonnull align 8 dereferenceable(112) %142, ptr noundef nonnull %3)
          to label %671 unwind label %708

671:                                              ; preds = %670
  %672 = getelementptr inbounds i8, ptr %0, i64 536
  invoke void @_ZN3JPH24ContactConstraintManager22FinishConstraintBufferEv(ptr noundef nonnull align 8 dereferenceable(248) %672)
          to label %673 unwind label %708

673:                                              ; preds = %671
  %674 = getelementptr inbounds i8, ptr %7, i64 48
  %675 = load ptr, ptr %674, align 8, !tbaa !78
  %676 = invoke noundef i32 @_ZNK3JPH17ConstraintManager17GetNumConstraintsEv(ptr noundef nonnull align 8 dereferenceable(80) %199)
          to label %677 unwind label %708

677:                                              ; preds = %673
  %678 = shl i32 %676, 3
  %679 = load ptr, ptr %3, align 8, !tbaa !40
  %680 = getelementptr inbounds i8, ptr %679, i64 24
  %681 = load ptr, ptr %680, align 8
  invoke void %681(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef %675, i32 noundef %678)
          to label %682 unwind label %708

682:                                              ; preds = %677
  store ptr null, ptr %674, align 8, !tbaa !78
  %683 = load ptr, ptr %149, align 8, !tbaa !55
  %684 = load i32, ptr %122, align 16, !tbaa !57
  %685 = shl i32 %684, 3
  %686 = load ptr, ptr %3, align 8, !tbaa !40
  %687 = getelementptr inbounds i8, ptr %686, i64 24
  %688 = load ptr, ptr %687, align 8
  invoke void %688(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef %683, i32 noundef %685)
          to label %689 unwind label %708

689:                                              ; preds = %682
  store ptr null, ptr %149, align 8, !tbaa !55
  %690 = load ptr, ptr %91, align 16, !tbaa !7
  %691 = load ptr, ptr %690, align 8, !tbaa !40
  %692 = getelementptr inbounds i8, ptr %691, i64 112
  %693 = load ptr, ptr %692, align 8
  invoke void %693(ptr noundef nonnull align 8 dereferenceable(16) %690)
          to label %694 unwind label %708

694:                                              ; preds = %689
  invoke void @_ZN3JPH17ConstraintManager20UnlockAllConstraintsEv(ptr noundef nonnull align 8 dereferenceable(80) %199)
          to label %695 unwind label %708

695:                                              ; preds = %694
  call void @_ZN3JPH11BodyManager21SetActiveBodiesLockedEb(ptr noundef nonnull align 8 dereferenceable(297) %96, i1 noundef zeroext false)
  invoke void @_ZNK3JPH11BodyManager15UnlockAllBodiesEv(ptr noundef nonnull align 8 dereferenceable(297) %96)
          to label %696 unwind label %708

696:                                              ; preds = %695
  invoke void @_ZN3JPH5Mutex6unlockEv(ptr noundef nonnull align 8 dereferenceable(48) %166)
          to label %697 unwind label %708

697:                                              ; preds = %696
  %698 = getelementptr inbounds i8, ptr %7, i64 40
  %699 = call noundef i32 @_ZNKSt13__atomic_baseIjE4loadESt12memory_order(ptr noundef nonnull align 4 dereferenceable(4) %698, i32 noundef 2) #8
  %700 = icmp eq i32 %699, 0
  br i1 %700, label %712, label %701

701:                                              ; preds = %697
  %702 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jS1_NS_15AssertLastParamE(ptr noundef nonnull @.str.51, ptr noundef nonnull @.str.24, i32 noundef 615, ptr noundef nonnull @.str.52)
          to label %703 unwind label %710

703:                                              ; preds = %701
  br i1 %702, label %704, label %712

704:                                              ; preds = %703
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #8, !srcloc !92
  br label %712

705:                                              ; preds = %._crit_edge451
  %706 = landingpad { ptr, i32 }
          cleanup
  br label %707

707:                                              ; preds = %573, %584, %591, %598, %604, %614, %627, %636, %647, %705
  %.pn.pn = phi { ptr, i32 } [ %706, %705 ], [ %585, %584 ], [ %592, %591 ], [ %599, %598 ], [ %605, %604 ], [ %615, %614 ], [ %628, %627 ], [ %637, %636 ], [ %648, %647 ], [ %574, %573 ]
  call void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EED2Ev(ptr noundef nonnull align 8 dereferenceable(16392) %80) #8
  call void @llvm.lifetime.end.p0(i64 16392, ptr nonnull %80) #8
  br label %713

708:                                              ; preds = %696, %695, %694, %689, %682, %677, %673, %671, %670, %668, %667, %663, %659
  %709 = landingpad { ptr, i32 }
          cleanup
  br label %713

710:                                              ; preds = %701
  %711 = landingpad { ptr, i32 }
          cleanup
  br label %713

712:                                              ; preds = %704, %703, %697
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #8
  call void @_ZN3JPH20PhysicsUpdateContextD1Ev(ptr noundef nonnull align 8 dereferenceable(124) %7) #8
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %7) #8
  br label %715

713:                                              ; preds = %270, %310, %312, %329, %369, %385, %392, %407, %420, %456, %458, %460, %485, %500, %514, %534, %536, %552, %563, %464, %462, %308, %306, %710, %708, %707, %272, %268
  %.pn365.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %269, %268 ], [ %271, %270 ], [ %273, %272 ], [ %309, %308 ], [ %307, %306 ], [ %.pn365, %329 ], [ %.pn363, %369 ], [ %.pn361, %385 ], [ %.pn359, %407 ], [ %.pn357, %420 ], [ %.pn355, %485 ], [ %.pn353, %514 ], [ %.pn351, %552 ], [ %313, %312 ], [ %564, %563 ], [ %537, %536 ], [ %535, %534 ], [ %501, %500 ], [ %461, %460 ], [ %459, %458 ], [ %457, %456 ], [ %393, %392 ], [ %311, %310 ], [ %465, %464 ], [ %463, %462 ], [ %.pn.pn, %707 ], [ %711, %710 ], [ %709, %708 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #8
  br label %714

714:                                              ; preds = %713, %156
  %.pn365.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn365.pn.pn.pn.pn.pn.pn, %713 ], [ %157, %156 ]
  call void @_ZN3JPH20PhysicsUpdateContextD1Ev(ptr noundef nonnull align 8 dereferenceable(124) %7) #8
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %7) #8
  resume { ptr, i32 } %.pn365.pn.pn.pn.pn.pn.pn.pn

715:                                              ; preds = %712, %101
  %.0 = phi i32 [ 0, %101 ], [ %699, %712 ]
  ret i32 %.0
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3JPH11BodyManager18GetNumActiveBodiesENS_9EBodyTypeE(ptr noundef nonnull align 8 dereferenceable(297), i8 noundef zeroext) local_unnamed_addr #3 align 2

declare void @_ZNK3JPH11BodyManager13LockAllBodiesEv(ptr noundef nonnull align 8 dereferenceable(297)) local_unnamed_addr #4

declare void @_ZN3JPH24ContactConstraintManager55FinalizeContactCacheAndCallContactPointRemovedCallbacksEjj(ptr noundef nonnull align 8 dereferenceable(248), i32 noundef, i32 noundef) local_unnamed_addr #4

declare void @_ZNK3JPH11BodyManager15UnlockAllBodiesEv(ptr noundef nonnull align 8 dereferenceable(297)) local_unnamed_addr #4

declare void @_ZN3JPH20PhysicsUpdateContextC1ERNS_13TempAllocatorE(ptr noundef nonnull align 8 dereferenceable(124), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(32), i64 noundef) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH5Mutex4lockEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK3JPH20PhysicsUpdateContext17GetMaxConcurrencyEv(ptr noundef nonnull align 8 dereferenceable(124)) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH5ArrayIPNS_19PhysicsStepListenerENS_12STLAllocatorIS2_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #5

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #5

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK3JPH5ArrayIPNS_19PhysicsStepListenerENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_ZNK3JPH17ConstraintManager17GetNumConstraintsEv(ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(7344) ptr @_ZN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(32), i64 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH11StaticArrayINS_20PhysicsUpdateContext13BodyPairQueueELj32EE6resizeEj(ptr noundef nonnull align 4 dereferenceable(4100), i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNSt13__atomic_baseIjEaSEj(ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264), i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(12)) unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264), i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH11BodyManager21SetActiveBodiesLockedEb(ptr noundef nonnull align 8 dereferenceable(297), i1 noundef zeroext) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH17ConstraintManager18LockAllConstraintsEv(ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #2 align 2

declare void @_ZN3JPH24ContactConstraintManager23PrepareConstraintBufferEPNS_20PhysicsUpdateContextE(ptr noundef nonnull align 8 dereferenceable(248), ptr noundef) local_unnamed_addr #4

declare void @_ZN3JPH13IslandBuilder25PrepareContactConstraintsEjPNS_13TempAllocatorE(ptr noundef nonnull align 8 dereferenceable(112), i32 noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3JPH24ContactConstraintManager17GetMaxConstraintsEv(ptr noundef nonnull align 8 dereferenceable(248)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_5vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_6vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_7vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK3JPH9JobSystem9JobHandle16RemoveDependencyEi(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_8vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_9vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_10vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_11vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_12vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH9JobSystem9JobHandle19sRemoveDependenciesILj32EEEvRNS_11StaticArrayIS1_XT_EEEi(ptr noundef nonnull align 8 dereferenceable(264), i32 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_13vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_14vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_15vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_16vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_17vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_18vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EEC2Ev(ptr noundef nonnull align 8 dereferenceable(16392)) unnamed_addr #3 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH9JobSystem9JobHandle7IsValidEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE4dataEv(ptr noundef nonnull align 8 dereferenceable(16392)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16392)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EED2Ev(ptr noundef nonnull align 8 dereferenceable(16392)) unnamed_addr #3 align 2

declare void @_ZN3JPH11BodyManager24ValidateActiveBodyBoundsEv(ptr noundef nonnull align 8 dereferenceable(297)) local_unnamed_addr #4

declare void @_ZN3JPH19LargeIslandSplitter5ResetEPNS_13TempAllocatorE(ptr noundef nonnull align 8 dereferenceable(60), ptr noundef) local_unnamed_addr #4

declare void @_ZN3JPH13IslandBuilder12ResetIslandsEPNS_13TempAllocatorE(ptr noundef nonnull align 8 dereferenceable(112), ptr noundef) local_unnamed_addr #4

declare void @_ZN3JPH24ContactConstraintManager22FinishConstraintBufferEv(ptr noundef nonnull align 8 dereferenceable(248)) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH17ConstraintManager20UnlockAllConstraintsEv(ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH5Mutex6unlockEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #1 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNKSt13__atomic_baseIjE4loadESt12memory_order(ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) local_unnamed_addr #6 align 2

; Function Attrs: nounwind
declare void @_ZN3JPH20PhysicsUpdateContextD1Ev(ptr noundef nonnull align 8 dereferenceable(124)) unnamed_addr #7

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{i64 2159695847}
!6 = !{i64 2159696183}
!7 = !{!8, !9, i64 432}
!8 = !{!"_ZTSN3JPH13PhysicsSystemE", !9, i64 0, !9, i64 8, !12, i64 16, !24, i64 320, !26, i64 336, !27, i64 352, !27, i64 376, !28, i64 400, !28, i64 416, !9, i64 432, !9, i64 440, !29, i64 448, !31, i64 536, !34, i64 784, !36, i64 864, !37, i64 976, !16, i64 1040, !38, i64 1088, !39, i64 1120, !30, i64 1136}
!9 = !{!"any pointer", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"_ZTSN3JPH11BodyManagerE", !13, i64 0, !15, i64 24, !14, i64 32, !16, i64 40, !20, i64 88, !21, i64 104, !16, i64 128, !10, i64 176, !10, i64 192, !15, i64 200, !16, i64 208, !22, i64 256, !9, i64 280, !9, i64 288, !23, i64 296}
!13 = !{!"_ZTSN3JPH5ArrayIPNS_4BodyENS_12STLAllocatorIS2_EEEE", !14, i64 0, !14, i64 8, !9, i64 16}
!14 = !{!"long", !10, i64 0}
!15 = !{!"int", !10, i64 0}
!16 = !{!"_ZTSN3JPH5MutexE", !17, i64 0, !19, i64 40}
!17 = !{!"_ZTSSt5mutex", !18, i64 0}
!18 = !{!"_ZTSSt12__mutex_base", !10, i64 0}
!19 = !{!"_ZTSNSt6thread2idE", !14, i64 0}
!20 = !{!"_ZTSN3JPH10MutexArrayINS_11SharedMutexEEE", !9, i64 0, !15, i64 8}
!21 = !{!"_ZTSN3JPH5ArrayIhNS_12STLAllocatorIhEEEE", !14, i64 0, !14, i64 8, !9, i64 16}
!22 = !{!"_ZTSN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEEE", !14, i64 0, !14, i64 8, !9, i64 16}
!23 = !{!"bool", !10, i64 0}
!24 = !{!"_ZTSN3JPH23BodyLockInterfaceNoLockE", !25, i64 0}
!25 = !{!"_ZTSN3JPH17BodyLockInterfaceE", !9, i64 8}
!26 = !{!"_ZTSN3JPH24BodyLockInterfaceLockingE", !25, i64 0}
!27 = !{!"_ZTSN3JPH13BodyInterfaceE", !9, i64 0, !9, i64 8, !9, i64 16}
!28 = !{!"_ZTSN3JPH16NarrowPhaseQueryE", !9, i64 0, !9, i64 8}
!29 = !{!"_ZTSN3JPH15PhysicsSettingsE", !15, i64 0, !15, i64 4, !15, i64 8, !30, i64 12, !30, i64 16, !30, i64 20, !30, i64 24, !30, i64 28, !30, i64 32, !30, i64 36, !30, i64 40, !30, i64 44, !30, i64 48, !30, i64 52, !15, i64 56, !15, i64 60, !30, i64 64, !30, i64 68, !30, i64 72, !23, i64 76, !23, i64 77, !23, i64 78, !23, i64 79, !23, i64 80, !23, i64 81, !23, i64 82}
!30 = !{!"float", !10, i64 0}
!31 = !{!"_ZTSN3JPH24ContactConstraintManagerE", !10, i64 8, !15, i64 184, !9, i64 192, !9, i64 200, !9, i64 208, !9, i64 216, !9, i64 224, !15, i64 232, !32, i64 236, !9, i64 240}
!32 = !{!"_ZTSSt6atomicIjE", !33, i64 0}
!33 = !{!"_ZTSSt13__atomic_baseIjE", !15, i64 0}
!34 = !{!"_ZTSN3JPH17ConstraintManagerE", !9, i64 0, !35, i64 8, !16, i64 32}
!35 = !{!"_ZTSN3JPH5ArrayINS_3RefINS_10ConstraintEEENS_12STLAllocatorIS3_EEEE", !14, i64 0, !14, i64 8, !9, i64 16}
!36 = !{!"_ZTSN3JPH13IslandBuilderE", !9, i64 0, !9, i64 8, !9, i64 16, !9, i64 24, !9, i64 32, !9, i64 40, !9, i64 48, !9, i64 56, !9, i64 64, !9, i64 72, !9, i64 80, !15, i64 88, !15, i64 92, !15, i64 96, !15, i64 100, !15, i64 104, !15, i64 108}
!37 = !{!"_ZTSN3JPH19LargeIslandSplitterE", !15, i64 0, !9, i64 8, !9, i64 16, !9, i64 24, !15, i64 32, !32, i64 36, !15, i64 40, !9, i64 48, !32, i64 56}
!38 = !{!"_ZTSN3JPH5ArrayIPNS_19PhysicsStepListenerENS_12STLAllocatorIS2_EEEE", !14, i64 0, !14, i64 8, !9, i64 16}
!39 = !{!"_ZTSN3JPH4Vec3E", !10, i64 0}
!40 = !{!41, !41, i64 0}
!41 = !{!"vtable pointer", !11, i64 0}
!42 = !{!8, !23, i64 525}
!43 = !{i8 0, i8 2}
!44 = !{}
!45 = !{!8, !30, i64 1136}
!46 = !{!47, !9, i64 0}
!47 = !{!"_ZTSN3JPH20PhysicsUpdateContextE", !9, i64 0, !9, i64 8, !9, i64 16, !9, i64 24, !30, i64 32, !30, i64 36, !32, i64 40, !9, i64 48, !9, i64 56, !9, i64 64, !48, i64 72, !15, i64 104, !9, i64 112, !32, i64 120}
!48 = !{!"_ZTSN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEEE", !49, i64 0, !14, i64 8, !14, i64 16, !9, i64 24}
!49 = !{!"_ZTSN3JPH16STLTempAllocatorINS_20PhysicsUpdateContext4StepEEE", !9, i64 0}
!50 = !{!47, !9, i64 16}
!51 = !{!47, !9, i64 24}
!52 = !{!47, !9, i64 64}
!53 = !{!47, !30, i64 32}
!54 = !{!47, !30, i64 36}
!55 = !{!47, !9, i64 56}
!56 = !{i64 2159696539}
!57 = !{!8, !15, i64 448}
!58 = !{!15, !15, i64 0}
!59 = !{!8, !15, i64 452}
!60 = !{!8, !15, i64 456}
!61 = !{!62, !9, i64 0}
!62 = !{!"_ZTSN3JPH20PhysicsUpdateContext4StepE", !9, i64 0, !23, i64 8, !23, i64 9, !63, i64 16, !15, i64 48, !32, i64 52, !10, i64 56, !32, i64 116, !10, i64 120, !32, i64 180, !10, i64 184, !32, i64 244, !10, i64 248, !32, i64 308, !10, i64 312, !32, i64 372, !10, i64 376, !64, i64 436, !15, i64 4536, !32, i64 4540, !32, i64 4544, !32, i64 4548, !32, i64 4552, !32, i64 4556, !32, i64 4560, !9, i64 4568, !15, i64 4576, !32, i64 4580, !32, i64 4584, !9, i64 4592, !15, i64 4600, !65, i64 4608, !67, i64 4616, !67, i64 4880, !67, i64 5144, !67, i64 5408, !65, i64 5672, !67, i64 5680, !65, i64 5944, !65, i64 5952, !65, i64 5960, !67, i64 5968, !65, i64 6232, !67, i64 6240, !65, i64 6504, !65, i64 6512, !67, i64 6520, !65, i64 6784, !65, i64 6792, !67, i64 6800, !67, i64 7064, !65, i64 7328, !65, i64 7336}
!63 = !{!"_ZTSN3JPH10BroadPhase11UpdateStateE", !10, i64 0}
!64 = !{!"_ZTSN3JPH11StaticArrayINS_20PhysicsUpdateContext13BodyPairQueueELj32EEE", !15, i64 0, !10, i64 4}
!65 = !{!"_ZTSN3JPH9JobSystem9JobHandleE", !66, i64 0}
!66 = !{!"_ZTSN3JPH3RefINS_9JobSystem3JobEEE", !9, i64 0}
!67 = !{!"_ZTSN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEE", !15, i64 0, !10, i64 8}
!68 = !{!62, !23, i64 8}
!69 = !{!62, !23, i64 9}
!70 = !{!10, !10, i64 0}
!71 = !{!9, !9, i64 0}
!72 = !{!62, !15, i64 4536}
!73 = !{!74, !15, i64 8}
!74 = !{!"_ZTSZN3JPH13PhysicsSystem6UpdateEfiPNS_13TempAllocatorEPNS_9JobSystemEE3$_2", !9, i64 0, !15, i64 8}
!75 = distinct !{!75, !76}
!76 = !{!"llvm.loop.mustprogress"}
!77 = !{!62, !15, i64 48}
!78 = !{!47, !9, i64 48}
!79 = !{i64 2159697277}
!80 = !{!47, !9, i64 8}
!81 = distinct !{!81, !76}
!82 = distinct !{!82, !76}
!83 = distinct !{!83, !76}
!84 = distinct !{!84, !76}
!85 = !{!86, !9, i64 0}
!86 = !{!"_ZTSZN3JPH13PhysicsSystem6UpdateEfiPNS_13TempAllocatorEPNS_9JobSystemEE4$_11", !9, i64 0, !9, i64 8}
!87 = !{!86, !9, i64 8}
!88 = distinct !{!88, !76}
!89 = distinct !{!89, !76}
!90 = distinct !{!90, !76}
!91 = distinct !{!91, !76}
!92 = !{i64 2159698103}


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