; LLVM IR from jrouwe/JoltPhysics :: Jolt/Physics/Constraints (ContactConstraintManager)

; 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"

%"struct.JPH::AssertLastParam" = type { i8 }
%"class.JPH::Array" = type { i64, i64, ptr }
%"class.JPH::Array.7" = type { i64, i64, ptr }
%"class.JPH::ContactConstraintManager::ManifoldCache" = type <{ %"class.JPH::LFHMAllocator", %"class.JPH::LockFreeHashMap", %"class.JPH::LockFreeHashMap.0", i8, [7 x i8] }>
%"class.JPH::LFHMAllocator" = type { ptr, i32, %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::LockFreeHashMap" = type { ptr, %"struct.std::atomic", ptr, i32, i32 }
%"class.JPH::LockFreeHashMap.0" = type { ptr, %"struct.std::atomic", ptr, i32, i32 }
%"struct.JPH::BodyPair" = type { %"class.JPH::BodyID", %"class.JPH::BodyID" }
%"class.JPH::BodyID" = type { i32 }
%"class.JPH::ContactConstraintManager::CachedManifold" = type { i32, %"class.JPH::Float3", %"struct.std::atomic.5", i16, [1 x %"class.JPH::ContactConstraintManager::CachedContactPoint"] }
%"class.JPH::Float3" = type { float, float, float }
%"struct.std::atomic.5" = type { %"struct.std::__atomic_base.6" }
%"struct.std::__atomic_base.6" = type { i16 }
%"class.JPH::ContactConstraintManager::CachedContactPoint" = type { %"class.JPH::Float3", %"class.JPH::Float3", float, %"class.JPH::Vector" }
%"class.JPH::Vector" = type { [2 x float] }

@.str.1 = external hidden unnamed_addr constant [106 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [62 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_jNS_15AssertLastParamE(ptr noundef, ptr noundef, i32 noundef) #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3JPH24ContactConstraintManager18CachedContactPoint9SaveStateERNS_13StateRecorderE(ptr noundef nonnull align 4 dereferenceable(36), ptr noundef nonnull align 8 dereferenceable(18)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3JPH24ContactConstraintManager14CachedManifold9SaveStateERNS_13StateRecorderE(ptr noundef nonnull align 4 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(18)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3JPH24ContactConstraintManager14CachedBodyPair9SaveStateERNS_13StateRecorderE(ptr noundef nonnull align 4 dereferenceable(28), ptr noundef nonnull align 8 dereferenceable(18)) #2 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3JPH24ContactConstraintManager13ManifoldCache21GetAllManifoldsSortedERKNS0_14CachedBodyPairERNS_5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS0_14CachedManifoldEE8KeyValueENS_12STLAllocatorISC_EEEE(ptr noundef nonnull align 8 dereferenceable(81), ptr noundef nonnull align 4 dereferenceable(28), ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(56) ptr @_ZNK3JPH15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValue8GetValueEv(ptr noundef nonnull align 4 dereferenceable(76)) #4 align 2

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i16 @_ZNKSt13__atomic_baseItEcvtEv(ptr noundef nonnull align 2 dereferenceable(2)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(16) ptr @_ZNK3JPH15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValue6GetKeyEv(ptr noundef nonnull align 4 dereferenceable(76)) #4 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK3JPH24ContactConstraintManager13ManifoldCache9SaveStateERNS_13StateRecorderEPKNS_19StateRecorderFilterE(ptr noundef nonnull align 8 dereferenceable(81) %0, ptr noundef nonnull align 8 dereferenceable(18) %1, ptr noundef %2) #2 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca %"struct.JPH::AssertLastParam", align 1
  %8 = alloca %"class.JPH::Array", align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca %"class.JPH::Array", align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca %"class.JPH::Array.7", align 8
  %24 = alloca i32, align 4
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca %"struct.JPH::AssertLastParam", align 1
  %31 = alloca i32, align 4
  %32 = alloca %"class.JPH::Array.7", align 8
  %33 = alloca %"class.JPH::Array.7", align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca i32, align 4
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  %43 = load ptr, ptr %4, align 8
  br label %44

44:                                               ; preds = %3
  %45 = getelementptr inbounds %"class.JPH::ContactConstraintManager::ManifoldCache", ptr %43, i32 0, i32 3
  %46 = load i8, ptr %45, align 8, !tbaa !9, !range !18, !noundef !19
  %47 = trunc i8 %46 to i1
  br i1 %47, label %51, label %48

48:                                               ; preds = %44
  %49 = call noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.5, ptr noundef @.str.1, i32 noundef 418)
  br i1 %49, label %50, label %51

50:                                               ; preds = %48
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #5, !srcloc !20
  br label %51

51:                                               ; preds = %50, %48, %44
  br label %52

52:                                               ; preds = %51
  call void @llvm.lifetime.start.p0(i64 24, ptr %8) #5
  call void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #5
  invoke void @_ZNK3JPH24ContactConstraintManager13ManifoldCache21GetAllBodyPairsSortedERNS_5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS0_14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS9_EEEE(ptr noundef nonnull align 8 dereferenceable(81) %43, ptr noundef nonnull align 8 dereferenceable(24) %8)
          to label %53 unwind label %58

53:                                               ; preds = %52
  call void @llvm.lifetime.start.p0(i64 24, ptr %11) #5
  call void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #5
  %54 = load ptr, ptr %6, align 8, !tbaa !5
  %55 = icmp eq ptr %54, null
  br i1 %55, label %56, label %62

56:                                               ; preds = %53
  %57 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEEaSEOSB_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(24) %8) #5
  br label %119

58:                                               ; preds = %52
  %59 = landingpad { ptr, i32 }
          cleanup
  %60 = extractvalue { ptr, i32 } %59, 0
  store ptr %60, ptr %9, align 8
  %61 = extractvalue { ptr, i32 } %59, 1
  store i32 %61, ptr %10, align 4
  br label %413

62:                                               ; preds = %53
  %63 = invoke noundef i64 @_ZNK3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %8)
          to label %64 unwind label %77

64:                                               ; preds = %62
  invoke void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %63)
          to label %65 unwind label %77

65:                                               ; preds = %64
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  store ptr %8, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  %66 = load ptr, ptr %12, align 8, !tbaa !5
  %67 = invoke noundef ptr @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %66)
          to label %68 unwind label %81

68:                                               ; preds = %65
  store ptr %67, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  %69 = load ptr, ptr %12, align 8, !tbaa !5
  %70 = invoke noundef ptr @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %69)
          to label %71 unwind label %85

71:                                               ; preds = %68
  store ptr %70, ptr %14, align 8, !tbaa !5
  br label %72

72:                                               ; preds = %113, %71
  %73 = load ptr, ptr %13, align 8, !tbaa !5
  %74 = load ptr, ptr %14, align 8, !tbaa !5
  %75 = icmp ne ptr %73, %74
  br i1 %75, label %89, label %76

76:                                               ; preds = %72
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  br label %118

77:                                               ; preds = %64, %62
  %78 = landingpad { ptr, i32 }
          cleanup
  %79 = extractvalue { ptr, i32 } %78, 0
  store ptr %79, ptr %9, align 8
  %80 = extractvalue { ptr, i32 } %78, 1
  store i32 %80, ptr %10, align 4
  br label %412

81:                                               ; preds = %65
  %82 = landingpad { ptr, i32 }
          cleanup
  %83 = extractvalue { ptr, i32 } %82, 0
  store ptr %83, ptr %9, align 8
  %84 = extractvalue { ptr, i32 } %82, 1
  store i32 %84, ptr %10, align 4
  br label %117

85:                                               ; preds = %68
  %86 = landingpad { ptr, i32 }
          cleanup
  %87 = extractvalue { ptr, i32 } %86, 0
  store ptr %87, ptr %9, align 8
  %88 = extractvalue { ptr, i32 } %86, 1
  store i32 %88, ptr %10, align 4
  br label %116

