; LLVM IR from jrouwe/JoltPhysics :: 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.21" = 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.23 = type { ptr, ptr }
%class.anon.24 = type <{ ptr, i32, [4 x i8] }>
%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.anon.39 = type { ptr, ptr }
%class.anon.40 = type { ptr, ptr }
%"class.JPH::StaticArray.41" = 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, ptr, %"class.std::function", %"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", %"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 }
%"class.std::function" = type { %"class.std::_Function_base", 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 [83 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(1172) %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.21", 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.21", align 8
  %57 = alloca %class.anon.23, 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.21", align 8
  %63 = alloca %class.anon.24, 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.21", align 8
  %69 = alloca %class.anon.25, 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.21", align 8
  %74 = alloca %class.anon.26, align 8
  %75 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %76 = alloca %"class.JPH::Color", align 4
  %77 = alloca %"class.std::function.21", align 8
  %78 = alloca %class.anon.27, 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.21", align 8
  %83 = alloca %class.anon.28, 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.21", align 8
  %88 = alloca %class.anon.29, align 8
  %89 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %90 = alloca %"class.JPH::Color", align 4
  %91 = alloca %"class.std::function.21", align 8
  %92 = alloca %class.anon.30, align 8
  %93 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %94 = alloca %"class.JPH::Color", align 4
  %95 = alloca %"class.std::function.21", align 8
  %96 = alloca %class.anon.31, align 8
  %97 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %98 = alloca %"class.JPH::Color", align 4
  %99 = alloca %"class.std::function.21", align 8
  %100 = alloca %class.anon.32, 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.21", align 8
  %105 = alloca %class.anon.33, 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.21", align 8
  %110 = alloca %class.anon.34, align 8
  %111 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %112 = alloca %"class.JPH::Color", align 4
  %113 = alloca %"class.std::function.21", align 8
  %114 = alloca %class.anon.35, 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.21", align 8
  %119 = alloca %class.anon.36, align 8
  %120 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %121 = alloca %"class.JPH::Color", align 4
  %122 = alloca %"class.std::function.21", align 8
  %123 = alloca %class.anon.37, align 8
  %124 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %125 = alloca %"class.JPH::Color", align 4
  %126 = alloca %"class.std::function.21", align 8
  %127 = alloca %class.anon.38, 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.21", align 8
  %132 = alloca %class.anon.39, align 8
  %133 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %134 = alloca %"class.JPH::Color", align 4
  %135 = alloca %"class.std::function.21", align 8
  %136 = alloca %class.anon.40, align 8
  %137 = alloca ptr, align 8
  %138 = alloca %"class.JPH::StaticArray.41", 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 138)
  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 139)
  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 !45
  %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 %211

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

208:                                              ; preds = %205
  %209 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 20
  %210 = call noundef zeroext i1 @_ZNK3JPH5ArrayIPNS_19PhysicsStepListenerENS_12STLAllocatorIS2_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %209)
  br i1 %210, label %214, label %211

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

214:                                              ; preds = %211, %208
  %215 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 2
  call void @_ZNK3JPH11BodyManager13LockAllBodiesEv(ptr noundef nonnull align 8 dereferenceable(297) %215)
  %216 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 9
  %217 = load ptr, ptr %216, align 16, !tbaa !15
  %218 = load ptr, ptr %217, align 8, !tbaa !45
  %219 = getelementptr inbounds ptr, ptr %218, i64 11
  %220 = load ptr, ptr %219, align 8
  call void %220(ptr noundef nonnull align 8 dereferenceable(16) %217)
  call void @llvm.lifetime.start.p0(i64 32, ptr %16) #9
  %221 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 9
  %222 = load ptr, ptr %221, align 16, !tbaa !15
  %223 = load ptr, ptr %222, align 8, !tbaa !45
  %224 = getelementptr inbounds ptr, ptr %223, i64 12
  %225 = load ptr, ptr %224, align 8
  call void %225(ptr dead_on_unwind writable sret(%"struct.JPH::BroadPhase::UpdateState") align 8 %16, ptr noundef nonnull align 8 dereferenceable(16) %222)
  %226 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 9
  %227 = load ptr, ptr %226, align 16, !tbaa !15
  %228 = load ptr, ptr %227, align 8, !tbaa !45
  %229 = getelementptr inbounds ptr, ptr %228, i64 13
  %230 = load ptr, ptr %229, align 8
  call void %230(ptr noundef nonnull align 8 dereferenceable(16) %227, ptr noundef nonnull align 8 dereferenceable(32) %16)
  %231 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 9
  %232 = load ptr, ptr %231, align 16, !tbaa !15
  %233 = load ptr, ptr %232, align 8, !tbaa !45
  %234 = getelementptr inbounds ptr, ptr %233, i64 14
  %235 = load ptr, ptr %234, align 8
  call void %235(ptr noundef nonnull align 8 dereferenceable(16) %232)
  %236 = load float, ptr %8, align 4, !tbaa !9
  %237 = fcmp ogt float %236, 0.000000e+00
  br i1 %237, label %238, label %240

238:                                              ; preds = %214
  %239 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 15
  call void @_ZN3JPH24ContactConstraintManager55FinalizeContactCacheAndCallContactPointRemovedCallbacksEjj(ptr noundef nonnull align 8 dereferenceable(248) %239, i32 noundef 0, i32 noundef 0)
  br label %240

240:                                              ; preds = %238, %214
  %241 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 2
  call void @_ZNK3JPH11BodyManager15UnlockAllBodiesEv(ptr noundef nonnull align 8 dereferenceable(297) %241)
  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 %1662

242:                                              ; preds = %211
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #9
  %243 = load float, ptr %8, align 4, !tbaa !9
  %244 = load i32, ptr %9, align 4, !tbaa !11
  %245 = sitofp i32 %244 to float
  %246 = fdiv float %243, %245
  store float %246, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #9
  %247 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 13
  %248 = getelementptr inbounds %"struct.JPH::PhysicsSettings", ptr %247, i32 0, i32 20
  %249 = load i8, ptr %248, align 1, !tbaa !47, !range !48, !noundef !49
  %250 = trunc i8 %249 to i1
  br i1 %250, label %251, label %260

251:                                              ; preds = %242
  %252 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 22
  %253 = load float, ptr %252, align 16, !tbaa !50
  %254 = fcmp ogt float %253, 0.000000e+00
  br i1 %254, label %255, label %260

255:                                              ; preds = %251
  %256 = load float, ptr %18, align 4, !tbaa !9
  %257 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 22
  %258 = load float, ptr %257, align 16, !tbaa !50
  %259 = fdiv float %256, %258
  br label %261

260:                                              ; preds = %251, %242
  br label %261

261:                                              ; preds = %260, %255
  %262 = phi float [ %259, %255 ], [ 0.000000e+00, %260 ]
  store float %262, ptr %19, align 4, !tbaa !9
  %263 = load float, ptr %18, align 4, !tbaa !9
  %264 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 22
  store float %263, ptr %264, align 16, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 128, ptr %20) #9
  %265 = 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) %265)
  %266 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 0
  store ptr %177, ptr %266, align 8, !tbaa !51
  %267 = load ptr, ptr %11, align 8, !tbaa !5
  %268 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 2
  store ptr %267, ptr %268, align 8, !tbaa !55
  %269 = load ptr, ptr %11, align 8, !tbaa !5
  %270 = load ptr, ptr %269, align 8, !tbaa !45
  %271 = getelementptr inbounds ptr, ptr %270, i64 4
  %272 = load ptr, ptr %271, align 8
  %273 = invoke noundef ptr %272(ptr noundef nonnull align 8 dereferenceable(8) %269)
          to label %274 unwind label %294

274:                                              ; preds = %261
  %275 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 3
  store ptr %273, ptr %275, align 8, !tbaa !56
  %276 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 17
  %277 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 10
  store ptr %276, ptr %277, align 8, !tbaa !57
  %278 = load float, ptr %18, align 4, !tbaa !9
  %279 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 4
  store float %278, ptr %279, align 8, !tbaa !58
  %280 = load float, ptr %19, align 4, !tbaa !9
  %281 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 5
  store float %280, ptr %281, align 4, !tbaa !59
  %282 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 11
  %283 = load i32, ptr %9, align 4, !tbaa !11
  %284 = sext i32 %283 to i64
  invoke void @_ZN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(32) %282, i64 noundef %284)
          to label %285 unwind label %294

285:                                              ; preds = %274
  br label %286

286:                                              ; preds = %285
  %287 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 9
  %288 = load ptr, ptr %287, align 8, !tbaa !60
  %289 = icmp eq ptr %288, null
  br i1 %289, label %298, label %290

290:                                              ; preds = %286
  %291 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.30, ptr noundef @.str.24, i32 noundef 181)
          to label %292 unwind label %294

292:                                              ; preds = %290
  br i1 %291, label %293, label %298

293:                                              ; preds = %292
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !61
  br label %298

294:                                              ; preds = %317, %315, %312, %300, %290, %274, %261
  %295 = landingpad { ptr, i32 }
          cleanup
  %296 = extractvalue { ptr, i32 } %295, 0
  store ptr %296, ptr %21, align 8
  %297 = extractvalue { ptr, i32 } %295, 1
  store i32 %297, ptr %22, align 4
  br label %1661

298:                                              ; preds = %293, %292, %286
  br label %299

299:                                              ; preds = %298
  br label %300

300:                                              ; preds = %299
  %301 = load ptr, ptr %10, align 8, !tbaa !5
  %302 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 13
  %303 = getelementptr inbounds %"struct.JPH::PhysicsSettings", ptr %302, i32 0, i32 0
  %304 = load i32, ptr %303, align 8, !tbaa !62
  %305 = sext i32 %304 to i64
  %306 = mul i64 8, %305
  %307 = trunc i64 %306 to i32
  %308 = load ptr, ptr %301, align 8, !tbaa !45
  %309 = getelementptr inbounds ptr, ptr %308, i64 2
  %310 = load ptr, ptr %309, align 8
  %311 = invoke noundef ptr %310(ptr noundef nonnull align 8 dereferenceable(8) %301, i32 noundef %307)
          to label %312 unwind label %294

312:                                              ; preds = %300
  %313 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 9
  store ptr %311, ptr %313, align 8, !tbaa !60
  %314 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 19
  invoke void @_ZN3JPH5Mutex4lockEv(ptr noundef nonnull align 8 dereferenceable(48) %314)
          to label %315 unwind label %294

315:                                              ; preds = %312
  %316 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 2
  invoke void @_ZNK3JPH11BodyManager13LockAllBodiesEv(ptr noundef nonnull align 8 dereferenceable(297) %316)
          to label %317 unwind label %294

317:                                              ; preds = %315
  %318 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 9
  %319 = load ptr, ptr %318, align 16, !tbaa !15
  %320 = load ptr, ptr %319, align 8, !tbaa !45
  %321 = getelementptr inbounds ptr, ptr %320, i64 11
  %322 = load ptr, ptr %321, align 8
  invoke void %322(ptr noundef nonnull align 8 dereferenceable(16) %319)
          to label %323 unwind label %294

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

325:                                              ; preds = %323
  store i32 %324, ptr %24, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #9
  %326 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 20
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #9
  %327 = invoke noundef zeroext i1 @_ZNK3JPH5ArrayIPNS_19PhysicsStepListenerENS_12STLAllocatorIS2_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %326)
          to label %328 unwind label %416

328:                                              ; preds = %325
  br i1 %327, label %329, label %330

329:                                              ; preds = %328
  br label %348

330:                                              ; preds = %328
  store i32 1, ptr %26, align 4, !tbaa !11
  %331 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 20
  %332 = invoke noundef i64 @_ZNK3JPH5ArrayIPNS_19PhysicsStepListenerENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %331)
          to label %333 unwind label %420

333:                                              ; preds = %330
  %334 = trunc i64 %332 to i32
  %335 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 13
  %336 = getelementptr inbounds %"struct.JPH::PhysicsSettings", ptr %335, i32 0, i32 1
  %337 = load i32, ptr %336, align 4, !tbaa !63
  %338 = sdiv i32 %334, %337
  %339 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 13
  %340 = getelementptr inbounds %"struct.JPH::PhysicsSettings", ptr %339, i32 0, i32 2
  %341 = load i32, ptr %340, align 8, !tbaa !64
  %342 = sdiv i32 %338, %341
  store i32 %342, ptr %27, align 4, !tbaa !11
  %343 = 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 %344 unwind label %420

344:                                              ; preds = %333
  %345 = 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) %343)
          to label %346 unwind label %420

346:                                              ; preds = %344
  %347 = load i32, ptr %345, align 4, !tbaa !11
  br label %348

348:                                              ; preds = %346, %329
  %349 = phi i32 [ 0, %329 ], [ %347, %346 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #9
  store i32 %349, 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
  %350 = load i32, ptr %14, align 4, !tbaa !11
  %351 = add nsw i32 %350, 64
  %352 = sub nsw i32 %351, 1
  %353 = sdiv i32 %352, 64
  store i32 %353, ptr %30, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #9
  %354 = load i32, ptr %24, align 4, !tbaa !11
  %355 = sub nsw i32 %354, 2
  store i32 %355, ptr %31, align 4, !tbaa !11
  %356 = 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 %357 unwind label %424

357:                                              ; preds = %348
  %358 = 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) %356)
          to label %359 unwind label %424

359:                                              ; preds = %357
  %360 = load i32, ptr %358, 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 %360, 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
  %361 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 16
  %362 = invoke noundef i32 @_ZNK3JPH17ConstraintManager17GetNumConstraintsEv(ptr noundef nonnull align 8 dereferenceable(80) %361)
          to label %363 unwind label %428

363:                                              ; preds = %359
  %364 = add nsw i32 %362, 64
  %365 = sub nsw i32 %364, 1
  %366 = sdiv i32 %365, 64
  store i32 %366, ptr %34, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #9
  %367 = load i32, ptr %24, align 4, !tbaa !11
  %368 = sub nsw i32 %367, 2
  store i32 %368, ptr %35, align 4, !tbaa !11
  %369 = 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 %370 unwind label %432

370:                                              ; preds = %363
  %371 = 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) %369)
          to label %372 unwind label %432

372:                                              ; preds = %370
  %373 = load i32, ptr %371, 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 %373, 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
  %374 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 16
  %375 = invoke noundef i32 @_ZNK3JPH17ConstraintManager17GetNumConstraintsEv(ptr noundef nonnull align 8 dereferenceable(80) %374)
          to label %376 unwind label %437

376:                                              ; preds = %372
  %377 = add nsw i32 %375, 256
  %378 = sub nsw i32 %377, 1
  %379 = sdiv i32 %378, 256
  store i32 %379, ptr %38, align 4, !tbaa !11
  %380 = 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 %381 unwind label %437

381:                                              ; preds = %376
  %382 = 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) %380)
          to label %383 unwind label %437

383:                                              ; preds = %381
  %384 = load i32, ptr %382, 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 %384, 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
  %385 = load i32, ptr %24, align 4, !tbaa !11
  %386 = icmp eq i32 %385, 1
  %387 = zext i1 %386 to i64
  %388 = select i1 %386, i32 1, i32 2
  store i32 %388, ptr %40, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #9
  %389 = load i32, ptr %14, align 4, !tbaa !11
  %390 = add nsw i32 %389, 16
  %391 = sub nsw i32 %390, 1
  %392 = sdiv i32 %391, 16
  store i32 %392, ptr %41, align 4, !tbaa !11
  %393 = 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 %394 unwind label %441

394:                                              ; preds = %383
  %395 = 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) %393)
          to label %396 unwind label %441

396:                                              ; preds = %394
  %397 = load i32, ptr %395, 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 %397, 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
  %398 = load i32, ptr %14, align 4, !tbaa !11
  %399 = add nsw i32 %398, 64
  %400 = sub nsw i32 %399, 1
  %401 = sdiv i32 %400, 64
  store i32 %401, ptr %44, align 4, !tbaa !11
  %402 = 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 %403 unwind label %445

403:                                              ; preds = %396
  %404 = 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) %402)
          to label %405 unwind label %445

405:                                              ; preds = %403
  %406 = load i32, ptr %404, 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 %406, 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 %407

407:                                              ; preds = %1172, %405
  %408 = load i32, ptr %45, align 4, !tbaa !11
  %409 = load i32, ptr %9, align 4, !tbaa !11
  %410 = icmp slt i32 %408, %409
  br i1 %410, label %449, label %411

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

412:                                              ; preds = %323
  %413 = landingpad { ptr, i32 }
          cleanup
  %414 = extractvalue { ptr, i32 } %413, 0
  store ptr %414, ptr %21, align 8
  %415 = extractvalue { ptr, i32 } %413, 1
  store i32 %415, ptr %22, align 4
  br label %1660

416:                                              ; preds = %325
  %417 = landingpad { ptr, i32 }
          cleanup
  %418 = extractvalue { ptr, i32 } %417, 0
  store ptr %418, ptr %21, align 8
  %419 = extractvalue { ptr, i32 } %417, 1
  store i32 %419, ptr %22, align 4
  br label %1659

420:                                              ; preds = %344, %333, %330
  %421 = landingpad { ptr, i32 }
          cleanup
  %422 = extractvalue { ptr, i32 } %421, 0
  store ptr %422, ptr %21, align 8
  %423 = extractvalue { ptr, i32 } %421, 1
  store i32 %423, 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 %1659

424:                                              ; preds = %357, %348
  %425 = landingpad { ptr, i32 }
          cleanup
  %426 = extractvalue { ptr, i32 } %425, 0
  store ptr %426, ptr %21, align 8
  %427 = extractvalue { ptr, i32 } %425, 1
  store i32 %427, 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 %1658

428:                                              ; preds = %359
  %429 = landingpad { ptr, i32 }
          cleanup
  %430 = extractvalue { ptr, i32 } %429, 0
  store ptr %430, ptr %21, align 8
  %431 = extractvalue { ptr, i32 } %429, 1
  store i32 %431, ptr %22, align 4
  br label %436

432:                                              ; preds = %370, %363
  %433 = landingpad { ptr, i32 }
          cleanup
  %434 = extractvalue { ptr, i32 } %433, 0
  store ptr %434, ptr %21, align 8
  %435 = extractvalue { ptr, i32 } %433, 1
  store i32 %435, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #9
  br label %436

436:                                              ; preds = %432, %428
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  br label %1657

437:                                              ; preds = %381, %376, %372
  %438 = landingpad { ptr, i32 }
          cleanup
  %439 = extractvalue { ptr, i32 } %438, 0
  store ptr %439, ptr %21, align 8
  %440 = extractvalue { ptr, i32 } %438, 1
  store i32 %440, 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 %1656

441:                                              ; preds = %394, %383
  %442 = landingpad { ptr, i32 }
          cleanup
  %443 = extractvalue { ptr, i32 } %442, 0
  store ptr %443, ptr %21, align 8
  %444 = extractvalue { ptr, i32 } %442, 1
  store i32 %444, 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 %1655

445:                                              ; preds = %403, %396
  %446 = landingpad { ptr, i32 }
          cleanup
  %447 = extractvalue { ptr, i32 } %446, 0
  store ptr %447, ptr %21, align 8
  %448 = extractvalue { ptr, i32 } %446, 1
  store i32 %448, 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 %1654

449:                                              ; preds = %407
  call void @llvm.lifetime.start.p0(i64 1, ptr %46) #9
  %450 = load i32, ptr %45, align 4, !tbaa !11
  %451 = icmp eq i32 %450, 0
  %452 = zext i1 %451 to i8
  store i8 %452, ptr %46, align 1, !tbaa !65
  call void @llvm.lifetime.start.p0(i64 1, ptr %47) #9
  %453 = load i32, ptr %45, align 4, !tbaa !11
  %454 = load i32, ptr %9, align 4, !tbaa !11
  %455 = sub nsw i32 %454, 1
  %456 = icmp eq i32 %453, %455
  %457 = zext i1 %456 to i8
  store i8 %457, ptr %47, align 1, !tbaa !65
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #9
  %458 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 11
  %459 = load i32, ptr %45, align 4, !tbaa !11
  %460 = sext i32 %459 to i64
  %461 = invoke noundef nonnull align 8 dereferenceable(7344) ptr @_ZN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %458, i64 noundef %460)
          to label %462 unwind label %537

462:                                              ; preds = %449
  store ptr %461, ptr %48, align 8, !tbaa !5
  %463 = load ptr, ptr %48, align 8, !tbaa !5
  %464 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %463, i32 0, i32 0
  store ptr %20, ptr %464, align 8, !tbaa !66
  %465 = load i8, ptr %46, align 1, !tbaa !65, !range !48, !noundef !49
  %466 = trunc i8 %465 to i1
  %467 = load ptr, ptr %48, align 8, !tbaa !5
  %468 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %467, i32 0, i32 1
  %469 = zext i1 %466 to i8
  store i8 %469, ptr %468, align 8, !tbaa !73
  %470 = load i8, ptr %47, align 1, !tbaa !65, !range !48, !noundef !49
  %471 = trunc i8 %470 to i1
  %472 = load ptr, ptr %48, align 8, !tbaa !5
  %473 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %472, i32 0, i32 2
  %474 = zext i1 %471 to i8
  store i8 %474, ptr %473, align 1, !tbaa !74
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #9
  %475 = 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 !75
  call void @llvm.lifetime.start.p0(i64 32, ptr %51) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %52) #9
  %476 = getelementptr inbounds %class.anon, ptr %52, i32 0, i32 0
  store ptr %20, ptr %476, align 8, !tbaa !5
  %477 = getelementptr inbounds %class.anon, ptr %52, i32 0, i32 1
  %478 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %478, ptr %477, 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
  %479 = load i32, ptr %39, align 4, !tbaa !11
  %480 = add nsw i32 %479, 2
  %481 = getelementptr inbounds %"class.JPH::Color", ptr %50, i32 0, i32 0
  %482 = getelementptr inbounds %union.anon, ptr %481, i32 0, i32 0
  %483 = load i32, ptr %482, align 4
  %484 = load ptr, ptr %475, align 8, !tbaa !45
  %485 = getelementptr inbounds ptr, ptr %484, i64 3
  %486 = load ptr, ptr %485, align 8
  invoke void %486(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %49, ptr noundef nonnull align 8 dereferenceable(8) %475, ptr noundef @.str.31, i32 %483, ptr noundef nonnull align 8 dereferenceable(32) %51, i32 noundef %480)
          to label %487 unwind label %541

487:                                              ; preds = %462
  %488 = load ptr, ptr %48, align 8, !tbaa !5
  %489 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %488, i32 0, i32 36
  %490 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %489, 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
  %491 = load i8, ptr %46, align 1, !tbaa !65, !range !48, !noundef !49
  %492 = trunc i8 %491 to i1
  %493 = zext i1 %492 to i64
  %494 = select i1 %492, i32 0, i32 1
  store i32 %494, ptr %53, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #9
  %495 = 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 !75
  call void @llvm.lifetime.start.p0(i64 32, ptr %56) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %57) #9
  %496 = getelementptr inbounds %class.anon.23, ptr %57, i32 0, i32 0
  store ptr %20, ptr %496, align 8, !tbaa !5
  %497 = getelementptr inbounds %class.anon.23, ptr %57, i32 0, i32 1
  %498 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %498, ptr %497, 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
  %499 = load i32, ptr %53, align 4, !tbaa !11
  %500 = getelementptr inbounds %"class.JPH::Color", ptr %55, i32 0, i32 0
  %501 = getelementptr inbounds %union.anon, ptr %500, i32 0, i32 0
  %502 = load i32, ptr %501, align 4
  %503 = load ptr, ptr %495, align 8, !tbaa !45
  %504 = getelementptr inbounds ptr, ptr %503, i64 3
  %505 = load ptr, ptr %504, align 8
  invoke void %505(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %54, ptr noundef nonnull align 8 dereferenceable(8) %495, ptr noundef @.str.32, i32 %502, ptr noundef nonnull align 8 dereferenceable(32) %56, i32 noundef %499)
          to label %506 unwind label %545

506:                                              ; preds = %487
  %507 = load ptr, ptr %48, align 8, !tbaa !5
  %508 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %507, i32 0, i32 31
  %509 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %508, 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
  %510 = load ptr, ptr %48, align 8, !tbaa !5
  %511 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %510, i32 0, i32 17
  %512 = load i32, ptr %24, align 4, !tbaa !11
  invoke void @_ZN3JPH11StaticArrayINS_20PhysicsUpdateContext13BodyPairQueueELj32EE6resizeEj(ptr noundef nonnull align 4 dereferenceable(4100) %511, i32 noundef %512)
          to label %513 unwind label %549