89:                                               ; preds = %72
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  %90 = load ptr, ptr %13, align 8, !tbaa !5
  %91 = load ptr, ptr %90, align 8, !tbaa !5
  store ptr %91, ptr %15, align 8, !tbaa !5
  %92 = load ptr, ptr %6, align 8, !tbaa !5
  %93 = load ptr, ptr %15, align 8, !tbaa !5
  %94 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValue6GetKeyEv(ptr noundef nonnull align 8 dereferenceable(40) %93)
          to label %95 unwind label %108

95:                                               ; preds = %89
  %96 = getelementptr inbounds %"struct.JPH::BodyPair", ptr %94, i32 0, i32 0
  %97 = load ptr, ptr %15, align 8, !tbaa !5
  %98 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValue6GetKeyEv(ptr noundef nonnull align 8 dereferenceable(40) %97)
          to label %99 unwind label %108

99:                                               ; preds = %95
  %100 = getelementptr inbounds %"struct.JPH::BodyPair", ptr %98, i32 0, i32 1
  %101 = load ptr, ptr %92, align 8, !tbaa !21
  %102 = getelementptr inbounds ptr, ptr %101, i64 4
  %103 = load ptr, ptr %102, align 8
  %104 = invoke noundef zeroext i1 %103(ptr noundef nonnull align 8 dereferenceable(8) %92, ptr noundef nonnull align 4 dereferenceable(4) %96, ptr noundef nonnull align 4 dereferenceable(4) %100)
          to label %105 unwind label %108

105:                                              ; preds = %99
  br i1 %104, label %106, label %112

106:                                              ; preds = %105
  invoke void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEE9push_backERKS8_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(8) %15)
          to label %107 unwind label %108

107:                                              ; preds = %106
  br label %112

108:                                              ; preds = %106, %99, %95, %89
  %109 = landingpad { ptr, i32 }
          cleanup
  %110 = extractvalue { ptr, i32 } %109, 0
  store ptr %110, ptr %9, align 8
  %111 = extractvalue { ptr, i32 } %109, 1
  store i32 %111, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  br label %116

112:                                              ; preds = %107, %105
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  br label %113

113:                                              ; preds = %112
  %114 = load ptr, ptr %13, align 8, !tbaa !5
  %115 = getelementptr inbounds ptr, ptr %114, i32 1
  store ptr %115, ptr %13, align 8, !tbaa !5
  br label %72

116:                                              ; preds = %108, %85
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  br label %117

117:                                              ; preds = %116, %81
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  br label %412

118:                                              ; preds = %76
  br label %119

119:                                              ; preds = %118, %56
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  %120 = invoke noundef i64 @_ZNK3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %11)
          to label %121 unwind label %137

121:                                              ; preds = %119
  %122 = trunc i64 %120 to i32
  store i32 %122, ptr %16, align 4, !tbaa !23
  %123 = load ptr, ptr %5, align 8, !tbaa !5
  %124 = getelementptr inbounds i8, ptr %123, i64 8
  invoke void @_ZN3JPH9StreamOut5WriteIjTnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS3_(ptr noundef nonnull align 8 dereferenceable(8) %124, ptr noundef nonnull align 4 dereferenceable(4) %16)
          to label %125 unwind label %137

125:                                              ; preds = %121
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  store ptr %11, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  %126 = load ptr, ptr %17, align 8, !tbaa !5
  %127 = invoke noundef ptr @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %126)
          to label %128 unwind label %141

128:                                              ; preds = %125
  store ptr %127, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  %129 = load ptr, ptr %17, align 8, !tbaa !5
  %130 = invoke noundef ptr @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %129)
          to label %131 unwind label %145

131:                                              ; preds = %128
  store ptr %130, ptr %19, align 8, !tbaa !5
  br label %132

132:                                              ; preds = %281, %131
  %133 = load ptr, ptr %18, align 8, !tbaa !5
  %134 = load ptr, ptr %19, align 8, !tbaa !5
  %135 = icmp ne ptr %133, %134
  br i1 %135, label %149, label %136

136:                                              ; preds = %132
  store i32 6, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  br label %290

137:                                              ; preds = %121, %119
  %138 = landingpad { ptr, i32 }
          cleanup
  %139 = extractvalue { ptr, i32 } %138, 0
  store ptr %139, ptr %9, align 8
  %140 = extractvalue { ptr, i32 } %138, 1
  store i32 %140, ptr %10, align 4
  br label %411

141:                                              ; preds = %125
  %142 = landingpad { ptr, i32 }
          cleanup
  %143 = extractvalue { ptr, i32 } %142, 0
  store ptr %143, ptr %9, align 8
  %144 = extractvalue { ptr, i32 } %142, 1
  store i32 %144, ptr %10, align 4
  br label %289

145:                                              ; preds = %128
  %146 = landingpad { ptr, i32 }
          cleanup
  %147 = extractvalue { ptr, i32 } %146, 0
  store ptr %147, ptr %9, align 8
  %148 = extractvalue { ptr, i32 } %146, 1
  store i32 %148, ptr %10, align 4
  br label %288

149:                                              ; preds = %132
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  %150 = load ptr, ptr %18, align 8, !tbaa !5
  %151 = load ptr, ptr %150, align 8, !tbaa !5
  store ptr %151, ptr %21, align 8, !tbaa !5
  %152 = load ptr, ptr %5, align 8, !tbaa !5
  %153 = getelementptr inbounds i8, ptr %152, i64 8
  %154 = load ptr, ptr %21, align 8, !tbaa !5
  %155 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValue6GetKeyEv(ptr noundef nonnull align 8 dereferenceable(40) %154)
          to label %156 unwind label %183

156:                                              ; preds = %149
  invoke void @_ZN3JPH9StreamOut5WriteINS_8BodyPairETnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS4_(ptr noundef nonnull align 8 dereferenceable(8) %153, ptr noundef nonnull align 8 dereferenceable(8) %155)
          to label %157 unwind label %183

157:                                              ; preds = %156
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  %158 = load ptr, ptr %21, align 8, !tbaa !5
  %159 = invoke noundef nonnull align 4 dereferenceable(28) ptr @_ZNK3JPH15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValue8GetValueEv(ptr noundef nonnull align 8 dereferenceable(40) %158)
          to label %160 unwind label %187

160:                                              ; preds = %157
  store ptr %159, ptr %22, align 8, !tbaa !5
  %161 = load ptr, ptr %22, align 8, !tbaa !5
  %162 = load ptr, ptr %5, align 8, !tbaa !5
  invoke void @_ZNK3JPH24ContactConstraintManager14CachedBodyPair9SaveStateERNS_13StateRecorderE(ptr noundef nonnull align 4 dereferenceable(28) %161, ptr noundef nonnull align 8 dereferenceable(18) %162)
          to label %163 unwind label %187

163:                                              ; preds = %160
  call void @llvm.lifetime.start.p0(i64 24, ptr %23) #5
  call void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #5
  %164 = load ptr, ptr %22, align 8, !tbaa !5
  invoke void @_ZNK3JPH24ContactConstraintManager13ManifoldCache21GetAllManifoldsSortedERKNS0_14CachedBodyPairERNS_5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS0_14CachedManifoldEE8KeyValueENS_12STLAllocatorISC_EEEE(ptr noundef nonnull align 8 dereferenceable(81) %43, ptr noundef nonnull align 4 dereferenceable(28) %164, ptr noundef nonnull align 8 dereferenceable(24) %23)
          to label %165 unwind label %191

165:                                              ; preds = %163
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  %166 = invoke noundef i64 @_ZNK3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %23)
          to label %167 unwind label %195

167:                                              ; preds = %165
  %168 = trunc i64 %166 to i32
  store i32 %168, ptr %24, align 4, !tbaa !23
  %169 = load ptr, ptr %5, align 8, !tbaa !5
  %170 = getelementptr inbounds i8, ptr %169, i64 8
  invoke void @_ZN3JPH9StreamOut5WriteIjTnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS3_(ptr noundef nonnull align 8 dereferenceable(8) %170, ptr noundef nonnull align 4 dereferenceable(4) %24)
          to label %171 unwind label %195

171:                                              ; preds = %167
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  store ptr %23, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  %172 = load ptr, ptr %25, align 8, !tbaa !5
  %173 = invoke noundef ptr @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %172)
          to label %174 unwind label %199

174:                                              ; preds = %171
  store ptr %173, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  %175 = load ptr, ptr %25, align 8, !tbaa !5
  %176 = invoke noundef ptr @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %175)
          to label %177 unwind label %203

177:                                              ; preds = %174
  store ptr %176, ptr %27, align 8, !tbaa !5
  br label %178

178:                                              ; preds = %273, %177
  %179 = load ptr, ptr %26, align 8, !tbaa !5
  %180 = load ptr, ptr %27, align 8, !tbaa !5
  %181 = icmp ne ptr %179, %180
  br i1 %181, label %207, label %182

182:                                              ; preds = %178
  store i32 8, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  br label %280

183:                                              ; preds = %156, %149
  %184 = landingpad { ptr, i32 }
          cleanup
  %185 = extractvalue { ptr, i32 } %184, 0
  store ptr %185, ptr %9, align 8
  %186 = extractvalue { ptr, i32 } %184, 1
  store i32 %186, ptr %10, align 4
  br label %287

187:                                              ; preds = %160, %157
  %188 = landingpad { ptr, i32 }
          cleanup
  %189 = extractvalue { ptr, i32 } %188, 0
  store ptr %189, ptr %9, align 8
  %190 = extractvalue { ptr, i32 } %188, 1
  store i32 %190, ptr %10, align 4
  br label %286

191:                                              ; preds = %163
  %192 = landingpad { ptr, i32 }
          cleanup
  %193 = extractvalue { ptr, i32 } %192, 0
  store ptr %193, ptr %9, align 8
  %194 = extractvalue { ptr, i32 } %192, 1
  store i32 %194, ptr %10, align 4
  br label %285

195:                                              ; preds = %167, %165
  %196 = landingpad { ptr, i32 }
          cleanup
  %197 = extractvalue { ptr, i32 } %196, 0
  store ptr %197, ptr %9, align 8
  %198 = extractvalue { ptr, i32 } %196, 1
  store i32 %198, ptr %10, align 4
  br label %284

199:                                              ; preds = %171
  %200 = landingpad { ptr, i32 }
          cleanup
  %201 = extractvalue { ptr, i32 } %200, 0
  store ptr %201, ptr %9, align 8
  %202 = extractvalue { ptr, i32 } %200, 1
  store i32 %202, ptr %10, align 4
  br label %279

203:                                              ; preds = %174
  %204 = landingpad { ptr, i32 }
          cleanup
  %205 = extractvalue { ptr, i32 } %204, 0
  store ptr %205, ptr %9, align 8
  %206 = extractvalue { ptr, i32 } %204, 1
  store i32 %206, ptr %10, align 4
  br label %278

207:                                              ; preds = %178
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  %208 = load ptr, ptr %26, align 8, !tbaa !5
  %209 = load ptr, ptr %208, align 8, !tbaa !5
  store ptr %209, ptr %28, align 8, !tbaa !5
  %210 = load ptr, ptr %5, align 8, !tbaa !5
  %211 = getelementptr inbounds i8, ptr %210, i64 8
  %212 = load ptr, ptr %28, align 8, !tbaa !5
  %213 = invoke noundef nonnull align 4 dereferenceable(16) ptr @_ZNK3JPH15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValue6GetKeyEv(ptr noundef nonnull align 4 dereferenceable(76) %212)
          to label %214 unwind label %230

214:                                              ; preds = %207
  invoke void @_ZN3JPH9StreamOut5WriteINS_14SubShapeIDPairETnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS4_(ptr noundef nonnull align 8 dereferenceable(8) %211, ptr noundef nonnull align 4 dereferenceable(16) %213)
          to label %215 unwind label %230

215:                                              ; preds = %214
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  %216 = load ptr, ptr %28, align 8, !tbaa !5
  %217 = invoke noundef nonnull align 4 dereferenceable(56) ptr @_ZNK3JPH15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValue8GetValueEv(ptr noundef nonnull align 4 dereferenceable(76) %216)
          to label %218 unwind label %234

218:                                              ; preds = %215
  store ptr %217, ptr %29, align 8, !tbaa !5
  br label %219

219:                                              ; preds = %218
  %220 = load ptr, ptr %29, align 8, !tbaa !5
  %221 = getelementptr inbounds %"class.JPH::ContactConstraintManager::CachedManifold", ptr %220, i32 0, i32 2
  %222 = call noundef zeroext i16 @_ZNKSt13__atomic_baseItEcvtEv(ptr noundef nonnull align 2 dereferenceable(2) %221) #5
  %223 = zext i16 %222 to i32
  %224 = and i32 %223, 2
  %225 = icmp eq i32 %224, 0
  br i1 %225, label %238, label %226

226:                                              ; preds = %219
  %227 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.7, ptr noundef @.str.1, i32 noundef 462)
          to label %228 unwind label %234

228:                                              ; preds = %226
  br i1 %227, label %229, label %238

229:                                              ; preds = %228
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #5, !srcloc !24
  br label %238

230:                                              ; preds = %214, %207
  %231 = landingpad { ptr, i32 }
          cleanup
  %232 = extractvalue { ptr, i32 } %231, 0
  store ptr %232, ptr %9, align 8
  %233 = extractvalue { ptr, i32 } %231, 1
  store i32 %233, ptr %10, align 4
  br label %277

234:                                              ; preds = %245, %240, %226, %215
  %235 = landingpad { ptr, i32 }
          cleanup
  %236 = extractvalue { ptr, i32 } %235, 0
  store ptr %236, ptr %9, align 8
  %237 = extractvalue { ptr, i32 } %235, 1
  store i32 %237, ptr %10, align 4
  br label %276

238:                                              ; preds = %229, %228, %219
  br label %239

239:                                              ; preds = %238
  br label %240

240:                                              ; preds = %239
  %241 = load ptr, ptr %5, align 8, !tbaa !5
  %242 = getelementptr inbounds i8, ptr %241, i64 8
  %243 = load ptr, ptr %29, align 8, !tbaa !5
  %244 = getelementptr inbounds %"class.JPH::ContactConstraintManager::CachedManifold", ptr %243, i32 0, i32 3
  invoke void @_ZN3JPH9StreamOut5WriteItTnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS3_(ptr noundef nonnull align 8 dereferenceable(8) %242, ptr noundef nonnull align 2 dereferenceable(2) %244)
          to label %245 unwind label %234

245:                                              ; preds = %240
  %246 = load ptr, ptr %29, align 8, !tbaa !5
  %247 = load ptr, ptr %5, align 8, !tbaa !5
  invoke void @_ZNK3JPH24ContactConstraintManager14CachedManifold9SaveStateERNS_13StateRecorderE(ptr noundef nonnull align 4 dereferenceable(56) %246, ptr noundef nonnull align 8 dereferenceable(18) %247)
          to label %248 unwind label %234

248:                                              ; preds = %245
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #5
  store i32 0, ptr %31, align 4, !tbaa !23
  br label %249

249:                                              ; preds = %265, %248
  %250 = load i32, ptr %31, align 4, !tbaa !23
  %251 = load ptr, ptr %29, align 8, !tbaa !5
  %252 = getelementptr inbounds %"class.JPH::ContactConstraintManager::CachedManifold", ptr %251, i32 0, i32 3
  %253 = load i16, ptr %252, align 2, !tbaa !25
  %254 = zext i16 %253 to i32
  %255 = icmp ult i32 %250, %254
  br i1 %255, label %257, label %256

256:                                              ; preds = %249
  store i32 12, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  br label %272