513:                                              ; preds = %506
  %514 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 13
  %515 = getelementptr inbounds %"struct.JPH::PhysicsSettings", ptr %514, i32 0, i32 0
  %516 = load i32, ptr %515, align 8, !tbaa !62
  %517 = load i32, ptr %24, align 4, !tbaa !11
  %518 = sdiv i32 %516, %517
  %519 = load ptr, ptr %48, align 8, !tbaa !5
  %520 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %519, i32 0, i32 18
  store i32 %518, ptr %520, align 8, !tbaa !77
  %521 = load ptr, ptr %48, align 8, !tbaa !5
  %522 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %521, i32 0, i32 19
  %523 = load i32, ptr %39, align 4, !tbaa !11
  %524 = sext i32 %523 to i64
  %525 = sub i64 32, %524
  %526 = trunc i64 %525 to i32
  %527 = lshr i32 -1, %526
  call void @_ZNSt13__atomic_baseIjE5storeEjSt12memory_order(ptr noundef nonnull align 4 dereferenceable(4) %522, i32 noundef %527, i32 noundef 3) #9
  %528 = load ptr, ptr %48, align 8, !tbaa !5
  %529 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %528, i32 0, i32 35
  %530 = load i32, ptr %39, align 4, !tbaa !11
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %529, i32 noundef %530)
          to label %531 unwind label %549

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

532:                                              ; preds = %582, %531
  %533 = load i32, ptr %58, align 4, !tbaa !11
  %534 = load i32, ptr %39, align 4, !tbaa !11
  %535 = icmp slt i32 %533, %534
  br i1 %535, label %553, label %536

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

537:                                              ; preds = %449
  %538 = landingpad { ptr, i32 }
          cleanup
  %539 = extractvalue { ptr, i32 } %538, 0
  store ptr %539, ptr %21, align 8
  %540 = extractvalue { ptr, i32 } %538, 1
  store i32 %540, ptr %22, align 4
  br label %1180

541:                                              ; preds = %462
  %542 = landingpad { ptr, i32 }
          cleanup
  %543 = extractvalue { ptr, i32 } %542, 0
  store ptr %543, ptr %21, align 8
  %544 = extractvalue { ptr, i32 } %542, 1
  store i32 %544, 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 %1180

545:                                              ; preds = %487
  %546 = landingpad { ptr, i32 }
          cleanup
  %547 = extractvalue { ptr, i32 } %546, 0
  store ptr %547, ptr %21, align 8
  %548 = extractvalue { ptr, i32 } %546, 1
  store i32 %548, 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 %1179

549:                                              ; preds = %1165, %1150, %1147, %1099, %1093, %1076, %1060, %1016, %1013, %1007, %991, %988, %985, %943, %864, %848, %842, %798, %743, %688, %640, %636, %632, %629, %621, %617, %611, %602, %599, %597, %513, %506
  %550 = landingpad { ptr, i32 }
          cleanup
  %551 = extractvalue { ptr, i32 } %550, 0
  store ptr %551, ptr %21, align 8
  %552 = extractvalue { ptr, i32 } %550, 1
  store i32 %552, ptr %22, align 4
  br label %1179

553:                                              ; preds = %532
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #9
  %554 = load i32, ptr %58, align 4, !tbaa !11
  %555 = icmp eq i32 %554, 0
  %556 = zext i1 %555 to i64
  %557 = select i1 %555, i32 1, i32 0
  store i32 %557, ptr %59, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #9
  %558 = 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 !75
  call void @llvm.lifetime.start.p0(i64 32, ptr %62) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %63) #9
  %559 = getelementptr inbounds %class.anon.24, ptr %63, i32 0, i32 0
  %560 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %560, ptr %559, align 8, !tbaa !5
  %561 = getelementptr inbounds %class.anon.24, ptr %63, i32 0, i32 1
  %562 = load i32, ptr %58, align 4, !tbaa !11
  store i32 %562, ptr %561, align 8, !tbaa !78
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %62, ptr noundef nonnull align 8 dereferenceable(12) %63) #9
  %563 = load i32, ptr %28, align 4, !tbaa !11
  %564 = load i32, ptr %32, align 4, !tbaa !11
  %565 = add nsw i32 %563, %564
  %566 = add nsw i32 %565, 1
  %567 = load i32, ptr %59, align 4, !tbaa !11
  %568 = add nsw i32 %566, %567
  %569 = getelementptr inbounds %"class.JPH::Color", ptr %61, i32 0, i32 0
  %570 = getelementptr inbounds %union.anon, ptr %569, i32 0, i32 0
  %571 = load i32, ptr %570, align 4
  %572 = load ptr, ptr %558, align 8, !tbaa !45
  %573 = getelementptr inbounds ptr, ptr %572, i64 3
  %574 = load ptr, ptr %573, align 8
  invoke void %574(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %60, ptr noundef nonnull align 8 dereferenceable(8) %558, ptr noundef @.str.33, i32 %571, ptr noundef nonnull align 8 dereferenceable(32) %62, i32 noundef %568)
          to label %575 unwind label %585

575:                                              ; preds = %553
  %576 = load ptr, ptr %48, align 8, !tbaa !5
  %577 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %576, i32 0, i32 35
  %578 = load i32, ptr %58, align 4, !tbaa !11
  %579 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %577, i32 noundef %578)
          to label %580 unwind label %589

580:                                              ; preds = %575
  %581 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %579, 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 %582

582:                                              ; preds = %580
  %583 = load i32, ptr %58, align 4, !tbaa !11
  %584 = add nsw i32 %583, 1
  store i32 %584, ptr %58, align 4, !tbaa !11
  br label %532, !llvm.loop !80

585:                                              ; preds = %553
  %586 = landingpad { ptr, i32 }
          cleanup
  %587 = extractvalue { ptr, i32 } %586, 0
  store ptr %587, ptr %21, align 8
  %588 = extractvalue { ptr, i32 } %586, 1
  store i32 %588, ptr %22, align 4
  br label %593

589:                                              ; preds = %575
  %590 = landingpad { ptr, i32 }
          cleanup
  %591 = extractvalue { ptr, i32 } %590, 0
  store ptr %591, ptr %21, align 8
  %592 = extractvalue { ptr, i32 } %590, 1
  store i32 %592, ptr %22, align 4
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %60) #9
  br label %593

593:                                              ; preds = %589, %585
  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 %1179

594:                                              ; preds = %536
  %595 = load i8, ptr %46, align 1, !tbaa !65, !range !48, !noundef !49
  %596 = trunc i8 %595 to i1
  br i1 %596, label %597, label %640

597:                                              ; preds = %594
  %598 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 2
  invoke void @_ZN3JPH11BodyManager21SetActiveBodiesLockedEb(ptr noundef nonnull align 8 dereferenceable(297) %598, i1 noundef zeroext true)
          to label %599 unwind label %549

599:                                              ; preds = %597
  %600 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 2
  %601 = invoke noundef i32 @_ZNK3JPH11BodyManager18GetNumActiveBodiesENS_9EBodyTypeE(ptr noundef nonnull align 8 dereferenceable(297) %600, i8 noundef zeroext 0)
          to label %602 unwind label %549

602:                                              ; preds = %599
  %603 = load ptr, ptr %48, align 8, !tbaa !5
  %604 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %603, i32 0, i32 4
  store i32 %601, ptr %604, align 8, !tbaa !82
  %605 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 16
  invoke void @_ZN3JPH17ConstraintManager18LockAllConstraintsEv(ptr noundef nonnull align 8 dereferenceable(80) %605)
          to label %606 unwind label %549

606:                                              ; preds = %602
  br label %607

607:                                              ; preds = %606
  %608 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 8
  %609 = load ptr, ptr %608, align 8, !tbaa !83
  %610 = icmp eq ptr %609, null
  br i1 %610, label %615, label %611

611:                                              ; preds = %607
  %612 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.34, ptr noundef @.str.24, i32 noundef 287)
          to label %613 unwind label %549

613:                                              ; preds = %611
  br i1 %612, label %614, label %615

614:                                              ; preds = %613
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !84
  br label %615

615:                                              ; preds = %614, %613, %607
  br label %616

616:                                              ; preds = %615
  br label %617

617:                                              ; preds = %616
  %618 = load ptr, ptr %10, align 8, !tbaa !5
  %619 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 16
  %620 = invoke noundef i32 @_ZNK3JPH17ConstraintManager17GetNumConstraintsEv(ptr noundef nonnull align 8 dereferenceable(80) %619)
          to label %621 unwind label %549

621:                                              ; preds = %617
  %622 = zext i32 %620 to i64
  %623 = mul i64 %622, 8
  %624 = trunc i64 %623 to i32
  %625 = load ptr, ptr %618, align 8, !tbaa !45
  %626 = getelementptr inbounds ptr, ptr %625, i64 2
  %627 = load ptr, ptr %626, align 8
  %628 = invoke noundef ptr %627(ptr noundef nonnull align 8 dereferenceable(8) %618, i32 noundef %624)
          to label %629 unwind label %549

629:                                              ; preds = %621
  %630 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 8
  store ptr %628, ptr %630, align 8, !tbaa !83
  %631 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 15
  invoke void @_ZN3JPH24ContactConstraintManager23PrepareConstraintBufferEPNS_20PhysicsUpdateContextE(ptr noundef nonnull align 8 dereferenceable(248) %631, ptr noundef %20)
          to label %632 unwind label %549

632:                                              ; preds = %629
  %633 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 17
  %634 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 15
  %635 = invoke noundef i32 @_ZNK3JPH24ContactConstraintManager17GetMaxConstraintsEv(ptr noundef nonnull align 8 dereferenceable(248) %634)
          to label %636 unwind label %549

636:                                              ; preds = %632
  %637 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 1
  %638 = load ptr, ptr %637, align 8, !tbaa !85
  invoke void @_ZN3JPH13IslandBuilder25PrepareContactConstraintsEjPNS_13TempAllocatorE(ptr noundef nonnull align 8 dereferenceable(112) %633, i32 noundef %635, ptr noundef %638)
          to label %639 unwind label %549

639:                                              ; preds = %636
  br label %640

640:                                              ; preds = %639, %594
  %641 = load ptr, ptr %48, align 8, !tbaa !5
  %642 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %641, i32 0, i32 34
  %643 = load i32, ptr %28, align 4, !tbaa !11
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %642, i32 noundef %643)
          to label %644 unwind label %549

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

645:                                              ; preds = %676, %644
  %646 = load i32, ptr %65, align 4, !tbaa !11
  %647 = load i32, ptr %28, align 4, !tbaa !11
  %648 = icmp slt i32 %646, %647
  br i1 %648, label %650, label %649

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

650:                                              ; preds = %645
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #9
  %651 = 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 !75
  call void @llvm.lifetime.start.p0(i64 32, ptr %68) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %69) #9
  %652 = getelementptr inbounds %class.anon.25, ptr %69, i32 0, i32 0
  store ptr %20, ptr %652, align 8, !tbaa !5
  %653 = getelementptr inbounds %class.anon.25, ptr %69, i32 0, i32 1
  %654 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %654, ptr %653, 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
  %655 = load i32, ptr %25, align 4, !tbaa !11
  %656 = icmp sgt i32 %655, 0
  br i1 %656, label %657, label %659

657:                                              ; preds = %650
  %658 = load i32, ptr %25, align 4, !tbaa !11
  br label %661

659:                                              ; preds = %650
  %660 = load i32, ptr %53, align 4, !tbaa !11
  br label %661

661:                                              ; preds = %659, %657
  %662 = phi i32 [ %658, %657 ], [ %660, %659 ]
  %663 = getelementptr inbounds %"class.JPH::Color", ptr %67, i32 0, i32 0
  %664 = getelementptr inbounds %union.anon, ptr %663, i32 0, i32 0
  %665 = load i32, ptr %664, align 4
  %666 = load ptr, ptr %651, align 8, !tbaa !45
  %667 = getelementptr inbounds ptr, ptr %666, i64 3
  %668 = load ptr, ptr %667, align 8
  invoke void %668(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %66, ptr noundef nonnull align 8 dereferenceable(8) %651, ptr noundef @.str.35, i32 %665, ptr noundef nonnull align 8 dereferenceable(32) %68, i32 noundef %662)
          to label %669 unwind label %679

669:                                              ; preds = %661
  %670 = load ptr, ptr %48, align 8, !tbaa !5
  %671 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %670, i32 0, i32 34
  %672 = load i32, ptr %65, align 4, !tbaa !11
  %673 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %671, i32 noundef %672)
          to label %674 unwind label %683

674:                                              ; preds = %669
  %675 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %673, 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 %676

676:                                              ; preds = %674
  %677 = load i32, ptr %65, align 4, !tbaa !11
  %678 = add nsw i32 %677, 1
  store i32 %678, ptr %65, align 4, !tbaa !11
  br label %645, !llvm.loop !86

679:                                              ; preds = %661
  %680 = landingpad { ptr, i32 }
          cleanup
  %681 = extractvalue { ptr, i32 } %680, 0
  store ptr %681, ptr %21, align 8
  %682 = extractvalue { ptr, i32 } %680, 1
  store i32 %682, ptr %22, align 4
  br label %687

683:                                              ; preds = %669
  %684 = landingpad { ptr, i32 }
          cleanup
  %685 = extractvalue { ptr, i32 } %684, 0
  store ptr %685, ptr %21, align 8
  %686 = extractvalue { ptr, i32 } %684, 1
  store i32 %686, ptr %22, align 4
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %66) #9
  br label %687

687:                                              ; preds = %683, %679
  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 %1179

688:                                              ; preds = %649
  %689 = load ptr, ptr %48, align 8, !tbaa !5
  %690 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %689, i32 0, i32 37
  %691 = load i32, ptr %36, align 4, !tbaa !11
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %690, i32 noundef %691)
          to label %692 unwind label %549

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

693:                                              ; preds = %718, %692
  %694 = load i32, ptr %70, align 4, !tbaa !11
  %695 = load i32, ptr %36, align 4, !tbaa !11
  %696 = icmp slt i32 %694, %695
  br i1 %696, label %698, label %697

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

698:                                              ; preds = %693
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #9
  %699 = 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 !75
  call void @llvm.lifetime.start.p0(i64 32, ptr %73) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %74) #9
  %700 = getelementptr inbounds %class.anon.26, ptr %74, i32 0, i32 0
  store ptr %20, ptr %700, align 8, !tbaa !5
  %701 = getelementptr inbounds %class.anon.26, ptr %74, i32 0, i32 1
  %702 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %702, ptr %701, 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
  %703 = load i32, ptr %32, align 4, !tbaa !11
  %704 = add nsw i32 %703, 1
  %705 = getelementptr inbounds %"class.JPH::Color", ptr %72, i32 0, i32 0
  %706 = getelementptr inbounds %union.anon, ptr %705, i32 0, i32 0
  %707 = load i32, ptr %706, align 4
  %708 = load ptr, ptr %699, align 8, !tbaa !45
  %709 = getelementptr inbounds ptr, ptr %708, i64 3
  %710 = load ptr, ptr %709, align 8
  invoke void %710(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %71, ptr noundef nonnull align 8 dereferenceable(8) %699, ptr noundef @.str.36, i32 %707, ptr noundef nonnull align 8 dereferenceable(32) %73, i32 noundef %704)
          to label %711 unwind label %721

711:                                              ; preds = %698
  %712 = load ptr, ptr %48, align 8, !tbaa !5
  %713 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %712, i32 0, i32 37
  %714 = load i32, ptr %70, align 4, !tbaa !11
  %715 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %713, i32 noundef %714)
          to label %716 unwind label %725

716:                                              ; preds = %711
  %717 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %715, 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 %718

718:                                              ; preds = %716
  %719 = load i32, ptr %70, align 4, !tbaa !11
  %720 = add nsw i32 %719, 1
  store i32 %720, ptr %70, align 4, !tbaa !11
  br label %693, !llvm.loop !87

721:                                              ; preds = %698
  %722 = landingpad { ptr, i32 }
          cleanup
  %723 = extractvalue { ptr, i32 } %722, 0
  store ptr %723, ptr %21, align 8
  %724 = extractvalue { ptr, i32 } %722, 1
  store i32 %724, ptr %22, align 4
  br label %729

725:                                              ; preds = %711
  %726 = landingpad { ptr, i32 }
          cleanup
  %727 = extractvalue { ptr, i32 } %726, 0
  store ptr %727, ptr %21, align 8
  %728 = extractvalue { ptr, i32 } %726, 1
  store i32 %728, ptr %22, align 4
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %71) #9
  br label %729

729:                                              ; preds = %725, %721
  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 %1179

730:                                              ; preds = %697
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #9
  %731 = 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 !75
  call void @llvm.lifetime.start.p0(i64 32, ptr %77) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %78) #9
  %732 = getelementptr inbounds %class.anon.27, ptr %78, i32 0, i32 0
  store ptr %20, ptr %732, align 8, !tbaa !5
  %733 = getelementptr inbounds %class.anon.27, ptr %78, i32 0, i32 1
  %734 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %734, ptr %733, 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
  %735 = load i32, ptr %32, align 4, !tbaa !11
  %736 = add nsw i32 %735, 1
  %737 = getelementptr inbounds %"class.JPH::Color", ptr %76, i32 0, i32 0
  %738 = getelementptr inbounds %union.anon, ptr %737, i32 0, i32 0
  %739 = load i32, ptr %738, align 4
  %740 = load ptr, ptr %731, align 8, !tbaa !45
  %741 = getelementptr inbounds ptr, ptr %740, i64 3
  %742 = load ptr, ptr %741, align 8
  invoke void %742(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %75, ptr noundef nonnull align 8 dereferenceable(8) %731, ptr noundef @.str.37, i32 %739, ptr noundef nonnull align 8 dereferenceable(32) %77, i32 noundef %736)
          to label %743 unwind label %756

743:                                              ; preds = %730
  %744 = load ptr, ptr %48, align 8, !tbaa !5
  %745 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %744, i32 0, i32 38
  %746 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %745, 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
  %747 = load ptr, ptr %48, align 8, !tbaa !5
  %748 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %747, i32 0, i32 33
  %749 = load i32, ptr %32, align 4, !tbaa !11
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %748, i32 noundef %749)
          to label %750 unwind label %549

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

751:                                              ; preds = %786, %750
  %752 = load i32, ptr %79, align 4, !tbaa !11
  %753 = load i32, ptr %32, align 4, !tbaa !11
  %754 = icmp slt i32 %752, %753
  br i1 %754, label %760, label %755

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

756:                                              ; preds = %730
  %757 = landingpad { ptr, i32 }
          cleanup
  %758 = extractvalue { ptr, i32 } %757, 0
  store ptr %758, ptr %21, align 8
  %759 = extractvalue { ptr, i32 } %757, 1
  store i32 %759, 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 %1179

760:                                              ; preds = %751
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #9
  %761 = 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 !75
  call void @llvm.lifetime.start.p0(i64 32, ptr %82) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %83) #9
  %762 = getelementptr inbounds %class.anon.28, ptr %83, i32 0, i32 0
  store ptr %20, ptr %762, align 8, !tbaa !5
  %763 = getelementptr inbounds %class.anon.28, ptr %83, i32 0, i32 1
  %764 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %764, ptr %763, 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
  %765 = load i32, ptr %25, align 4, !tbaa !11
  %766 = icmp sgt i32 %765, 0
  br i1 %766, label %767, label %769

767:                                              ; preds = %760
  %768 = load i32, ptr %25, align 4, !tbaa !11
  br label %771

769:                                              ; preds = %760
  %770 = load i32, ptr %53, align 4, !tbaa !11
  br label %771

771:                                              ; preds = %769, %767
  %772 = phi i32 [ %768, %767 ], [ %770, %769 ]
  %773 = getelementptr inbounds %"class.JPH::Color", ptr %81, i32 0, i32 0
  %774 = getelementptr inbounds %union.anon, ptr %773, i32 0, i32 0
  %775 = load i32, ptr %774, align 4
  %776 = load ptr, ptr %761, align 8, !tbaa !45
  %777 = getelementptr inbounds ptr, ptr %776, i64 3
  %778 = load ptr, ptr %777, align 8
  invoke void %778(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %80, ptr noundef nonnull align 8 dereferenceable(8) %761, ptr noundef @.str.38, i32 %775, ptr noundef nonnull align 8 dereferenceable(32) %82, i32 noundef %772)
          to label %779 unwind label %789

779:                                              ; preds = %771
  %780 = load ptr, ptr %48, align 8, !tbaa !5
  %781 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %780, i32 0, i32 33
  %782 = load i32, ptr %79, align 4, !tbaa !11
  %783 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %781, i32 noundef %782)
          to label %784 unwind label %793

784:                                              ; preds = %779
  %785 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %783, 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 %786

786:                                              ; preds = %784
  %787 = load i32, ptr %79, align 4, !tbaa !11
  %788 = add nsw i32 %787, 1
  store i32 %788, ptr %79, align 4, !tbaa !11
  br label %751, !llvm.loop !88

789:                                              ; preds = %771
  %790 = landingpad { ptr, i32 }
          cleanup
  %791 = extractvalue { ptr, i32 } %790, 0
  store ptr %791, ptr %21, align 8
  %792 = extractvalue { ptr, i32 } %790, 1
  store i32 %792, ptr %22, align 4
  br label %797

793:                                              ; preds = %779
  %794 = landingpad { ptr, i32 }
          cleanup
  %795 = extractvalue { ptr, i32 } %794, 0
  store ptr %795, ptr %21, align 8
  %796 = extractvalue { ptr, i32 } %794, 1
  store i32 %796, ptr %22, align 4
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %80) #9
  br label %797

797:                                              ; preds = %793, %789
  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 %1179

798:                                              ; preds = %755
  %799 = load ptr, ptr %48, align 8, !tbaa !5
  %800 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %799, i32 0, i32 32
  %801 = load i32, ptr %25, align 4, !tbaa !11
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %800, i32 noundef %801)
          to label %802 unwind label %549

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

803:                                              ; preds = %827, %802
  %804 = load i32, ptr %84, align 4, !tbaa !11
  %805 = load i32, ptr %25, align 4, !tbaa !11
  %806 = icmp slt i32 %804, %805
  br i1 %806, label %808, label %807

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

808:                                              ; preds = %803
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #9
  %809 = 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 !75
  call void @llvm.lifetime.start.p0(i64 32, ptr %87) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %88) #9
  %810 = getelementptr inbounds %class.anon.29, ptr %88, i32 0, i32 0
  store ptr %20, ptr %810, align 8, !tbaa !5
  %811 = getelementptr inbounds %class.anon.29, ptr %88, i32 0, i32 1
  %812 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %812, ptr %811, 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
  %813 = load i32, ptr %53, align 4, !tbaa !11
  %814 = getelementptr inbounds %"class.JPH::Color", ptr %86, i32 0, i32 0
  %815 = getelementptr inbounds %union.anon, ptr %814, i32 0, i32 0
  %816 = load i32, ptr %815, align 4
  %817 = load ptr, ptr %809, align 8, !tbaa !45
  %818 = getelementptr inbounds ptr, ptr %817, i64 3
  %819 = load ptr, ptr %818, align 8
  invoke void %819(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %85, ptr noundef nonnull align 8 dereferenceable(8) %809, ptr noundef @.str.39, i32 %816, ptr noundef nonnull align 8 dereferenceable(32) %87, i32 noundef %813)
          to label %820 unwind label %830

820:                                              ; preds = %808
  %821 = load ptr, ptr %48, align 8, !tbaa !5
  %822 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %821, i32 0, i32 32
  %823 = load i32, ptr %84, align 4, !tbaa !11
  %824 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %822, i32 noundef %823)
          to label %825 unwind label %834

825:                                              ; preds = %820
  %826 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %824, 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 %827

827:                                              ; preds = %825
  %828 = load i32, ptr %84, align 4, !tbaa !11
  %829 = add nsw i32 %828, 1
  store i32 %829, ptr %84, align 4, !tbaa !11
  br label %803, !llvm.loop !89

830:                                              ; preds = %808
  %831 = landingpad { ptr, i32 }
          cleanup
  %832 = extractvalue { ptr, i32 } %831, 0
  store ptr %832, ptr %21, align 8
  %833 = extractvalue { ptr, i32 } %831, 1
  store i32 %833, ptr %22, align 4
  br label %838

834:                                              ; preds = %820
  %835 = landingpad { ptr, i32 }
          cleanup
  %836 = extractvalue { ptr, i32 } %835, 0
  store ptr %836, ptr %21, align 8
  %837 = extractvalue { ptr, i32 } %835, 1
  store i32 %837, ptr %22, align 4
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %85) #9
  br label %838

838:                                              ; preds = %834, %830
  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 %1179

839:                                              ; preds = %807
  %840 = load i8, ptr %46, align 1, !tbaa !65, !range !48, !noundef !49
  %841 = trunc i8 %840 to i1
  br i1 %841, label %851, label %842

842:                                              ; preds = %839
  %843 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 11
  %844 = load i32, ptr %45, align 4, !tbaa !11
  %845 = sub nsw i32 %844, 1
  %846 = sext i32 %845 to i64
  %847 = invoke noundef nonnull align 8 dereferenceable(7344) ptr @_ZN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %843, i64 noundef %846)
          to label %848 unwind label %549

848:                                              ; preds = %842
  %849 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %847, i32 0, i32 52
  invoke void @_ZNK3JPH9JobSystem9JobHandle16RemoveDependencyEi(ptr noundef nonnull align 8 dereferenceable(8) %849, i32 noundef 1)
          to label %850 unwind label %549