257:                                              ; preds = %249
  %258 = load ptr, ptr %29, align 8, !tbaa !5
  %259 = getelementptr inbounds %"class.JPH::ContactConstraintManager::CachedManifold", ptr %258, i32 0, i32 4
  %260 = load i32, ptr %31, align 4, !tbaa !23
  %261 = zext i32 %260 to i64
  %262 = getelementptr inbounds [1 x %"class.JPH::ContactConstraintManager::CachedContactPoint"], ptr %259, i64 0, i64 %261
  %263 = load ptr, ptr %5, align 8, !tbaa !5
  invoke void @_ZNK3JPH24ContactConstraintManager18CachedContactPoint9SaveStateERNS_13StateRecorderE(ptr noundef nonnull align 4 dereferenceable(36) %262, ptr noundef nonnull align 8 dereferenceable(18) %263)
          to label %264 unwind label %268

264:                                              ; preds = %257
  br label %265

265:                                              ; preds = %264
  %266 = load i32, ptr %31, align 4, !tbaa !23
  %267 = add i32 %266, 1
  store i32 %267, ptr %31, align 4, !tbaa !23
  br label %249, !llvm.loop !32

268:                                              ; preds = %257
  %269 = landingpad { ptr, i32 }
          cleanup
  %270 = extractvalue { ptr, i32 } %269, 0
  store ptr %270, ptr %9, align 8
  %271 = extractvalue { ptr, i32 } %269, 1
  store i32 %271, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  br label %276

272:                                              ; preds = %256
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  br label %273

273:                                              ; preds = %272
  %274 = load ptr, ptr %26, align 8, !tbaa !5
  %275 = getelementptr inbounds ptr, ptr %274, i32 1
  store ptr %275, ptr %26, align 8, !tbaa !5
  br label %178

276:                                              ; preds = %268, %234
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  br label %277

277:                                              ; preds = %276, %230
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  br label %278

278:                                              ; preds = %277, %203
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  br label %279

279:                                              ; preds = %278, %199
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  br label %284

280:                                              ; preds = %182
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  call void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  br label %281

281:                                              ; preds = %280
  %282 = load ptr, ptr %18, align 8, !tbaa !5
  %283 = getelementptr inbounds ptr, ptr %282, i32 1
  store ptr %283, ptr %18, align 8, !tbaa !5
  br label %132

284:                                              ; preds = %279, %195
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  br label %285

285:                                              ; preds = %284, %191
  call void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %23) #5
  br label %286

286:                                              ; preds = %285, %187
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  br label %287

287:                                              ; preds = %286, %183
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  br label %288

288:                                              ; preds = %287, %145
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  br label %289

289:                                              ; preds = %288, %141
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  br label %411

290:                                              ; preds = %136
  call void @llvm.lifetime.start.p0(i64 24, ptr %32) #5
  call void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %32) #5
  invoke void @_ZNK3JPH24ContactConstraintManager13ManifoldCache24GetAllCCDManifoldsSortedERNS_5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS0_14CachedManifoldEE8KeyValueENS_12STLAllocatorIS9_EEEE(ptr noundef nonnull align 8 dereferenceable(81) %43, ptr noundef nonnull align 8 dereferenceable(24) %32)
          to label %291 unwind label %296

291:                                              ; preds = %290
  call void @llvm.lifetime.start.p0(i64 24, ptr %33) #5
  call void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %33) #5
  %292 = load ptr, ptr %6, align 8, !tbaa !5
  %293 = icmp eq ptr %292, null
  br i1 %293, label %294, label %300

294:                                              ; preds = %291
  %295 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEEaSEOSB_(ptr noundef nonnull align 8 dereferenceable(24) %33, ptr noundef nonnull align 8 dereferenceable(24) %32) #5
  br label %359

296:                                              ; preds = %290
  %297 = landingpad { ptr, i32 }
          cleanup
  %298 = extractvalue { ptr, i32 } %297, 0
  store ptr %298, ptr %9, align 8
  %299 = extractvalue { ptr, i32 } %297, 1
  store i32 %299, ptr %10, align 4
  br label %410

300:                                              ; preds = %291
  %301 = invoke noundef i64 @_ZNK3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %32)
          to label %302 unwind label %315

302:                                              ; preds = %300
  invoke void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %33, i64 noundef %301)
          to label %303 unwind label %315

303:                                              ; preds = %302
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  store ptr %32, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #5
  %304 = load ptr, ptr %34, align 8, !tbaa !5
  %305 = invoke noundef ptr @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %304)
          to label %306 unwind label %319

306:                                              ; preds = %303
  store ptr %305, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #5
  %307 = load ptr, ptr %34, align 8, !tbaa !5
  %308 = invoke noundef ptr @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %307)
          to label %309 unwind label %323

309:                                              ; preds = %306
  store ptr %308, ptr %36, align 8, !tbaa !5
  br label %310

310:                                              ; preds = %353, %309
  %311 = load ptr, ptr %35, align 8, !tbaa !5
  %312 = load ptr, ptr %36, align 8, !tbaa !5
  %313 = icmp ne ptr %311, %312
  br i1 %313, label %327, label %314

314:                                              ; preds = %310
  store i32 15, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  br label %358

315:                                              ; preds = %302, %300
  %316 = landingpad { ptr, i32 }
          cleanup
  %317 = extractvalue { ptr, i32 } %316, 0
  store ptr %317, ptr %9, align 8
  %318 = extractvalue { ptr, i32 } %316, 1
  store i32 %318, ptr %10, align 4
  br label %409

319:                                              ; preds = %303
  %320 = landingpad { ptr, i32 }
          cleanup
  %321 = extractvalue { ptr, i32 } %320, 0
  store ptr %321, ptr %9, align 8
  %322 = extractvalue { ptr, i32 } %320, 1
  store i32 %322, ptr %10, align 4
  br label %357

323:                                              ; preds = %306
  %324 = landingpad { ptr, i32 }
          cleanup
  %325 = extractvalue { ptr, i32 } %324, 0
  store ptr %325, ptr %9, align 8
  %326 = extractvalue { ptr, i32 } %324, 1
  store i32 %326, ptr %10, align 4
  br label %356

327:                                              ; preds = %310
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #5
  %328 = load ptr, ptr %35, align 8, !tbaa !5
  %329 = load ptr, ptr %328, align 8, !tbaa !5
  store ptr %329, ptr %37, align 8, !tbaa !5
  %330 = load ptr, ptr %6, align 8, !tbaa !5
  %331 = load ptr, ptr %37, align 8, !tbaa !5
  %332 = invoke noundef nonnull align 4 dereferenceable(16) ptr @_ZNK3JPH15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValue6GetKeyEv(ptr noundef nonnull align 4 dereferenceable(76) %331)
          to label %333 unwind label %348

333:                                              ; preds = %327
  %334 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH14SubShapeIDPair10GetBody1IDEv(ptr noundef nonnull align 4 dereferenceable(16) %332)
          to label %335 unwind label %348

335:                                              ; preds = %333
  %336 = load ptr, ptr %37, align 8, !tbaa !5
  %337 = invoke noundef nonnull align 4 dereferenceable(16) ptr @_ZNK3JPH15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValue6GetKeyEv(ptr noundef nonnull align 4 dereferenceable(76) %336)
          to label %338 unwind label %348

338:                                              ; preds = %335
  %339 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH14SubShapeIDPair10GetBody2IDEv(ptr noundef nonnull align 4 dereferenceable(16) %337)
          to label %340 unwind label %348

340:                                              ; preds = %338
  %341 = load ptr, ptr %330, align 8, !tbaa !21
  %342 = getelementptr inbounds ptr, ptr %341, i64 4
  %343 = load ptr, ptr %342, align 8
  %344 = invoke noundef zeroext i1 %343(ptr noundef nonnull align 8 dereferenceable(8) %330, ptr noundef nonnull align 4 dereferenceable(4) %334, ptr noundef nonnull align 4 dereferenceable(4) %339)
          to label %345 unwind label %348