850:                                              ; preds = %848
  br label %851

851:                                              ; preds = %850, %839
  call void @llvm.lifetime.start.p0(i64 8, ptr %89) #9
  %852 = 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 !75
  call void @llvm.lifetime.start.p0(i64 32, ptr %91) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %92) #9
  %853 = getelementptr inbounds %class.anon.30, ptr %92, i32 0, i32 0
  store ptr %20, ptr %853, align 8, !tbaa !5
  %854 = getelementptr inbounds %class.anon.30, ptr %92, i32 0, i32 1
  %855 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %855, ptr %854, 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
  %856 = load i32, ptr %39, align 4, !tbaa !11
  %857 = add nsw i32 %856, 2
  %858 = getelementptr inbounds %"class.JPH::Color", ptr %90, i32 0, i32 0
  %859 = getelementptr inbounds %union.anon, ptr %858, i32 0, i32 0
  %860 = load i32, ptr %859, align 4
  %861 = load ptr, ptr %852, align 8, !tbaa !45
  %862 = getelementptr inbounds ptr, ptr %861, i64 3
  %863 = load ptr, ptr %862, align 8
  invoke void %863(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %89, ptr noundef nonnull align 8 dereferenceable(8) %852, ptr noundef @.str.40, i32 %860, ptr noundef nonnull align 8 dereferenceable(32) %91, i32 noundef %857)
          to label %864 unwind label %922

864:                                              ; preds = %851
  %865 = load ptr, ptr %48, align 8, !tbaa !5
  %866 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %865, i32 0, i32 39
  %867 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %866, 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
  %868 = load ptr, ptr %48, align 8, !tbaa !5
  %869 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %868, i32 0, i32 38
  invoke void @_ZNK3JPH9JobSystem9JobHandle16RemoveDependencyEi(ptr noundef nonnull align 8 dereferenceable(8) %869, i32 noundef 1)
          to label %870 unwind label %549

870:                                              ; preds = %864
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #9
  %871 = 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 !75
  call void @llvm.lifetime.start.p0(i64 32, ptr %95) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %96) #9
  %872 = getelementptr inbounds %class.anon.31, ptr %96, i32 0, i32 0
  store ptr %20, ptr %872, align 8, !tbaa !5
  %873 = getelementptr inbounds %class.anon.31, ptr %96, i32 0, i32 1
  %874 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %874, ptr %873, 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
  %875 = getelementptr inbounds %"class.JPH::Color", ptr %94, i32 0, i32 0
  %876 = getelementptr inbounds %union.anon, ptr %875, i32 0, i32 0
  %877 = load i32, ptr %876, align 4
  %878 = load ptr, ptr %871, align 8, !tbaa !45
  %879 = getelementptr inbounds ptr, ptr %878, i64 3
  %880 = load ptr, ptr %879, align 8
  invoke void %880(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %93, ptr noundef nonnull align 8 dereferenceable(8) %871, ptr noundef @.str.41, i32 %877, ptr noundef nonnull align 8 dereferenceable(32) %95, i32 noundef 1)
          to label %881 unwind label %926

881:                                              ; preds = %870
  %882 = load ptr, ptr %48, align 8, !tbaa !5
  %883 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %882, i32 0, i32 47
  %884 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %883, 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
  %885 = 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 !75
  call void @llvm.lifetime.start.p0(i64 32, ptr %99) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %100) #9
  %886 = getelementptr inbounds %class.anon.32, ptr %100, i32 0, i32 0
  store ptr %20, ptr %886, align 8, !tbaa !5
  %887 = getelementptr inbounds %class.anon.32, ptr %100, i32 0, i32 1
  %888 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %888, ptr %887, 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
  %889 = getelementptr inbounds %"class.JPH::Color", ptr %98, i32 0, i32 0
  %890 = getelementptr inbounds %union.anon, ptr %889, i32 0, i32 0
  %891 = load i32, ptr %890, align 4
  %892 = load ptr, ptr %885, align 8, !tbaa !45
  %893 = getelementptr inbounds ptr, ptr %892, i64 3
  %894 = load ptr, ptr %893, align 8
  invoke void %894(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %97, ptr noundef nonnull align 8 dereferenceable(8) %885, ptr noundef @.str.42, i32 %891, ptr noundef nonnull align 8 dereferenceable(32) %99, i32 noundef 2)
          to label %895 unwind label %930

895:                                              ; preds = %881
  %896 = load ptr, ptr %48, align 8, !tbaa !5
  %897 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %896, i32 0, i32 40
  %898 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %897, 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
  %899 = load i8, ptr %47, align 1, !tbaa !65, !range !48, !noundef !49
  %900 = trunc i8 %899 to i1
  br i1 %900, label %943, label %901

901:                                              ; preds = %895
  call void @llvm.lifetime.start.p0(i64 8, ptr %101) #9
  %902 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 11
  %903 = load i32, ptr %45, align 4, !tbaa !11
  %904 = add nsw i32 %903, 1
  %905 = sext i32 %904 to i64
  %906 = invoke noundef nonnull align 8 dereferenceable(7344) ptr @_ZN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %902, i64 noundef %905)
          to label %907 unwind label %934

907:                                              ; preds = %901
  store ptr %906, ptr %101, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %102) #9
  %908 = 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 !75
  call void @llvm.lifetime.start.p0(i64 32, ptr %104) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %105) #9
  %909 = getelementptr inbounds %class.anon.33, ptr %105, i32 0, i32 0
  store ptr %177, ptr %909, align 8, !tbaa !90
  %910 = getelementptr inbounds %class.anon.33, ptr %105, i32 0, i32 1
  %911 = load ptr, ptr %101, align 8, !tbaa !5
  store ptr %911, ptr %910, align 8, !tbaa !92
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_11vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %104, ptr noundef nonnull align 8 dereferenceable(16) %105) #9
  %912 = getelementptr inbounds %"class.JPH::Color", ptr %103, i32 0, i32 0
  %913 = getelementptr inbounds %union.anon, ptr %912, i32 0, i32 0
  %914 = load i32, ptr %913, align 4
  %915 = load ptr, ptr %908, align 8, !tbaa !45
  %916 = getelementptr inbounds ptr, ptr %915, i64 3
  %917 = load ptr, ptr %916, align 8
  invoke void %917(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %102, ptr noundef nonnull align 8 dereferenceable(8) %908, ptr noundef @.str.43, i32 %914, ptr noundef nonnull align 8 dereferenceable(32) %104, i32 noundef 3)
          to label %918 unwind label %938

918:                                              ; preds = %907
  %919 = load ptr, ptr %48, align 8, !tbaa !5
  %920 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %919, i32 0, i32 52
  %921 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %920, 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 %943

922:                                              ; preds = %851
  %923 = landingpad { ptr, i32 }
          cleanup
  %924 = extractvalue { ptr, i32 } %923, 0
  store ptr %924, ptr %21, align 8
  %925 = extractvalue { ptr, i32 } %923, 1
  store i32 %925, 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 %1179

926:                                              ; preds = %870
  %927 = landingpad { ptr, i32 }
          cleanup
  %928 = extractvalue { ptr, i32 } %927, 0
  store ptr %928, ptr %21, align 8
  %929 = extractvalue { ptr, i32 } %927, 1
  store i32 %929, 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 %1179

930:                                              ; preds = %881
  %931 = landingpad { ptr, i32 }
          cleanup
  %932 = extractvalue { ptr, i32 } %931, 0
  store ptr %932, ptr %21, align 8
  %933 = extractvalue { ptr, i32 } %931, 1
  store i32 %933, 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 %1179

934:                                              ; preds = %901
  %935 = landingpad { ptr, i32 }
          cleanup
  %936 = extractvalue { ptr, i32 } %935, 0
  store ptr %936, ptr %21, align 8
  %937 = extractvalue { ptr, i32 } %935, 1
  store i32 %937, ptr %22, align 4
  br label %942

938:                                              ; preds = %907
  %939 = landingpad { ptr, i32 }
          cleanup
  %940 = extractvalue { ptr, i32 } %939, 0
  store ptr %940, ptr %21, align 8
  %941 = extractvalue { ptr, i32 } %939, 1
  store i32 %941, 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 %942

942:                                              ; preds = %938, %934
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #9
  br label %1179

943:                                              ; preds = %918, %895
  %944 = load ptr, ptr %48, align 8, !tbaa !5
  %945 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %944, i32 0, i32 41
  %946 = load i32, ptr %24, align 4, !tbaa !11
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %945, i32 noundef %946)
          to label %947 unwind label %549

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

948:                                              ; preds = %973, %947
  %949 = load i32, ptr %106, align 4, !tbaa !11
  %950 = load i32, ptr %24, align 4, !tbaa !11
  %951 = icmp slt i32 %949, %950
  br i1 %951, label %953, label %952

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

953:                                              ; preds = %948
  call void @llvm.lifetime.start.p0(i64 8, ptr %107) #9
  %954 = 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 !75
  call void @llvm.lifetime.start.p0(i64 32, ptr %109) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %110) #9
  %955 = getelementptr inbounds %class.anon.34, ptr %110, i32 0, i32 0
  store ptr %20, ptr %955, align 8, !tbaa !5
  %956 = getelementptr inbounds %class.anon.34, ptr %110, i32 0, i32 1
  %957 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %957, ptr %956, 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
  %958 = load i32, ptr %36, align 4, !tbaa !11
  %959 = add nsw i32 %958, 2
  %960 = getelementptr inbounds %"class.JPH::Color", ptr %108, i32 0, i32 0
  %961 = getelementptr inbounds %union.anon, ptr %960, i32 0, i32 0
  %962 = load i32, ptr %961, align 4
  %963 = load ptr, ptr %954, align 8, !tbaa !45
  %964 = getelementptr inbounds ptr, ptr %963, i64 3
  %965 = load ptr, ptr %964, align 8
  invoke void %965(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %107, ptr noundef nonnull align 8 dereferenceable(8) %954, ptr noundef @.str.44, i32 %962, ptr noundef nonnull align 8 dereferenceable(32) %109, i32 noundef %959)
          to label %966 unwind label %976

966:                                              ; preds = %953
  %967 = load ptr, ptr %48, align 8, !tbaa !5
  %968 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %967, i32 0, i32 41
  %969 = load i32, ptr %106, align 4, !tbaa !11
  %970 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %968, i32 noundef %969)
          to label %971 unwind label %980

971:                                              ; preds = %966
  %972 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %970, 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 %973

973:                                              ; preds = %971
  %974 = load i32, ptr %106, align 4, !tbaa !11
  %975 = add nsw i32 %974, 1
  store i32 %975, ptr %106, align 4, !tbaa !11
  br label %948, !llvm.loop !93

976:                                              ; preds = %953
  %977 = landingpad { ptr, i32 }
          cleanup
  %978 = extractvalue { ptr, i32 } %977, 0
  store ptr %978, ptr %21, align 8
  %979 = extractvalue { ptr, i32 } %977, 1
  store i32 %979, ptr %22, align 4
  br label %984

980:                                              ; preds = %966
  %981 = landingpad { ptr, i32 }
          cleanup
  %982 = extractvalue { ptr, i32 } %981, 0
  store ptr %982, ptr %21, align 8
  %983 = extractvalue { ptr, i32 } %981, 1
  store i32 %983, ptr %22, align 4
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %107) #9
  br label %984

984:                                              ; preds = %980, %976
  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 %1179

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

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

991:                                              ; preds = %988
  %992 = load ptr, ptr %48, align 8, !tbaa !5
  %993 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %992, i32 0, i32 39
  invoke void @_ZNK3JPH9JobSystem9JobHandle16RemoveDependencyEi(ptr noundef nonnull align 8 dereferenceable(8) %993, i32 noundef 1)
          to label %994 unwind label %549

994:                                              ; preds = %991
  call void @llvm.lifetime.start.p0(i64 8, ptr %111) #9
  %995 = 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 !75
  call void @llvm.lifetime.start.p0(i64 32, ptr %113) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %114) #9
  %996 = getelementptr inbounds %class.anon.35, ptr %114, i32 0, i32 0
  store ptr %20, ptr %996, align 8, !tbaa !5
  %997 = getelementptr inbounds %class.anon.35, ptr %114, i32 0, i32 1
  %998 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %998, ptr %997, 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
  %999 = load i32, ptr %24, align 4, !tbaa !11
  %1000 = add nsw i32 2, %999
  %1001 = getelementptr inbounds %"class.JPH::Color", ptr %112, i32 0, i32 0
  %1002 = getelementptr inbounds %union.anon, ptr %1001, i32 0, i32 0
  %1003 = load i32, ptr %1002, align 4
  %1004 = load ptr, ptr %995, align 8, !tbaa !45
  %1005 = getelementptr inbounds ptr, ptr %1004, i64 3
  %1006 = load ptr, ptr %1005, align 8
  invoke void %1006(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %111, ptr noundef nonnull align 8 dereferenceable(8) %995, ptr noundef @.str.45, i32 %1003, ptr noundef nonnull align 8 dereferenceable(32) %113, i32 noundef %1000)
          to label %1007 unwind label %1026

1007:                                             ; preds = %994
  %1008 = load ptr, ptr %48, align 8, !tbaa !5
  %1009 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1008, i32 0, i32 42
  %1010 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %1009, 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
  %1011 = load ptr, ptr %48, align 8, !tbaa !5
  %1012 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1011, i32 0, i32 36
  invoke void @_ZNK3JPH9JobSystem9JobHandle16RemoveDependencyEi(ptr noundef nonnull align 8 dereferenceable(8) %1012, i32 noundef 1)
          to label %1013 unwind label %549

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

1016:                                             ; preds = %1013
  %1017 = load ptr, ptr %48, align 8, !tbaa !5
  %1018 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1017, i32 0, i32 43
  %1019 = load i32, ptr %42, align 4, !tbaa !11
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %1018, i32 noundef %1019)
          to label %1020 unwind label %549

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

1021:                                             ; preds = %1048, %1020
  %1022 = load i32, ptr %115, align 4, !tbaa !11
  %1023 = load i32, ptr %42, align 4, !tbaa !11
  %1024 = icmp slt i32 %1022, %1023
  br i1 %1024, label %1030, label %1025

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

1026:                                             ; preds = %994
  %1027 = landingpad { ptr, i32 }
          cleanup
  %1028 = extractvalue { ptr, i32 } %1027, 0
  store ptr %1028, ptr %21, align 8
  %1029 = extractvalue { ptr, i32 } %1027, 1
  store i32 %1029, 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 %1179

1030:                                             ; preds = %1021
  call void @llvm.lifetime.start.p0(i64 8, ptr %116) #9
  %1031 = 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 !75
  call void @llvm.lifetime.start.p0(i64 32, ptr %118) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %119) #9
  %1032 = getelementptr inbounds %class.anon.36, ptr %119, i32 0, i32 0
  store ptr %20, ptr %1032, align 8, !tbaa !5
  %1033 = getelementptr inbounds %class.anon.36, ptr %119, i32 0, i32 1
  %1034 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %1034, ptr %1033, 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
  %1035 = getelementptr inbounds %"class.JPH::Color", ptr %117, i32 0, i32 0
  %1036 = getelementptr inbounds %union.anon, ptr %1035, i32 0, i32 0
  %1037 = load i32, ptr %1036, align 4
  %1038 = load ptr, ptr %1031, align 8, !tbaa !45
  %1039 = getelementptr inbounds ptr, ptr %1038, i64 3
  %1040 = load ptr, ptr %1039, align 8
  invoke void %1040(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %116, ptr noundef nonnull align 8 dereferenceable(8) %1031, ptr noundef @.str.46, i32 %1037, ptr noundef nonnull align 8 dereferenceable(32) %118, i32 noundef 2)
          to label %1041 unwind label %1051

1041:                                             ; preds = %1030
  %1042 = load ptr, ptr %48, align 8, !tbaa !5
  %1043 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1042, i32 0, i32 43
  %1044 = load i32, ptr %115, align 4, !tbaa !11
  %1045 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %1043, i32 noundef %1044)
          to label %1046 unwind label %1055

1046:                                             ; preds = %1041
  %1047 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %1045, 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 %1048

1048:                                             ; preds = %1046
  %1049 = load i32, ptr %115, align 4, !tbaa !11
  %1050 = add nsw i32 %1049, 1
  store i32 %1050, ptr %115, align 4, !tbaa !11
  br label %1021, !llvm.loop !94

1051:                                             ; preds = %1030
  %1052 = landingpad { ptr, i32 }
          cleanup
  %1053 = extractvalue { ptr, i32 } %1052, 0
  store ptr %1053, ptr %21, align 8
  %1054 = extractvalue { ptr, i32 } %1052, 1
  store i32 %1054, ptr %22, align 4
  br label %1059

1055:                                             ; preds = %1041
  %1056 = landingpad { ptr, i32 }
          cleanup
  %1057 = extractvalue { ptr, i32 } %1056, 0
  store ptr %1057, ptr %21, align 8
  %1058 = extractvalue { ptr, i32 } %1056, 1
  store i32 %1058, ptr %22, align 4
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %116) #9
  br label %1059

1059:                                             ; preds = %1055, %1051
  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 %1179

1060:                                             ; preds = %1025
  %1061 = load ptr, ptr %48, align 8, !tbaa !5
  %1062 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1061, i32 0, i32 42
  invoke void @_ZNK3JPH9JobSystem9JobHandle16RemoveDependencyEi(ptr noundef nonnull align 8 dereferenceable(8) %1062, i32 noundef 1)
          to label %1063 unwind label %549

1063:                                             ; preds = %1060
  call void @llvm.lifetime.start.p0(i64 8, ptr %120) #9
  %1064 = 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 !75
  call void @llvm.lifetime.start.p0(i64 32, ptr %122) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %123) #9
  %1065 = getelementptr inbounds %class.anon.37, ptr %123, i32 0, i32 0
  store ptr %20, ptr %1065, align 8, !tbaa !5
  %1066 = getelementptr inbounds %class.anon.37, ptr %123, i32 0, i32 1
  %1067 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %1067, ptr %1066, 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
  %1068 = load i32, ptr %42, align 4, !tbaa !11
  %1069 = add nsw i32 %1068, 1
  %1070 = getelementptr inbounds %"class.JPH::Color", ptr %121, i32 0, i32 0
  %1071 = getelementptr inbounds %union.anon, ptr %1070, i32 0, i32 0
  %1072 = load i32, ptr %1071, align 4
  %1073 = load ptr, ptr %1064, align 8, !tbaa !45
  %1074 = getelementptr inbounds ptr, ptr %1073, i64 3
  %1075 = load ptr, ptr %1074, align 8
  invoke void %1075(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %120, ptr noundef nonnull align 8 dereferenceable(8) %1064, ptr noundef @.str.47, i32 %1072, ptr noundef nonnull align 8 dereferenceable(32) %122, i32 noundef %1069)
          to label %1076 unwind label %1109

1076:                                             ; preds = %1063
  %1077 = load ptr, ptr %48, align 8, !tbaa !5
  %1078 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1077, i32 0, i32 44
  %1079 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %1078, 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
  %1080 = load ptr, ptr %48, align 8, !tbaa !5
  %1081 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1080, i32 0, i32 43
  invoke void @_ZN3JPH9JobSystem9JobHandle19sRemoveDependenciesILj32EEEvRNS_11StaticArrayIS1_XT_EEEi(ptr noundef nonnull align 8 dereferenceable(264) %1081, i32 noundef 1)
          to label %1082 unwind label %549

1082:                                             ; preds = %1076
  call void @llvm.lifetime.start.p0(i64 8, ptr %124) #9
  %1083 = 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 !75
  call void @llvm.lifetime.start.p0(i64 32, ptr %126) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %127) #9
  %1084 = getelementptr inbounds %class.anon.38, ptr %127, i32 0, i32 0
  store ptr %20, ptr %1084, align 8, !tbaa !5
  %1085 = getelementptr inbounds %class.anon.38, ptr %127, i32 0, i32 1
  %1086 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %1086, ptr %1085, 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
  %1087 = getelementptr inbounds %"class.JPH::Color", ptr %125, i32 0, i32 0
  %1088 = getelementptr inbounds %union.anon, ptr %1087, i32 0, i32 0
  %1089 = load i32, ptr %1088, align 4
  %1090 = load ptr, ptr %1083, align 8, !tbaa !45
  %1091 = getelementptr inbounds ptr, ptr %1090, i64 3
  %1092 = load ptr, ptr %1091, align 8
  invoke void %1092(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %124, ptr noundef nonnull align 8 dereferenceable(8) %1083, ptr noundef @.str.48, i32 %1089, ptr noundef nonnull align 8 dereferenceable(32) %126, i32 noundef 2)
          to label %1093 unwind label %1113

1093:                                             ; preds = %1082
  %1094 = load ptr, ptr %48, align 8, !tbaa !5
  %1095 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1094, i32 0, i32 45
  %1096 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %1095, 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
  %1097 = load ptr, ptr %48, align 8, !tbaa !5
  %1098 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1097, i32 0, i32 44
  invoke void @_ZNK3JPH9JobSystem9JobHandle16RemoveDependencyEi(ptr noundef nonnull align 8 dereferenceable(8) %1098, i32 noundef 1)
          to label %1099 unwind label %549

1099:                                             ; preds = %1093
  %1100 = load ptr, ptr %48, align 8, !tbaa !5
  %1101 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1100, i32 0, i32 46
  %1102 = load i32, ptr %24, align 4, !tbaa !11
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %1101, i32 noundef %1102)
          to label %1103 unwind label %549

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

1104:                                             ; preds = %1135, %1103
  %1105 = load i32, ptr %128, align 4, !tbaa !11
  %1106 = load i32, ptr %24, align 4, !tbaa !11
  %1107 = icmp slt i32 %1105, %1106
  br i1 %1107, label %1117, label %1108

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

1109:                                             ; preds = %1063
  %1110 = landingpad { ptr, i32 }
          cleanup
  %1111 = extractvalue { ptr, i32 } %1110, 0
  store ptr %1111, ptr %21, align 8
  %1112 = extractvalue { ptr, i32 } %1110, 1
  store i32 %1112, 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 %1179

1113:                                             ; preds = %1082
  %1114 = landingpad { ptr, i32 }
          cleanup
  %1115 = extractvalue { ptr, i32 } %1114, 0
  store ptr %1115, ptr %21, align 8
  %1116 = extractvalue { ptr, i32 } %1114, 1
  store i32 %1116, 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 %1179

1117:                                             ; preds = %1104
  call void @llvm.lifetime.start.p0(i64 8, ptr %129) #9
  %1118 = 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 !75
  call void @llvm.lifetime.start.p0(i64 32, ptr %131) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %132) #9
  %1119 = getelementptr inbounds %class.anon.39, ptr %132, i32 0, i32 0
  store ptr %20, ptr %1119, align 8, !tbaa !5
  %1120 = getelementptr inbounds %class.anon.39, ptr %132, i32 0, i32 1
  %1121 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %1121, ptr %1120, 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
  %1122 = getelementptr inbounds %"class.JPH::Color", ptr %130, i32 0, i32 0
  %1123 = getelementptr inbounds %union.anon, ptr %1122, i32 0, i32 0
  %1124 = load i32, ptr %1123, align 4
  %1125 = load ptr, ptr %1118, align 8, !tbaa !45
  %1126 = getelementptr inbounds ptr, ptr %1125, i64 3
  %1127 = load ptr, ptr %1126, align 8
  invoke void %1127(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %129, ptr noundef nonnull align 8 dereferenceable(8) %1118, ptr noundef @.str.49, i32 %1124, ptr noundef nonnull align 8 dereferenceable(32) %131, i32 noundef 3)
          to label %1128 unwind label %1138

1128:                                             ; preds = %1117
  %1129 = load ptr, ptr %48, align 8, !tbaa !5
  %1130 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1129, i32 0, i32 46
  %1131 = load i32, ptr %128, align 4, !tbaa !11
  %1132 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %1130, i32 noundef %1131)
          to label %1133 unwind label %1142

1133:                                             ; preds = %1128
  %1134 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %1132, 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 %1135

1135:                                             ; preds = %1133
  %1136 = load i32, ptr %128, align 4, !tbaa !11
  %1137 = add nsw i32 %1136, 1
  store i32 %1137, ptr %128, align 4, !tbaa !11
  br label %1104, !llvm.loop !95

1138:                                             ; preds = %1117
  %1139 = landingpad { ptr, i32 }
          cleanup
  %1140 = extractvalue { ptr, i32 } %1139, 0
  store ptr %1140, ptr %21, align 8
  %1141 = extractvalue { ptr, i32 } %1139, 1
  store i32 %1141, ptr %22, align 4
  br label %1146

1142:                                             ; preds = %1128
  %1143 = landingpad { ptr, i32 }
          cleanup
  %1144 = extractvalue { ptr, i32 } %1143, 0
  store ptr %1144, ptr %21, align 8
  %1145 = extractvalue { ptr, i32 } %1143, 1
  store i32 %1145, ptr %22, align 4
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %129) #9
  br label %1146

1146:                                             ; preds = %1142, %1138
  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 %1179

1147:                                             ; preds = %1108
  %1148 = load ptr, ptr %48, align 8, !tbaa !5
  %1149 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1148, i32 0, i32 45
  invoke void @_ZNK3JPH9JobSystem9JobHandle16RemoveDependencyEi(ptr noundef nonnull align 8 dereferenceable(8) %1149, i32 noundef 1)
          to label %1150 unwind label %549

1150:                                             ; preds = %1147
  %1151 = load ptr, ptr %48, align 8, !tbaa !5
  %1152 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1151, i32 0, i32 40
  invoke void @_ZNK3JPH9JobSystem9JobHandle16RemoveDependencyEi(ptr noundef nonnull align 8 dereferenceable(8) %1152, i32 noundef 1)
          to label %1153 unwind label %549

1153:                                             ; preds = %1150
  call void @llvm.lifetime.start.p0(i64 8, ptr %133) #9
  %1154 = 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 !75
  call void @llvm.lifetime.start.p0(i64 32, ptr %135) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %136) #9
  %1155 = getelementptr inbounds %class.anon.40, ptr %136, i32 0, i32 0
  store ptr %20, ptr %1155, align 8, !tbaa !5
  %1156 = getelementptr inbounds %class.anon.40, ptr %136, i32 0, i32 1
  %1157 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %1157, ptr %1156, 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
  %1158 = load i32, ptr %24, align 4, !tbaa !11
  %1159 = getelementptr inbounds %"class.JPH::Color", ptr %134, i32 0, i32 0
  %1160 = getelementptr inbounds %union.anon, ptr %1159, i32 0, i32 0
  %1161 = load i32, ptr %1160, align 4
  %1162 = load ptr, ptr %1154, align 8, !tbaa !45
  %1163 = getelementptr inbounds ptr, ptr %1162, i64 3
  %1164 = load ptr, ptr %1163, align 8
  invoke void %1164(ptr dead_on_unwind writable sret(%"class.JPH::JobSystem::JobHandle") align 8 %133, ptr noundef nonnull align 8 dereferenceable(8) %1154, ptr noundef @.str.50, i32 %1161, ptr noundef nonnull align 8 dereferenceable(32) %135, i32 noundef %1158)
          to label %1165 unwind label %1175

1165:                                             ; preds = %1153
  %1166 = load ptr, ptr %48, align 8, !tbaa !5
  %1167 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1166, i32 0, i32 48
  %1168 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %1167, 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
  %1169 = load ptr, ptr %48, align 8, !tbaa !5
  %1170 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1169, i32 0, i32 46
  invoke void @_ZN3JPH9JobSystem9JobHandle19sRemoveDependenciesILj32EEEvRNS_11StaticArrayIS1_XT_EEEi(ptr noundef nonnull align 8 dereferenceable(264) %1170, i32 noundef 1)
          to label %1171 unwind label %549

1171:                                             ; preds = %1165
  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 %1172

1172:                                             ; preds = %1171
  %1173 = load i32, ptr %45, align 4, !tbaa !11
  %1174 = add nsw i32 %1173, 1
  store i32 %1174, ptr %45, align 4, !tbaa !11
  br label %407, !llvm.loop !96

1175:                                             ; preds = %1153
  %1176 = landingpad { ptr, i32 }
          cleanup
  %1177 = extractvalue { ptr, i32 } %1176, 0
  store ptr %1177, ptr %21, align 8
  %1178 = extractvalue { ptr, i32 } %1176, 1
  store i32 %1178, 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 %1179

1179:                                             ; preds = %1175, %1146, %1113, %1109, %1059, %1026, %984, %942, %930, %926, %922, %838, %797, %756, %729, %687, %593, %549, %545
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #9
  br label %1180

1180:                                             ; preds = %1179, %541, %537
  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 %1654

1181:                                             ; preds = %411
  call void @llvm.lifetime.start.p0(i64 8, ptr %137) #9
  %1182 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 3
  %1183 = load ptr, ptr %1182, align 8, !tbaa !56
  store ptr %1183, 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
  %1184 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 11
  store ptr %1184, ptr %139, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %140) #9
  %1185 = load ptr, ptr %139, align 8, !tbaa !5
  %1186 = invoke noundef ptr @_ZN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(32) %1185)
          to label %1187 unwind label %1196

1187:                                             ; preds = %1181
  store ptr %1186, ptr %140, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %141) #9
  %1188 = load ptr, ptr %139, align 8, !tbaa !5
  %1189 = invoke noundef ptr @_ZN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(32) %1188)
          to label %1190 unwind label %1200

1190:                                             ; preds = %1187
  store ptr %1189, ptr %141, align 8, !tbaa !5
  br label %1191

1191:                                             ; preds = %1547, %1190
  %1192 = load ptr, ptr %140, align 8, !tbaa !5
  %1193 = load ptr, ptr %141, align 8, !tbaa !5
  %1194 = icmp ne ptr %1192, %1193
  br i1 %1194, label %1204, label %1195

1195:                                             ; preds = %1191
  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 %1553

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

1200:                                             ; preds = %1187
  %1201 = landingpad { ptr, i32 }
          cleanup
  %1202 = extractvalue { ptr, i32 } %1201, 0
  store ptr %1202, ptr %21, align 8
  %1203 = extractvalue { ptr, i32 } %1201, 1
  store i32 %1203, ptr %22, align 4
  br label %1551

1204:                                             ; preds = %1191
  call void @llvm.lifetime.start.p0(i64 8, ptr %142) #9
  %1205 = load ptr, ptr %140, align 8, !tbaa !5
  store ptr %1205, ptr %142, align 8, !tbaa !5
  %1206 = load ptr, ptr %142, align 8, !tbaa !5
  %1207 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1206, i32 0, i32 31
  %1208 = invoke noundef zeroext i1 @_ZNK3JPH9JobSystem9JobHandle7IsValidEv(ptr noundef nonnull align 8 dereferenceable(8) %1207)
          to label %1209 unwind label %1214

1209:                                             ; preds = %1204
  br i1 %1208, label %1210, label %1218

1210:                                             ; preds = %1209
  %1211 = load ptr, ptr %142, align 8, !tbaa !5
  %1212 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1211, i32 0, i32 31
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %138, ptr noundef nonnull align 8 dereferenceable(8) %1212)
          to label %1213 unwind label %1214

1213:                                             ; preds = %1210
  br label %1218

1214:                                             ; preds = %1542, %1537, %1533, %1528, %1525, %1487, %1484, %1446, %1408, %1405, %1402, %1363, %1358, %1210, %1204
  %1215 = landingpad { ptr, i32 }
          cleanup
  %1216 = extractvalue { ptr, i32 } %1215, 0
  store ptr %1216, ptr %21, align 8
  %1217 = extractvalue { ptr, i32 } %1215, 1
  store i32 %1217, ptr %22, align 4
  br label %1550

1218:                                             ; preds = %1213, %1209
  call void @llvm.lifetime.start.p0(i64 8, ptr %143) #9
  %1219 = load ptr, ptr %142, align 8, !tbaa !5
  %1220 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1219, i32 0, i32 32
  store ptr %1220, ptr %143, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %144) #9
  %1221 = load ptr, ptr %143, align 8, !tbaa !5
  %1222 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %1221)
          to label %1223 unwind label %1232

1223:                                             ; preds = %1218
  store ptr %1222, ptr %144, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %145) #9
  %1224 = load ptr, ptr %143, align 8, !tbaa !5
  %1225 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %1224)
          to label %1226 unwind label %1236

1226:                                             ; preds = %1223
  store ptr %1225, ptr %145, align 8, !tbaa !5
  br label %1227

1227:                                             ; preds = %1244, %1226
  %1228 = load ptr, ptr %144, align 8, !tbaa !5
  %1229 = load ptr, ptr %145, align 8, !tbaa !5
  %1230 = icmp ne ptr %1228, %1229
  br i1 %1230, label %1240, label %1231

1231:                                             ; preds = %1227
  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 %1253

1232:                                             ; preds = %1218
  %1233 = landingpad { ptr, i32 }
          cleanup
  %1234 = extractvalue { ptr, i32 } %1233, 0
  store ptr %1234, ptr %21, align 8
  %1235 = extractvalue { ptr, i32 } %1233, 1
  store i32 %1235, ptr %22, align 4
  br label %1252

1236:                                             ; preds = %1223
  %1237 = landingpad { ptr, i32 }
          cleanup
  %1238 = extractvalue { ptr, i32 } %1237, 0
  store ptr %1238, ptr %21, align 8
  %1239 = extractvalue { ptr, i32 } %1237, 1
  store i32 %1239, ptr %22, align 4
  br label %1251

1240:                                             ; preds = %1227
  call void @llvm.lifetime.start.p0(i64 8, ptr %146) #9
  %1241 = load ptr, ptr %144, align 8, !tbaa !5
  store ptr %1241, ptr %146, align 8, !tbaa !5
  %1242 = 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) %1242)
          to label %1243 unwind label %1247

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

1244:                                             ; preds = %1243
  %1245 = load ptr, ptr %144, align 8, !tbaa !5
  %1246 = getelementptr inbounds %"class.JPH::JobSystem::JobHandle", ptr %1245, i32 1
  store ptr %1246, ptr %144, align 8, !tbaa !5
  br label %1227

1247:                                             ; preds = %1240
  %1248 = landingpad { ptr, i32 }
          cleanup
  %1249 = extractvalue { ptr, i32 } %1248, 0
  store ptr %1249, ptr %21, align 8
  %1250 = extractvalue { ptr, i32 } %1248, 1
  store i32 %1250, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %146) #9
  br label %1251

1251:                                             ; preds = %1247, %1236
  call void @llvm.lifetime.end.p0(i64 8, ptr %145) #9
  br label %1252

1252:                                             ; preds = %1251, %1232
  call void @llvm.lifetime.end.p0(i64 8, ptr %144) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %143) #9
  br label %1550

1253:                                             ; preds = %1231
  call void @llvm.lifetime.start.p0(i64 8, ptr %147) #9
  %1254 = load ptr, ptr %142, align 8, !tbaa !5
  %1255 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1254, i32 0, i32 33
  store ptr %1255, ptr %147, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %148) #9
  %1256 = load ptr, ptr %147, align 8, !tbaa !5
  %1257 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %1256)
          to label %1258 unwind label %1267

1258:                                             ; preds = %1253
  store ptr %1257, ptr %148, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %149) #9
  %1259 = load ptr, ptr %147, align 8, !tbaa !5
  %1260 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %1259)
          to label %1261 unwind label %1271

1261:                                             ; preds = %1258
  store ptr %1260, ptr %149, align 8, !tbaa !5
  br label %1262

1262:                                             ; preds = %1279, %1261
  %1263 = load ptr, ptr %148, align 8, !tbaa !5
  %1264 = load ptr, ptr %149, align 8, !tbaa !5
  %1265 = icmp ne ptr %1263, %1264
  br i1 %1265, label %1275, label %1266

1266:                                             ; preds = %1262
  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 %1288

1267:                                             ; preds = %1253
  %1268 = landingpad { ptr, i32 }
          cleanup
  %1269 = extractvalue { ptr, i32 } %1268, 0
  store ptr %1269, ptr %21, align 8
  %1270 = extractvalue { ptr, i32 } %1268, 1
  store i32 %1270, ptr %22, align 4
  br label %1287

1271:                                             ; preds = %1258
  %1272 = landingpad { ptr, i32 }
          cleanup
  %1273 = extractvalue { ptr, i32 } %1272, 0
  store ptr %1273, ptr %21, align 8
  %1274 = extractvalue { ptr, i32 } %1272, 1
  store i32 %1274, ptr %22, align 4
  br label %1286

1275:                                             ; preds = %1262
  call void @llvm.lifetime.start.p0(i64 8, ptr %150) #9
  %1276 = load ptr, ptr %148, align 8, !tbaa !5
  store ptr %1276, ptr %150, align 8, !tbaa !5
  %1277 = 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) %1277)
          to label %1278 unwind label %1282

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

1279:                                             ; preds = %1278
  %1280 = load ptr, ptr %148, align 8, !tbaa !5
  %1281 = getelementptr inbounds %"class.JPH::JobSystem::JobHandle", ptr %1280, i32 1
  store ptr %1281, ptr %148, align 8, !tbaa !5
  br label %1262

1282:                                             ; preds = %1275
  %1283 = landingpad { ptr, i32 }
          cleanup
  %1284 = extractvalue { ptr, i32 } %1283, 0
  store ptr %1284, ptr %21, align 8
  %1285 = extractvalue { ptr, i32 } %1283, 1
  store i32 %1285, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %150) #9
  br label %1286

1286:                                             ; preds = %1282, %1271
  call void @llvm.lifetime.end.p0(i64 8, ptr %149) #9
  br label %1287

1287:                                             ; preds = %1286, %1267
  call void @llvm.lifetime.end.p0(i64 8, ptr %148) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %147) #9
  br label %1550

1288:                                             ; preds = %1266
  call void @llvm.lifetime.start.p0(i64 8, ptr %151) #9
  %1289 = load ptr, ptr %142, align 8, !tbaa !5
  %1290 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1289, i32 0, i32 34
  store ptr %1290, ptr %151, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %152) #9
  %1291 = load ptr, ptr %151, align 8, !tbaa !5
  %1292 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %1291)
          to label %1293 unwind label %1302

1293:                                             ; preds = %1288
  store ptr %1292, ptr %152, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %153) #9
  %1294 = load ptr, ptr %151, align 8, !tbaa !5
  %1295 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %1294)
          to label %1296 unwind label %1306

1296:                                             ; preds = %1293
  store ptr %1295, ptr %153, align 8, !tbaa !5
  br label %1297

1297:                                             ; preds = %1314, %1296
  %1298 = load ptr, ptr %152, align 8, !tbaa !5
  %1299 = load ptr, ptr %153, align 8, !tbaa !5
  %1300 = icmp ne ptr %1298, %1299
  br i1 %1300, label %1310, label %1301

1301:                                             ; preds = %1297
  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 %1323

1302:                                             ; preds = %1288
  %1303 = landingpad { ptr, i32 }
          cleanup
  %1304 = extractvalue { ptr, i32 } %1303, 0
  store ptr %1304, ptr %21, align 8
  %1305 = extractvalue { ptr, i32 } %1303, 1
  store i32 %1305, ptr %22, align 4
  br label %1322

1306:                                             ; preds = %1293
  %1307 = landingpad { ptr, i32 }
          cleanup
  %1308 = extractvalue { ptr, i32 } %1307, 0
  store ptr %1308, ptr %21, align 8
  %1309 = extractvalue { ptr, i32 } %1307, 1
  store i32 %1309, ptr %22, align 4
  br label %1321

1310:                                             ; preds = %1297
  call void @llvm.lifetime.start.p0(i64 8, ptr %154) #9
  %1311 = load ptr, ptr %152, align 8, !tbaa !5
  store ptr %1311, ptr %154, align 8, !tbaa !5
  %1312 = 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) %1312)
          to label %1313 unwind label %1317

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

1314:                                             ; preds = %1313
  %1315 = load ptr, ptr %152, align 8, !tbaa !5
  %1316 = getelementptr inbounds %"class.JPH::JobSystem::JobHandle", ptr %1315, i32 1
  store ptr %1316, ptr %152, align 8, !tbaa !5
  br label %1297

1317:                                             ; preds = %1310
  %1318 = landingpad { ptr, i32 }
          cleanup
  %1319 = extractvalue { ptr, i32 } %1318, 0
  store ptr %1319, ptr %21, align 8
  %1320 = extractvalue { ptr, i32 } %1318, 1
  store i32 %1320, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %154) #9
  br label %1321

1321:                                             ; preds = %1317, %1306
  call void @llvm.lifetime.end.p0(i64 8, ptr %153) #9
  br label %1322

1322:                                             ; preds = %1321, %1302
  call void @llvm.lifetime.end.p0(i64 8, ptr %152) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %151) #9
  br label %1550

1323:                                             ; preds = %1301
  call void @llvm.lifetime.start.p0(i64 8, ptr %155) #9
  %1324 = load ptr, ptr %142, align 8, !tbaa !5
  %1325 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1324, i32 0, i32 35
  store ptr %1325, ptr %155, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %156) #9
  %1326 = load ptr, ptr %155, align 8, !tbaa !5
  %1327 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %1326)
          to label %1328 unwind label %1337

1328:                                             ; preds = %1323
  store ptr %1327, ptr %156, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %157) #9
  %1329 = load ptr, ptr %155, align 8, !tbaa !5
  %1330 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %1329)
          to label %1331 unwind label %1341

1331:                                             ; preds = %1328
  store ptr %1330, ptr %157, align 8, !tbaa !5
  br label %1332

1332:                                             ; preds = %1349, %1331
  %1333 = load ptr, ptr %156, align 8, !tbaa !5
  %1334 = load ptr, ptr %157, align 8, !tbaa !5
  %1335 = icmp ne ptr %1333, %1334
  br i1 %1335, label %1345, label %1336

1336:                                             ; preds = %1332
  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 %1358

1337:                                             ; preds = %1323
  %1338 = landingpad { ptr, i32 }
          cleanup
  %1339 = extractvalue { ptr, i32 } %1338, 0
  store ptr %1339, ptr %21, align 8
  %1340 = extractvalue { ptr, i32 } %1338, 1
  store i32 %1340, ptr %22, align 4
  br label %1357

1341:                                             ; preds = %1328
  %1342 = landingpad { ptr, i32 }
          cleanup
  %1343 = extractvalue { ptr, i32 } %1342, 0
  store ptr %1343, ptr %21, align 8
  %1344 = extractvalue { ptr, i32 } %1342, 1
  store i32 %1344, ptr %22, align 4
  br label %1356

1345:                                             ; preds = %1332
  call void @llvm.lifetime.start.p0(i64 8, ptr %158) #9
  %1346 = load ptr, ptr %156, align 8, !tbaa !5
  store ptr %1346, ptr %158, align 8, !tbaa !5
  %1347 = 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) %1347)
          to label %1348 unwind label %1352

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

1349:                                             ; preds = %1348
  %1350 = load ptr, ptr %156, align 8, !tbaa !5
  %1351 = getelementptr inbounds %"class.JPH::JobSystem::JobHandle", ptr %1350, i32 1
  store ptr %1351, ptr %156, align 8, !tbaa !5
  br label %1332

1352:                                             ; preds = %1345
  %1353 = landingpad { ptr, i32 }
          cleanup
  %1354 = extractvalue { ptr, i32 } %1353, 0
  store ptr %1354, ptr %21, align 8
  %1355 = extractvalue { ptr, i32 } %1353, 1
  store i32 %1355, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %158) #9
  br label %1356

1356:                                             ; preds = %1352, %1341
  call void @llvm.lifetime.end.p0(i64 8, ptr %157) #9
  br label %1357

1357:                                             ; preds = %1356, %1337
  call void @llvm.lifetime.end.p0(i64 8, ptr %156) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %155) #9
  br label %1550

1358:                                             ; preds = %1336
  %1359 = load ptr, ptr %142, align 8, !tbaa !5
  %1360 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1359, i32 0, i32 36
  %1361 = invoke noundef zeroext i1 @_ZNK3JPH9JobSystem9JobHandle7IsValidEv(ptr noundef nonnull align 8 dereferenceable(8) %1360)
          to label %1362 unwind label %1214

1362:                                             ; preds = %1358
  br i1 %1361, label %1363, label %1367

1363:                                             ; preds = %1362
  %1364 = load ptr, ptr %142, align 8, !tbaa !5
  %1365 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1364, i32 0, i32 36
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %138, ptr noundef nonnull align 8 dereferenceable(8) %1365)
          to label %1366 unwind label %1214

1366:                                             ; preds = %1363
  br label %1367

1367:                                             ; preds = %1366, %1362
  call void @llvm.lifetime.start.p0(i64 8, ptr %159) #9
  %1368 = load ptr, ptr %142, align 8, !tbaa !5
  %1369 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1368, i32 0, i32 37
  store ptr %1369, ptr %159, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %160) #9
  %1370 = load ptr, ptr %159, align 8, !tbaa !5
  %1371 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %1370)
          to label %1372 unwind label %1381

1372:                                             ; preds = %1367
  store ptr %1371, ptr %160, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %161) #9
  %1373 = load ptr, ptr %159, align 8, !tbaa !5
  %1374 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %1373)
          to label %1375 unwind label %1385

1375:                                             ; preds = %1372
  store ptr %1374, ptr %161, align 8, !tbaa !5
  br label %1376

1376:                                             ; preds = %1393, %1375
  %1377 = load ptr, ptr %160, align 8, !tbaa !5
  %1378 = load ptr, ptr %161, align 8, !tbaa !5
  %1379 = icmp ne ptr %1377, %1378
  br i1 %1379, label %1389, label %1380

1380:                                             ; preds = %1376
  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 %1402

1381:                                             ; preds = %1367
  %1382 = landingpad { ptr, i32 }
          cleanup
  %1383 = extractvalue { ptr, i32 } %1382, 0
  store ptr %1383, ptr %21, align 8
  %1384 = extractvalue { ptr, i32 } %1382, 1
  store i32 %1384, ptr %22, align 4
  br label %1401

1385:                                             ; preds = %1372
  %1386 = landingpad { ptr, i32 }
          cleanup
  %1387 = extractvalue { ptr, i32 } %1386, 0
  store ptr %1387, ptr %21, align 8
  %1388 = extractvalue { ptr, i32 } %1386, 1
  store i32 %1388, ptr %22, align 4
  br label %1400

1389:                                             ; preds = %1376
  call void @llvm.lifetime.start.p0(i64 8, ptr %162) #9
  %1390 = load ptr, ptr %160, align 8, !tbaa !5
  store ptr %1390, ptr %162, align 8, !tbaa !5
  %1391 = 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) %1391)
          to label %1392 unwind label %1396

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

1393:                                             ; preds = %1392
  %1394 = load ptr, ptr %160, align 8, !tbaa !5
  %1395 = getelementptr inbounds %"class.JPH::JobSystem::JobHandle", ptr %1394, i32 1
  store ptr %1395, ptr %160, align 8, !tbaa !5
  br label %1376

1396:                                             ; preds = %1389
  %1397 = landingpad { ptr, i32 }
          cleanup
  %1398 = extractvalue { ptr, i32 } %1397, 0
  store ptr %1398, ptr %21, align 8
  %1399 = extractvalue { ptr, i32 } %1397, 1
  store i32 %1399, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %162) #9
  br label %1400

1400:                                             ; preds = %1396, %1385
  call void @llvm.lifetime.end.p0(i64 8, ptr %161) #9
  br label %1401

1401:                                             ; preds = %1400, %1381
  call void @llvm.lifetime.end.p0(i64 8, ptr %160) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %159) #9
  br label %1550

1402:                                             ; preds = %1380
  %1403 = load ptr, ptr %142, align 8, !tbaa !5
  %1404 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1403, i32 0, i32 38
  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 %1214

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

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

1411:                                             ; preds = %1408
  call void @llvm.lifetime.start.p0(i64 8, ptr %163) #9
  %1412 = load ptr, ptr %142, align 8, !tbaa !5
  %1413 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1412, i32 0, i32 41
  store ptr %1413, ptr %163, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %164) #9
  %1414 = load ptr, ptr %163, align 8, !tbaa !5
  %1415 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %1414)
          to label %1416 unwind label %1425

1416:                                             ; preds = %1411
  store ptr %1415, ptr %164, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %165) #9
  %1417 = load ptr, ptr %163, align 8, !tbaa !5
  %1418 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %1417)
          to label %1419 unwind label %1429

1419:                                             ; preds = %1416
  store ptr %1418, ptr %165, align 8, !tbaa !5
  br label %1420

1420:                                             ; preds = %1437, %1419
  %1421 = load ptr, ptr %164, align 8, !tbaa !5
  %1422 = load ptr, ptr %165, align 8, !tbaa !5
  %1423 = icmp ne ptr %1421, %1422
  br i1 %1423, label %1433, label %1424

1424:                                             ; preds = %1420
  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 %1446

1425:                                             ; preds = %1411
  %1426 = landingpad { ptr, i32 }
          cleanup
  %1427 = extractvalue { ptr, i32 } %1426, 0
  store ptr %1427, ptr %21, align 8
  %1428 = extractvalue { ptr, i32 } %1426, 1
  store i32 %1428, ptr %22, align 4
  br label %1445

1429:                                             ; preds = %1416
  %1430 = landingpad { ptr, i32 }
          cleanup
  %1431 = extractvalue { ptr, i32 } %1430, 0
  store ptr %1431, ptr %21, align 8
  %1432 = extractvalue { ptr, i32 } %1430, 1
  store i32 %1432, ptr %22, align 4
  br label %1444