345:                                              ; preds = %340
  br i1 %344, label %346, label %352

346:                                              ; preds = %345
  invoke void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEE9push_backERKS8_(ptr noundef nonnull align 8 dereferenceable(24) %33, ptr noundef nonnull align 8 dereferenceable(8) %37)
          to label %347 unwind label %348

347:                                              ; preds = %346
  br label %352

348:                                              ; preds = %346, %340, %338, %335, %333, %327
  %349 = landingpad { ptr, i32 }
          cleanup
  %350 = extractvalue { ptr, i32 } %349, 0
  store ptr %350, ptr %9, align 8
  %351 = extractvalue { ptr, i32 } %349, 1
  store i32 %351, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #5
  br label %356

352:                                              ; preds = %347, %345
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #5
  br label %353

353:                                              ; preds = %352
  %354 = load ptr, ptr %35, align 8, !tbaa !5
  %355 = getelementptr inbounds ptr, ptr %354, i32 1
  store ptr %355, ptr %35, align 8, !tbaa !5
  br label %310

356:                                              ; preds = %348, %323
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  br label %357

357:                                              ; preds = %356, %319
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  br label %409

358:                                              ; preds = %314
  br label %359

359:                                              ; preds = %358, %294
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #5
  %360 = invoke noundef i64 @_ZNK3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %33)
          to label %361 unwind label %377

361:                                              ; preds = %359
  %362 = trunc i64 %360 to i32
  store i32 %362, ptr %38, align 4, !tbaa !23
  %363 = load ptr, ptr %5, align 8, !tbaa !5
  %364 = getelementptr inbounds i8, ptr %363, i64 8
  invoke void @_ZN3JPH9StreamOut5WriteIjTnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS3_(ptr noundef nonnull align 8 dereferenceable(8) %364, ptr noundef nonnull align 4 dereferenceable(4) %38)
          to label %365 unwind label %377

365:                                              ; preds = %361
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #5
  store ptr %33, ptr %39, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #5
  %366 = load ptr, ptr %39, align 8, !tbaa !5
  %367 = invoke noundef ptr @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %366)
          to label %368 unwind label %381

368:                                              ; preds = %365
  store ptr %367, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #5
  %369 = load ptr, ptr %39, align 8, !tbaa !5
  %370 = invoke noundef ptr @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %369)
          to label %371 unwind label %385

371:                                              ; preds = %368
  store ptr %370, ptr %41, align 8, !tbaa !5
  br label %372

372:                                              ; preds = %398, %371
  %373 = load ptr, ptr %40, align 8, !tbaa !5
  %374 = load ptr, ptr %41, align 8, !tbaa !5
  %375 = icmp ne ptr %373, %374
  br i1 %375, label %389, label %376

376:                                              ; preds = %372
  store i32 17, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #5
  br label %407

377:                                              ; preds = %361, %359
  %378 = landingpad { ptr, i32 }
          cleanup
  %379 = extractvalue { ptr, i32 } %378, 0
  store ptr %379, ptr %9, align 8
  %380 = extractvalue { ptr, i32 } %378, 1
  store i32 %380, ptr %10, align 4
  br label %408

381:                                              ; preds = %365
  %382 = landingpad { ptr, i32 }
          cleanup
  %383 = extractvalue { ptr, i32 } %382, 0
  store ptr %383, ptr %9, align 8
  %384 = extractvalue { ptr, i32 } %382, 1
  store i32 %384, ptr %10, align 4
  br label %406

385:                                              ; preds = %368
  %386 = landingpad { ptr, i32 }
          cleanup
  %387 = extractvalue { ptr, i32 } %386, 0
  store ptr %387, ptr %9, align 8
  %388 = extractvalue { ptr, i32 } %386, 1
  store i32 %388, ptr %10, align 4
  br label %405

389:                                              ; preds = %372
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #5
  %390 = load ptr, ptr %40, align 8, !tbaa !5
  %391 = load ptr, ptr %390, align 8, !tbaa !5
  store ptr %391, ptr %42, align 8, !tbaa !5
  %392 = load ptr, ptr %5, align 8, !tbaa !5
  %393 = getelementptr inbounds i8, ptr %392, i64 8
  %394 = load ptr, ptr %42, align 8, !tbaa !5
  %395 = invoke noundef nonnull align 4 dereferenceable(16) ptr @_ZNK3JPH15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValue6GetKeyEv(ptr noundef nonnull align 4 dereferenceable(76) %394)
          to label %396 unwind label %401

396:                                              ; preds = %389
  invoke void @_ZN3JPH9StreamOut5WriteINS_14SubShapeIDPairETnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS4_(ptr noundef nonnull align 8 dereferenceable(8) %393, ptr noundef nonnull align 4 dereferenceable(16) %395)
          to label %397 unwind label %401

397:                                              ; preds = %396
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #5
  br label %398

398:                                              ; preds = %397
  %399 = load ptr, ptr %40, align 8, !tbaa !5
  %400 = getelementptr inbounds ptr, ptr %399, i32 1
  store ptr %400, ptr %40, align 8, !tbaa !5
  br label %372

401:                                              ; preds = %396, %389
  %402 = landingpad { ptr, i32 }
          cleanup
  %403 = extractvalue { ptr, i32 } %402, 0
  store ptr %403, ptr %9, align 8
  %404 = extractvalue { ptr, i32 } %402, 1
  store i32 %404, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #5
  br label %405

405:                                              ; preds = %401, %385
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #5
  br label %406

406:                                              ; preds = %405, %381
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #5
  br label %408

407:                                              ; preds = %376
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  call void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %33) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %33) #5
  call void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %32) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #5
  call void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %8) #5
  ret void

408:                                              ; preds = %406, %377
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  br label %409

409:                                              ; preds = %408, %357, %315
  call void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %33) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %33) #5
  br label %410

410:                                              ; preds = %409, %296
  call void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %32) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %32) #5
  br label %411

411:                                              ; preds = %410, %289, %137
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  br label %412

412:                                              ; preds = %411, %117, %77
  call void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #5
  br label %413

413:                                              ; preds = %412, %58
  call void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %8) #5
  br label %414

414:                                              ; preds = %413
  %415 = load ptr, ptr %9, align 8
  %416 = load i32, ptr %10, align 4
  %417 = insertvalue { ptr, i32 } poison, ptr %415, 0
  %418 = insertvalue { ptr, i32 } %417, i32 %416, 1
  resume { ptr, i32 } %418
}

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEEaSEOSB_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) #4 align 2

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(28) ptr @_ZNK3JPH15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValue8GetValueEv(ptr noundef nonnull align 8 dereferenceable(40)) #4 align 2

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEEaSEOSB_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) #4 align 2

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

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

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

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

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 = { 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 #4 = { 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 = { 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, !17, i64 80}
!10 = !{!"_ZTSN3JPH24ContactConstraintManager13ManifoldCacheE", !11, i64 0, !15, i64 16, !16, i64 48, !17, i64 80}
!11 = !{!"_ZTSN3JPH13LFHMAllocatorE", !6, i64 0, !12, i64 8, !13, i64 12}
!12 = !{!"int", !7, i64 0}
!13 = !{!"_ZTSSt6atomicIjE", !14, i64 0}
!14 = !{!"_ZTSSt13__atomic_baseIjE", !12, i64 0}
!15 = !{!"_ZTSN3JPH15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEEE", !6, i64 0, !13, i64 8, !6, i64 16, !12, i64 24, !12, i64 28}
!16 = !{!"_ZTSN3JPH15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEEE", !6, i64 0, !13, i64 8, !6, i64 16, !12, i64 24, !12, i64 28}
!17 = !{!"bool", !7, i64 0}
!18 = !{i8 0, i8 2}
!19 = !{}
!20 = !{i64 2159362530}
!21 = !{!22, !22, i64 0}
!22 = !{!"vtable pointer", !8, i64 0}
!23 = !{!12, !12, i64 0}
!24 = !{i64 2159362966}
!25 = !{!26, !31, i64 18}
!26 = !{!"_ZTSN3JPH24ContactConstraintManager14CachedManifoldE", !12, i64 0, !27, i64 4, !29, i64 16, !31, i64 18, !7, i64 20}
!27 = !{!"_ZTSN3JPH6Float3E", !28, i64 0, !28, i64 4, !28, i64 8}
!28 = !{!"float", !7, i64 0}
!29 = !{!"_ZTSSt6atomicItE", !30, i64 0}
!30 = !{!"_ZTSSt13__atomic_baseItE", !31, i64 0}
!31 = !{!"short", !7, i64 0}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}