1433:                                             ; preds = %1420
  call void @llvm.lifetime.start.p0(i64 8, ptr %166) #9
  %1434 = load ptr, ptr %164, align 8, !tbaa !5
  store ptr %1434, ptr %166, align 8, !tbaa !5
  %1435 = 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) %1435)
          to label %1436 unwind label %1440

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

1437:                                             ; preds = %1436
  %1438 = load ptr, ptr %164, align 8, !tbaa !5
  %1439 = getelementptr inbounds %"class.JPH::JobSystem::JobHandle", ptr %1438, i32 1
  store ptr %1439, ptr %164, align 8, !tbaa !5
  br label %1420

1440:                                             ; preds = %1433
  %1441 = landingpad { ptr, i32 }
          cleanup
  %1442 = extractvalue { ptr, i32 } %1441, 0
  store ptr %1442, ptr %21, align 8
  %1443 = extractvalue { ptr, i32 } %1441, 1
  store i32 %1443, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %166) #9
  br label %1444

1444:                                             ; preds = %1440, %1429
  call void @llvm.lifetime.end.p0(i64 8, ptr %165) #9
  br label %1445

1445:                                             ; preds = %1444, %1425
  call void @llvm.lifetime.end.p0(i64 8, ptr %164) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %163) #9
  br label %1550

1446:                                             ; preds = %1424
  %1447 = load ptr, ptr %142, align 8, !tbaa !5
  %1448 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1447, i32 0, i32 42
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %138, ptr noundef nonnull align 8 dereferenceable(8) %1448)
          to label %1449 unwind label %1214

1449:                                             ; preds = %1446
  call void @llvm.lifetime.start.p0(i64 8, ptr %167) #9
  %1450 = load ptr, ptr %142, align 8, !tbaa !5
  %1451 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1450, i32 0, i32 43
  store ptr %1451, ptr %167, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %168) #9
  %1452 = load ptr, ptr %167, align 8, !tbaa !5
  %1453 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %1452)
          to label %1454 unwind label %1463

1454:                                             ; preds = %1449
  store ptr %1453, ptr %168, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %169) #9
  %1455 = load ptr, ptr %167, align 8, !tbaa !5
  %1456 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %1455)
          to label %1457 unwind label %1467

1457:                                             ; preds = %1454
  store ptr %1456, ptr %169, align 8, !tbaa !5
  br label %1458

1458:                                             ; preds = %1475, %1457
  %1459 = load ptr, ptr %168, align 8, !tbaa !5
  %1460 = load ptr, ptr %169, align 8, !tbaa !5
  %1461 = icmp ne ptr %1459, %1460
  br i1 %1461, label %1471, label %1462

1462:                                             ; preds = %1458
  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 %1484

1463:                                             ; preds = %1449
  %1464 = landingpad { ptr, i32 }
          cleanup
  %1465 = extractvalue { ptr, i32 } %1464, 0
  store ptr %1465, ptr %21, align 8
  %1466 = extractvalue { ptr, i32 } %1464, 1
  store i32 %1466, ptr %22, align 4
  br label %1483

1467:                                             ; preds = %1454
  %1468 = landingpad { ptr, i32 }
          cleanup
  %1469 = extractvalue { ptr, i32 } %1468, 0
  store ptr %1469, ptr %21, align 8
  %1470 = extractvalue { ptr, i32 } %1468, 1
  store i32 %1470, ptr %22, align 4
  br label %1482

1471:                                             ; preds = %1458
  call void @llvm.lifetime.start.p0(i64 8, ptr %170) #9
  %1472 = load ptr, ptr %168, align 8, !tbaa !5
  store ptr %1472, ptr %170, align 8, !tbaa !5
  %1473 = 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) %1473)
          to label %1474 unwind label %1478

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

1475:                                             ; preds = %1474
  %1476 = load ptr, ptr %168, align 8, !tbaa !5
  %1477 = getelementptr inbounds %"class.JPH::JobSystem::JobHandle", ptr %1476, i32 1
  store ptr %1477, ptr %168, align 8, !tbaa !5
  br label %1458

1478:                                             ; preds = %1471
  %1479 = landingpad { ptr, i32 }
          cleanup
  %1480 = extractvalue { ptr, i32 } %1479, 0
  store ptr %1480, ptr %21, align 8
  %1481 = extractvalue { ptr, i32 } %1479, 1
  store i32 %1481, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %170) #9
  br label %1482

1482:                                             ; preds = %1478, %1467
  call void @llvm.lifetime.end.p0(i64 8, ptr %169) #9
  br label %1483

1483:                                             ; preds = %1482, %1463
  call void @llvm.lifetime.end.p0(i64 8, ptr %168) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %167) #9
  br label %1550

1484:                                             ; preds = %1462
  %1485 = load ptr, ptr %142, align 8, !tbaa !5
  %1486 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1485, i32 0, i32 44
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %138, ptr noundef nonnull align 8 dereferenceable(8) %1486)
          to label %1487 unwind label %1214

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

1490:                                             ; preds = %1487
  call void @llvm.lifetime.start.p0(i64 8, ptr %171) #9
  %1491 = load ptr, ptr %142, align 8, !tbaa !5
  %1492 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1491, i32 0, i32 46
  store ptr %1492, ptr %171, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %172) #9
  %1493 = load ptr, ptr %171, align 8, !tbaa !5
  %1494 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %1493)
          to label %1495 unwind label %1504

1495:                                             ; preds = %1490
  store ptr %1494, ptr %172, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %173) #9
  %1496 = load ptr, ptr %171, align 8, !tbaa !5
  %1497 = invoke noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %1496)
          to label %1498 unwind label %1508

1498:                                             ; preds = %1495
  store ptr %1497, ptr %173, align 8, !tbaa !5
  br label %1499

1499:                                             ; preds = %1516, %1498
  %1500 = load ptr, ptr %172, align 8, !tbaa !5
  %1501 = load ptr, ptr %173, align 8, !tbaa !5
  %1502 = icmp ne ptr %1500, %1501
  br i1 %1502, label %1512, label %1503

1503:                                             ; preds = %1499
  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 %1525

1504:                                             ; preds = %1490
  %1505 = landingpad { ptr, i32 }
          cleanup
  %1506 = extractvalue { ptr, i32 } %1505, 0
  store ptr %1506, ptr %21, align 8
  %1507 = extractvalue { ptr, i32 } %1505, 1
  store i32 %1507, ptr %22, align 4
  br label %1524

1508:                                             ; preds = %1495
  %1509 = landingpad { ptr, i32 }
          cleanup
  %1510 = extractvalue { ptr, i32 } %1509, 0
  store ptr %1510, ptr %21, align 8
  %1511 = extractvalue { ptr, i32 } %1509, 1
  store i32 %1511, ptr %22, align 4
  br label %1523

1512:                                             ; preds = %1499
  call void @llvm.lifetime.start.p0(i64 8, ptr %174) #9
  %1513 = load ptr, ptr %172, align 8, !tbaa !5
  store ptr %1513, ptr %174, align 8, !tbaa !5
  %1514 = 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) %1514)
          to label %1515 unwind label %1519

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

1516:                                             ; preds = %1515
  %1517 = load ptr, ptr %172, align 8, !tbaa !5
  %1518 = getelementptr inbounds %"class.JPH::JobSystem::JobHandle", ptr %1517, i32 1
  store ptr %1518, ptr %172, align 8, !tbaa !5
  br label %1499

1519:                                             ; preds = %1512
  %1520 = landingpad { ptr, i32 }
          cleanup
  %1521 = extractvalue { ptr, i32 } %1520, 0
  store ptr %1521, ptr %21, align 8
  %1522 = extractvalue { ptr, i32 } %1520, 1
  store i32 %1522, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %174) #9
  br label %1523

1523:                                             ; preds = %1519, %1508
  call void @llvm.lifetime.end.p0(i64 8, ptr %173) #9
  br label %1524

1524:                                             ; preds = %1523, %1504
  call void @llvm.lifetime.end.p0(i64 8, ptr %172) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %171) #9
  br label %1550

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

1528:                                             ; preds = %1525
  %1529 = load ptr, ptr %142, align 8, !tbaa !5
  %1530 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1529, i32 0, i32 48
  %1531 = invoke noundef zeroext i1 @_ZNK3JPH9JobSystem9JobHandle7IsValidEv(ptr noundef nonnull align 8 dereferenceable(8) %1530)
          to label %1532 unwind label %1214

1532:                                             ; preds = %1528
  br i1 %1531, label %1533, label %1537

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

1536:                                             ; preds = %1533
  br label %1537

1537:                                             ; preds = %1536, %1532
  %1538 = load ptr, ptr %142, align 8, !tbaa !5
  %1539 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1538, i32 0, i32 52
  %1540 = invoke noundef zeroext i1 @_ZNK3JPH9JobSystem9JobHandle7IsValidEv(ptr noundef nonnull align 8 dereferenceable(8) %1539)
          to label %1541 unwind label %1214

1541:                                             ; preds = %1537
  br i1 %1540, label %1542, label %1546

1542:                                             ; preds = %1541
  %1543 = load ptr, ptr %142, align 8, !tbaa !5
  %1544 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1543, i32 0, i32 52
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %138, ptr noundef nonnull align 8 dereferenceable(8) %1544)
          to label %1545 unwind label %1214

1545:                                             ; preds = %1542
  br label %1546

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

1547:                                             ; preds = %1546
  %1548 = load ptr, ptr %140, align 8, !tbaa !5
  %1549 = getelementptr inbounds %"struct.JPH::PhysicsUpdateContext::Step", ptr %1548, i32 1
  store ptr %1549, ptr %140, align 8, !tbaa !5
  br label %1191

1550:                                             ; preds = %1524, %1483, %1445, %1401, %1357, %1322, %1287, %1252, %1214
  call void @llvm.lifetime.end.p0(i64 8, ptr %142) #9
  br label %1551

1551:                                             ; preds = %1550, %1200
  call void @llvm.lifetime.end.p0(i64 8, ptr %141) #9
  br label %1552

1552:                                             ; preds = %1551, %1196
  call void @llvm.lifetime.end.p0(i64 8, ptr %140) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %139) #9
  br label %1640

1553:                                             ; preds = %1195
  %1554 = load ptr, ptr %137, align 8, !tbaa !5
  %1555 = invoke noundef ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE4dataEv(ptr noundef nonnull align 8 dereferenceable(16392) %138)
          to label %1556 unwind label %1636

1556:                                             ; preds = %1553
  %1557 = invoke noundef i32 @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16392) %138)
          to label %1558 unwind label %1636

1558:                                             ; preds = %1556
  %1559 = load ptr, ptr %1554, align 8, !tbaa !45
  %1560 = getelementptr inbounds ptr, ptr %1559, i64 1
  %1561 = load ptr, ptr %1560, align 8
  invoke void %1561(ptr noundef nonnull align 8 dereferenceable(8) %1554, ptr noundef %1555, i32 noundef %1557)
          to label %1562 unwind label %1636

1562:                                             ; preds = %1558
  call void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EED2Ev(ptr noundef nonnull align 8 dereferenceable(16392) %138) #9
  call void @llvm.lifetime.end.p0(i64 16392, ptr %138) #9
  %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 !45
  %1566 = getelementptr inbounds ptr, ptr %1565, i64 6
  %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 %1641

1568:                                             ; preds = %1562
  %1569 = load ptr, ptr %11, align 8, !tbaa !5
  %1570 = load ptr, ptr %137, align 8, !tbaa !5
  %1571 = load ptr, ptr %1569, align 8, !tbaa !45
  %1572 = getelementptr inbounds ptr, ptr %1571, i64 5
  %1573 = load ptr, ptr %1572, align 8
  invoke void %1573(ptr noundef nonnull align 8 dereferenceable(8) %1569, ptr noundef %1570)
          to label %1574 unwind label %1641

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

1576:                                             ; preds = %1574
  %1577 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 18
  %1578 = load ptr, ptr %10, align 8, !tbaa !5
  invoke void @_ZN3JPH19LargeIslandSplitter5ResetEPNS_13TempAllocatorE(ptr noundef nonnull align 8 dereferenceable(60) %1577, ptr noundef %1578)
          to label %1579 unwind label %1641

1579:                                             ; preds = %1576
  %1580 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 17
  %1581 = load ptr, ptr %10, align 8, !tbaa !5
  invoke void @_ZN3JPH13IslandBuilder12ResetIslandsEPNS_13TempAllocatorE(ptr noundef nonnull align 8 dereferenceable(112) %1580, ptr noundef %1581)
          to label %1582 unwind label %1641

1582:                                             ; preds = %1579
  %1583 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 15
  invoke void @_ZN3JPH24ContactConstraintManager22FinishConstraintBufferEv(ptr noundef nonnull align 8 dereferenceable(248) %1583)
          to label %1584 unwind label %1641

1584:                                             ; preds = %1582
  %1585 = load ptr, ptr %10, align 8, !tbaa !5
  %1586 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 8
  %1587 = load ptr, ptr %1586, align 8, !tbaa !83
  %1588 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 16
  %1589 = invoke noundef i32 @_ZNK3JPH17ConstraintManager17GetNumConstraintsEv(ptr noundef nonnull align 8 dereferenceable(80) %1588)
          to label %1590 unwind label %1641

1590:                                             ; preds = %1584
  %1591 = zext i32 %1589 to i64
  %1592 = mul i64 %1591, 8
  %1593 = trunc i64 %1592 to i32
  %1594 = load ptr, ptr %1585, align 8, !tbaa !45
  %1595 = getelementptr inbounds ptr, ptr %1594, i64 3
  %1596 = load ptr, ptr %1595, align 8
  invoke void %1596(ptr noundef nonnull align 8 dereferenceable(8) %1585, ptr noundef %1587, i32 noundef %1593)
          to label %1597 unwind label %1641

1597:                                             ; preds = %1590
  %1598 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 8
  store ptr null, ptr %1598, align 8, !tbaa !83
  %1599 = load ptr, ptr %10, align 8, !tbaa !5
  %1600 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 9
  %1601 = load ptr, ptr %1600, align 8, !tbaa !60
  %1602 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 13
  %1603 = getelementptr inbounds %"struct.JPH::PhysicsSettings", ptr %1602, i32 0, i32 0
  %1604 = load i32, ptr %1603, align 8, !tbaa !62
  %1605 = sext i32 %1604 to i64
  %1606 = mul i64 8, %1605
  %1607 = trunc i64 %1606 to i32
  %1608 = load ptr, ptr %1599, align 8, !tbaa !45
  %1609 = getelementptr inbounds ptr, ptr %1608, i64 3
  %1610 = load ptr, ptr %1609, align 8
  invoke void %1610(ptr noundef nonnull align 8 dereferenceable(8) %1599, ptr noundef %1601, i32 noundef %1607)
          to label %1611 unwind label %1641

1611:                                             ; preds = %1597
  %1612 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 9
  store ptr null, ptr %1612, align 8, !tbaa !60
  %1613 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 9
  %1614 = load ptr, ptr %1613, align 16, !tbaa !15
  %1615 = load ptr, ptr %1614, align 8, !tbaa !45
  %1616 = getelementptr inbounds ptr, ptr %1615, i64 14
  %1617 = load ptr, ptr %1616, align 8
  invoke void %1617(ptr noundef nonnull align 8 dereferenceable(16) %1614)
          to label %1618 unwind label %1641

1618:                                             ; preds = %1611
  %1619 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 16
  invoke void @_ZN3JPH17ConstraintManager20UnlockAllConstraintsEv(ptr noundef nonnull align 8 dereferenceable(80) %1619)
          to label %1620 unwind label %1641

1620:                                             ; preds = %1618
  %1621 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 2
  invoke void @_ZN3JPH11BodyManager21SetActiveBodiesLockedEb(ptr noundef nonnull align 8 dereferenceable(297) %1621, i1 noundef zeroext false)
          to label %1622 unwind label %1641

1622:                                             ; preds = %1620
  %1623 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 2
  invoke void @_ZNK3JPH11BodyManager15UnlockAllBodiesEv(ptr noundef nonnull align 8 dereferenceable(297) %1623)
          to label %1624 unwind label %1641

1624:                                             ; preds = %1622
  %1625 = getelementptr inbounds %"class.JPH::PhysicsSystem", ptr %177, i32 0, i32 19
  invoke void @_ZN3JPH5Mutex6unlockEv(ptr noundef nonnull align 8 dereferenceable(48) %1625)
          to label %1626 unwind label %1641

1626:                                             ; preds = %1624
  call void @llvm.lifetime.start.p0(i64 4, ptr %175) #9
  %1627 = getelementptr inbounds %"class.JPH::PhysicsUpdateContext", ptr %20, i32 0, i32 6
  %1628 = call noundef i32 @_ZNKSt13__atomic_baseIjE4loadESt12memory_order(ptr noundef nonnull align 4 dereferenceable(4) %1627, i32 noundef 2) #9
  store i32 %1628, ptr %175, align 4, !tbaa !97
  br label %1629

1629:                                             ; preds = %1626
  %1630 = load i32, ptr %175, align 4, !tbaa !97
  %1631 = icmp eq i32 %1630, 0
  br i1 %1631, label %1649, label %1632

1632:                                             ; preds = %1629
  %1633 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jS1_NS_15AssertLastParamE(ptr noundef @.str.51, ptr noundef @.str.24, i32 noundef 619, ptr noundef @.str.52)
          to label %1634 unwind label %1645

1634:                                             ; preds = %1632
  br i1 %1633, label %1635, label %1649

1635:                                             ; preds = %1634
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !99
  br label %1649

1636:                                             ; preds = %1558, %1556, %1553
  %1637 = landingpad { ptr, i32 }
          cleanup
  %1638 = extractvalue { ptr, i32 } %1637, 0
  store ptr %1638, ptr %21, align 8
  %1639 = extractvalue { ptr, i32 } %1637, 1
  store i32 %1639, ptr %22, align 4
  br label %1640

1640:                                             ; preds = %1636, %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
  br label %1653

1641:                                             ; preds = %1624, %1622, %1620, %1618, %1611, %1597, %1590, %1584, %1582, %1579, %1576, %1574, %1568, %1562
  %1642 = landingpad { ptr, i32 }
          cleanup
  %1643 = extractvalue { ptr, i32 } %1642, 0
  store ptr %1643, ptr %21, align 8
  %1644 = extractvalue { ptr, i32 } %1642, 1
  store i32 %1644, ptr %22, align 4
  br label %1653

1645:                                             ; preds = %1632
  %1646 = landingpad { ptr, i32 }
          cleanup
  %1647 = extractvalue { ptr, i32 } %1646, 0
  store ptr %1647, ptr %21, align 8
  %1648 = extractvalue { ptr, i32 } %1646, 1
  store i32 %1648, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %175) #9
  br label %1653

1649:                                             ; preds = %1635, %1634, %1629
  br label %1650

1650:                                             ; preds = %1649
  br label %1651

1651:                                             ; preds = %1650
  %1652 = load i32, ptr %175, align 4, !tbaa !97
  store i32 %1652, 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 %1662

1653:                                             ; preds = %1645, %1641, %1640
  call void @llvm.lifetime.end.p0(i64 8, ptr %137) #9
  br label %1654

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

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

1656:                                             ; preds = %1655, %437
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #9
  br label %1657

1657:                                             ; preds = %1656, %436
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #9
  br label %1658

1658:                                             ; preds = %1657, %424
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #9
  br label %1659

1659:                                             ; preds = %1658, %420, %416
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  br label %1660

1660:                                             ; preds = %1659, %412
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #9
  br label %1661

1661:                                             ; preds = %1660, %294
  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 %1664

1662:                                             ; preds = %1651, %240
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #9
  %1663 = load i32, ptr %6, align 4
  ret i32 %1663

1664:                                             ; preds = %1661
  %1665 = load ptr, ptr %21, align 8
  %1666 = load i32, ptr %22, align 4
  %1667 = insertvalue { ptr, i32 } poison, ptr %1665, 0
  %1668 = insertvalue { ptr, i32 } %1667, i32 %1666, 1
  resume { ptr, i32 } %1668
}

; 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

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

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

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

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

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

; 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 nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #4

; 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)) #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK3JPH5ArrayIPNS_19PhysicsStepListenerENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #4 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)) #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #4 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: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZNSt13__atomic_baseIjE5storeEjSt12memory_order(ptr noundef nonnull align 4 dereferenceable(4), i32 noundef, i32 noundef) #7 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) #5

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

; 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)) #4 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH9JobSystem9JobHandle7IsValidEv(ptr noundef nonnull align 8 dereferenceable(8)) #4 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)) #5

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

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

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