; 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::Array" = type { i64, i64, ptr }
%"class.JPH::Array.7" = type { i64, i64, ptr }
%"class.JPH::ContactConstraintManager::CachedContactPoint" = type { %"class.JPH::Float3", %"class.JPH::Float3", float, %"class.JPH::Vector" }
%"class.JPH::Float3" = type { float, float, float }
%"class.JPH::Vector" = type { [2 x float] }

@.str.1 = external hidden unnamed_addr constant [106 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [62 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_jNS_15AssertLastParamE(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3JPH24ContactConstraintManager18CachedContactPoint9SaveStateERNS_13StateRecorderE(ptr noundef nonnull align 4 dereferenceable(36), ptr noundef nonnull align 8 dereferenceable(18)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3JPH24ContactConstraintManager14CachedManifold9SaveStateERNS_13StateRecorderE(ptr noundef nonnull align 4 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(18)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3JPH24ContactConstraintManager14CachedBodyPair9SaveStateERNS_13StateRecorderE(ptr noundef nonnull align 4 dereferenceable(28), ptr noundef nonnull align 8 dereferenceable(18)) local_unnamed_addr #2 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3JPH24ContactConstraintManager13ManifoldCache21GetAllManifoldsSortedERKNS0_14CachedBodyPairERNS_5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS0_14CachedManifoldEE8KeyValueENS_12STLAllocatorISC_EEEE(ptr noundef nonnull align 8 dereferenceable(81), ptr noundef nonnull align 4 dereferenceable(28), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(56) ptr @_ZNK3JPH15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValue8GetValueEv(ptr noundef nonnull align 4 dereferenceable(76)) local_unnamed_addr #4 align 2

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i16 @_ZNKSt13__atomic_baseItEcvtEv(ptr noundef nonnull align 2 dereferenceable(2)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(16) ptr @_ZNK3JPH15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValue6GetKeyEv(ptr noundef nonnull align 4 dereferenceable(76)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK3JPH24ContactConstraintManager13ManifoldCache9SaveStateERNS_13StateRecorderEPKNS_19StateRecorderFilterE(ptr noundef nonnull align 8 dereferenceable(81) %0, ptr noundef nonnull align 8 dereferenceable(18) %1, ptr noundef %2) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"class.JPH::Array", align 8
  %5 = alloca %"class.JPH::Array", align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca %"class.JPH::Array.7", align 8
  %9 = alloca i32, align 4
  %10 = alloca %"class.JPH::Array.7", align 8
  %11 = alloca %"class.JPH::Array.7", align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = getelementptr inbounds i8, ptr %0, i64 80
  %15 = load i8, ptr %14, align 8, !tbaa !5, !range !17, !noundef !18
  %16 = trunc nuw i8 %15 to i1
  br i1 %16, label %20, label %17

17:                                               ; preds = %3
  %18 = tail call noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.1, i32 noundef 418)
  br i1 %18, label %19, label %20

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

20:                                               ; preds = %3, %17, %19
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #5
  call void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #5
  invoke void @_ZNK3JPH24ContactConstraintManager13ManifoldCache21GetAllBodyPairsSortedERNS_5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS0_14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS9_EEEE(ptr noundef nonnull align 8 dereferenceable(81) %0, ptr noundef nonnull align 8 dereferenceable(24) %4)
          to label %21 unwind label %25

21:                                               ; preds = %20
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #5
  call void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #5
  %22 = icmp eq ptr %2, null
  br i1 %22, label %23, label %27

23:                                               ; preds = %21
  %24 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEEaSEOSB_(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(24) %4) #5
  br label %.loopexit98

25:                                               ; preds = %20
  %26 = landingpad { ptr, i32 }
          cleanup
  br label %155

27:                                               ; preds = %21
  %28 = call noundef i64 @_ZNK3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %4)
  invoke void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %5, i64 noundef %28)
          to label %29 unwind label %32

29:                                               ; preds = %27
  %30 = call noundef ptr @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %4)
  %31 = call noundef ptr @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %4)
  %.not99 = icmp eq ptr %30, %31
  br i1 %.not99, label %.loopexit98, label %.lr.ph

32:                                               ; preds = %27
  %33 = landingpad { ptr, i32 }
          cleanup
  br label %154

.lr.ph:                                           ; preds = %29, %47
  %.074100 = phi ptr [ %48, %47 ], [ %30, %29 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #5
  %34 = load ptr, ptr %.074100, align 8, !tbaa !20
  store ptr %34, ptr %6, align 8, !tbaa !20
  %35 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValue6GetKeyEv(ptr noundef nonnull align 8 dereferenceable(40) %34)
  %36 = load ptr, ptr %6, align 8, !tbaa !20
  %37 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValue6GetKeyEv(ptr noundef nonnull align 8 dereferenceable(40) %36)
  %38 = getelementptr inbounds i8, ptr %37, i64 4
  %39 = load ptr, ptr %2, align 8, !tbaa !21
  %40 = getelementptr inbounds i8, ptr %39, i64 32
  %41 = load ptr, ptr %40, align 8
  %42 = invoke noundef zeroext i1 %41(ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 4 dereferenceable(4) %35, ptr noundef nonnull align 4 dereferenceable(4) %38)
          to label %43 unwind label %45

43:                                               ; preds = %.lr.ph
  br i1 %42, label %44, label %47

44:                                               ; preds = %43
  invoke void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEE9push_backERKS8_(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %6)
          to label %47 unwind label %45

45:                                               ; preds = %44, %.lr.ph
  %46 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #5
  br label %154

47:                                               ; preds = %44, %43
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #5
  %48 = getelementptr inbounds i8, ptr %.074100, i64 8
  %.not = icmp eq ptr %48, %31
  br i1 %.not, label %.loopexit98, label %.lr.ph

.loopexit98:                                      ; preds = %47, %29, %23
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #5
  %49 = call noundef i64 @_ZNK3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %5)
  %50 = trunc i64 %49 to i32
  store i32 %50, ptr %7, align 4, !tbaa !23
  %51 = getelementptr inbounds i8, ptr %1, i64 8
  invoke void @_ZN3JPH9StreamOut5WriteIjTnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS3_(ptr noundef nonnull align 8 dereferenceable(8) %51, ptr noundef nonnull align 4 dereferenceable(4) %7)
          to label %52 unwind label %55

52:                                               ; preds = %.loopexit98
  %53 = call noundef ptr @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %5)
  %54 = call noundef ptr @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %5)
  %.not81108 = icmp eq ptr %53, %54
  br i1 %.not81108, label %._crit_edge112, label %.lr.ph111

._crit_edge112:                                   ; preds = %._crit_edge107, %52
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %10) #5
  call void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #5
  invoke void @_ZNK3JPH24ContactConstraintManager13ManifoldCache24GetAllCCDManifoldsSortedERNS_5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS0_14CachedManifoldEE8KeyValueENS_12STLAllocatorIS9_EEEE(ptr noundef nonnull align 8 dereferenceable(81) %0, ptr noundef nonnull align 8 dereferenceable(24) %10)
          to label %109 unwind label %112

55:                                               ; preds = %.loopexit98
  %56 = landingpad { ptr, i32 }
          cleanup
  br label %153