; 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 = { 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 #5 = { "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 2160016583}
!14 = !{i64 2160016912}
!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, !6, i64 448, !33, i64 456, !35, i64 488, !36, i64 576, !39, i64 824, !41, i64 904, !42, i64 1016, !20, i64 1080, !43, i64 1128, !44, i64 1152, !10, i64 1168}
!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 = !{!"_ZTSSt8functionIFvRKN3JPH4BodyES3_RKNS0_5Mat44ES6_RNS0_20CollideShapeSettingsERNS0_18CollisionCollectorINS0_18CollideShapeResultENS0_36CollisionCollectorTraitsCollideShapeEEERKNS0_11ShapeFilterEEE", !34, i64 0, !6, i64 24}
!34 = !{!"_ZTSSt14_Function_base", !7, i64 0, !6, i64 16}
!35 = !{!"_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}
!36 = !{!"_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, !37, i64 236, !6, i64 240}
!37 = !{!"_ZTSSt6atomicIjE", !38, i64 0}
!38 = !{!"_ZTSSt13__atomic_baseIjE", !12, i64 0}
!39 = !{!"_ZTSN3JPH17ConstraintManagerE", !6, i64 0, !40, i64 8, !20, i64 32}
!40 = !{!"_ZTSN3JPH5ArrayINS_3RefINS_10ConstraintEEENS_12STLAllocatorIS3_EEEE", !19, i64 0, !19, i64 8, !6, i64 16}
!41 = !{!"_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}
!42 = !{!"_ZTSN3JPH19LargeIslandSplitterE", !12, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !12, i64 32, !37, i64 36, !12, i64 40, !6, i64 48, !37, i64 56}
!43 = !{!"_ZTSN3JPH5ArrayIPNS_19PhysicsStepListenerENS_12STLAllocatorIS2_EEEE", !19, i64 0, !19, i64 8, !6, i64 16}
!44 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!45 = !{!46, !46, i64 0}
!46 = !{!"vtable pointer", !8, i64 0}
!47 = !{!16, !27, i64 565}
!48 = !{i8 0, i8 2}
!49 = !{}
!50 = !{!16, !10, i64 1168}
!51 = !{!52, !6, i64 0}
!52 = !{!"_ZTSN3JPH20PhysicsUpdateContextE", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !10, i64 32, !10, i64 36, !37, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !53, i64 72, !12, i64 104, !6, i64 112, !37, i64 120}
!53 = !{!"_ZTSN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEEE", !54, i64 0, !19, i64 8, !19, i64 16, !6, i64 24}
!54 = !{!"_ZTSN3JPH16STLTempAllocatorINS_20PhysicsUpdateContext4StepEEE", !6, i64 0}
!55 = !{!52, !6, i64 16}
!56 = !{!52, !6, i64 24}
!57 = !{!52, !6, i64 64}
!58 = !{!52, !10, i64 32}
!59 = !{!52, !10, i64 36}
!60 = !{!52, !6, i64 56}
!61 = !{i64 2160017261}
!62 = !{!16, !12, i64 488}
!63 = !{!16, !12, i64 492}
!64 = !{!16, !12, i64 496}
!65 = !{!27, !27, i64 0}
!66 = !{!67, !6, i64 0}
!67 = !{!"_ZTSN3JPH20PhysicsUpdateContext4StepE", !6, i64 0, !27, i64 8, !27, i64 9, !68, i64 16, !12, i64 48, !37, i64 52, !7, i64 56, !37, i64 116, !7, i64 120, !37, i64 180, !7, i64 184, !37, i64 244, !7, i64 248, !37, i64 308, !7, i64 312, !37, i64 372, !7, i64 376, !69, i64 436, !12, i64 4536, !37, i64 4540, !37, i64 4544, !37, i64 4548, !37, i64 4552, !37, i64 4556, !37, i64 4560, !6, i64 4568, !12, i64 4576, !37, i64 4580, !37, i64 4584, !6, i64 4592, !12, i64 4600, !70, i64 4608, !72, i64 4616, !72, i64 4880, !72, i64 5144, !72, i64 5408, !70, i64 5672, !72, i64 5680, !70, i64 5944, !70, i64 5952, !70, i64 5960, !72, i64 5968, !70, i64 6232, !72, i64 6240, !70, i64 6504, !70, i64 6512, !72, i64 6520, !70, i64 6784, !70, i64 6792, !72, i64 6800, !72, i64 7064, !70, i64 7328, !70, i64 7336}
!68 = !{!"_ZTSN3JPH10BroadPhase11UpdateStateE", !7, i64 0}
!69 = !{!"_ZTSN3JPH11StaticArrayINS_20PhysicsUpdateContext13BodyPairQueueELj32EEE", !12, i64 0, !7, i64 4}
!70 = !{!"_ZTSN3JPH9JobSystem9JobHandleE", !71, i64 0}
!71 = !{!"_ZTSN3JPH3RefINS_9JobSystem3JobEEE", !6, i64 0}
!72 = !{!"_ZTSN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEE", !12, i64 0, !7, i64 8}
!73 = !{!67, !27, i64 8}
!74 = !{!67, !27, i64 9}
!75 = !{i64 0, i64 4, !76}
!76 = !{!7, !7, i64 0}
!77 = !{!67, !12, i64 4536}
!78 = !{!79, !12, i64 8}
!79 = !{!"_ZTSZN3JPH13PhysicsSystem6UpdateEfiPNS_13TempAllocatorEPNS_9JobSystemEE3$_2", !6, i64 0, !12, i64 8}
!80 = distinct !{!80, !81}
!81 = !{!"llvm.loop.mustprogress"}
!82 = !{!67, !12, i64 48}
!83 = !{!52, !6, i64 48}
!84 = !{i64 2160018039}
!85 = !{!52, !6, i64 8}
!86 = distinct !{!86, !81}
!87 = distinct !{!87, !81}
!88 = distinct !{!88, !81}
!89 = distinct !{!89, !81}
!90 = !{!91, !6, i64 0}
!91 = !{!"_ZTSZN3JPH13PhysicsSystem6UpdateEfiPNS_13TempAllocatorEPNS_9JobSystemEE4$_11", !6, i64 0, !6, i64 8}
!92 = !{!91, !6, i64 8}
!93 = distinct !{!93, !81}
!94 = distinct !{!94, !81}
!95 = distinct !{!95, !81}
!96 = distinct !{!96, !81}
!97 = !{!98, !98, i64 0}
!98 = !{!"_ZTSN3JPH19EPhysicsUpdateErrorE", !7, i64 0}
!99 = !{i64 2160018905}


; 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.21" = 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.23 = type { ptr, ptr }
%class.anon.24 = type <{ ptr, i32, [4 x i8] }>
%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.anon.39 = type { ptr, ptr }
%class.anon.40 = type { ptr, ptr }
%"class.JPH::StaticArray.41" = 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 [83 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(1172) %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.21", align 8
  %25 = alloca %class.anon, align 8
  %26 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %27 = alloca %"class.std::function.21", align 8
  %28 = alloca %class.anon.23, align 8
  %29 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %30 = alloca %"class.std::function.21", align 8
  %31 = alloca %class.anon.24, align 8
  %32 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %33 = alloca %"class.std::function.21", align 8
  %34 = alloca %class.anon.25, align 8
  %35 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %36 = alloca %"class.std::function.21", align 8
  %37 = alloca %class.anon.26, align 8
  %38 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %39 = alloca %"class.std::function.21", align 8
  %40 = alloca %class.anon.27, align 8
  %41 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %42 = alloca %"class.std::function.21", align 8
  %43 = alloca %class.anon.28, align 8
  %44 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %45 = alloca %"class.std::function.21", align 8
  %46 = alloca %class.anon.29, align 8
  %47 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %48 = alloca %"class.std::function.21", align 8
  %49 = alloca %class.anon.30, align 8
  %50 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %51 = alloca %"class.std::function.21", align 8
  %52 = alloca %class.anon.31, align 8
  %53 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %54 = alloca %"class.std::function.21", align 8
  %55 = alloca %class.anon.32, align 8
  %56 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %57 = alloca %"class.std::function.21", align 8
  %58 = alloca %class.anon.33, align 8
  %59 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %60 = alloca %"class.std::function.21", align 8
  %61 = alloca %class.anon.34, align 8
  %62 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %63 = alloca %"class.std::function.21", align 8
  %64 = alloca %class.anon.35, align 8
  %65 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %66 = alloca %"class.std::function.21", align 8
  %67 = alloca %class.anon.36, align 8
  %68 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %69 = alloca %"class.std::function.21", align 8
  %70 = alloca %class.anon.37, align 8
  %71 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %72 = alloca %"class.std::function.21", align 8
  %73 = alloca %class.anon.38, align 8
  %74 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %75 = alloca %"class.std::function.21", align 8
  %76 = alloca %class.anon.39, align 8
  %77 = alloca %"class.JPH::JobSystem::JobHandle", align 8
  %78 = alloca %"class.std::function.21", align 8
  %79 = alloca %class.anon.40, align 8
  %80 = alloca %"class.JPH::StaticArray.41", 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 138)
  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 139)
  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 !42
  %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
  br i1 %or.cond, label %100, label %104

100:                                              ; preds = %90
  %101 = getelementptr inbounds i8, ptr %0, i64 1128
  %102 = tail call noundef zeroext i1 @_ZNK3JPH5ArrayIPNS_19PhysicsStepListenerENS_12STLAllocatorIS2_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %101)
  %103 = fcmp ole float %1, 0.000000e+00
  %or.cond3 = or i1 %103, %102
  br i1 %or.cond3, label %105, label %126

104:                                              ; preds = %90
  %.old2 = fcmp ugt float %1, 0.000000e+00
  br i1 %.old2, label %126, label %105

105:                                              ; preds = %104, %100
  tail call void @_ZNK3JPH11BodyManager13LockAllBodiesEv(ptr noundef nonnull align 8 dereferenceable(297) %96)
  %106 = load ptr, ptr %91, align 16, !tbaa !7
  %107 = load ptr, ptr %106, align 8, !tbaa !42
  %108 = getelementptr inbounds i8, ptr %107, i64 88
  %109 = load ptr, ptr %108, align 8
  tail call void %109(ptr noundef nonnull align 8 dereferenceable(16) %106)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #8
  %110 = load ptr, ptr %91, align 16, !tbaa !7
  %111 = load ptr, ptr %110, align 8, !tbaa !42
  %112 = getelementptr inbounds i8, ptr %111, i64 96
  %113 = load ptr, ptr %112, align 8
  call void %113(ptr dead_on_unwind nonnull writable sret(%"struct.JPH::BroadPhase::UpdateState") align 8 %6, ptr noundef nonnull align 8 dereferenceable(16) %110)
  %114 = load ptr, ptr %91, align 16, !tbaa !7
  %115 = load ptr, ptr %114, align 8, !tbaa !42
  %116 = getelementptr inbounds i8, ptr %115, i64 104
  %117 = load ptr, ptr %116, align 8
  call void %117(ptr noundef nonnull align 8 dereferenceable(16) %114, ptr noundef nonnull align 8 dereferenceable(32) %6)
  %118 = load ptr, ptr %91, align 16, !tbaa !7
  %119 = load ptr, ptr %118, align 8, !tbaa !42
  %120 = getelementptr inbounds i8, ptr %119, i64 112
  %121 = load ptr, ptr %120, align 8
  call void %121(ptr noundef nonnull align 8 dereferenceable(16) %118)
  %122 = fcmp ogt float %1, 0.000000e+00
  br i1 %122, label %123, label %125

123:                                              ; preds = %105
  %124 = getelementptr inbounds i8, ptr %0, i64 576
  call void @_ZN3JPH24ContactConstraintManager55FinalizeContactCacheAndCallContactPointRemovedCallbacksEjj(ptr noundef nonnull align 8 dereferenceable(248) %124, i32 noundef 0, i32 noundef 0)
  br label %125

125:                                              ; preds = %123, %105
  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 %721

126:                                              ; preds = %100, %104
  %127 = sitofp i32 %2 to float
  %128 = fdiv float %1, %127
  %129 = getelementptr inbounds i8, ptr %0, i64 488
  %130 = getelementptr inbounds i8, ptr %0, i64 565
  %131 = load i8, ptr %130, align 1, !tbaa !44, !range !45, !noundef !46
  %132 = trunc nuw i8 %131 to i1
  br i1 %132, label %133, label %139

133:                                              ; preds = %126
  %134 = getelementptr inbounds i8, ptr %0, i64 1168
  %135 = load float, ptr %134, align 16, !tbaa !47
  %136 = fcmp ogt float %135, 0.000000e+00
  br i1 %136, label %137, label %139

137:                                              ; preds = %133
  %138 = fdiv float %128, %135
  br label %139

139:                                              ; preds = %126, %133, %137
  %140 = phi float [ %138, %137 ], [ 0.000000e+00, %133 ], [ 0.000000e+00, %126 ]
  %141 = getelementptr inbounds i8, ptr %0, i64 1168
  store float %128, ptr %141, align 16, !tbaa !47
  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 !48
  %142 = getelementptr inbounds i8, ptr %7, i64 16
  store ptr %4, ptr %142, align 8, !tbaa !52
  %143 = load ptr, ptr %4, align 8, !tbaa !42
  %144 = getelementptr inbounds i8, ptr %143, i64 32
  %145 = load ptr, ptr %144, align 8
  %146 = invoke noundef ptr %145(ptr noundef nonnull align 8 dereferenceable(8) %4)
          to label %147 unwind label %163

147:                                              ; preds = %139
  %148 = getelementptr inbounds i8, ptr %7, i64 24
  store ptr %146, ptr %148, align 8, !tbaa !53
  %149 = getelementptr inbounds i8, ptr %0, i64 904
  %150 = getelementptr inbounds i8, ptr %7, i64 64
  store ptr %149, ptr %150, align 8, !tbaa !54
  %151 = getelementptr inbounds i8, ptr %7, i64 32
  store float %128, ptr %151, align 8, !tbaa !55
  %152 = getelementptr inbounds i8, ptr %7, i64 36
  store float %140, ptr %152, align 4, !tbaa !56
  %153 = getelementptr inbounds i8, ptr %7, i64 72
  %154 = sext i32 %2 to i64
  invoke void @_ZN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(32) %153, i64 noundef %154)
          to label %155 unwind label %163

155:                                              ; preds = %147
  %156 = getelementptr inbounds i8, ptr %7, i64 56
  %157 = load ptr, ptr %156, align 8, !tbaa !57
  %158 = icmp eq ptr %157, null
  br i1 %158, label %165, label %159

159:                                              ; preds = %155
  %160 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.30, ptr noundef nonnull @.str.24, i32 noundef 181)
          to label %161 unwind label %163

161:                                              ; preds = %159
  br i1 %160, label %162, label %165

162:                                              ; preds = %161
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #8, !srcloc !58
  br label %165

163:                                              ; preds = %175, %174, %172, %165, %159, %147, %139
  %164 = landingpad { ptr, i32 }
          cleanup
  br label %720

165:                                              ; preds = %162, %161, %155
  %166 = load i32, ptr %129, align 8, !tbaa !59
  %167 = shl i32 %166, 3
  %168 = load ptr, ptr %3, align 8, !tbaa !42
  %169 = getelementptr inbounds i8, ptr %168, i64 16
  %170 = load ptr, ptr %169, align 8
  %171 = invoke noundef ptr %170(ptr noundef nonnull align 8 dereferenceable(8) %3, i32 noundef %167)
          to label %172 unwind label %163

172:                                              ; preds = %165
  store ptr %171, ptr %156, align 8, !tbaa !57
  %173 = getelementptr inbounds i8, ptr %0, i64 1080
  invoke void @_ZN3JPH5Mutex4lockEv(ptr noundef nonnull align 8 dereferenceable(48) %173)
          to label %174 unwind label %163

174:                                              ; preds = %172
  invoke void @_ZNK3JPH11BodyManager13LockAllBodiesEv(ptr noundef nonnull align 8 dereferenceable(297) %96)
          to label %175 unwind label %163

175:                                              ; preds = %174
  %176 = load ptr, ptr %91, align 16, !tbaa !7
  %177 = load ptr, ptr %176, align 8, !tbaa !42
  %178 = getelementptr inbounds i8, ptr %177, i64 88
  %179 = load ptr, ptr %178, align 8
  invoke void %179(ptr noundef nonnull align 8 dereferenceable(16) %176)
          to label %180 unwind label %163

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

182:                                              ; preds = %180
  store i32 %181, ptr %8, align 4, !tbaa !60
  %183 = getelementptr inbounds i8, ptr %0, i64 1128
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #8
  %184 = call noundef zeroext i1 @_ZNK3JPH5ArrayIPNS_19PhysicsStepListenerENS_12STLAllocatorIS2_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %183)
  br i1 %184, label %197, label %185

185:                                              ; preds = %182
  store i32 1, ptr %9, align 4, !tbaa !60
  %186 = call noundef i64 @_ZNK3JPH5ArrayIPNS_19PhysicsStepListenerENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %183)
  %187 = trunc i64 %186 to i32
  %188 = getelementptr inbounds i8, ptr %0, i64 492
  %189 = load i32, ptr %188, align 4, !tbaa !61
  %190 = sdiv i32 %187, %189
  %191 = getelementptr inbounds i8, ptr %0, i64 496
  %192 = load i32, ptr %191, align 16, !tbaa !62
  %193 = sdiv i32 %190, %192
  store i32 %193, ptr %10, align 4, !tbaa !60
  %194 = 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)
  %195 = 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) %194)
  %196 = load i32, ptr %195, align 4, !tbaa !60
  br label %197

197:                                              ; preds = %182, %185
  %198 = phi i32 [ %196, %185 ], [ 0, %182 ]
  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 !60
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #8
  %199 = add nsw i32 %97, 63
  %200 = sdiv i32 %199, 64
  store i32 %200, ptr %12, align 4, !tbaa !60
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #8
  %201 = load i32, ptr %8, align 4, !tbaa !60
  %202 = add nsw i32 %201, -2
  store i32 %202, ptr %13, align 4, !tbaa !60
  %203 = 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)
  %204 = 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) %203)
  %205 = load i32, ptr %204, align 4, !tbaa !60
  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 !60
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #8
  %206 = getelementptr inbounds i8, ptr %0, i64 824
  %207 = invoke noundef i32 @_ZNK3JPH17ConstraintManager17GetNumConstraintsEv(ptr noundef nonnull align 8 dereferenceable(80) %206)
          to label %208 unwind label %277

208:                                              ; preds = %197
  %209 = add nsw i32 %207, 63
  %210 = sdiv i32 %209, 64
  store i32 %210, ptr %15, align 4, !tbaa !60
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #8
  %211 = load i32, ptr %8, align 4, !tbaa !60
  %212 = add nsw i32 %211, -2
  store i32 %212, ptr %16, align 4, !tbaa !60
  %213 = 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)
  %214 = 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) %213)
  %215 = load i32, ptr %214, align 4, !tbaa !60
  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 !60
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #8
  %216 = invoke noundef i32 @_ZNK3JPH17ConstraintManager17GetNumConstraintsEv(ptr noundef nonnull align 8 dereferenceable(80) %206)
          to label %217 unwind label %279

217:                                              ; preds = %208
  %218 = add nsw i32 %216, 255
  %219 = sdiv i32 %218, 256
  store i32 %219, ptr %18, align 4, !tbaa !60
  %220 = 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)
  %221 = 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) %220)
  %222 = load i32, ptr %221, align 4, !tbaa !60
  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
  %223 = load i32, ptr %8, align 4, !tbaa !60
  %224 = icmp eq i32 %223, 1
  %225 = select i1 %224, i32 1, i32 2
  store i32 %225, ptr %19, align 4, !tbaa !60
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #8
  %226 = add nsw i32 %97, 15
  %227 = sdiv i32 %226, 16
  store i32 %227, ptr %20, align 4, !tbaa !60
  %228 = 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)
  %229 = 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) %228)
  %230 = load i32, ptr %229, align 4, !tbaa !60
  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 !60
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #8
  store i32 %200, ptr %22, align 4, !tbaa !60
  %231 = 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)
  %232 = 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) %231)
  %233 = load i32, ptr %232, align 4, !tbaa !60
  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 = %217
  %234 = add nsw i32 %2, -1
  %235 = getelementptr inbounds i8, ptr %25, i64 8
  %236 = add nsw i32 %230, 2
  %237 = getelementptr inbounds i8, ptr %28, i64 8
  %238 = sub i32 32, %230
  %239 = lshr i32 -1, %238
  %240 = icmp sgt i32 %230, 0
  %241 = getelementptr inbounds i8, ptr %31, i64 8
  %242 = add i32 %205, 1
  %243 = add i32 %242, %215
  %244 = getelementptr inbounds i8, ptr %7, i64 48
  %245 = getelementptr inbounds i8, ptr %0, i64 576
  %246 = getelementptr inbounds i8, ptr %7, i64 8
  %247 = icmp sgt i32 %205, 0
  %248 = getelementptr inbounds i8, ptr %34, i64 8
  %249 = icmp sgt i32 %198, 0
  %250 = icmp sgt i32 %222, 0
  %251 = getelementptr inbounds i8, ptr %37, i64 8
  %252 = add nsw i32 %215, 1
  %253 = getelementptr inbounds i8, ptr %40, i64 8
  %254 = icmp sgt i32 %215, 0
  %255 = getelementptr inbounds i8, ptr %43, i64 8
  %256 = getelementptr inbounds i8, ptr %46, i64 8
  %257 = getelementptr inbounds i8, ptr %49, i64 8
  %258 = getelementptr inbounds i8, ptr %52, i64 8
  %259 = getelementptr inbounds i8, ptr %55, i64 8
  %260 = getelementptr inbounds i8, ptr %58, i64 8
  %261 = getelementptr inbounds i8, ptr %61, i64 8
  %262 = add nsw i32 %222, 2
  %263 = getelementptr inbounds i8, ptr %64, i64 8
  %264 = icmp sgt i32 %233, 0
  %265 = getelementptr inbounds i8, ptr %67, i64 8
  %266 = getelementptr inbounds i8, ptr %70, i64 8
  %267 = add nsw i32 %233, 1
  %268 = getelementptr inbounds i8, ptr %73, i64 8
  %269 = getelementptr inbounds i8, ptr %76, i64 8
  %270 = getelementptr inbounds i8, ptr %79, i64 8
  %271 = zext nneg i32 %234 to i64
  %wide.trip.count = zext nneg i32 %2 to i64
  br label %281

._crit_edge406:                                   ; preds = %568, %217
  %272 = load ptr, ptr %148, align 8, !tbaa !53
  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
  %273 = call noundef ptr @_ZN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(32) %153)
  %274 = call noundef ptr @_ZN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(32) %153)
  %.not447 = icmp eq ptr %273, %274
  br i1 %.not447, label %._crit_edge451, label %.lr.ph450

275:                                              ; preds = %180
  %276 = landingpad { ptr, i32 }
          cleanup
  br label %719

277:                                              ; preds = %197
  %278 = 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 %719

279:                                              ; preds = %208
  %280 = 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 %719

281:                                              ; preds = %.lr.ph405, %568
  %indvars.iv = phi i64 [ 0, %.lr.ph405 ], [ %indvars.iv.next, %568 ]
  %282 = icmp eq i64 %indvars.iv, 0
  %283 = icmp eq i64 %indvars.iv, %271
  %284 = invoke noundef nonnull align 8 dereferenceable(7344) ptr @_ZN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %153, i64 noundef %indvars.iv)
          to label %285 unwind label %312

285:                                              ; preds = %281
  %286 = zext i1 %283 to i8
  %287 = zext i1 %282 to i8
  store ptr %7, ptr %284, align 8, !tbaa !63
  %288 = getelementptr inbounds i8, ptr %284, i64 8
  store i8 %287, ptr %288, align 8, !tbaa !70
  %289 = getelementptr inbounds i8, ptr %284, i64 9
  store i8 %286, ptr %289, align 1, !tbaa !71
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #8
  %.sroa.0141.0.copyload = load i32, ptr @_ZN3JPHL30cColorUpdateBroadPhaseFinalizeE, align 4, !tbaa !72
  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 !73
  store ptr %284, ptr %235, align 8, !tbaa !73
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull align 8 dereferenceable(16) %25) #8
  %290 = load ptr, ptr %4, align 8, !tbaa !42
  %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 %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 %236)
          to label %293 unwind label %314

293:                                              ; preds = %285
  %294 = getelementptr inbounds i8, ptr %284, i64 5672
  %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) %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 %282, true
  %296 = 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 !72
  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 !73
  store ptr %284, ptr %237, align 8, !tbaa !73
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(16) %28) #8
  %297 = load ptr, ptr %4, align 8, !tbaa !42
  %298 = getelementptr inbounds i8, ptr %297, i64 24
  %299 = load ptr, ptr %298, align 8
  invoke void %299(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 %296)
          to label %300 unwind label %316

300:                                              ; preds = %293
  %301 = getelementptr inbounds i8, ptr %284, i64 4608
  %302 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %301, 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
  %303 = getelementptr inbounds i8, ptr %284, i64 436
  %304 = load i32, ptr %8, align 4, !tbaa !60
  invoke void @_ZN3JPH11StaticArrayINS_20PhysicsUpdateContext13BodyPairQueueELj32EE6resizeEj(ptr noundef nonnull align 4 dereferenceable(4100) %303, i32 noundef %304)
          to label %305 unwind label %318

305:                                              ; preds = %300
  %306 = load i32, ptr %129, align 8, !tbaa !59
  %307 = load i32, ptr %8, align 4, !tbaa !60
  %308 = sdiv i32 %306, %307
  %309 = getelementptr inbounds i8, ptr %284, i64 4536
  store i32 %308, ptr %309, align 8, !tbaa !74
  %310 = getelementptr inbounds i8, ptr %284, i64 4540
  call void @_ZNSt13__atomic_baseIjE5storeEjSt12memory_order(ptr noundef nonnull align 4 dereferenceable(4) %310, i32 noundef %239, i32 noundef 3) #8
  %311 = getelementptr inbounds i8, ptr %284, i64 5408
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %311, i32 noundef %230)
          to label %.preheader380 unwind label %318

.preheader380:                                    ; preds = %305
  br i1 %240, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %328, %.preheader380
  br i1 %282, label %336, label %358

312:                                              ; preds = %281
  %313 = landingpad { ptr, i32 }
          cleanup
  br label %719

314:                                              ; preds = %285
  %315 = 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 %719

316:                                              ; preds = %293
  %317 = 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 %719

318:                                              ; preds = %565, %559, %._crit_edge402, %535, %532, %525, %._crit_edge399, %504, %503, %500, %493, %492, %._crit_edge396, %472, %436, %430, %427, %._crit_edge390, %392, %._crit_edge384, %358, %355, %354, %348, %346, %342, %336, %305, %300
  %319 = landingpad { ptr, i32 }
          cleanup
  br label %719

.lr.ph:                                           ; preds = %.preheader380, %328
  %.0318381 = phi i32 [ %330, %328 ], [ 0, %.preheader380 ]
  %320 = icmp eq i32 %.0318381, 0
  %321 = zext i1 %320 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 !72
  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 %284, ptr %31, align 8, !tbaa !73
  store i32 %.0318381, ptr %241, align 8, !tbaa !75
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull align 8 dereferenceable(12) %31) #8
  %322 = add nsw i32 %243, %321
  %323 = load ptr, ptr %4, align 8, !tbaa !42
  %324 = getelementptr inbounds i8, ptr %323, i64 24
  %325 = load ptr, ptr %324, align 8
  invoke void %325(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 %322)
          to label %326 unwind label %331

326:                                              ; preds = %.lr.ph
  %327 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %311, i32 noundef %.0318381)
          to label %328 unwind label %333

328:                                              ; preds = %326
  %329 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %327, 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
  %330 = add nuw nsw i32 %.0318381, 1
  %exitcond.not = icmp eq i32 %330, %230
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !77

331:                                              ; preds = %.lr.ph
  %332 = landingpad { ptr, i32 }
          cleanup
  br label %335

333:                                              ; preds = %326
  %334 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %29) #8
  br label %335

335:                                              ; preds = %333, %331
  %.pn365 = phi { ptr, i32 } [ %334, %333 ], [ %332, %331 ]
  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 %719

336:                                              ; preds = %._crit_edge
  call void @_ZN3JPH11BodyManager21SetActiveBodiesLockedEb(ptr noundef nonnull align 8 dereferenceable(297) %96, i1 noundef zeroext true)
  %337 = call noundef i32 @_ZNK3JPH11BodyManager18GetNumActiveBodiesENS_9EBodyTypeE(ptr noundef nonnull align 8 dereferenceable(297) %96, i8 noundef zeroext 0)
  %338 = getelementptr inbounds i8, ptr %284, i64 48
  store i32 %337, ptr %338, align 8, !tbaa !79
  invoke void @_ZN3JPH17ConstraintManager18LockAllConstraintsEv(ptr noundef nonnull align 8 dereferenceable(80) %206)
          to label %339 unwind label %318

339:                                              ; preds = %336
  %340 = load ptr, ptr %244, align 8, !tbaa !80
  %341 = icmp eq ptr %340, null
  br i1 %341, label %346, label %342

342:                                              ; preds = %339
  %343 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.34, ptr noundef nonnull @.str.24, i32 noundef 287)
          to label %344 unwind label %318

344:                                              ; preds = %342
  br i1 %343, label %345, label %346

345:                                              ; preds = %344
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #8, !srcloc !81
  br label %346

346:                                              ; preds = %345, %344, %339
  %347 = invoke noundef i32 @_ZNK3JPH17ConstraintManager17GetNumConstraintsEv(ptr noundef nonnull align 8 dereferenceable(80) %206)
          to label %348 unwind label %318

348:                                              ; preds = %346
  %349 = shl i32 %347, 3
  %350 = load ptr, ptr %3, align 8, !tbaa !42
  %351 = getelementptr inbounds i8, ptr %350, i64 16
  %352 = load ptr, ptr %351, align 8
  %353 = invoke noundef ptr %352(ptr noundef nonnull align 8 dereferenceable(8) %3, i32 noundef %349)
          to label %354 unwind label %318

354:                                              ; preds = %348
  store ptr %353, ptr %244, align 8, !tbaa !80
  invoke void @_ZN3JPH24ContactConstraintManager23PrepareConstraintBufferEPNS_20PhysicsUpdateContextE(ptr noundef nonnull align 8 dereferenceable(248) %245, ptr noundef nonnull %7)
          to label %355 unwind label %318

355:                                              ; preds = %354
  %356 = call noundef i32 @_ZNK3JPH24ContactConstraintManager17GetMaxConstraintsEv(ptr noundef nonnull align 8 dereferenceable(248) %245)
  %357 = load ptr, ptr %246, align 8, !tbaa !82
  invoke void @_ZN3JPH13IslandBuilder25PrepareContactConstraintsEjPNS_13TempAllocatorE(ptr noundef nonnull align 8 dereferenceable(112) %149, i32 noundef %356, ptr noundef %357)
          to label %358 unwind label %318

358:                                              ; preds = %355, %._crit_edge
  %359 = getelementptr inbounds i8, ptr %284, i64 5144
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %359, i32 noundef %205)
          to label %.preheader379 unwind label %318

.preheader379:                                    ; preds = %358
  br i1 %247, label %.lr.ph383, label %._crit_edge384

.lr.ph383:                                        ; preds = %.preheader379
  %360 = select i1 %249, i32 %198, i32 %296
  br label %362

._crit_edge384:                                   ; preds = %368, %.preheader379
  %361 = getelementptr inbounds i8, ptr %284, i64 5680
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %361, i32 noundef %222)
          to label %.preheader378 unwind label %318

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

362:                                              ; preds = %.lr.ph383, %368
  %.0320382 = phi i32 [ 0, %.lr.ph383 ], [ %370, %368 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %32) #8
  %.sroa.0125.0.copyload = load i32, ptr @_ZN3JPHL18cColorApplyGravityE, align 4, !tbaa !72
  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 !73
  store ptr %284, ptr %248, align 8, !tbaa !73
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull align 8 dereferenceable(16) %34) #8
  %363 = load ptr, ptr %4, align 8, !tbaa !42
  %364 = getelementptr inbounds i8, ptr %363, i64 24
  %365 = load ptr, ptr %364, align 8
  invoke void %365(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 %360)
          to label %366 unwind label %371

366:                                              ; preds = %362
  %367 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %359, i32 noundef %.0320382)
          to label %368 unwind label %373

368:                                              ; preds = %366
  %369 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %367, 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
  %370 = add nuw nsw i32 %.0320382, 1
  %exitcond452.not = icmp eq i32 %370, %205
  br i1 %exitcond452.not, label %._crit_edge384, label %362, !llvm.loop !83

371:                                              ; preds = %362
  %372 = landingpad { ptr, i32 }
          cleanup
  br label %375

373:                                              ; preds = %366
  %374 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %32) #8
  br label %375

375:                                              ; preds = %373, %371
  %.pn363 = phi { ptr, i32 } [ %374, %373 ], [ %372, %371 ]
  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 %719

._crit_edge387:                                   ; preds = %384, %.preheader378
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %38) #8
  %.sroa.0120.0.copyload = load i32, ptr @_ZN3JPHL33cColorBuildIslandsFromConstraintsE, align 4, !tbaa !72
  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 !73
  store ptr %284, ptr %253, align 8, !tbaa !73
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_5vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 8 dereferenceable(16) %40) #8
  %376 = load ptr, ptr %4, align 8, !tbaa !42
  %377 = getelementptr inbounds i8, ptr %376, i64 24
  %378 = load ptr, ptr %377, align 8
  invoke void %378(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 %252)
          to label %392 unwind label %398

.lr.ph386:                                        ; preds = %.preheader378, %384
  %.0321385 = phi i32 [ %386, %384 ], [ 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 !72
  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 !73
  store ptr %284, ptr %251, align 8, !tbaa !73
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef nonnull align 8 dereferenceable(16) %37) #8
  %379 = load ptr, ptr %4, align 8, !tbaa !42
  %380 = getelementptr inbounds i8, ptr %379, i64 24
  %381 = load ptr, ptr %380, align 8
  invoke void %381(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 %252)
          to label %382 unwind label %387

382:                                              ; preds = %.lr.ph386
  %383 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %361, i32 noundef %.0321385)
          to label %384 unwind label %389

384:                                              ; preds = %382
  %385 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %383, 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
  %386 = add nuw nsw i32 %.0321385, 1
  %exitcond453.not = icmp eq i32 %386, %222
  br i1 %exitcond453.not, label %._crit_edge387, label %.lr.ph386, !llvm.loop !84

387:                                              ; preds = %.lr.ph386
  %388 = landingpad { ptr, i32 }
          cleanup
  br label %391

389:                                              ; preds = %382
  %390 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %35) #8
  br label %391

391:                                              ; preds = %389, %387
  %.pn361 = phi { ptr, i32 } [ %390, %389 ], [ %388, %387 ]
  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 %719

392:                                              ; preds = %._crit_edge387
  %393 = getelementptr inbounds i8, ptr %284, i64 5944
  %394 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %393, 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
  %395 = getelementptr inbounds i8, ptr %284, i64 4880
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %395, i32 noundef %215)
          to label %.preheader377 unwind label %318

.preheader377:                                    ; preds = %392
  br i1 %254, label %.lr.ph389, label %._crit_edge390

.lr.ph389:                                        ; preds = %.preheader377
  %396 = select i1 %249, i32 %198, i32 %296
  br label %400

._crit_edge390:                                   ; preds = %406, %.preheader377
  %397 = getelementptr inbounds i8, ptr %284, i64 4616
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %397, i32 noundef %198)
          to label %.preheader376 unwind label %318

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

398:                                              ; preds = %._crit_edge387
  %399 = 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 %719

400:                                              ; preds = %.lr.ph389, %406
  %.0322388 = phi i32 [ 0, %.lr.ph389 ], [ %408, %406 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %41) #8
  %.sroa.0116.0.copyload = load i32, ptr @_ZN3JPHL32cColorDetermineActiveConstraintsE, align 4, !tbaa !72
  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 !73
  store ptr %284, ptr %255, align 8, !tbaa !73
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_6vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %42, ptr noundef nonnull align 8 dereferenceable(16) %43) #8
  %401 = load ptr, ptr %4, align 8, !tbaa !42
  %402 = getelementptr inbounds i8, ptr %401, i64 24
  %403 = load ptr, ptr %402, align 8
  invoke void %403(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 %396)
          to label %404 unwind label %409

404:                                              ; preds = %400
  %405 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %395, i32 noundef %.0322388)
          to label %406 unwind label %411

406:                                              ; preds = %404
  %407 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %405, 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
  %408 = add nuw nsw i32 %.0322388, 1
  %exitcond454.not = icmp eq i32 %408, %215
  br i1 %exitcond454.not, label %._crit_edge390, label %400, !llvm.loop !85

409:                                              ; preds = %400
  %410 = landingpad { ptr, i32 }
          cleanup
  br label %413

411:                                              ; preds = %404
  %412 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %41) #8
  br label %413

413:                                              ; preds = %411, %409
  %.pn359 = phi { ptr, i32 } [ %412, %411 ], [ %410, %409 ]
  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 %719

._crit_edge393:                                   ; preds = %419, %.preheader376
  br i1 %282, label %432, label %427

.lr.ph392:                                        ; preds = %.preheader376, %419
  %.0324391 = phi i32 [ %421, %419 ], [ 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 !72
  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 !73
  store ptr %284, ptr %256, align 8, !tbaa !73
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_7vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull align 8 dereferenceable(16) %46) #8
  %414 = load ptr, ptr %4, align 8, !tbaa !42
  %415 = getelementptr inbounds i8, ptr %414, i64 24
  %416 = load ptr, ptr %415, align 8
  invoke void %416(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 %296)
          to label %417 unwind label %422

417:                                              ; preds = %.lr.ph392
  %418 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %397, i32 noundef %.0324391)
          to label %419 unwind label %424

419:                                              ; preds = %417
  %420 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %418, 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
  %421 = add nuw nsw i32 %.0324391, 1
  %exitcond455.not = icmp eq i32 %421, %198
  br i1 %exitcond455.not, label %._crit_edge393, label %.lr.ph392, !llvm.loop !86

422:                                              ; preds = %.lr.ph392
  %423 = landingpad { ptr, i32 }
          cleanup
  br label %426

424:                                              ; preds = %417
  %425 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %44) #8
  br label %426

426:                                              ; preds = %424, %422
  %.pn357 = phi { ptr, i32 } [ %425, %424 ], [ %423, %422 ]
  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 %719

427:                                              ; preds = %._crit_edge393
  %428 = add nsw i64 %indvars.iv, -1
  %429 = invoke noundef nonnull align 8 dereferenceable(7344) ptr @_ZN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %153, i64 noundef %428)
          to label %430 unwind label %318

430:                                              ; preds = %427
  %431 = getelementptr inbounds i8, ptr %429, i64 7336
  invoke void @_ZNK3JPH9JobSystem9JobHandle16RemoveDependencyEi(ptr noundef nonnull align 8 dereferenceable(8) %431, i32 noundef 1)
          to label %432 unwind label %318

432:                                              ; preds = %430, %._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 !72
  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 !73
  store ptr %284, ptr %257, align 8, !tbaa !73
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_8vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %48, ptr noundef nonnull align 8 dereferenceable(16) %49) #8
  %433 = load ptr, ptr %4, align 8, !tbaa !42
  %434 = getelementptr inbounds i8, ptr %433, i64 24
  %435 = load ptr, ptr %434, align 8
  invoke void %435(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 %236)
          to label %436 unwind label %462

436:                                              ; preds = %432
  %437 = getelementptr inbounds i8, ptr %284, i64 5952
  %438 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %437, 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) %393, i32 noundef 1)
          to label %439 unwind label %318

439:                                              ; preds = %436
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %50) #8
  %.sroa.0110.0.copyload = load i32, ptr @_ZN3JPHL29cColorContactRemovedCallbacksE, align 4, !tbaa !72
  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 !73
  store ptr %284, ptr %258, align 8, !tbaa !73
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE3$_9vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %51, ptr noundef nonnull align 8 dereferenceable(16) %52) #8
  %440 = load ptr, ptr %4, align 8, !tbaa !42
  %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 %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 %443 unwind label %464

443:                                              ; preds = %439
  %444 = getelementptr inbounds i8, ptr %284, i64 6784
  %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) %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 !72
  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 !73
  store ptr %284, ptr %259, align 8, !tbaa !73
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_10vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %54, ptr noundef nonnull align 8 dereferenceable(16) %55) #8
  %446 = load ptr, ptr %4, align 8, !tbaa !42
  %447 = getelementptr inbounds i8, ptr %446, i64 24
  %448 = load ptr, ptr %447, align 8
  invoke void %448(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 %449 unwind label %466

449:                                              ; preds = %443
  %450 = getelementptr inbounds i8, ptr %284, i64 5960
  %451 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %450, 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 %283, label %472, label %452

452:                                              ; preds = %449
  %453 = add nuw nsw i64 %indvars.iv, 1
  %454 = invoke noundef nonnull align 8 dereferenceable(7344) ptr @_ZN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %153, i64 noundef %453)
          to label %455 unwind label %468

455:                                              ; preds = %452
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %56) #8
  %.sroa.0107.0.copyload = load i32, ptr @_ZN3JPHL19cColorStartNextStepE, align 4, !tbaa !72
  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 !87
  store ptr %454, ptr %260, align 8, !tbaa !89
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_11vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %57, ptr noundef nonnull align 8 dereferenceable(16) %58) #8
  %456 = load ptr, ptr %4, align 8, !tbaa !42
  %457 = getelementptr inbounds i8, ptr %456, i64 24
  %458 = load ptr, ptr %457, align 8
  invoke void %458(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 %459 unwind label %470

459:                                              ; preds = %455
  %460 = getelementptr inbounds i8, ptr %284, i64 7336
  %461 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %460, 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 %472

462:                                              ; preds = %432
  %463 = 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 %719

464:                                              ; preds = %439
  %465 = 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 %719

466:                                              ; preds = %443
  %467 = 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 %719

468:                                              ; preds = %452
  %469 = landingpad { ptr, i32 }
          cleanup
  br label %719

470:                                              ; preds = %455
  %471 = 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 %719

472:                                              ; preds = %459, %449
  %473 = getelementptr inbounds i8, ptr %284, i64 5968
  %474 = load i32, ptr %8, align 4, !tbaa !60
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %473, i32 noundef %474)
          to label %.preheader375 unwind label %318

.preheader375:                                    ; preds = %472
  %475 = load i32, ptr %8, align 4, !tbaa !60
  %476 = icmp sgt i32 %475, 0
  br i1 %476, label %.lr.ph395, label %._crit_edge396

._crit_edge396:                                   ; preds = %482, %.preheader375
  invoke void @_ZN3JPH9JobSystem9JobHandle19sRemoveDependenciesILj32EEEvRNS_11StaticArrayIS1_XT_EEEi(ptr noundef nonnull align 8 dereferenceable(264) %361, i32 noundef 1)
          to label %492 unwind label %318

.lr.ph395:                                        ; preds = %.preheader375, %482
  %.0325394 = phi i32 [ %484, %482 ], [ 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 !72
  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 !73
  store ptr %284, ptr %261, align 8, !tbaa !73
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_12vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %60, ptr noundef nonnull align 8 dereferenceable(16) %61) #8
  %477 = load ptr, ptr %4, align 8, !tbaa !42
  %478 = getelementptr inbounds i8, ptr %477, i64 24
  %479 = load ptr, ptr %478, align 8
  invoke void %479(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 %262)
          to label %480 unwind label %487

480:                                              ; preds = %.lr.ph395
  %481 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %473, i32 noundef %.0325394)
          to label %482 unwind label %489

482:                                              ; preds = %480
  %483 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %481, 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
  %484 = add nuw nsw i32 %.0325394, 1
  %485 = load i32, ptr %8, align 4, !tbaa !60
  %486 = icmp slt i32 %484, %485
  br i1 %486, label %.lr.ph395, label %._crit_edge396, !llvm.loop !90

487:                                              ; preds = %.lr.ph395
  %488 = landingpad { ptr, i32 }
          cleanup
  br label %491

489:                                              ; preds = %480
  %490 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %59) #8
  br label %491

491:                                              ; preds = %489, %487
  %.pn355 = phi { ptr, i32 } [ %490, %489 ], [ %488, %487 ]
  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 %719

492:                                              ; preds = %._crit_edge396
  invoke void @_ZN3JPH9JobSystem9JobHandle19sRemoveDependenciesILj32EEEvRNS_11StaticArrayIS1_XT_EEEi(ptr noundef nonnull align 8 dereferenceable(264) %311, i32 noundef 1)
          to label %493 unwind label %318

493:                                              ; preds = %492
  invoke void @_ZNK3JPH9JobSystem9JobHandle16RemoveDependencyEi(ptr noundef nonnull align 8 dereferenceable(8) %437, i32 noundef 1)
          to label %494 unwind label %318

494:                                              ; preds = %493
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %62) #8
  %.sroa.0102.0.copyload = load i32, ptr @_ZN3JPHL26cColorPreIntegrateVelocityE, align 4, !tbaa !72
  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 !73
  store ptr %284, ptr %263, align 8, !tbaa !73
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_13vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %63, ptr noundef nonnull align 8 dereferenceable(16) %64) #8
  %495 = load i32, ptr %8, align 4, !tbaa !60
  %496 = add nsw i32 %495, 2
  %497 = load ptr, ptr %4, align 8, !tbaa !42
  %498 = getelementptr inbounds i8, ptr %497, i64 24
  %499 = load ptr, ptr %498, align 8
  invoke void %499(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 %496)
          to label %500 unwind label %506

500:                                              ; preds = %494
  %501 = getelementptr inbounds i8, ptr %284, i64 6232
  %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) %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) %294, i32 noundef 1)
          to label %503 unwind label %318

503:                                              ; preds = %500
  invoke void @_ZN3JPH9JobSystem9JobHandle19sRemoveDependenciesILj32EEEvRNS_11StaticArrayIS1_XT_EEEi(ptr noundef nonnull align 8 dereferenceable(264) %473, i32 noundef 1)
          to label %504 unwind label %318

504:                                              ; preds = %503
  %505 = getelementptr inbounds i8, ptr %284, i64 6240
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %505, i32 noundef %233)
          to label %.preheader374 unwind label %318

.preheader374:                                    ; preds = %504
  br i1 %264, label %.lr.ph398, label %._crit_edge399

._crit_edge399:                                   ; preds = %513, %.preheader374
  invoke void @_ZNK3JPH9JobSystem9JobHandle16RemoveDependencyEi(ptr noundef nonnull align 8 dereferenceable(8) %501, i32 noundef 1)
          to label %521 unwind label %318

506:                                              ; preds = %494
  %507 = 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 %719

.lr.ph398:                                        ; preds = %.preheader374, %513
  %.0326397 = phi i32 [ %515, %513 ], [ 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 !72
  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 !73
  store ptr %284, ptr %265, align 8, !tbaa !73
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_14vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %66, ptr noundef nonnull align 8 dereferenceable(16) %67) #8
  %508 = load ptr, ptr %4, align 8, !tbaa !42
  %509 = getelementptr inbounds i8, ptr %508, i64 24
  %510 = load ptr, ptr %509, align 8
  invoke void %510(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 %511 unwind label %516

511:                                              ; preds = %.lr.ph398
  %512 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %505, i32 noundef %.0326397)
          to label %513 unwind label %518

513:                                              ; preds = %511
  %514 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %512, 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
  %515 = add nuw nsw i32 %.0326397, 1
  %exitcond456.not = icmp eq i32 %515, %233
  br i1 %exitcond456.not, label %._crit_edge399, label %.lr.ph398, !llvm.loop !91

516:                                              ; preds = %.lr.ph398
  %517 = landingpad { ptr, i32 }
          cleanup
  br label %520

518:                                              ; preds = %511
  %519 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %65) #8
  br label %520

520:                                              ; preds = %518, %516
  %.pn353 = phi { ptr, i32 } [ %519, %518 ], [ %517, %516 ]
  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 %719

521:                                              ; 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 !72
  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 !73
  store ptr %284, ptr %266, align 8, !tbaa !73
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_15vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %69, ptr noundef nonnull align 8 dereferenceable(16) %70) #8
  %522 = load ptr, ptr %4, align 8, !tbaa !42
  %523 = getelementptr inbounds i8, ptr %522, i64 24
  %524 = load ptr, ptr %523, align 8
  invoke void %524(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 %267)
          to label %525 unwind label %540

525:                                              ; preds = %521
  %526 = getelementptr inbounds i8, ptr %284, i64 6504
  %527 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %526, 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) %505, i32 noundef 1)
          to label %528 unwind label %318

528:                                              ; preds = %525
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %71) #8
  %.sroa.096.0.copyload = load i32, ptr @_ZN3JPHL24cColorResolveCCDContactsE, align 4, !tbaa !72
  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 !73
  store ptr %284, ptr %268, align 8, !tbaa !73
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_16vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %72, ptr noundef nonnull align 8 dereferenceable(16) %73) #8
  %529 = load ptr, ptr %4, align 8, !tbaa !42
  %530 = getelementptr inbounds i8, ptr %529, i64 24
  %531 = load ptr, ptr %530, align 8
  invoke void %531(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 %532 unwind label %542

532:                                              ; preds = %528
  %533 = getelementptr inbounds i8, ptr %284, i64 6512
  %534 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %533, 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) %526, i32 noundef 1)
          to label %535 unwind label %318

535:                                              ; preds = %532
  %536 = getelementptr inbounds i8, ptr %284, i64 6520
  %537 = load i32, ptr %8, align 4, !tbaa !60
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE6resizeEj(ptr noundef nonnull align 8 dereferenceable(264) %536, i32 noundef %537)
          to label %.preheader unwind label %318

.preheader:                                       ; preds = %535
  %538 = load i32, ptr %8, align 4, !tbaa !60
  %539 = icmp sgt i32 %538, 0
  br i1 %539, label %.lr.ph401, label %._crit_edge402

._crit_edge402:                                   ; preds = %549, %.preheader
  invoke void @_ZNK3JPH9JobSystem9JobHandle16RemoveDependencyEi(ptr noundef nonnull align 8 dereferenceable(8) %533, i32 noundef 1)
          to label %559 unwind label %318

540:                                              ; preds = %521
  %541 = 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 %719

542:                                              ; preds = %528
  %543 = 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 %719

.lr.ph401:                                        ; preds = %.preheader, %549
  %.0328400 = phi i32 [ %551, %549 ], [ 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 !72
  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 !73
  store ptr %284, ptr %269, align 8, !tbaa !73
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_17vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %75, ptr noundef nonnull align 8 dereferenceable(16) %76) #8
  %544 = load ptr, ptr %4, align 8, !tbaa !42
  %545 = getelementptr inbounds i8, ptr %544, i64 24
  %546 = load ptr, ptr %545, align 8
  invoke void %546(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 %547 unwind label %554

547:                                              ; preds = %.lr.ph401
  %548 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEixEj(ptr noundef nonnull align 8 dereferenceable(264) %536, i32 noundef %.0328400)
          to label %549 unwind label %556

549:                                              ; preds = %547
  %550 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %548, 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
  %551 = add nuw nsw i32 %.0328400, 1
  %552 = load i32, ptr %8, align 4, !tbaa !60
  %553 = icmp slt i32 %551, %552
  br i1 %553, label %.lr.ph401, label %._crit_edge402, !llvm.loop !92

554:                                              ; preds = %.lr.ph401
  %555 = landingpad { ptr, i32 }
          cleanup
  br label %558

556:                                              ; preds = %547
  %557 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %74) #8
  br label %558

558:                                              ; preds = %556, %554
  %.pn351 = phi { ptr, i32 } [ %557, %556 ], [ %555, %554 ]
  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 %719

559:                                              ; preds = %._crit_edge402
  invoke void @_ZNK3JPH9JobSystem9JobHandle16RemoveDependencyEi(ptr noundef nonnull align 8 dereferenceable(8) %450, i32 noundef 1)
          to label %560 unwind label %318

560:                                              ; preds = %559
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %77) #8
  %.sroa.0.0.copyload = load i32, ptr @_ZN3JPHL21cColorSoftBodyPrepareE, align 4, !tbaa !72
  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 !73
  store ptr %284, ptr %270, align 8, !tbaa !73
  call void @"_ZNSt8functionIFvvEEC2IZN3JPH13PhysicsSystem6UpdateEfiPNS3_13TempAllocatorEPNS3_9JobSystemEE4$_18vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %78, ptr noundef nonnull align 8 dereferenceable(16) %79) #8
  %561 = load i32, ptr %8, align 4, !tbaa !60
  %562 = load ptr, ptr %4, align 8, !tbaa !42
  %563 = getelementptr inbounds i8, ptr %562, i64 24
  %564 = load ptr, ptr %563, align 8
  invoke void %564(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 %561)
          to label %565 unwind label %569

565:                                              ; preds = %560
  %566 = getelementptr inbounds i8, ptr %284, i64 6792
  %567 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH9JobSystem9JobHandleaSEOS1_(ptr noundef nonnull align 8 dereferenceable(8) %566, 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) %536, i32 noundef 1)
          to label %568 unwind label %318

568:                                              ; preds = %565
  %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 %281, !llvm.loop !93

569:                                              ; preds = %560
  %570 = 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 %719

._crit_edge451:                                   ; preds = %663, %._crit_edge406
  %571 = call noundef ptr @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE4dataEv(ptr noundef nonnull align 8 dereferenceable(16392) %80)
  %572 = call noundef i32 @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16392) %80)
  %573 = load ptr, ptr %272, align 8, !tbaa !42
  %574 = getelementptr inbounds i8, ptr %573, i64 8
  %575 = load ptr, ptr %574, align 8
  invoke void %575(ptr noundef nonnull align 8 dereferenceable(8) %272, ptr noundef %571, i32 noundef %572)
          to label %665 unwind label %711

.lr.ph450:                                        ; preds = %._crit_edge406, %663
  %.0329448 = phi ptr [ %664, %663 ], [ %273, %._crit_edge406 ]
  %576 = getelementptr inbounds i8, ptr %.0329448, i64 4608
  %577 = call noundef zeroext i1 @_ZNK3JPH9JobSystem9JobHandle7IsValidEv(ptr noundef nonnull align 8 dereferenceable(8) %576)
  br i1 %577, label %578, label %581