.lr.ph111:                                        ; preds = %52, %._crit_edge107
  %.075109 = phi ptr [ %68, %._crit_edge107 ], [ %53, %52 ]
  %57 = load ptr, ptr %.075109, align 8, !tbaa !20
  %58 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValue6GetKeyEv(ptr noundef nonnull align 8 dereferenceable(40) %57)
  invoke void @_ZN3JPH9StreamOut5WriteINS_8BodyPairETnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS4_(ptr noundef nonnull align 8 dereferenceable(8) %51, ptr noundef nonnull align 8 dereferenceable(8) %58)
          to label %59 unwind label %69

59:                                               ; preds = %.lr.ph111
  %60 = call noundef nonnull align 4 dereferenceable(28) ptr @_ZNK3JPH15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValue8GetValueEv(ptr noundef nonnull align 8 dereferenceable(40) %57)
  invoke void @_ZNK3JPH24ContactConstraintManager14CachedBodyPair9SaveStateERNS_13StateRecorderE(ptr noundef nonnull align 4 dereferenceable(28) %60, ptr noundef nonnull align 8 dereferenceable(18) %1)
          to label %61 unwind label %71

61:                                               ; preds = %59
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #5
  call void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #5
  invoke void @_ZNK3JPH24ContactConstraintManager13ManifoldCache21GetAllManifoldsSortedERKNS0_14CachedBodyPairERNS_5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS0_14CachedManifoldEE8KeyValueENS_12STLAllocatorISC_EEEE(ptr noundef nonnull align 8 dereferenceable(81) %0, ptr noundef nonnull align 4 dereferenceable(28) %60, ptr noundef nonnull align 8 dereferenceable(24) %8)
          to label %62 unwind label %73

62:                                               ; preds = %61
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #5
  %63 = call noundef i64 @_ZNK3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %8)
  %64 = trunc i64 %63 to i32
  store i32 %64, ptr %9, align 4, !tbaa !23
  invoke void @_ZN3JPH9StreamOut5WriteIjTnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS3_(ptr noundef nonnull align 8 dereferenceable(8) %51, ptr noundef nonnull align 4 dereferenceable(4) %9)
          to label %65 unwind label %75

65:                                               ; preds = %62
  %66 = call noundef ptr @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %8)
  %67 = call noundef ptr @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %8)
  %.not87103 = icmp eq ptr %66, %67
  br i1 %.not87103, label %._crit_edge107, label %.lr.ph106

._crit_edge107:                                   ; preds = %._crit_edge, %65
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #5
  call void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #5
  %68 = getelementptr inbounds i8, ptr %.075109, i64 8
  %.not81 = icmp eq ptr %68, %54
  br i1 %.not81, label %._crit_edge112, label %.lr.ph111

69:                                               ; preds = %.lr.ph111
  %70 = landingpad { ptr, i32 }
          cleanup
  br label %153

71:                                               ; preds = %59
  %72 = landingpad { ptr, i32 }
          cleanup
  br label %153

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

75:                                               ; preds = %62
  %76 = landingpad { ptr, i32 }
          cleanup
  br label %107

.lr.ph106:                                        ; preds = %65, %._crit_edge
  %.078104 = phi ptr [ %98, %._crit_edge ], [ %66, %65 ]
  %77 = load ptr, ptr %.078104, align 8, !tbaa !20
  %78 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNK3JPH15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValue6GetKeyEv(ptr noundef nonnull align 4 dereferenceable(76) %77)
  invoke void @_ZN3JPH9StreamOut5WriteINS_14SubShapeIDPairETnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS4_(ptr noundef nonnull align 8 dereferenceable(8) %51, ptr noundef nonnull align 4 dereferenceable(16) %78)
          to label %79 unwind label %89

79:                                               ; preds = %.lr.ph106
  %80 = call noundef nonnull align 4 dereferenceable(56) ptr @_ZNK3JPH15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValue8GetValueEv(ptr noundef nonnull align 4 dereferenceable(76) %77)
  %81 = getelementptr inbounds i8, ptr %80, i64 16
  %82 = call noundef zeroext i16 @_ZNKSt13__atomic_baseItEcvtEv(ptr noundef nonnull align 2 dereferenceable(2) %81) #5
  %83 = and i16 %82, 2
  %84 = icmp eq i16 %83, 0
  br i1 %84, label %93, label %85

85:                                               ; preds = %79
  %86 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.1, i32 noundef 462)
          to label %87 unwind label %91

87:                                               ; preds = %85
  br i1 %86, label %88, label %93

88:                                               ; preds = %87
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #5, !srcloc !24
  br label %93

89:                                               ; preds = %.lr.ph106
  %90 = landingpad { ptr, i32 }
          cleanup
  br label %107

91:                                               ; preds = %95, %93, %85
  %92 = landingpad { ptr, i32 }
          cleanup
  br label %107

93:                                               ; preds = %88, %87, %79
  %94 = getelementptr inbounds i8, ptr %80, i64 18
  invoke void @_ZN3JPH9StreamOut5WriteItTnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS3_(ptr noundef nonnull align 8 dereferenceable(8) %51, ptr noundef nonnull align 2 dereferenceable(2) %94)
          to label %95 unwind label %91

95:                                               ; preds = %93
  invoke void @_ZNK3JPH24ContactConstraintManager14CachedManifold9SaveStateERNS_13StateRecorderE(ptr noundef nonnull align 4 dereferenceable(56) %80, ptr noundef nonnull align 8 dereferenceable(18) %1)
          to label %.preheader unwind label %91

.preheader:                                       ; preds = %95
  %96 = load i16, ptr %94, align 2, !tbaa !25
  %.not122 = icmp eq i16 %96, 0
  br i1 %.not122, label %._crit_edge, label %.lr.ph102

.lr.ph102:                                        ; preds = %.preheader
  %97 = getelementptr inbounds i8, ptr %80, i64 20
  br label %99

._crit_edge:                                      ; preds = %101, %.preheader
  %98 = getelementptr inbounds i8, ptr %.078104, i64 8
  %.not87 = icmp eq ptr %98, %67
  br i1 %.not87, label %._crit_edge107, label %.lr.ph106

99:                                               ; preds = %.lr.ph102, %101
  %indvars.iv = phi i64 [ 0, %.lr.ph102 ], [ %indvars.iv.next, %101 ]
  %100 = getelementptr inbounds [1 x %"class.JPH::ContactConstraintManager::CachedContactPoint"], ptr %97, i64 0, i64 %indvars.iv
  invoke void @_ZNK3JPH24ContactConstraintManager18CachedContactPoint9SaveStateERNS_13StateRecorderE(ptr noundef nonnull align 4 dereferenceable(36) %100, ptr noundef nonnull align 8 dereferenceable(18) %1)
          to label %101 unwind label %105

101:                                              ; preds = %99
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %102 = load i16, ptr %94, align 2, !tbaa !25
  %103 = zext i16 %102 to i64
  %104 = icmp ult i64 %indvars.iv.next, %103
  br i1 %104, label %99, label %._crit_edge, !llvm.loop !32

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

107:                                              ; preds = %89, %105, %91, %75
  %.pn88.pn.pn = phi { ptr, i32 } [ %76, %75 ], [ %90, %89 ], [ %106, %105 ], [ %92, %91 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #5
  br label %108

108:                                              ; preds = %107, %73
  %.pn88.pn.pn.pn = phi { ptr, i32 } [ %.pn88.pn.pn, %107 ], [ %74, %73 ]
  call void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #5
  br label %153

109:                                              ; preds = %._crit_edge112
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #5
  call void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #5
  br i1 %22, label %110, label %114

110:                                              ; preds = %109
  %111 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEEaSEOSB_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(24) %10) #5
  br label %.loopexit

112:                                              ; preds = %._crit_edge112
  %113 = landingpad { ptr, i32 }
          cleanup
  br label %152

114:                                              ; preds = %109
  %115 = call noundef i64 @_ZNK3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %10)
  invoke void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %115)
          to label %116 unwind label %119