578:                                              ; preds = %.lr.ph450
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %576)
          to label %581 unwind label %579

579:                                              ; preds = %662, %658, %._crit_edge446, %644, %._crit_edge441, %._crit_edge436, %624, %622, %._crit_edge431, %612, %578
  %580 = landingpad { ptr, i32 }
          cleanup
  br label %713

581:                                              ; preds = %578, %.lr.ph450
  %582 = getelementptr inbounds i8, ptr %.0329448, i64 4616
  %583 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %582)
  %584 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %582)
  %.not338407 = icmp eq ptr %583, %584
  br i1 %.not338407, label %._crit_edge411, label %.lr.ph410

._crit_edge411:                                   ; preds = %588, %581
  %585 = getelementptr inbounds i8, ptr %.0329448, i64 4880
  %586 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %585)
  %587 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %585)
  %.not339412 = icmp eq ptr %586, %587
  br i1 %.not339412, label %._crit_edge416, label %.lr.ph415

.lr.ph410:                                        ; preds = %581, %588
  %.0330408 = phi ptr [ %589, %588 ], [ %583, %581 ]
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %.0330408)
          to label %588 unwind label %590

588:                                              ; preds = %.lr.ph410
  %589 = getelementptr inbounds i8, ptr %.0330408, i64 8
  %.not338 = icmp eq ptr %589, %584
  br i1 %.not338, label %._crit_edge411, label %.lr.ph410

590:                                              ; preds = %.lr.ph410
  %591 = landingpad { ptr, i32 }
          cleanup
  br label %713

._crit_edge416:                                   ; preds = %595, %._crit_edge411
  %592 = getelementptr inbounds i8, ptr %.0329448, i64 5144
  %593 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %592)
  %594 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %592)
  %.not340417 = icmp eq ptr %593, %594
  br i1 %.not340417, label %._crit_edge421, label %.lr.ph420

.lr.ph415:                                        ; preds = %._crit_edge411, %595
  %.0332413 = phi ptr [ %596, %595 ], [ %586, %._crit_edge411 ]
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %.0332413)
          to label %595 unwind label %597

595:                                              ; preds = %.lr.ph415
  %596 = getelementptr inbounds i8, ptr %.0332413, i64 8
  %.not339 = icmp eq ptr %596, %587
  br i1 %.not339, label %._crit_edge416, label %.lr.ph415

597:                                              ; preds = %.lr.ph415
  %598 = landingpad { ptr, i32 }
          cleanup
  br label %713

._crit_edge421:                                   ; preds = %602, %._crit_edge416
  %599 = getelementptr inbounds i8, ptr %.0329448, i64 5408
  %600 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %599)
  %601 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %599)
  %.not341422 = icmp eq ptr %600, %601
  br i1 %.not341422, label %._crit_edge426, label %.lr.ph425

.lr.ph420:                                        ; preds = %._crit_edge416, %602
  %.0333418 = phi ptr [ %603, %602 ], [ %593, %._crit_edge416 ]
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %.0333418)
          to label %602 unwind label %604

602:                                              ; preds = %.lr.ph420
  %603 = getelementptr inbounds i8, ptr %.0333418, i64 8
  %.not340 = icmp eq ptr %603, %594
  br i1 %.not340, label %._crit_edge421, label %.lr.ph420

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

._crit_edge426:                                   ; preds = %608, %._crit_edge421
  %606 = getelementptr inbounds i8, ptr %.0329448, i64 5672
  %607 = call noundef zeroext i1 @_ZNK3JPH9JobSystem9JobHandle7IsValidEv(ptr noundef nonnull align 8 dereferenceable(8) %606)
  br i1 %607, label %612, label %613

.lr.ph425:                                        ; preds = %._crit_edge421, %608
  %.0331423 = phi ptr [ %609, %608 ], [ %600, %._crit_edge421 ]
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %.0331423)
          to label %608 unwind label %610

608:                                              ; preds = %.lr.ph425
  %609 = getelementptr inbounds i8, ptr %.0331423, i64 8
  %.not341 = icmp eq ptr %609, %601
  br i1 %.not341, label %._crit_edge426, label %.lr.ph425

610:                                              ; preds = %.lr.ph425
  %611 = landingpad { ptr, i32 }
          cleanup
  br label %713

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

613:                                              ; preds = %612, %._crit_edge426
  %614 = getelementptr inbounds i8, ptr %.0329448, i64 5680
  %615 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %614)
  %616 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %614)
  %.not342427 = icmp eq ptr %615, %616
  br i1 %.not342427, label %._crit_edge431, label %.lr.ph430

._crit_edge431:                                   ; preds = %618, %613
  %617 = getelementptr inbounds i8, ptr %.0329448, i64 5944
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %617)
          to label %622 unwind label %579

.lr.ph430:                                        ; preds = %613, %618
  %.0327428 = phi ptr [ %619, %618 ], [ %615, %613 ]
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %.0327428)
          to label %618 unwind label %620

618:                                              ; preds = %.lr.ph430
  %619 = getelementptr inbounds i8, ptr %.0327428, i64 8
  %.not342 = icmp eq ptr %619, %616
  br i1 %.not342, label %._crit_edge431, label %.lr.ph430

620:                                              ; preds = %.lr.ph430
  %621 = landingpad { ptr, i32 }
          cleanup
  br label %713

622:                                              ; preds = %._crit_edge431
  %623 = getelementptr inbounds i8, ptr %.0329448, i64 5952
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %623)
          to label %624 unwind label %579

624:                                              ; preds = %622
  %625 = getelementptr inbounds i8, ptr %.0329448, i64 5960
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %625)
          to label %626 unwind label %579

626:                                              ; preds = %624
  %627 = getelementptr inbounds i8, ptr %.0329448, i64 5968
  %628 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %627)
  %629 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %627)
  %.not343432 = icmp eq ptr %628, %629
  br i1 %.not343432, label %._crit_edge436, label %.lr.ph435

._crit_edge436:                                   ; preds = %631, %626
  %630 = getelementptr inbounds i8, ptr %.0329448, i64 6232
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %630)
          to label %635 unwind label %579

.lr.ph435:                                        ; preds = %626, %631
  %.0323433 = phi ptr [ %632, %631 ], [ %628, %626 ]
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %.0323433)
          to label %631 unwind label %633

631:                                              ; preds = %.lr.ph435
  %632 = getelementptr inbounds i8, ptr %.0323433, i64 8
  %.not343 = icmp eq ptr %632, %629
  br i1 %.not343, label %._crit_edge436, label %.lr.ph435

633:                                              ; preds = %.lr.ph435
  %634 = landingpad { ptr, i32 }
          cleanup
  br label %713

635:                                              ; preds = %._crit_edge436
  %636 = getelementptr inbounds i8, ptr %.0329448, i64 6240
  %637 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %636)
  %638 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %636)
  %.not344437 = icmp eq ptr %637, %638
  br i1 %.not344437, label %._crit_edge441, label %.lr.ph440

._crit_edge441:                                   ; preds = %640, %635
  %639 = getelementptr inbounds i8, ptr %.0329448, i64 6504
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %639)
          to label %644 unwind label %579

.lr.ph440:                                        ; preds = %635, %640
  %.0319438 = phi ptr [ %641, %640 ], [ %637, %635 ]
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %.0319438)
          to label %640 unwind label %642

640:                                              ; preds = %.lr.ph440
  %641 = getelementptr inbounds i8, ptr %.0319438, i64 8
  %.not344 = icmp eq ptr %641, %638
  br i1 %.not344, label %._crit_edge441, label %.lr.ph440

642:                                              ; preds = %.lr.ph440
  %643 = landingpad { ptr, i32 }
          cleanup
  br label %713

644:                                              ; preds = %._crit_edge441
  %645 = getelementptr inbounds i8, ptr %.0329448, i64 6512
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %645)
          to label %646 unwind label %579

646:                                              ; preds = %644
  %647 = getelementptr inbounds i8, ptr %.0329448, i64 6520
  %648 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE5beginEv(ptr noundef nonnull align 8 dereferenceable(264) %647)
  %649 = call noundef ptr @_ZNK3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EE3endEv(ptr noundef nonnull align 8 dereferenceable(264) %647)
  %.not345442 = icmp eq ptr %648, %649
  br i1 %.not345442, label %._crit_edge446, label %.lr.ph445

._crit_edge446:                                   ; preds = %651, %646
  %650 = getelementptr inbounds i8, ptr %.0329448, i64 6784
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %650)
          to label %655 unwind label %579

.lr.ph445:                                        ; preds = %646, %651
  %.0297443 = phi ptr [ %652, %651 ], [ %648, %646 ]
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %.0297443)
          to label %651 unwind label %653

651:                                              ; preds = %.lr.ph445
  %652 = getelementptr inbounds i8, ptr %.0297443, i64 8
  %.not345 = icmp eq ptr %652, %649
  br i1 %.not345, label %._crit_edge446, label %.lr.ph445

653:                                              ; preds = %.lr.ph445
  %654 = landingpad { ptr, i32 }
          cleanup
  br label %713

655:                                              ; preds = %._crit_edge446
  %656 = getelementptr inbounds i8, ptr %.0329448, i64 6792
  %657 = call noundef zeroext i1 @_ZNK3JPH9JobSystem9JobHandle7IsValidEv(ptr noundef nonnull align 8 dereferenceable(8) %656)
  br i1 %657, label %658, label %659

658:                                              ; preds = %655
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %656)
          to label %659 unwind label %579

659:                                              ; preds = %658, %655
  %660 = getelementptr inbounds i8, ptr %.0329448, i64 7336
  %661 = call noundef zeroext i1 @_ZNK3JPH9JobSystem9JobHandle7IsValidEv(ptr noundef nonnull align 8 dereferenceable(8) %660)
  br i1 %661, label %662, label %663

662:                                              ; preds = %659
  invoke void @_ZN3JPH11StaticArrayINS_9JobSystem9JobHandleELj2048EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(16392) %80, ptr noundef nonnull align 8 dereferenceable(8) %660)
          to label %663 unwind label %579

663:                                              ; preds = %662, %659
  %664 = getelementptr inbounds i8, ptr %.0329448, i64 7344
  %.not = icmp eq ptr %664, %274
  br i1 %.not, label %._crit_edge451, label %.lr.ph450

665:                                              ; 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
  %666 = load ptr, ptr %4, align 8, !tbaa !42
  %667 = getelementptr inbounds i8, ptr %666, i64 48
  %668 = load ptr, ptr %667, align 8
  invoke void %668(ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull %272)
          to label %669 unwind label %714

669:                                              ; preds = %665
  %670 = load ptr, ptr %4, align 8, !tbaa !42
  %671 = getelementptr inbounds i8, ptr %670, i64 40
  %672 = load ptr, ptr %671, align 8
  invoke void %672(ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull %272)
          to label %673 unwind label %714

673:                                              ; preds = %669
  invoke void @_ZN3JPH11BodyManager24ValidateActiveBodyBoundsEv(ptr noundef nonnull align 8 dereferenceable(297) %96)
          to label %674 unwind label %714

674:                                              ; preds = %673
  %675 = getelementptr inbounds i8, ptr %0, i64 1016
  invoke void @_ZN3JPH19LargeIslandSplitter5ResetEPNS_13TempAllocatorE(ptr noundef nonnull align 8 dereferenceable(60) %675, ptr noundef nonnull %3)
          to label %676 unwind label %714

676:                                              ; preds = %674
  invoke void @_ZN3JPH13IslandBuilder12ResetIslandsEPNS_13TempAllocatorE(ptr noundef nonnull align 8 dereferenceable(112) %149, ptr noundef nonnull %3)
          to label %677 unwind label %714

677:                                              ; preds = %676
  %678 = getelementptr inbounds i8, ptr %0, i64 576
  invoke void @_ZN3JPH24ContactConstraintManager22FinishConstraintBufferEv(ptr noundef nonnull align 8 dereferenceable(248) %678)
          to label %679 unwind label %714

679:                                              ; preds = %677
  %680 = getelementptr inbounds i8, ptr %7, i64 48
  %681 = load ptr, ptr %680, align 8, !tbaa !80
  %682 = invoke noundef i32 @_ZNK3JPH17ConstraintManager17GetNumConstraintsEv(ptr noundef nonnull align 8 dereferenceable(80) %206)
          to label %683 unwind label %714

683:                                              ; preds = %679
  %684 = shl i32 %682, 3
  %685 = load ptr, ptr %3, align 8, !tbaa !42
  %686 = getelementptr inbounds i8, ptr %685, i64 24
  %687 = load ptr, ptr %686, align 8
  invoke void %687(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef %681, i32 noundef %684)
          to label %688 unwind label %714

688:                                              ; preds = %683
  store ptr null, ptr %680, align 8, !tbaa !80
  %689 = load ptr, ptr %156, align 8, !tbaa !57
  %690 = load i32, ptr %129, align 8, !tbaa !59
  %691 = shl i32 %690, 3
  %692 = load ptr, ptr %3, align 8, !tbaa !42
  %693 = getelementptr inbounds i8, ptr %692, i64 24
  %694 = load ptr, ptr %693, align 8
  invoke void %694(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef %689, i32 noundef %691)
          to label %695 unwind label %714

695:                                              ; preds = %688
  store ptr null, ptr %156, align 8, !tbaa !57
  %696 = load ptr, ptr %91, align 16, !tbaa !7
  %697 = load ptr, ptr %696, align 8, !tbaa !42
  %698 = getelementptr inbounds i8, ptr %697, i64 112
  %699 = load ptr, ptr %698, align 8
  invoke void %699(ptr noundef nonnull align 8 dereferenceable(16) %696)
          to label %700 unwind label %714

700:                                              ; preds = %695
  invoke void @_ZN3JPH17ConstraintManager20UnlockAllConstraintsEv(ptr noundef nonnull align 8 dereferenceable(80) %206)
          to label %701 unwind label %714

701:                                              ; preds = %700
  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 %702 unwind label %714

702:                                              ; preds = %701
  invoke void @_ZN3JPH5Mutex6unlockEv(ptr noundef nonnull align 8 dereferenceable(48) %173)
          to label %703 unwind label %714

703:                                              ; preds = %702
  %704 = getelementptr inbounds i8, ptr %7, i64 40
  %705 = call noundef i32 @_ZNKSt13__atomic_baseIjE4loadESt12memory_order(ptr noundef nonnull align 4 dereferenceable(4) %704, i32 noundef 2) #8
  %706 = icmp eq i32 %705, 0
  br i1 %706, label %718, label %707

707:                                              ; preds = %703
  %708 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jS1_NS_15AssertLastParamE(ptr noundef nonnull @.str.51, ptr noundef nonnull @.str.24, i32 noundef 619, ptr noundef nonnull @.str.52)
          to label %709 unwind label %716

709:                                              ; preds = %707
  br i1 %708, label %710, label %718

710:                                              ; preds = %709
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #8, !srcloc !94
  br label %718

711:                                              ; preds = %._crit_edge451
  %712 = landingpad { ptr, i32 }
          cleanup
  br label %713

713:                                              ; preds = %579, %590, %597, %604, %610, %620, %633, %642, %653, %711
  %.pn.pn = phi { ptr, i32 } [ %712, %711 ], [ %591, %590 ], [ %598, %597 ], [ %605, %604 ], [ %611, %610 ], [ %621, %620 ], [ %634, %633 ], [ %643, %642 ], [ %654, %653 ], [ %580, %579 ]
  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 %719

714:                                              ; preds = %702, %701, %700, %695, %688, %683, %679, %677, %676, %674, %673, %669, %665
  %715 = landingpad { ptr, i32 }
          cleanup
  br label %719

716:                                              ; preds = %707
  %717 = landingpad { ptr, i32 }
          cleanup
  br label %719

718:                                              ; preds = %710, %709, %703
  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 %721

719:                                              ; preds = %277, %316, %318, %335, %375, %391, %398, %413, %426, %462, %464, %466, %491, %506, %520, %540, %542, %558, %569, %470, %468, %314, %312, %716, %714, %713, %279, %275
  %.pn365.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %276, %275 ], [ %278, %277 ], [ %280, %279 ], [ %315, %314 ], [ %313, %312 ], [ %.pn365, %335 ], [ %.pn363, %375 ], [ %.pn361, %391 ], [ %.pn359, %413 ], [ %.pn357, %426 ], [ %.pn355, %491 ], [ %.pn353, %520 ], [ %.pn351, %558 ], [ %319, %318 ], [ %570, %569 ], [ %543, %542 ], [ %541, %540 ], [ %507, %506 ], [ %467, %466 ], [ %465, %464 ], [ %463, %462 ], [ %399, %398 ], [ %317, %316 ], [ %471, %470 ], [ %469, %468 ], [ %.pn.pn, %713 ], [ %717, %716 ], [ %715, %714 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #8
  br label %720

720:                                              ; preds = %719, %163
  %.pn365.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn365.pn.pn.pn.pn.pn.pn, %719 ], [ %164, %163 ]
  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

721:                                              ; preds = %718, %125
  %.0 = phi i32 [ 0, %125 ], [ %705, %718 ]
  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

; 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 #4 align 2

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

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

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

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

; 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 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 #4

; 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 #4

; 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 #4 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 #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH3RefINS_9JobSystem3JobEED2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #4 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: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZNSt13__atomic_baseIjE5storeEjSt12memory_order(ptr noundef nonnull align 4 dereferenceable(4), i32 noundef, i32 noundef) local_unnamed_addr #6 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 #5

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

; 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 #4 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 #4 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 #4 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 #5

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

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

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

; 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 = { 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 #5 = { "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 2160016583}
!6 = !{i64 2160016912}
!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, !9, i64 448, !29, i64 456, !31, i64 488, !33, i64 576, !36, i64 824, !38, i64 904, !39, i64 1016, !16, i64 1080, !40, i64 1128, !41, i64 1152, !32, i64 1168}
!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 = !{!"_ZTSSt8functionIFvRKN3JPH4BodyES3_RKNS0_5Mat44ES6_RNS0_20CollideShapeSettingsERNS0_18CollisionCollectorINS0_18CollideShapeResultENS0_36CollisionCollectorTraitsCollideShapeEEERKNS0_11ShapeFilterEEE", !30, i64 0, !9, i64 24}
!30 = !{!"_ZTSSt14_Function_base", !10, i64 0, !9, i64 16}
!31 = !{!"_ZTSN3JPH15PhysicsSettingsE", !15, i64 0, !15, i64 4, !15, i64 8, !32, i64 12, !32, i64 16, !32, i64 20, !32, i64 24, !32, i64 28, !32, i64 32, !32, i64 36, !32, i64 40, !32, i64 44, !32, i64 48, !32, i64 52, !15, i64 56, !15, i64 60, !32, i64 64, !32, i64 68, !32, i64 72, !23, i64 76, !23, i64 77, !23, i64 78, !23, i64 79, !23, i64 80, !23, i64 81, !23, i64 82}
!32 = !{!"float", !10, i64 0}
!33 = !{!"_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, !34, i64 236, !9, i64 240}
!34 = !{!"_ZTSSt6atomicIjE", !35, i64 0}
!35 = !{!"_ZTSSt13__atomic_baseIjE", !15, i64 0}
!36 = !{!"_ZTSN3JPH17ConstraintManagerE", !9, i64 0, !37, i64 8, !16, i64 32}
!37 = !{!"_ZTSN3JPH5ArrayINS_3RefINS_10ConstraintEEENS_12STLAllocatorIS3_EEEE", !14, i64 0, !14, i64 8, !9, i64 16}
!38 = !{!"_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}
!39 = !{!"_ZTSN3JPH19LargeIslandSplitterE", !15, i64 0, !9, i64 8, !9, i64 16, !9, i64 24, !15, i64 32, !34, i64 36, !15, i64 40, !9, i64 48, !34, i64 56}
!40 = !{!"_ZTSN3JPH5ArrayIPNS_19PhysicsStepListenerENS_12STLAllocatorIS2_EEEE", !14, i64 0, !14, i64 8, !9, i64 16}
!41 = !{!"_ZTSN3JPH4Vec3E", !10, i64 0}
!42 = !{!43, !43, i64 0}
!43 = !{!"vtable pointer", !11, i64 0}
!44 = !{!8, !23, i64 565}
!45 = !{i8 0, i8 2}
!46 = !{}
!47 = !{!8, !32, i64 1168}
!48 = !{!49, !9, i64 0}
!49 = !{!"_ZTSN3JPH20PhysicsUpdateContextE", !9, i64 0, !9, i64 8, !9, i64 16, !9, i64 24, !32, i64 32, !32, i64 36, !34, i64 40, !9, i64 48, !9, i64 56, !9, i64 64, !50, i64 72, !15, i64 104, !9, i64 112, !34, i64 120}
!50 = !{!"_ZTSN3JPH5ArrayINS_20PhysicsUpdateContext4StepENS_16STLTempAllocatorIS2_EEEE", !51, i64 0, !14, i64 8, !14, i64 16, !9, i64 24}
!51 = !{!"_ZTSN3JPH16STLTempAllocatorINS_20PhysicsUpdateContext4StepEEE", !9, i64 0}
!52 = !{!49, !9, i64 16}
!53 = !{!49, !9, i64 24}
!54 = !{!49, !9, i64 64}
!55 = !{!49, !32, i64 32}
!56 = !{!49, !32, i64 36}
!57 = !{!49, !9, i64 56}
!58 = !{i64 2160017261}
!59 = !{!8, !15, i64 488}
!60 = !{!15, !15, i64 0}
!61 = !{!8, !15, i64 492}
!62 = !{!8, !15, i64 496}
!63 = !{!64, !9, i64 0}
!64 = !{!"_ZTSN3JPH20PhysicsUpdateContext4StepE", !9, i64 0, !23, i64 8, !23, i64 9, !65, i64 16, !15, i64 48, !34, i64 52, !10, i64 56, !34, i64 116, !10, i64 120, !34, i64 180, !10, i64 184, !34, i64 244, !10, i64 248, !34, i64 308, !10, i64 312, !34, i64 372, !10, i64 376, !66, i64 436, !15, i64 4536, !34, i64 4540, !34, i64 4544, !34, i64 4548, !34, i64 4552, !34, i64 4556, !34, i64 4560, !9, i64 4568, !15, i64 4576, !34, i64 4580, !34, i64 4584, !9, i64 4592, !15, i64 4600, !67, i64 4608, !69, i64 4616, !69, i64 4880, !69, i64 5144, !69, i64 5408, !67, i64 5672, !69, i64 5680, !67, i64 5944, !67, i64 5952, !67, i64 5960, !69, i64 5968, !67, i64 6232, !69, i64 6240, !67, i64 6504, !67, i64 6512, !69, i64 6520, !67, i64 6784, !67, i64 6792, !69, i64 6800, !69, i64 7064, !67, i64 7328, !67, i64 7336}
!65 = !{!"_ZTSN3JPH10BroadPhase11UpdateStateE", !10, i64 0}
!66 = !{!"_ZTSN3JPH11StaticArrayINS_20PhysicsUpdateContext13BodyPairQueueELj32EEE", !15, i64 0, !10, i64 4}
!67 = !{!"_ZTSN3JPH9JobSystem9JobHandleE", !68, i64 0}
!68 = !{!"_ZTSN3JPH3RefINS_9JobSystem3JobEEE", !9, i64 0}
!69 = !{!"_ZTSN3JPH11StaticArrayINS_9JobSystem9JobHandleELj32EEE", !15, i64 0, !10, i64 8}
!70 = !{!64, !23, i64 8}
!71 = !{!64, !23, i64 9}
!72 = !{!10, !10, i64 0}
!73 = !{!9, !9, i64 0}
!74 = !{!64, !15, i64 4536}
!75 = !{!76, !15, i64 8}
!76 = !{!"_ZTSZN3JPH13PhysicsSystem6UpdateEfiPNS_13TempAllocatorEPNS_9JobSystemEE3$_2", !9, i64 0, !15, i64 8}
!77 = distinct !{!77, !78}
!78 = !{!"llvm.loop.mustprogress"}
!79 = !{!64, !15, i64 48}
!80 = !{!49, !9, i64 48}
!81 = !{i64 2160018039}
!82 = !{!49, !9, i64 8}
!83 = distinct !{!83, !78}
!84 = distinct !{!84, !78}
!85 = distinct !{!85, !78}
!86 = distinct !{!86, !78}
!87 = !{!88, !9, i64 0}
!88 = !{!"_ZTSZN3JPH13PhysicsSystem6UpdateEfiPNS_13TempAllocatorEPNS_9JobSystemEE4$_11", !9, i64 0, !9, i64 8}
!89 = !{!88, !9, i64 8}
!90 = distinct !{!90, !78}
!91 = distinct !{!91, !78}
!92 = distinct !{!92, !78}
!93 = distinct !{!93, !78}
!94 = !{i64 2160018905}


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