116:                                              ; preds = %114
  %117 = call noundef ptr @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %10)
  %118 = call noundef ptr @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %10)
  %.not82113 = icmp eq ptr %117, %118
  br i1 %.not82113, label %.loopexit, label %.lr.ph116

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

.lr.ph116:                                        ; preds = %116, %135
  %.076114 = phi ptr [ %136, %135 ], [ %117, %116 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #5
  %121 = load ptr, ptr %.076114, align 8, !tbaa !20
  store ptr %121, ptr %12, align 8, !tbaa !20
  %122 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNK3JPH15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValue6GetKeyEv(ptr noundef nonnull align 4 dereferenceable(76) %121)
  %123 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH14SubShapeIDPair10GetBody1IDEv(ptr noundef nonnull align 4 dereferenceable(16) %122)
  %124 = load ptr, ptr %12, align 8, !tbaa !20
  %125 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNK3JPH15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValue6GetKeyEv(ptr noundef nonnull align 4 dereferenceable(76) %124)
  %126 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH14SubShapeIDPair10GetBody2IDEv(ptr noundef nonnull align 4 dereferenceable(16) %125)
  %127 = load ptr, ptr %2, align 8, !tbaa !21
  %128 = getelementptr inbounds i8, ptr %127, i64 32
  %129 = load ptr, ptr %128, align 8
  %130 = invoke noundef zeroext i1 %129(ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 4 dereferenceable(4) %123, ptr noundef nonnull align 4 dereferenceable(4) %126)
          to label %131 unwind label %133

131:                                              ; preds = %.lr.ph116
  br i1 %130, label %132, label %135

132:                                              ; preds = %131
  invoke void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEE9push_backERKS8_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(8) %12)
          to label %135 unwind label %133

133:                                              ; preds = %132, %.lr.ph116
  %134 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #5
  br label %151

135:                                              ; preds = %132, %131
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #5
  %136 = getelementptr inbounds i8, ptr %.076114, i64 8
  %.not82 = icmp eq ptr %136, %118
  br i1 %.not82, label %.loopexit, label %.lr.ph116

.loopexit:                                        ; preds = %135, %116, %110
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #5
  %137 = call noundef i64 @_ZNK3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %11)
  %138 = trunc i64 %137 to i32
  store i32 %138, ptr %13, align 4, !tbaa !23
  invoke void @_ZN3JPH9StreamOut5WriteIjTnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS3_(ptr noundef nonnull align 8 dereferenceable(8) %51, ptr noundef nonnull align 4 dereferenceable(4) %13)
          to label %139 unwind label %142

139:                                              ; preds = %.loopexit
  %140 = call noundef ptr @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %11)
  %141 = call noundef ptr @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %11)
  %.not83117 = icmp eq ptr %140, %141
  br i1 %.not83117, label %._crit_edge121, label %.lr.ph120

._crit_edge121:                                   ; preds = %146, %139
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #5
  call void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #5
  call void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #5
  call void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #5
  call void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #5
  ret void

142:                                              ; preds = %.loopexit
  %143 = landingpad { ptr, i32 }
          cleanup
  br label %150

.lr.ph120:                                        ; preds = %139, %146
  %.073118 = phi ptr [ %147, %146 ], [ %140, %139 ]
  %144 = load ptr, ptr %.073118, align 8, !tbaa !20
  %145 = call noundef nonnull align 4 dereferenceable(16) ptr @_ZNK3JPH15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValue6GetKeyEv(ptr noundef nonnull align 4 dereferenceable(76) %144)
  invoke void @_ZN3JPH9StreamOut5WriteINS_14SubShapeIDPairETnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS4_(ptr noundef nonnull align 8 dereferenceable(8) %51, ptr noundef nonnull align 4 dereferenceable(16) %145)
          to label %146 unwind label %148

146:                                              ; preds = %.lr.ph120
  %147 = getelementptr inbounds i8, ptr %.073118, i64 8
  %.not83 = icmp eq ptr %147, %141
  br i1 %.not83, label %._crit_edge121, label %.lr.ph120

148:                                              ; preds = %.lr.ph120
  %149 = landingpad { ptr, i32 }
          cleanup
  br label %150

150:                                              ; preds = %148, %142
  %.pn = phi { ptr, i32 } [ %149, %148 ], [ %143, %142 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #5
  br label %151

151:                                              ; preds = %150, %133, %119
  %.pn.pn = phi { ptr, i32 } [ %.pn, %150 ], [ %134, %133 ], [ %120, %119 ]
  call void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #5
  br label %152

152:                                              ; preds = %151, %112
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %151 ], [ %113, %112 ]
  call void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #5
  br label %153

153:                                              ; preds = %69, %108, %71, %152, %55
  %.pn88.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn, %152 ], [ %56, %55 ], [ %70, %69 ], [ %.pn88.pn.pn.pn, %108 ], [ %72, %71 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #5
  br label %154

154:                                              ; preds = %153, %45, %32
  %.pn88.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn88.pn.pn.pn.pn.pn.pn, %153 ], [ %46, %45 ], [ %33, %32 ]
  call void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #5
  br label %155

155:                                              ; preds = %154, %25
  %.pn88.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn88.pn.pn.pn.pn.pn.pn.pn, %154 ], [ %26, %25 ]
  call void @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #5
  resume { ptr, i32 } %.pn88.pn.pn.pn.pn.pn.pn.pn.pn
}

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValueENS_12STLAllocatorIS8_EEEaSEOSB_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValue6GetKeyEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #4 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(28) ptr @_ZNK3JPH15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEE8KeyValue8GetValueEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #4 align 2

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayIPKNS_15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEE8KeyValueENS_12STLAllocatorIS8_EEEaSEOSB_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4 align 2

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

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

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

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

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 = { 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 #4 = { 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 = { 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, !16, i64 80}
!6 = !{!"_ZTSN3JPH24ContactConstraintManager13ManifoldCacheE", !7, i64 0, !14, i64 16, !15, i64 48, !16, i64 80}
!7 = !{!"_ZTSN3JPH13LFHMAllocatorE", !8, i64 0, !11, i64 8, !12, i64 12}
!8 = !{!"any pointer", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C++ TBAA"}
!11 = !{!"int", !9, i64 0}
!12 = !{!"_ZTSSt6atomicIjE", !13, i64 0}
!13 = !{!"_ZTSSt13__atomic_baseIjE", !11, i64 0}
!14 = !{!"_ZTSN3JPH15LockFreeHashMapINS_14SubShapeIDPairENS_24ContactConstraintManager14CachedManifoldEEE", !8, i64 0, !12, i64 8, !8, i64 16, !11, i64 24, !11, i64 28}
!15 = !{!"_ZTSN3JPH15LockFreeHashMapINS_8BodyPairENS_24ContactConstraintManager14CachedBodyPairEEE", !8, i64 0, !12, i64 8, !8, i64 16, !11, i64 24, !11, i64 28}
!16 = !{!"bool", !9, i64 0}
!17 = !{i8 0, i8 2}
!18 = !{}
!19 = !{i64 2159362530}
!20 = !{!8, !8, i64 0}
!21 = !{!22, !22, i64 0}
!22 = !{!"vtable pointer", !10, i64 0}
!23 = !{!11, !11, i64 0}
!24 = !{i64 2159362966}
!25 = !{!26, !31, i64 18}
!26 = !{!"_ZTSN3JPH24ContactConstraintManager14CachedManifoldE", !11, i64 0, !27, i64 4, !29, i64 16, !31, i64 18, !9, i64 20}
!27 = !{!"_ZTSN3JPH6Float3E", !28, i64 0, !28, i64 4, !28, i64 8}
!28 = !{!"float", !9, i64 0}
!29 = !{!"_ZTSSt6atomicItE", !30, i64 0}
!30 = !{!"_ZTSSt13__atomic_baseItE", !31, i64 0}
!31 = !{!"short", !9, i64 0}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}


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