; LLVM IR from jrouwe/JoltPhysics :: TestFramework/Renderer/VK/RendererVK.ll (ZN10RendererVKD2Ev)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<BufferVK>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<BufferVK>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator" = type { %"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<BufferVK>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<BufferVK>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::IteratorBase.base", [4 x i8] }
%"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<BufferVK>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<BufferVK>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::IteratorBase.base" = type <{ ptr, i32 }>
%"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<RendererVK::Memory>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<RendererVK::Memory>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator" = type { %"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<RendererVK::Memory>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<RendererVK::Memory>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::IteratorBase.base", [4 x i8] }
%"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<RendererVK::Memory>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<RendererVK::Memory>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::IteratorBase.base" = type <{ ptr, i32 }>
%class.RendererVK = type { %class.Renderer, ptr, ptr, ptr, %struct.VkPhysicalDeviceMemoryProperties, ptr, i32, i32, ptr, ptr, ptr, ptr, i8, %"class.JPH::Array", i32, %struct.VkExtent2D, %"class.JPH::Array.1", ptr, ptr, ptr, ptr, ptr, ptr, [2 x ptr], [2 x ptr], ptr, ptr, ptr, ptr, ptr, ptr, %"class.JPH::Array.4", i32, ptr, [2 x ptr], [2 x ptr], [2 x ptr], [2 x ptr], %"class.JPH::Ref", [2 x %"class.std::unique_ptr"], [2 x %"class.std::unique_ptr"], [2 x %"class.std::unique_ptr"], [2 x %"class.JPH::UnorderedMap"], %"class.JPH::UnorderedMap", %"class.JPH::UnorderedMap.9", i32, i32, i64, i64 }
%class.Renderer = type { ptr, ptr, float, i8, [11 x i8], %struct.CameraState, %"class.JPH::Vec3", %class.Frustum, %class.Frustum, i32, %"struct.Renderer::VertexShaderConstantBuffer", %"struct.Renderer::VertexShaderConstantBuffer", %"struct.Renderer::PixelShaderConstantBuffer" }
%struct.CameraState = type <{ %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", float, [12 x i8] }>
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%class.Frustum = type { [5 x %"class.JPH::Plane"] }
%"class.JPH::Plane" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.0 }
%union.anon.0 = type { <4 x float> }
%"struct.Renderer::VertexShaderConstantBuffer" = type { %"class.JPH::Mat44", %"class.JPH::Mat44", %"class.JPH::Mat44", %"class.JPH::Mat44" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"struct.Renderer::PixelShaderConstantBuffer" = type { %"class.JPH::Vec4", %"class.JPH::Vec4" }
%struct.VkPhysicalDeviceMemoryProperties = type { i32, [32 x %struct.VkMemoryType], i32, [16 x %struct.VkMemoryHeap] }
%struct.VkMemoryType = type { i32, i32 }
%struct.VkMemoryHeap = type { i64, i32 }
%"class.JPH::Array" = type { i64, i64, ptr }
%struct.VkExtent2D = type { i32, i32 }
%"class.JPH::Array.1" = type { i64, i64, ptr }
%"class.JPH::Array.4" = type { i64, i64, ptr }
%"class.JPH::Ref" = type { ptr }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.8" }
%"struct.std::_Head_base.8" = type { ptr }
%"class.JPH::UnorderedMap" = type { %"class.JPH::HashTable.base", [4 x i8] }
%"class.JPH::HashTable.base" = type <{ ptr, ptr, i32, i32, i32 }>
%"class.JPH::UnorderedMap.9" = type { %"class.JPH::HashTable.base.11", [4 x i8] }
%"class.JPH::HashTable.base.11" = type <{ ptr, ptr, i32, i32, i32 }>
%"struct.std::pair" = type { %"struct.RendererVK::Key", %"class.JPH::Array.13" }
%"struct.RendererVK::Key" = type { i64, i32, i32 }
%"class.JPH::Array.13" = type { i64, i64, ptr }
%class.BufferVK = type { ptr, ptr, i64, i64, i32, i32, i64 }
%"struct.std::pair.16" = type { %"struct.RendererVK::Key", %"class.JPH::Array.18" }
%"class.JPH::Array.18" = type { i64, i64, ptr }
%"struct.RendererVK::Memory" = type { ptr, i64 }

@_ZTV10RendererVK = external dso_local unnamed_addr constant { [18 x ptr] }, align 8
@_ZN3JPH5TraceE = external global ptr, align 8
@.str = external hidden unnamed_addr constant [41 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [32 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: mustprogress nounwind uwtable
define dso_local void @_ZN10RendererVKD2Ev(ptr noundef nonnull align 16 dereferenceable(1936) %0) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i32, align 4
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca %"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<BufferVK>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<BufferVK>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator", align 8
  %22 = alloca %"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<BufferVK>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<BufferVK>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator", align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca %"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<BufferVK>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<BufferVK>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator", align 8
  %30 = alloca %"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<BufferVK>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<BufferVK>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator", align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca %"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<RendererVK::Memory>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<RendererVK::Memory>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator", align 8
  %38 = alloca %"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<RendererVK::Memory>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<RendererVK::Memory>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator", align 8
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca ptr, align 8
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca ptr, align 8
  %48 = alloca ptr, align 8
  %49 = alloca ptr, align 8
  %50 = alloca ptr, align 8
  %51 = alloca ptr, align 8
  %52 = alloca ptr, align 8
  %53 = alloca ptr, align 8
  %54 = alloca ptr, align 8
  %55 = alloca ptr, align 8
  %56 = alloca ptr, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  %57 = load ptr, ptr %2, align 8
  store ptr getelementptr inbounds inrange(-16, 128) ({ [18 x ptr] }, ptr @_ZTV10RendererVK, i32 0, i32 0, i32 2), ptr %57, align 16, !tbaa !9
  %58 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 5
  %59 = load ptr, ptr %58, align 16, !tbaa !11
  %60 = invoke i32 @vkDeviceWaitIdle(ptr noundef %59)
          to label %61 unwind label %448

61:                                               ; preds = %1
  %62 = load ptr, ptr @_ZN3JPH5TraceE, align 8, !tbaa !5
  %63 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 46
  %64 = load i32, ptr %63, align 4, !tbaa !36
  %65 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 48
  %66 = load i64, ptr %65, align 8, !tbaa !37
  %67 = lshr i64 %66, 20
  %68 = trunc i64 %67 to i32
  invoke void (ptr, ...) %62(ptr noundef @.str, i32 noundef %64, i32 noundef %68)
          to label %69 unwind label %448

69:                                               ; preds = %61
  %70 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 38
  %71 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefI9TextureVKEaSEPS1_(ptr noundef nonnull align 8 dereferenceable(8) %70, ptr noundef null)
          to label %72 unwind label %448

72:                                               ; preds = %69
  %73 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 5
  %74 = load ptr, ptr %73, align 16, !tbaa !11
  %75 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 30
  %76 = load ptr, ptr %75, align 16, !tbaa !38
  invoke void @vkDestroyFramebuffer(ptr noundef %74, ptr noundef %76, ptr noundef null)
          to label %77 unwind label %448

77:                                               ; preds = %72
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #8
  %78 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 39
  store ptr %78, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #8
  %79 = load ptr, ptr %3, align 8, !tbaa !5
  %80 = getelementptr inbounds [2 x %"class.std::unique_ptr"], ptr %79, i64 0, i64 0
  store ptr %80, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #8
  %81 = load ptr, ptr %3, align 8, !tbaa !5
  %82 = getelementptr inbounds [2 x %"class.std::unique_ptr"], ptr %81, i64 0, i64 0
  %83 = getelementptr inbounds %"class.std::unique_ptr", ptr %82, i64 2
  store ptr %83, ptr %5, align 8, !tbaa !5
  br label %84

84:                                               ; preds = %93, %77
  %85 = load ptr, ptr %4, align 8, !tbaa !5
  %86 = load ptr, ptr %5, align 8, !tbaa !5
  %87 = icmp ne ptr %85, %86
  br i1 %87, label %89, label %88

88:                                               ; preds = %84
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #8
  br label %96

89:                                               ; preds = %84
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #8
  %90 = load ptr, ptr %4, align 8, !tbaa !5
  store ptr %90, ptr %6, align 8, !tbaa !5
  %91 = load ptr, ptr %6, align 8, !tbaa !5
  %92 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EEaSEDn(ptr noundef nonnull align 8 dereferenceable(8) %91, ptr null) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #8
  br label %93

93:                                               ; preds = %89
  %94 = load ptr, ptr %4, align 8, !tbaa !5
  %95 = getelementptr inbounds %"class.std::unique_ptr", ptr %94, i32 1
  store ptr %95, ptr %4, align 8, !tbaa !5
  br label %84

96:                                               ; preds = %88
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #8
  %97 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 40
  store ptr %97, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #8
  %98 = load ptr, ptr %7, align 8, !tbaa !5
  %99 = getelementptr inbounds [2 x %"class.std::unique_ptr"], ptr %98, i64 0, i64 0
  store ptr %99, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #8
  %100 = load ptr, ptr %7, align 8, !tbaa !5
  %101 = getelementptr inbounds [2 x %"class.std::unique_ptr"], ptr %100, i64 0, i64 0
  %102 = getelementptr inbounds %"class.std::unique_ptr", ptr %101, i64 2
  store ptr %102, ptr %9, align 8, !tbaa !5
  br label %103

103:                                              ; preds = %112, %96
  %104 = load ptr, ptr %8, align 8, !tbaa !5
  %105 = load ptr, ptr %9, align 8, !tbaa !5
  %106 = icmp ne ptr %104, %105
  br i1 %106, label %108, label %107

107:                                              ; preds = %103
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #8
  br label %115

108:                                              ; preds = %103
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #8
  %109 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %109, ptr %10, align 8, !tbaa !5
  %110 = load ptr, ptr %10, align 8, !tbaa !5
  %111 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EEaSEDn(ptr noundef nonnull align 8 dereferenceable(8) %110, ptr null) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  br label %112

112:                                              ; preds = %108
  %113 = load ptr, ptr %8, align 8, !tbaa !5
  %114 = getelementptr inbounds %"class.std::unique_ptr", ptr %113, i32 1
  store ptr %114, ptr %8, align 8, !tbaa !5
  br label %103

115:                                              ; preds = %107
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #8
  %116 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 41
  store ptr %116, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #8
  %117 = load ptr, ptr %11, align 8, !tbaa !5
  %118 = getelementptr inbounds [2 x %"class.std::unique_ptr"], ptr %117, i64 0, i64 0
  store ptr %118, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #8
  %119 = load ptr, ptr %11, align 8, !tbaa !5
  %120 = getelementptr inbounds [2 x %"class.std::unique_ptr"], ptr %119, i64 0, i64 0
  %121 = getelementptr inbounds %"class.std::unique_ptr", ptr %120, i64 2
  store ptr %121, ptr %13, align 8, !tbaa !5
  br label %122

122:                                              ; preds = %131, %115
  %123 = load ptr, ptr %12, align 8, !tbaa !5
  %124 = load ptr, ptr %13, align 8, !tbaa !5
  %125 = icmp ne ptr %123, %124
  br i1 %125, label %127, label %126

126:                                              ; preds = %122
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #8
  br label %134

127:                                              ; preds = %122
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  %128 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %128, ptr %14, align 8, !tbaa !5
  %129 = load ptr, ptr %14, align 8, !tbaa !5
  %130 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EEaSEDn(ptr noundef nonnull align 8 dereferenceable(8) %129, ptr null) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  br label %131

131:                                              ; preds = %127
  %132 = load ptr, ptr %12, align 8, !tbaa !5
  %133 = getelementptr inbounds %"class.std::unique_ptr", ptr %132, i32 1
  store ptr %133, ptr %12, align 8, !tbaa !5
  br label %122

134:                                              ; preds = %126
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  %135 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 42
  store ptr %135, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  %136 = load ptr, ptr %15, align 8, !tbaa !5
  %137 = getelementptr inbounds [2 x %"class.JPH::UnorderedMap"], ptr %136, i64 0, i64 0
  store ptr %137, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #8
  %138 = load ptr, ptr %15, align 8, !tbaa !5
  %139 = getelementptr inbounds [2 x %"class.JPH::UnorderedMap"], ptr %138, i64 0, i64 0
  %140 = getelementptr inbounds %"class.JPH::UnorderedMap", ptr %139, i64 2
  store ptr %140, ptr %17, align 8, !tbaa !5
  br label %141

141:                                              ; preds = %185, %134
  %142 = load ptr, ptr %16, align 8, !tbaa !5
  %143 = load ptr, ptr %17, align 8, !tbaa !5
  %144 = icmp ne ptr %142, %143
  br i1 %144, label %146, label %145

145:                                              ; preds = %141
  store i32 8, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  br label %188

146:                                              ; preds = %141
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  %147 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %147, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  %148 = load ptr, ptr %19, align 8, !tbaa !5
  store ptr %148, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %21) #8
  %149 = load ptr, ptr %20, align 8, !tbaa !5
  invoke void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE5beginEv(ptr dead_on_unwind writable sret(%"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<BufferVK>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<BufferVK>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator") align 8 %21, ptr noundef nonnull align 8 dereferenceable(28) %149)
          to label %150 unwind label %448

150:                                              ; preds = %146
  call void @llvm.lifetime.start.p0(i64 16, ptr %22) #8
  %151 = load ptr, ptr %20, align 8, !tbaa !5
  invoke void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE3endEv(ptr dead_on_unwind writable sret(%"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<BufferVK>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<BufferVK>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator") align 8 %22, ptr noundef nonnull align 8 dereferenceable(28) %151)
          to label %152 unwind label %448

152:                                              ; preds = %150
  br label %153

153:                                              ; preds = %183, %152
  %154 = invoke noundef zeroext i1 @_ZNK3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE12IteratorBaseISF_NSF_8iteratorEEneERKSH_(ptr noundef nonnull align 8 dereferenceable(12) %21, ptr noundef nonnull align 8 dereferenceable(12) %22)
          to label %155 unwind label %448

155:                                              ; preds = %153
  br i1 %154, label %157, label %156

156:                                              ; preds = %155
  store i32 10, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  br label %184

157:                                              ; preds = %155
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  %158 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE8iteratordeEv(ptr noundef nonnull align 8 dereferenceable(12) %21)
          to label %159 unwind label %448

159:                                              ; preds = %157
  store ptr %158, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #8
  %160 = load ptr, ptr %23, align 8, !tbaa !5
  %161 = getelementptr inbounds %"struct.std::pair", ptr %160, i32 0, i32 1
  store ptr %161, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  %162 = load ptr, ptr %24, align 8, !tbaa !5
  %163 = invoke noundef ptr @_ZN3JPH5ArrayI8BufferVKNS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %162)
          to label %164 unwind label %448

164:                                              ; preds = %159
  store ptr %163, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  %165 = load ptr, ptr %24, align 8, !tbaa !5
  %166 = invoke noundef ptr @_ZN3JPH5ArrayI8BufferVKNS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %165)
          to label %167 unwind label %448

167:                                              ; preds = %164
  store ptr %166, ptr %26, align 8, !tbaa !5
  br label %168

168:                                              ; preds = %177, %167
  %169 = load ptr, ptr %25, align 8, !tbaa !5
  %170 = load ptr, ptr %26, align 8, !tbaa !5
  %171 = icmp ne ptr %169, %170
  br i1 %171, label %173, label %172

172:                                              ; preds = %168
  store i32 12, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  br label %180

173:                                              ; preds = %168
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #8
  %174 = load ptr, ptr %25, align 8, !tbaa !5
  store ptr %174, ptr %27, align 8, !tbaa !5
  %175 = load ptr, ptr %27, align 8, !tbaa !5
  invoke void @_ZN10RendererVK18FreeBufferInternalER8BufferVK(ptr noundef nonnull align 16 dereferenceable(1936) %57, ptr noundef nonnull align 8 dereferenceable(48) %175)
          to label %176 unwind label %448

176:                                              ; preds = %173
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  br label %177

177:                                              ; preds = %176
  %178 = load ptr, ptr %25, align 8, !tbaa !5
  %179 = getelementptr inbounds %class.BufferVK, ptr %178, i32 1
  store ptr %179, ptr %25, align 8, !tbaa !5
  br label %168

180:                                              ; preds = %172
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  br label %181

181:                                              ; preds = %180
  %182 = invoke noundef nonnull align 8 dereferenceable(12) ptr @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE12IteratorBaseISF_NSF_8iteratorEEppEv(ptr noundef nonnull align 8 dereferenceable(12) %21)
          to label %183 unwind label %448

183:                                              ; preds = %181
  br label %153

184:                                              ; preds = %156
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  br label %185

185:                                              ; preds = %184
  %186 = load ptr, ptr %16, align 8, !tbaa !5
  %187 = getelementptr inbounds %"class.JPH::UnorderedMap", ptr %186, i32 1
  store ptr %187, ptr %16, align 8, !tbaa !5
  br label %141

188:                                              ; preds = %145
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  %189 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 43
  store ptr %189, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %29) #8
  %190 = load ptr, ptr %28, align 8, !tbaa !5
  invoke void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE5beginEv(ptr dead_on_unwind writable sret(%"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<BufferVK>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<BufferVK>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator") align 8 %29, ptr noundef nonnull align 8 dereferenceable(28) %190)
          to label %191 unwind label %448

191:                                              ; preds = %188
  call void @llvm.lifetime.start.p0(i64 16, ptr %30) #8
  %192 = load ptr, ptr %28, align 8, !tbaa !5
  invoke void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE3endEv(ptr dead_on_unwind writable sret(%"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<BufferVK>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<BufferVK>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator") align 8 %30, ptr noundef nonnull align 8 dereferenceable(28) %192)
          to label %193 unwind label %448

193:                                              ; preds = %191
  br label %194

194:                                              ; preds = %224, %193
  %195 = invoke noundef zeroext i1 @_ZNK3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE12IteratorBaseISF_NSF_8iteratorEEneERKSH_(ptr noundef nonnull align 8 dereferenceable(12) %29, ptr noundef nonnull align 8 dereferenceable(12) %30)
          to label %196 unwind label %448

196:                                              ; preds = %194
  br i1 %195, label %198, label %197

197:                                              ; preds = %196
  store i32 14, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  br label %225

198:                                              ; preds = %196
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #8
  %199 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE8iteratordeEv(ptr noundef nonnull align 8 dereferenceable(12) %29)
          to label %200 unwind label %448

200:                                              ; preds = %198
  store ptr %199, ptr %31, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #8
  %201 = load ptr, ptr %31, align 8, !tbaa !5
  %202 = getelementptr inbounds %"struct.std::pair", ptr %201, i32 0, i32 1
  store ptr %202, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #8
  %203 = load ptr, ptr %32, align 8, !tbaa !5
  %204 = invoke noundef ptr @_ZN3JPH5ArrayI8BufferVKNS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %203)
          to label %205 unwind label %448

205:                                              ; preds = %200
  store ptr %204, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #8
  %206 = load ptr, ptr %32, align 8, !tbaa !5
  %207 = invoke noundef ptr @_ZN3JPH5ArrayI8BufferVKNS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %206)
          to label %208 unwind label %448

208:                                              ; preds = %205
  store ptr %207, ptr %34, align 8, !tbaa !5
  br label %209

209:                                              ; preds = %218, %208
  %210 = load ptr, ptr %33, align 8, !tbaa !5
  %211 = load ptr, ptr %34, align 8, !tbaa !5
  %212 = icmp ne ptr %210, %211
  br i1 %212, label %214, label %213

213:                                              ; preds = %209
  store i32 16, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  br label %221

214:                                              ; preds = %209
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #8
  %215 = load ptr, ptr %33, align 8, !tbaa !5
  store ptr %215, ptr %35, align 8, !tbaa !5
  %216 = load ptr, ptr %35, align 8, !tbaa !5
  invoke void @_ZN10RendererVK18FreeBufferInternalER8BufferVK(ptr noundef nonnull align 16 dereferenceable(1936) %57, ptr noundef nonnull align 8 dereferenceable(48) %216)
          to label %217 unwind label %448

217:                                              ; preds = %214
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  br label %218

218:                                              ; preds = %217
  %219 = load ptr, ptr %33, align 8, !tbaa !5
  %220 = getelementptr inbounds %class.BufferVK, ptr %219, i32 1
  store ptr %220, ptr %33, align 8, !tbaa !5
  br label %209

221:                                              ; preds = %213
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  br label %222

222:                                              ; preds = %221
  %223 = invoke noundef nonnull align 8 dereferenceable(12) ptr @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE12IteratorBaseISF_NSF_8iteratorEEppEv(ptr noundef nonnull align 8 dereferenceable(12) %29)
          to label %224 unwind label %448

224:                                              ; preds = %222
  br label %194

225:                                              ; preds = %197
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #8
  %226 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 44
  store ptr %226, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %37) #8
  %227 = load ptr, ptr %36, align 8, !tbaa !5
  invoke void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayINS1_6MemoryENS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE5beginEv(ptr dead_on_unwind writable sret(%"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<RendererVK::Memory>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<RendererVK::Memory>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator") align 8 %37, ptr noundef nonnull align 8 dereferenceable(28) %227)
          to label %228 unwind label %448

228:                                              ; preds = %225
  call void @llvm.lifetime.start.p0(i64 16, ptr %38) #8
  %229 = load ptr, ptr %36, align 8, !tbaa !5
  invoke void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayINS1_6MemoryENS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE3endEv(ptr dead_on_unwind writable sret(%"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<RendererVK::Memory>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<RendererVK::Memory>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator") align 8 %38, ptr noundef nonnull align 8 dereferenceable(28) %229)
          to label %230 unwind label %448

230:                                              ; preds = %228
  br label %231

231:                                              ; preds = %271, %230
  %232 = invoke noundef zeroext i1 @_ZNK3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayINS1_6MemoryENS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE12IteratorBaseISF_NSF_8iteratorEEneERKSH_(ptr noundef nonnull align 8 dereferenceable(12) %37, ptr noundef nonnull align 8 dereferenceable(12) %38)
          to label %233 unwind label %448

233:                                              ; preds = %231
  br i1 %232, label %235, label %234

234:                                              ; preds = %233
  store i32 18, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #8
  br label %272

235:                                              ; preds = %233
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #8
  %236 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayINS1_6MemoryENS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE8iteratordeEv(ptr noundef nonnull align 8 dereferenceable(12) %37)
          to label %237 unwind label %448

237:                                              ; preds = %235
  store ptr %236, ptr %39, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #8
  %238 = load ptr, ptr %39, align 8, !tbaa !5
  %239 = getelementptr inbounds %"struct.std::pair.16", ptr %238, i32 0, i32 1
  store ptr %239, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #8
  %240 = load ptr, ptr %40, align 8, !tbaa !5
  %241 = invoke noundef ptr @_ZN3JPH5ArrayIN10RendererVK6MemoryENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %240)
          to label %242 unwind label %448

242:                                              ; preds = %237
  store ptr %241, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #8
  %243 = load ptr, ptr %40, align 8, !tbaa !5
  %244 = invoke noundef ptr @_ZN3JPH5ArrayIN10RendererVK6MemoryENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %243)
          to label %245 unwind label %448

245:                                              ; preds = %242
  store ptr %244, ptr %42, align 8, !tbaa !5
  br label %246

246:                                              ; preds = %265, %245
  %247 = load ptr, ptr %41, align 8, !tbaa !5
  %248 = load ptr, ptr %42, align 8, !tbaa !5
  %249 = icmp ne ptr %247, %248
  br i1 %249, label %251, label %250

250:                                              ; preds = %246
  store i32 20, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #8
  br label %268

251:                                              ; preds = %246
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #8
  %252 = load ptr, ptr %41, align 8, !tbaa !5
  store ptr %252, ptr %43, align 8, !tbaa !5
  %253 = load ptr, ptr %43, align 8, !tbaa !5
  %254 = getelementptr inbounds %"struct.RendererVK::Memory", ptr %253, i32 0, i32 1
  %255 = load i64, ptr %254, align 8, !tbaa !39
  %256 = icmp eq i64 %255, 0
  br i1 %256, label %257, label %264

257:                                              ; preds = %251
  %258 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 5
  %259 = load ptr, ptr %258, align 16, !tbaa !11
  %260 = load ptr, ptr %43, align 8, !tbaa !5
  %261 = getelementptr inbounds %"struct.RendererVK::Memory", ptr %260, i32 0, i32 0
  %262 = load ptr, ptr %261, align 8, !tbaa !41
  invoke void @vkFreeMemory(ptr noundef %259, ptr noundef %262, ptr noundef null)
          to label %263 unwind label %448

263:                                              ; preds = %257
  br label %264

264:                                              ; preds = %263, %251
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #8
  br label %265

265:                                              ; preds = %264
  %266 = load ptr, ptr %41, align 8, !tbaa !5
  %267 = getelementptr inbounds %"struct.RendererVK::Memory", ptr %266, i32 1
  store ptr %267, ptr %41, align 8, !tbaa !5
  br label %246

268:                                              ; preds = %250
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  br label %269

269:                                              ; preds = %268
  %270 = invoke noundef nonnull align 8 dereferenceable(12) ptr @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayINS1_6MemoryENS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE12IteratorBaseISF_NSF_8iteratorEEppEv(ptr noundef nonnull align 8 dereferenceable(12) %37)
          to label %271 unwind label %448

271:                                              ; preds = %269
  br label %231

272:                                              ; preds = %234
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #8
  %273 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 37
  store ptr %273, ptr %44, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #8
  %274 = load ptr, ptr %44, align 8, !tbaa !5
  %275 = getelementptr inbounds [2 x ptr], ptr %274, i64 0, i64 0
  store ptr %275, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #8
  %276 = load ptr, ptr %44, align 8, !tbaa !5
  %277 = getelementptr inbounds [2 x ptr], ptr %276, i64 0, i64 0
  %278 = getelementptr inbounds ptr, ptr %277, i64 2
  store ptr %278, ptr %46, align 8, !tbaa !5
  br label %279

279:                                              ; preds = %291, %272
  %280 = load ptr, ptr %45, align 8, !tbaa !5
  %281 = load ptr, ptr %46, align 8, !tbaa !5
  %282 = icmp ne ptr %280, %281
  br i1 %282, label %284, label %283

283:                                              ; preds = %279
  store i32 22, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #8
  br label %294

284:                                              ; preds = %279
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #8
  %285 = load ptr, ptr %45, align 8, !tbaa !5
  %286 = load ptr, ptr %285, align 8, !tbaa !5
  store ptr %286, ptr %47, align 8, !tbaa !5
  %287 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 5
  %288 = load ptr, ptr %287, align 16, !tbaa !11
  %289 = load ptr, ptr %47, align 8, !tbaa !5
  invoke void @vkDestroyFence(ptr noundef %288, ptr noundef %289, ptr noundef null)
          to label %290 unwind label %448

290:                                              ; preds = %284
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #8
  br label %291

291:                                              ; preds = %290
  %292 = load ptr, ptr %45, align 8, !tbaa !5
  %293 = getelementptr inbounds ptr, ptr %292, i32 1
  store ptr %293, ptr %45, align 8, !tbaa !5
  br label %279

294:                                              ; preds = %283
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #8
  %295 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 36
  store ptr %295, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #8
  %296 = load ptr, ptr %48, align 8, !tbaa !5
  %297 = getelementptr inbounds [2 x ptr], ptr %296, i64 0, i64 0
  store ptr %297, ptr %49, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #8
  %298 = load ptr, ptr %48, align 8, !tbaa !5
  %299 = getelementptr inbounds [2 x ptr], ptr %298, i64 0, i64 0
  %300 = getelementptr inbounds ptr, ptr %299, i64 2
  store ptr %300, ptr %50, align 8, !tbaa !5
  br label %301

301:                                              ; preds = %313, %294
  %302 = load ptr, ptr %49, align 8, !tbaa !5
  %303 = load ptr, ptr %50, align 8, !tbaa !5
  %304 = icmp ne ptr %302, %303
  br i1 %304, label %306, label %305

305:                                              ; preds = %301
  store i32 24, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #8
  br label %316

306:                                              ; preds = %301
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #8
  %307 = load ptr, ptr %49, align 8, !tbaa !5
  %308 = load ptr, ptr %307, align 8, !tbaa !5
  store ptr %308, ptr %51, align 8, !tbaa !5
  %309 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 5
  %310 = load ptr, ptr %309, align 16, !tbaa !11
  %311 = load ptr, ptr %51, align 8, !tbaa !5
  invoke void @vkDestroySemaphore(ptr noundef %310, ptr noundef %311, ptr noundef null)
          to label %312 unwind label %448

312:                                              ; preds = %306
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #8
  br label %313

313:                                              ; preds = %312
  %314 = load ptr, ptr %49, align 8, !tbaa !5
  %315 = getelementptr inbounds ptr, ptr %314, i32 1
  store ptr %315, ptr %49, align 8, !tbaa !5
  br label %301

316:                                              ; preds = %305
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #8
  %317 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 35
  store ptr %317, ptr %52, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #8
  %318 = load ptr, ptr %52, align 8, !tbaa !5
  %319 = getelementptr inbounds [2 x ptr], ptr %318, i64 0, i64 0
  store ptr %319, ptr %53, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #8
  %320 = load ptr, ptr %52, align 8, !tbaa !5
  %321 = getelementptr inbounds [2 x ptr], ptr %320, i64 0, i64 0
  %322 = getelementptr inbounds ptr, ptr %321, i64 2
  store ptr %322, ptr %54, align 8, !tbaa !5
  br label %323

323:                                              ; preds = %335, %316
  %324 = load ptr, ptr %53, align 8, !tbaa !5
  %325 = load ptr, ptr %54, align 8, !tbaa !5
  %326 = icmp ne ptr %324, %325
  br i1 %326, label %328, label %327

327:                                              ; preds = %323
  store i32 26, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #8
  br label %338

328:                                              ; preds = %323
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #8
  %329 = load ptr, ptr %53, align 8, !tbaa !5
  %330 = load ptr, ptr %329, align 8, !tbaa !5
  store ptr %330, ptr %55, align 8, !tbaa !5
  %331 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 5
  %332 = load ptr, ptr %331, align 16, !tbaa !11
  %333 = load ptr, ptr %55, align 8, !tbaa !5
  invoke void @vkDestroySemaphore(ptr noundef %332, ptr noundef %333, ptr noundef null)
          to label %334 unwind label %448

334:                                              ; preds = %328
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #8
  br label %335

335:                                              ; preds = %334
  %336 = load ptr, ptr %53, align 8, !tbaa !5
  %337 = getelementptr inbounds ptr, ptr %336, i32 1
  store ptr %337, ptr %53, align 8, !tbaa !5
  br label %323

338:                                              ; preds = %327
  %339 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 5
  %340 = load ptr, ptr %339, align 16, !tbaa !11
  %341 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 33
  %342 = load ptr, ptr %341, align 8, !tbaa !42
  invoke void @vkDestroyCommandPool(ptr noundef %340, ptr noundef %342, ptr noundef null)
          to label %343 unwind label %448

343:                                              ; preds = %338
  %344 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 5
  %345 = load ptr, ptr %344, align 16, !tbaa !11
  %346 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 29
  %347 = load ptr, ptr %346, align 8, !tbaa !43
  invoke void @vkDestroyPipelineLayout(ptr noundef %345, ptr noundef %347, ptr noundef null)
          to label %348 unwind label %448

348:                                              ; preds = %343
  %349 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 5
  %350 = load ptr, ptr %349, align 16, !tbaa !11
  %351 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 27
  %352 = load ptr, ptr %351, align 8, !tbaa !44
  invoke void @vkDestroyRenderPass(ptr noundef %350, ptr noundef %352, ptr noundef null)
          to label %353 unwind label %448

353:                                              ; preds = %348
  %354 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 5
  %355 = load ptr, ptr %354, align 16, !tbaa !11
  %356 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 28
  %357 = load ptr, ptr %356, align 16, !tbaa !45
  invoke void @vkDestroyRenderPass(ptr noundef %355, ptr noundef %357, ptr noundef null)
          to label %358 unwind label %448

358:                                              ; preds = %353
  %359 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 5
  %360 = load ptr, ptr %359, align 16, !tbaa !11
  %361 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 22
  %362 = load ptr, ptr %361, align 16, !tbaa !46
  invoke void @vkDestroyDescriptorPool(ptr noundef %360, ptr noundef %362, ptr noundef null)
          to label %363 unwind label %448

363:                                              ; preds = %358
  %364 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 5
  %365 = load ptr, ptr %364, align 16, !tbaa !11
  %366 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 25
  %367 = load ptr, ptr %366, align 8, !tbaa !47
  invoke void @vkDestroySampler(ptr noundef %365, ptr noundef %367, ptr noundef null)
          to label %368 unwind label %448

368:                                              ; preds = %363
  %369 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 5
  %370 = load ptr, ptr %369, align 16, !tbaa !11
  %371 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 26
  %372 = load ptr, ptr %371, align 16, !tbaa !48
  invoke void @vkDestroySampler(ptr noundef %370, ptr noundef %372, ptr noundef null)
          to label %373 unwind label %448

373:                                              ; preds = %368
  %374 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 5
  %375 = load ptr, ptr %374, align 16, !tbaa !11
  %376 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 20
  %377 = load ptr, ptr %376, align 16, !tbaa !49
  invoke void @vkDestroyDescriptorSetLayout(ptr noundef %375, ptr noundef %377, ptr noundef null)
          to label %378 unwind label %448

378:                                              ; preds = %373
  %379 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 5
  %380 = load ptr, ptr %379, align 16, !tbaa !11
  %381 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 21
  %382 = load ptr, ptr %381, align 8, !tbaa !50
  invoke void @vkDestroyDescriptorSetLayout(ptr noundef %380, ptr noundef %382, ptr noundef null)
          to label %383 unwind label %448

383:                                              ; preds = %378
  invoke void @_ZN10RendererVK16DestroySwapChainEv(ptr noundef nonnull align 16 dereferenceable(1936) %57)
          to label %384 unwind label %448

384:                                              ; preds = %383
  %385 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 1
  %386 = load ptr, ptr %385, align 16, !tbaa !51
  %387 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 10
  %388 = load ptr, ptr %387, align 16, !tbaa !52
  invoke void @vkDestroySurfaceKHR(ptr noundef %386, ptr noundef %388, ptr noundef null)
          to label %389 unwind label %448

389:                                              ; preds = %384
  %390 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 5
  %391 = load ptr, ptr %390, align 16, !tbaa !11
  invoke void @vkDestroyDevice(ptr noundef %391, ptr noundef null)
          to label %392 unwind label %448

392:                                              ; preds = %389
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #8
  %393 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 1
  %394 = load ptr, ptr %393, align 16, !tbaa !51
  %395 = invoke ptr @vkGetInstanceProcAddr(ptr noundef %394, ptr noundef @.str.1)
          to label %396 unwind label %448

396:                                              ; preds = %392
  store ptr %395, ptr %56, align 8, !tbaa !5
  %397 = load ptr, ptr %56, align 8, !tbaa !5
  %398 = icmp ne ptr %397, null
  br i1 %398, label %399, label %406

399:                                              ; preds = %396
  %400 = load ptr, ptr %56, align 8, !tbaa !5
  %401 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 1
  %402 = load ptr, ptr %401, align 16, !tbaa !51
  %403 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 2
  %404 = load ptr, ptr %403, align 8, !tbaa !53
  invoke void %400(ptr noundef %402, ptr noundef %404, ptr noundef null)
          to label %405 unwind label %448

405:                                              ; preds = %399
  br label %406

406:                                              ; preds = %405, %396
  %407 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 1
  %408 = load ptr, ptr %407, align 16, !tbaa !51
  invoke void @vkDestroyInstance(ptr noundef %408, ptr noundef null)
          to label %409 unwind label %448

409:                                              ; preds = %406
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #8
  %410 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 44
  call void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayINS1_6MemoryENS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(28) %410) #8
  %411 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 43
  call void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(28) %411) #8
  %412 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 42
  %413 = getelementptr inbounds [2 x %"class.JPH::UnorderedMap"], ptr %412, i32 0, i32 0
  %414 = getelementptr inbounds %"class.JPH::UnorderedMap", ptr %413, i64 2
  br label %415

415:                                              ; preds = %415, %409
  %416 = phi ptr [ %414, %409 ], [ %417, %415 ]
  %417 = getelementptr inbounds %"class.JPH::UnorderedMap", ptr %416, i64 -1
  call void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(28) %417) #8
  %418 = icmp eq ptr %417, %413
  br i1 %418, label %419, label %415

419:                                              ; preds = %415
  %420 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 41
  %421 = getelementptr inbounds [2 x %"class.std::unique_ptr"], ptr %420, i32 0, i32 0
  %422 = getelementptr inbounds %"class.std::unique_ptr", ptr %421, i64 2
  br label %423

423:                                              ; preds = %423, %419
  %424 = phi ptr [ %422, %419 ], [ %425, %423 ]
  %425 = getelementptr inbounds %"class.std::unique_ptr", ptr %424, i64 -1
  call void @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %425) #8
  %426 = icmp eq ptr %425, %421
  br i1 %426, label %427, label %423

427:                                              ; preds = %423
  %428 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 40
  %429 = getelementptr inbounds [2 x %"class.std::unique_ptr"], ptr %428, i32 0, i32 0
  %430 = getelementptr inbounds %"class.std::unique_ptr", ptr %429, i64 2
  br label %431

431:                                              ; preds = %431, %427
  %432 = phi ptr [ %430, %427 ], [ %433, %431 ]
  %433 = getelementptr inbounds %"class.std::unique_ptr", ptr %432, i64 -1
  call void @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %433) #8
  %434 = icmp eq ptr %433, %429
  br i1 %434, label %435, label %431

435:                                              ; preds = %431
  %436 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 39
  %437 = getelementptr inbounds [2 x %"class.std::unique_ptr"], ptr %436, i32 0, i32 0
  %438 = getelementptr inbounds %"class.std::unique_ptr", ptr %437, i64 2
  br label %439

439:                                              ; preds = %439, %435
  %440 = phi ptr [ %438, %435 ], [ %441, %439 ]
  %441 = getelementptr inbounds %"class.std::unique_ptr", ptr %440, i64 -1
  call void @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %441) #8
  %442 = icmp eq ptr %441, %437
  br i1 %442, label %443, label %439

443:                                              ; preds = %439
  %444 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 38
  call void @_ZN3JPH3RefI9TextureVKED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %444) #8
  %445 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 31
  call void @_ZN3JPH5ArrayIP15VkFramebuffer_TNS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %445) #8
  %446 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 16
  call void @_ZN3JPH5ArrayIP13VkImageView_TNS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %446) #8
  %447 = getelementptr inbounds %class.RendererVK, ptr %57, i32 0, i32 13
  call void @_ZN3JPH5ArrayIP9VkImage_TNS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %447) #8
  call void @_ZN8RendererD2Ev(ptr noundef nonnull align 16 dereferenceable(832) %57) #8
  ret void

448:                                              ; preds = %406, %399, %392, %389, %384, %383, %378, %373, %368, %363, %358, %353, %348, %343, %338, %328, %306, %284, %269, %257, %242, %237, %235, %231, %228, %225, %222, %214, %205, %200, %198, %194, %191, %188, %181, %173, %164, %159, %157, %153, %150, %146, %72, %69, %61, %1
  %449 = landingpad { ptr, i32 }
          catch ptr null
  %450 = extractvalue { ptr, i32 } %449, 0
  call void @__clang_call_terminate(ptr %450) #9
  unreachable
}

declare i32 @vkDeviceWaitIdle(ptr noundef) #2

; Function Attrs: noinline noreturn nounwind uwtable
declare hidden void @__clang_call_terminate(ptr noundef) #3

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

declare void @vkDestroyFramebuffer(ptr noundef, ptr noundef, ptr noundef) #2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE5beginEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<BufferVK>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<BufferVK>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator") align 8, ptr noundef nonnull align 8 dereferenceable(28)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE3endEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<BufferVK>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<BufferVK>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator") align 8, ptr noundef nonnull align 8 dereferenceable(28)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE12IteratorBaseISF_NSF_8iteratorEEneERKSH_(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(12)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE8iteratordeEv(ptr noundef nonnull align 8 dereferenceable(12)) #5 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN10RendererVK18FreeBufferInternalER8BufferVK(ptr noundef nonnull align 16 dereferenceable(1936), ptr noundef nonnull align 8 dereferenceable(48)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(12) ptr @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE12IteratorBaseISF_NSF_8iteratorEEppEv(ptr noundef nonnull align 8 dereferenceable(12)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayINS1_6MemoryENS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE5beginEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<RendererVK::Memory>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<RendererVK::Memory>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator") align 8, ptr noundef nonnull align 8 dereferenceable(28)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayINS1_6MemoryENS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE3endEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<RendererVK::Memory>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<RendererVK::Memory>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator") align 8, ptr noundef nonnull align 8 dereferenceable(28)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayINS1_6MemoryENS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE12IteratorBaseISF_NSF_8iteratorEEneERKSH_(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(12)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayINS1_6MemoryENS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE8iteratordeEv(ptr noundef nonnull align 8 dereferenceable(12)) #5 align 2

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

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

declare void @vkFreeMemory(ptr noundef, ptr noundef, ptr noundef) #2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(12) ptr @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayINS1_6MemoryENS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE12IteratorBaseISF_NSF_8iteratorEEppEv(ptr noundef nonnull align 8 dereferenceable(12)) #5 align 2

declare void @vkDestroyFence(ptr noundef, ptr noundef, ptr noundef) #2

declare void @vkDestroySemaphore(ptr noundef, ptr noundef, ptr noundef) #2

declare void @vkDestroyCommandPool(ptr noundef, ptr noundef, ptr noundef) #2

declare void @vkDestroyPipelineLayout(ptr noundef, ptr noundef, ptr noundef) #2

declare void @vkDestroyRenderPass(ptr noundef, ptr noundef, ptr noundef) #2

declare void @vkDestroyDescriptorPool(ptr noundef, ptr noundef, ptr noundef) #2

declare void @vkDestroySampler(ptr noundef, ptr noundef, ptr noundef) #2

declare void @vkDestroyDescriptorSetLayout(ptr noundef, ptr noundef, ptr noundef) #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN10RendererVK16DestroySwapChainEv(ptr noundef nonnull align 16 dereferenceable(1936)) #5 align 2

declare void @vkDestroySurfaceKHR(ptr noundef, ptr noundef, ptr noundef) #2

declare void @vkDestroyDevice(ptr noundef, ptr noundef) #2

declare ptr @vkGetInstanceProcAddr(ptr noundef, ptr noundef) #2

declare void @vkDestroyInstance(ptr noundef, ptr noundef) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayINS1_6MemoryENS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(28)) unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(28)) unnamed_addr #1 align 2

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

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

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

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

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

; Function Attrs: nounwind
declare void @_ZN8RendererD2Ev(ptr noundef nonnull align 16 dereferenceable(832)) unnamed_addr #7

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"vtable pointer", !8, i64 0}
!11 = !{!12, !6, i64 1376}
!12 = !{!"_ZTS10RendererVK", !13, i64 0, !6, i64 832, !6, i64 840, !6, i64 848, !24, i64 856, !6, i64 1376, !19, i64 1384, !19, i64 1388, !6, i64 1392, !6, i64 1400, !6, i64 1408, !6, i64 1416, !15, i64 1424, !25, i64 1432, !27, i64 1456, !28, i64 1460, !29, i64 1472, !6, i64 1496, !6, i64 1504, !6, i64 1512, !6, i64 1520, !6, i64 1528, !6, i64 1536, !7, i64 1544, !7, i64 1560, !6, i64 1576, !6, i64 1584, !6, i64 1592, !6, i64 1600, !6, i64 1608, !6, i64 1616, !30, i64 1624, !19, i64 1648, !6, i64 1656, !7, i64 1664, !7, i64 1680, !7, i64 1696, !7, i64 1712, !31, i64 1728, !7, i64 1736, !7, i64 1752, !7, i64 1768, !7, i64 1784, !32, i64 1848, !34, i64 1880, !19, i64 1912, !19, i64 1916, !26, i64 1920, !26, i64 1928}
!13 = !{!"_ZTS8Renderer", !6, i64 8, !14, i64 16, !15, i64 20, !16, i64 32, !17, i64 96, !18, i64 112, !18, i64 192, !19, i64 272, !20, i64 288, !20, i64 544, !22, i64 800}
!14 = !{!"float", !7, i64 0}
!15 = !{!"bool", !7, i64 0}
!16 = !{!"_ZTS11CameraState", !17, i64 0, !17, i64 16, !17, i64 32, !14, i64 48}
!17 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!18 = !{!"_ZTS7Frustum", !7, i64 0}
!19 = !{!"int", !7, i64 0}
!20 = !{!"_ZTSN8Renderer26VertexShaderConstantBufferE", !21, i64 0, !21, i64 64, !21, i64 128, !21, i64 192}
!21 = !{!"_ZTSN3JPH5Mat44E", !7, i64 0}
!22 = !{!"_ZTSN8Renderer25PixelShaderConstantBufferE", !23, i64 0, !23, i64 16}
!23 = !{!"_ZTSN3JPH4Vec4E", !7, i64 0}
!24 = !{!"_ZTS32VkPhysicalDeviceMemoryProperties", !19, i64 0, !7, i64 4, !19, i64 260, !7, i64 264}
!25 = !{!"_ZTSN3JPH5ArrayIP9VkImage_TNS_12STLAllocatorIS2_EEEE", !26, i64 0, !26, i64 8, !6, i64 16}
!26 = !{!"long", !7, i64 0}
!27 = !{!"_ZTS8VkFormat", !7, i64 0}
!28 = !{!"_ZTS10VkExtent2D", !19, i64 0, !19, i64 4}
!29 = !{!"_ZTSN3JPH5ArrayIP13VkImageView_TNS_12STLAllocatorIS2_EEEE", !26, i64 0, !26, i64 8, !6, i64 16}
!30 = !{!"_ZTSN3JPH5ArrayIP15VkFramebuffer_TNS_12STLAllocatorIS2_EEEE", !26, i64 0, !26, i64 8, !6, i64 16}
!31 = !{!"_ZTSN3JPH3RefI9TextureVKEE", !6, i64 0}
!32 = !{!"_ZTSN3JPH12UnorderedMapIN10RendererVK3KeyENS_5ArrayI8BufferVKNS_12STLAllocatorIS4_EEEENS1_9KeyHasherESt8equal_toIS2_EEE", !33, i64 0}
!33 = !{!"_ZTSN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EEE", !6, i64 0, !6, i64 8, !19, i64 16, !19, i64 20, !19, i64 24}
!34 = !{!"_ZTSN3JPH12UnorderedMapIN10RendererVK3KeyENS_5ArrayINS1_6MemoryENS_12STLAllocatorIS4_EEEENS1_9KeyHasherESt8equal_toIS2_EEE", !35, i64 0}
!35 = !{!"_ZTSN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayINS1_6MemoryENS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EEE", !6, i64 0, !6, i64 8, !19, i64 16, !19, i64 20, !19, i64 24}
!36 = !{!12, !19, i64 1916}
!37 = !{!12, !26, i64 1928}
!38 = !{!12, !6, i64 1616}
!39 = !{!40, !26, i64 8}
!40 = !{!"_ZTSN10RendererVK6MemoryE", !6, i64 0, !26, i64 8}
!41 = !{!40, !6, i64 0}
!42 = !{!12, !6, i64 1656}
!43 = !{!12, !6, i64 1608}
!44 = !{!12, !6, i64 1592}
!45 = !{!12, !6, i64 1600}
!46 = !{!12, !6, i64 1536}
!47 = !{!12, !6, i64 1576}
!48 = !{!12, !6, i64 1584}
!49 = !{!12, !6, i64 1520}
!50 = !{!12, !6, i64 1528}
!51 = !{!12, !6, i64 832}
!52 = !{!12, !6, i64 1408}
!53 = !{!12, !6, i64 840}


; 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::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<BufferVK>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<BufferVK>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator" = type { %"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<BufferVK>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<BufferVK>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::IteratorBase.base", [4 x i8] }
%"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<BufferVK>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<BufferVK>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::IteratorBase.base" = type <{ ptr, i32 }>
%"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<RendererVK::Memory>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<RendererVK::Memory>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator" = type { %"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<RendererVK::Memory>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<RendererVK::Memory>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::IteratorBase.base", [4 x i8] }
%"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<RendererVK::Memory>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<RendererVK::Memory>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::IteratorBase.base" = type <{ ptr, i32 }>

@_ZTV10RendererVK = external dso_local unnamed_addr constant { [18 x ptr] }, align 8
@_ZN3JPH5TraceE = external local_unnamed_addr global ptr, align 8
@.str = external hidden unnamed_addr constant [41 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [32 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: mustprogress nounwind uwtable
define dso_local void @_ZN10RendererVKD2Ev(ptr noundef nonnull align 16 dereferenceable(1936) %0) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<BufferVK>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<BufferVK>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator", align 8
  %3 = alloca %"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<BufferVK>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<BufferVK>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator", align 8
  %4 = alloca %"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<BufferVK>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<BufferVK>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator", align 8
  %5 = alloca %"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<BufferVK>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<BufferVK>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator", align 8
  %6 = alloca %"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<RendererVK::Memory>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<RendererVK::Memory>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator", align 8
  %7 = alloca %"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<RendererVK::Memory>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<RendererVK::Memory>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator", align 8
  store ptr getelementptr inbounds inrange(-16, 128) (i8, ptr @_ZTV10RendererVK, i64 16), ptr %0, align 16, !tbaa !5
  %8 = getelementptr inbounds i8, ptr %0, i64 1376
  %9 = load ptr, ptr %8, align 16, !tbaa !8
  %10 = invoke i32 @vkDeviceWaitIdle(ptr noundef %9)
          to label %11 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

11:                                               ; preds = %1
  %12 = load ptr, ptr @_ZN3JPH5TraceE, align 8, !tbaa !35
  %13 = getelementptr inbounds i8, ptr %0, i64 1916
  %14 = load i32, ptr %13, align 4, !tbaa !36
  %15 = getelementptr inbounds i8, ptr %0, i64 1928
  %16 = load i64, ptr %15, align 8, !tbaa !37
  %17 = lshr i64 %16, 20
  %18 = trunc i64 %17 to i32
  invoke void (ptr, ...) %12(ptr noundef nonnull @.str, i32 noundef %14, i32 noundef %18)
          to label %19 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

19:                                               ; preds = %11
  %20 = getelementptr inbounds i8, ptr %0, i64 1728
  %21 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefI9TextureVKEaSEPS1_(ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef null)
          to label %22 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

22:                                               ; preds = %19
  %23 = load ptr, ptr %8, align 16, !tbaa !8
  %24 = getelementptr inbounds i8, ptr %0, i64 1616
  %25 = load ptr, ptr %24, align 16, !tbaa !38
  invoke void @vkDestroyFramebuffer(ptr noundef %23, ptr noundef %25, ptr noundef null)
          to label %.preheader161.preheader unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

.preheader161.preheader:                          ; preds = %22
  %.0.ptr = getelementptr inbounds i8, ptr %0, i64 1736
  %26 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EEaSEDn(ptr noundef nonnull align 8 dereferenceable(8) %.0.ptr, ptr null) #8
  %.0.ptr.1 = getelementptr inbounds i8, ptr %0, i64 1744
  %27 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EEaSEDn(ptr noundef nonnull align 8 dereferenceable(8) %.0.ptr.1, ptr null) #8
  %.083.ptr = getelementptr inbounds i8, ptr %0, i64 1752
  %28 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EEaSEDn(ptr noundef nonnull align 8 dereferenceable(8) %.083.ptr, ptr null) #8
  %.083.ptr.1 = getelementptr inbounds i8, ptr %0, i64 1760
  %29 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EEaSEDn(ptr noundef nonnull align 8 dereferenceable(8) %.083.ptr.1, ptr null) #8
  %.084.ptr = getelementptr inbounds i8, ptr %0, i64 1768
  %30 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EEaSEDn(ptr noundef nonnull align 8 dereferenceable(8) %.084.ptr, ptr null) #8
  %.084.ptr.1 = getelementptr inbounds i8, ptr %0, i64 1776
  %31 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EEaSEDn(ptr noundef nonnull align 8 dereferenceable(8) %.084.ptr.1, ptr null) #8
  %.086.ptr167 = getelementptr inbounds i8, ptr %0, i64 1784
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %2) #8
  invoke void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE5beginEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<BufferVK>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<BufferVK>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator") align 8 %2, ptr noundef nonnull align 8 dereferenceable(28) %.086.ptr167)
          to label %32 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

32:                                               ; preds = %.preheader161.preheader
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #8
  invoke void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE3endEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<BufferVK>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<BufferVK>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator") align 8 %3, ptr noundef nonnull align 8 dereferenceable(28) %.086.ptr167)
          to label %.preheader152 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

.preheader152:                                    ; preds = %32, %._crit_edge
  %33 = invoke noundef zeroext i1 @_ZNK3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE12IteratorBaseISF_NSF_8iteratorEEneERKSH_(ptr noundef nonnull align 8 dereferenceable(12) %2, ptr noundef nonnull align 8 dereferenceable(12) %3)
          to label %34 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.loopexit

34:                                               ; preds = %.preheader152
  br i1 %33, label %50, label %35

35:                                               ; preds = %34
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2) #8
  %.086.ptr = getelementptr inbounds i8, ptr %0, i64 1816
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %2) #8
  invoke void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE5beginEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<BufferVK>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<BufferVK>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator") align 8 %2, ptr noundef nonnull align 8 dereferenceable(28) %.086.ptr)
          to label %36 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

36:                                               ; preds = %35
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #8
  invoke void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE3endEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<BufferVK>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<BufferVK>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator") align 8 %3, ptr noundef nonnull align 8 dereferenceable(28) %.086.ptr)
          to label %.preheader152.1 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

.preheader152.1:                                  ; preds = %36, %._crit_edge.1
  %37 = invoke noundef zeroext i1 @_ZNK3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE12IteratorBaseISF_NSF_8iteratorEEneERKSH_(ptr noundef nonnull align 8 dereferenceable(12) %2, ptr noundef nonnull align 8 dereferenceable(12) %3)
          to label %38 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.loopexit.split-lp

38:                                               ; preds = %.preheader152.1
  br i1 %37, label %41, label %39

39:                                               ; preds = %38
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2) #8
  %40 = getelementptr inbounds i8, ptr %0, i64 1848
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #8
  invoke void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE5beginEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<BufferVK>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<BufferVK>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator") align 8 %4, ptr noundef nonnull align 8 dereferenceable(28) %40)
          to label %59 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

41:                                               ; preds = %38
  %42 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE8iteratordeEv(ptr noundef nonnull align 8 dereferenceable(12) %2)
          to label %43 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.loopexit.split-lp

43:                                               ; preds = %41
  %44 = getelementptr inbounds i8, ptr %42, i64 16
  %45 = call noundef ptr @_ZN3JPH5ArrayI8BufferVKNS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %44)
  %46 = call noundef ptr @_ZN3JPH5ArrayI8BufferVKNS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %44)
  %.not127165.1 = icmp eq ptr %45, %46
  br i1 %.not127165.1, label %._crit_edge.1, label %.lr.ph.1

.lr.ph.1:                                         ; preds = %43, %47
  %.087166.1 = phi ptr [ %48, %47 ], [ %45, %43 ]
  invoke void @_ZN10RendererVK18FreeBufferInternalER8BufferVK(ptr noundef nonnull align 16 dereferenceable(1936) %0, ptr noundef nonnull align 8 dereferenceable(48) %.087166.1)
          to label %47 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.loopexit.split-lp

47:                                               ; preds = %.lr.ph.1
  %48 = getelementptr inbounds i8, ptr %.087166.1, i64 48
  %.not127.1 = icmp eq ptr %48, %46
  br i1 %.not127.1, label %._crit_edge.1, label %.lr.ph.1

._crit_edge.1:                                    ; preds = %47, %43
  %49 = invoke noundef nonnull align 8 dereferenceable(12) ptr @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE12IteratorBaseISF_NSF_8iteratorEEppEv(ptr noundef nonnull align 8 dereferenceable(12) %2)
          to label %.preheader152.1 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.loopexit.split-lp

50:                                               ; preds = %34
  %51 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE8iteratordeEv(ptr noundef nonnull align 8 dereferenceable(12) %2)
          to label %52 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.loopexit

52:                                               ; preds = %50
  %53 = getelementptr inbounds i8, ptr %51, i64 16
  %54 = call noundef ptr @_ZN3JPH5ArrayI8BufferVKNS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %53)
  %55 = call noundef ptr @_ZN3JPH5ArrayI8BufferVKNS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %53)
  %.not127165 = icmp eq ptr %54, %55
  br i1 %.not127165, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %57, %52
  %56 = invoke noundef nonnull align 8 dereferenceable(12) ptr @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE12IteratorBaseISF_NSF_8iteratorEEppEv(ptr noundef nonnull align 8 dereferenceable(12) %2)
          to label %.preheader152 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.loopexit

.lr.ph:                                           ; preds = %52, %57
  %.087166 = phi ptr [ %58, %57 ], [ %54, %52 ]
  invoke void @_ZN10RendererVK18FreeBufferInternalER8BufferVK(ptr noundef nonnull align 16 dereferenceable(1936) %0, ptr noundef nonnull align 8 dereferenceable(48) %.087166)
          to label %57 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.loopexit

57:                                               ; preds = %.lr.ph
  %58 = getelementptr inbounds i8, ptr %.087166, i64 48
  %.not127 = icmp eq ptr %58, %55
  br i1 %.not127, label %._crit_edge, label %.lr.ph

59:                                               ; preds = %39
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) #8
  invoke void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE3endEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<BufferVK>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<BufferVK>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator") align 8 %5, ptr noundef nonnull align 8 dereferenceable(28) %40)
          to label %.preheader146 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

.preheader146:                                    ; preds = %59, %._crit_edge174
  %60 = invoke noundef zeroext i1 @_ZNK3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE12IteratorBaseISF_NSF_8iteratorEEneERKSH_(ptr noundef nonnull align 8 dereferenceable(12) %4, ptr noundef nonnull align 8 dereferenceable(12) %5)
          to label %61 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

61:                                               ; preds = %.preheader146
  br i1 %60, label %64, label %62

62:                                               ; preds = %61
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #8
  %63 = getelementptr inbounds i8, ptr %0, i64 1880
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #8
  invoke void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayINS1_6MemoryENS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE5beginEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<RendererVK::Memory>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<RendererVK::Memory>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator") align 8 %6, ptr noundef nonnull align 8 dereferenceable(28) %63)
          to label %73 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

64:                                               ; preds = %61
  %65 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE8iteratordeEv(ptr noundef nonnull align 8 dereferenceable(12) %4)
          to label %66 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

66:                                               ; preds = %64
  %67 = getelementptr inbounds i8, ptr %65, i64 16
  %68 = call noundef ptr @_ZN3JPH5ArrayI8BufferVKNS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %67)
  %69 = call noundef ptr @_ZN3JPH5ArrayI8BufferVKNS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %67)
  %.not126170 = icmp eq ptr %68, %69
  br i1 %.not126170, label %._crit_edge174, label %.lr.ph173

._crit_edge174:                                   ; preds = %71, %66
  %70 = invoke noundef nonnull align 8 dereferenceable(12) ptr @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE12IteratorBaseISF_NSF_8iteratorEEppEv(ptr noundef nonnull align 8 dereferenceable(12) %4)
          to label %.preheader146 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

.lr.ph173:                                        ; preds = %66, %71
  %.089171 = phi ptr [ %72, %71 ], [ %68, %66 ]
  invoke void @_ZN10RendererVK18FreeBufferInternalER8BufferVK(ptr noundef nonnull align 16 dereferenceable(1936) %0, ptr noundef nonnull align 8 dereferenceable(48) %.089171)
          to label %71 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

71:                                               ; preds = %.lr.ph173
  %72 = getelementptr inbounds i8, ptr %.089171, i64 48
  %.not126 = icmp eq ptr %72, %69
  br i1 %.not126, label %._crit_edge174, label %.lr.ph173

73:                                               ; preds = %62
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #8
  invoke void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayINS1_6MemoryENS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE3endEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<RendererVK::Memory>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<RendererVK::Memory>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator") align 8 %7, ptr noundef nonnull align 8 dereferenceable(28) %63)
          to label %.preheader140 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

.preheader140:                                    ; preds = %73, %._crit_edge179
  %74 = invoke noundef zeroext i1 @_ZNK3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayINS1_6MemoryENS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE12IteratorBaseISF_NSF_8iteratorEEneERKSH_(ptr noundef nonnull align 8 dereferenceable(12) %6, ptr noundef nonnull align 8 dereferenceable(12) %7)
          to label %75 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

75:                                               ; preds = %.preheader140
  br i1 %74, label %79, label %76

76:                                               ; preds = %75
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #8
  %.091.ptr = getelementptr inbounds i8, ptr %0, i64 1712
  %77 = load ptr, ptr %.091.ptr, align 16, !tbaa !35
  %78 = load ptr, ptr %8, align 16, !tbaa !8
  invoke void @vkDestroyFence(ptr noundef %78, ptr noundef %77, ptr noundef null)
          to label %94 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit

79:                                               ; preds = %75
  %80 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayINS1_6MemoryENS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE8iteratordeEv(ptr noundef nonnull align 8 dereferenceable(12) %6)
          to label %81 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

81:                                               ; preds = %79
  %82 = getelementptr inbounds i8, ptr %80, i64 16
  %83 = call noundef ptr @_ZN3JPH5ArrayIN10RendererVK6MemoryENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %82)
  %84 = call noundef ptr @_ZN3JPH5ArrayIN10RendererVK6MemoryENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %82)
  %.not125175 = icmp eq ptr %83, %84
  br i1 %.not125175, label %._crit_edge179, label %.lr.ph178

._crit_edge179:                                   ; preds = %92, %81
  %85 = invoke noundef nonnull align 8 dereferenceable(12) ptr @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayINS1_6MemoryENS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE12IteratorBaseISF_NSF_8iteratorEEppEv(ptr noundef nonnull align 8 dereferenceable(12) %6)
          to label %.preheader140 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

.lr.ph178:                                        ; preds = %81, %92
  %.090176 = phi ptr [ %93, %92 ], [ %83, %81 ]
  %86 = getelementptr inbounds i8, ptr %.090176, i64 8
  %87 = load i64, ptr %86, align 8, !tbaa !39
  %88 = icmp eq i64 %87, 0
  br i1 %88, label %89, label %92

89:                                               ; preds = %.lr.ph178
  %90 = load ptr, ptr %8, align 16, !tbaa !8
  %91 = load ptr, ptr %.090176, align 8, !tbaa !41
  invoke void @vkFreeMemory(ptr noundef %90, ptr noundef %91, ptr noundef null)
          to label %92 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

92:                                               ; preds = %89, %.lr.ph178
  %93 = getelementptr inbounds i8, ptr %.090176, i64 16
  %.not125 = icmp eq ptr %93, %84
  br i1 %.not125, label %._crit_edge179, label %.lr.ph178

94:                                               ; preds = %76
  %.091.ptr.1 = getelementptr inbounds i8, ptr %0, i64 1720
  %95 = load ptr, ptr %.091.ptr.1, align 8, !tbaa !35
  %96 = load ptr, ptr %8, align 16, !tbaa !8
  invoke void @vkDestroyFence(ptr noundef %96, ptr noundef %95, ptr noundef null)
          to label %.preheader131.preheader unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit

.preheader131.preheader:                          ; preds = %94
  %.088.ptr = getelementptr inbounds i8, ptr %0, i64 1696
  %97 = load ptr, ptr %.088.ptr, align 16, !tbaa !35
  %98 = load ptr, ptr %8, align 16, !tbaa !8
  invoke void @vkDestroySemaphore(ptr noundef %98, ptr noundef %97, ptr noundef null)
          to label %.preheader131.1 unwind label %.loopexit.split-lp.loopexit

.preheader131.1:                                  ; preds = %.preheader131.preheader
  %.088.ptr.1 = getelementptr inbounds i8, ptr %0, i64 1704
  %99 = load ptr, ptr %.088.ptr.1, align 8, !tbaa !35
  %100 = load ptr, ptr %8, align 16, !tbaa !8
  invoke void @vkDestroySemaphore(ptr noundef %100, ptr noundef %99, ptr noundef null)
          to label %.preheader130.preheader unwind label %.loopexit.split-lp.loopexit

.preheader130.preheader:                          ; preds = %.preheader131.1
  %.085.ptr = getelementptr inbounds i8, ptr %0, i64 1680
  %101 = load ptr, ptr %.085.ptr, align 16, !tbaa !35
  %102 = load ptr, ptr %8, align 16, !tbaa !8
  invoke void @vkDestroySemaphore(ptr noundef %102, ptr noundef %101, ptr noundef null)
          to label %.preheader130.1 unwind label %.loopexit

.preheader130.1:                                  ; preds = %.preheader130.preheader
  %.085.ptr.1 = getelementptr inbounds i8, ptr %0, i64 1688
  %103 = load ptr, ptr %.085.ptr.1, align 8, !tbaa !35
  %104 = load ptr, ptr %8, align 16, !tbaa !8
  invoke void @vkDestroySemaphore(ptr noundef %104, ptr noundef %103, ptr noundef null)
          to label %105 unwind label %.loopexit

105:                                              ; preds = %.preheader130.1
  %106 = load ptr, ptr %8, align 16, !tbaa !8
  %107 = getelementptr inbounds i8, ptr %0, i64 1656
  %108 = load ptr, ptr %107, align 8, !tbaa !42
  invoke void @vkDestroyCommandPool(ptr noundef %106, ptr noundef %108, ptr noundef null)
          to label %109 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

109:                                              ; preds = %105
  %110 = load ptr, ptr %8, align 16, !tbaa !8
  %111 = getelementptr inbounds i8, ptr %0, i64 1608
  %112 = load ptr, ptr %111, align 8, !tbaa !43
  invoke void @vkDestroyPipelineLayout(ptr noundef %110, ptr noundef %112, ptr noundef null)
          to label %113 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

113:                                              ; preds = %109
  %114 = load ptr, ptr %8, align 16, !tbaa !8
  %115 = getelementptr inbounds i8, ptr %0, i64 1592
  %116 = load ptr, ptr %115, align 8, !tbaa !44
  invoke void @vkDestroyRenderPass(ptr noundef %114, ptr noundef %116, ptr noundef null)
          to label %117 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

117:                                              ; preds = %113
  %118 = load ptr, ptr %8, align 16, !tbaa !8
  %119 = getelementptr inbounds i8, ptr %0, i64 1600
  %120 = load ptr, ptr %119, align 16, !tbaa !45
  invoke void @vkDestroyRenderPass(ptr noundef %118, ptr noundef %120, ptr noundef null)
          to label %121 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

121:                                              ; preds = %117
  %122 = load ptr, ptr %8, align 16, !tbaa !8
  %123 = getelementptr inbounds i8, ptr %0, i64 1536
  %124 = load ptr, ptr %123, align 16, !tbaa !46
  invoke void @vkDestroyDescriptorPool(ptr noundef %122, ptr noundef %124, ptr noundef null)
          to label %125 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

125:                                              ; preds = %121
  %126 = load ptr, ptr %8, align 16, !tbaa !8
  %127 = getelementptr inbounds i8, ptr %0, i64 1576
  %128 = load ptr, ptr %127, align 8, !tbaa !47
  invoke void @vkDestroySampler(ptr noundef %126, ptr noundef %128, ptr noundef null)
          to label %129 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

129:                                              ; preds = %125
  %130 = load ptr, ptr %8, align 16, !tbaa !8
  %131 = getelementptr inbounds i8, ptr %0, i64 1584
  %132 = load ptr, ptr %131, align 16, !tbaa !48
  invoke void @vkDestroySampler(ptr noundef %130, ptr noundef %132, ptr noundef null)
          to label %133 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

133:                                              ; preds = %129
  %134 = load ptr, ptr %8, align 16, !tbaa !8
  %135 = getelementptr inbounds i8, ptr %0, i64 1520
  %136 = load ptr, ptr %135, align 16, !tbaa !49
  invoke void @vkDestroyDescriptorSetLayout(ptr noundef %134, ptr noundef %136, ptr noundef null)
          to label %137 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

137:                                              ; preds = %133
  %138 = load ptr, ptr %8, align 16, !tbaa !8
  %139 = getelementptr inbounds i8, ptr %0, i64 1528
  %140 = load ptr, ptr %139, align 8, !tbaa !50
  invoke void @vkDestroyDescriptorSetLayout(ptr noundef %138, ptr noundef %140, ptr noundef null)
          to label %141 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

141:                                              ; preds = %137
  invoke void @_ZN10RendererVK16DestroySwapChainEv(ptr noundef nonnull align 16 dereferenceable(1936) %0)
          to label %142 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

142:                                              ; preds = %141
  %143 = getelementptr inbounds i8, ptr %0, i64 832
  %144 = load ptr, ptr %143, align 16, !tbaa !51
  %145 = getelementptr inbounds i8, ptr %0, i64 1408
  %146 = load ptr, ptr %145, align 16, !tbaa !52
  invoke void @vkDestroySurfaceKHR(ptr noundef %144, ptr noundef %146, ptr noundef null)
          to label %147 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

147:                                              ; preds = %142
  %148 = load ptr, ptr %8, align 16, !tbaa !8
  invoke void @vkDestroyDevice(ptr noundef %148, ptr noundef null)
          to label %149 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

149:                                              ; preds = %147
  %150 = load ptr, ptr %143, align 16, !tbaa !51
  %151 = invoke ptr @vkGetInstanceProcAddr(ptr noundef %150, ptr noundef nonnull @.str.1)
          to label %152 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

152:                                              ; preds = %149
  %.not110 = icmp eq ptr %151, null
  br i1 %.not110, label %157, label %153

153:                                              ; preds = %152
  %154 = load ptr, ptr %143, align 16, !tbaa !51
  %155 = getelementptr inbounds i8, ptr %0, i64 840
  %156 = load ptr, ptr %155, align 8, !tbaa !53
  invoke void %151(ptr noundef %154, ptr noundef %156, ptr noundef null)
          to label %157 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

157:                                              ; preds = %153, %152
  %158 = load ptr, ptr %143, align 16, !tbaa !51
  invoke void @vkDestroyInstance(ptr noundef %158, ptr noundef null)
          to label %.preheader129.preheader unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

.preheader129.preheader:                          ; preds = %157
  call void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayINS1_6MemoryENS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(28) %63) #8
  call void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(28) %40) #8
  call void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(28) %.086.ptr) #8
  call void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(28) %.086.ptr167) #8
  call void @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %.084.ptr.1) #8
  call void @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %.084.ptr) #8
  call void @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %.083.ptr.1) #8
  call void @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %.083.ptr) #8
  call void @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %.0.ptr.1) #8
  call void @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %.0.ptr) #8
  call void @_ZN3JPH3RefI9TextureVKED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %20) #8
  %159 = getelementptr inbounds i8, ptr %0, i64 1624
  call void @_ZN3JPH5ArrayIP15VkFramebuffer_TNS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %159) #8
  %160 = getelementptr inbounds i8, ptr %0, i64 1472
  call void @_ZN3JPH5ArrayIP13VkImageView_TNS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %160) #8
  %161 = getelementptr inbounds i8, ptr %0, i64 1432
  call void @_ZN3JPH5ArrayIP9VkImage_TNS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %161) #8
  call void @_ZN8RendererD2Ev(ptr noundef nonnull align 16 dereferenceable(832) %0) #8
  ret void

.loopexit:                                        ; preds = %.preheader130.1, %.preheader130.preheader
  %lpad.loopexit = landingpad { ptr, i32 }
          catch ptr null
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit:                      ; preds = %.preheader131.1, %.preheader131.preheader
  %lpad.loopexit132 = landingpad { ptr, i32 }
          catch ptr null
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit:    ; preds = %94, %76
  %lpad.loopexit135 = landingpad { ptr, i32 }
          catch ptr null
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit: ; preds = %89
  %lpad.loopexit137 = landingpad { ptr, i32 }
          catch ptr null
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit: ; preds = %.preheader140, %79, %._crit_edge179
  %lpad.loopexit141 = landingpad { ptr, i32 }
          catch ptr null
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit: ; preds = %.lr.ph173
  %lpad.loopexit143 = landingpad { ptr, i32 }
          catch ptr null
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit: ; preds = %.preheader146, %64, %._crit_edge174
  %lpad.loopexit147 = landingpad { ptr, i32 }
          catch ptr null
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.loopexit: ; preds = %.lr.ph
  %lpad.loopexit183 = landingpad { ptr, i32 }
          catch ptr null
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.loopexit.split-lp: ; preds = %.lr.ph.1
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          catch ptr null
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.loopexit: ; preds = %._crit_edge, %50, %.preheader152
  %lpad.loopexit185 = landingpad { ptr, i32 }
          catch ptr null
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.loopexit.split-lp: ; preds = %.preheader152.1, %41, %._crit_edge.1
  %lpad.loopexit.split-lp186 = landingpad { ptr, i32 }
          catch ptr null
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit: ; preds = %36, %35, %32, %.preheader161.preheader
  %lpad.loopexit156 = landingpad { ptr, i32 }
          catch ptr null
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp: ; preds = %157, %153, %149, %147, %142, %141, %137, %133, %129, %125, %121, %117, %113, %109, %105, %73, %62, %59, %39, %22, %19, %11, %1
  %lpad.loopexit.split-lp157 = landingpad { ptr, i32 }
          catch ptr null
  br label %.loopexit.split-lp

.loopexit.split-lp:                               ; preds = %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.loopexit, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.loopexit.split-lp, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.loopexit, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.loopexit.split-lp, %.loopexit.split-lp.loopexit, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit, %.loopexit.split-lp.loopexit.split-lp.loopexit, %.loopexit
  %lpad.phi = phi { ptr, i32 } [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit132, %.loopexit.split-lp.loopexit ], [ %lpad.loopexit135, %.loopexit.split-lp.loopexit.split-lp.loopexit ], [ %lpad.loopexit137, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit ], [ %lpad.loopexit141, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit ], [ %lpad.loopexit143, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit ], [ %lpad.loopexit147, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit ], [ %lpad.loopexit156, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit ], [ %lpad.loopexit.split-lp157, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp ], [ %lpad.loopexit183, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.loopexit.split-lp ], [ %lpad.loopexit185, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.loopexit ], [ %lpad.loopexit.split-lp186, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.loopexit.split-lp ]
  %162 = extractvalue { ptr, i32 } %lpad.phi, 0
  call void @__clang_call_terminate(ptr %162) #9
  unreachable
}

declare i32 @vkDeviceWaitIdle(ptr noundef) local_unnamed_addr #2

; Function Attrs: noinline noreturn nounwind uwtable
declare hidden void @__clang_call_terminate(ptr noundef) local_unnamed_addr #3

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

declare void @vkDestroyFramebuffer(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE5beginEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<BufferVK>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<BufferVK>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator") align 8, ptr noundef nonnull align 8 dereferenceable(28)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE3endEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<BufferVK>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<BufferVK>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator") align 8, ptr noundef nonnull align 8 dereferenceable(28)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE12IteratorBaseISF_NSF_8iteratorEEneERKSH_(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE8iteratordeEv(ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #5 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN10RendererVK18FreeBufferInternalER8BufferVK(ptr noundef nonnull align 16 dereferenceable(1936), ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(12) ptr @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE12IteratorBaseISF_NSF_8iteratorEEppEv(ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayINS1_6MemoryENS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE5beginEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<RendererVK::Memory>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<RendererVK::Memory>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator") align 8, ptr noundef nonnull align 8 dereferenceable(28)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayINS1_6MemoryENS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE3endEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::HashTable<RendererVK::Key, std::pair<RendererVK::Key, JPH::Array<RendererVK::Memory>>, JPH::UnorderedMapDetail<RendererVK::Key, JPH::Array<RendererVK::Memory>>, RendererVK::KeyHasher, std::equal_to<RendererVK::Key>>::iterator") align 8, ptr noundef nonnull align 8 dereferenceable(28)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayINS1_6MemoryENS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE12IteratorBaseISF_NSF_8iteratorEEneERKSH_(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayINS1_6MemoryENS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE8iteratordeEv(ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #5 align 2

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

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

declare void @vkFreeMemory(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(12) ptr @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayINS1_6MemoryENS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EE12IteratorBaseISF_NSF_8iteratorEEppEv(ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #5 align 2

declare void @vkDestroyFence(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @vkDestroySemaphore(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @vkDestroyCommandPool(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @vkDestroyPipelineLayout(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @vkDestroyRenderPass(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @vkDestroyDescriptorPool(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @vkDestroySampler(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @vkDestroyDescriptorSetLayout(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN10RendererVK16DestroySwapChainEv(ptr noundef nonnull align 16 dereferenceable(1936)) local_unnamed_addr #5 align 2

declare void @vkDestroySurfaceKHR(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @vkDestroyDevice(ptr noundef, ptr noundef) local_unnamed_addr #2

declare ptr @vkGetInstanceProcAddr(ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @vkDestroyInstance(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayINS1_6MemoryENS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(28)) unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(28)) unnamed_addr #1 align 2

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

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

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

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

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

; Function Attrs: nounwind
declare void @_ZN8RendererD2Ev(ptr noundef nonnull align 16 dereferenceable(832)) unnamed_addr #7

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { noinline noreturn nounwind uwtable "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint mustprogress 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 = { 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 #6 = { 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 #7 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nounwind }
attributes #9 = { noreturn 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 = !{!"vtable pointer", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = !{!9, !11, i64 1376}
!9 = !{!"_ZTS10RendererVK", !10, i64 0, !11, i64 832, !11, i64 840, !11, i64 848, !23, i64 856, !11, i64 1376, !18, i64 1384, !18, i64 1388, !11, i64 1392, !11, i64 1400, !11, i64 1408, !11, i64 1416, !14, i64 1424, !24, i64 1432, !26, i64 1456, !27, i64 1460, !28, i64 1472, !11, i64 1496, !11, i64 1504, !11, i64 1512, !11, i64 1520, !11, i64 1528, !11, i64 1536, !12, i64 1544, !12, i64 1560, !11, i64 1576, !11, i64 1584, !11, i64 1592, !11, i64 1600, !11, i64 1608, !11, i64 1616, !29, i64 1624, !18, i64 1648, !11, i64 1656, !12, i64 1664, !12, i64 1680, !12, i64 1696, !12, i64 1712, !30, i64 1728, !12, i64 1736, !12, i64 1752, !12, i64 1768, !12, i64 1784, !31, i64 1848, !33, i64 1880, !18, i64 1912, !18, i64 1916, !25, i64 1920, !25, i64 1928}
!10 = !{!"_ZTS8Renderer", !11, i64 8, !13, i64 16, !14, i64 20, !15, i64 32, !16, i64 96, !17, i64 112, !17, i64 192, !18, i64 272, !19, i64 288, !19, i64 544, !21, i64 800}
!11 = !{!"any pointer", !12, i64 0}
!12 = !{!"omnipotent char", !7, i64 0}
!13 = !{!"float", !12, i64 0}
!14 = !{!"bool", !12, i64 0}
!15 = !{!"_ZTS11CameraState", !16, i64 0, !16, i64 16, !16, i64 32, !13, i64 48}
!16 = !{!"_ZTSN3JPH4Vec3E", !12, i64 0}
!17 = !{!"_ZTS7Frustum", !12, i64 0}
!18 = !{!"int", !12, i64 0}
!19 = !{!"_ZTSN8Renderer26VertexShaderConstantBufferE", !20, i64 0, !20, i64 64, !20, i64 128, !20, i64 192}
!20 = !{!"_ZTSN3JPH5Mat44E", !12, i64 0}
!21 = !{!"_ZTSN8Renderer25PixelShaderConstantBufferE", !22, i64 0, !22, i64 16}
!22 = !{!"_ZTSN3JPH4Vec4E", !12, i64 0}
!23 = !{!"_ZTS32VkPhysicalDeviceMemoryProperties", !18, i64 0, !12, i64 4, !18, i64 260, !12, i64 264}
!24 = !{!"_ZTSN3JPH5ArrayIP9VkImage_TNS_12STLAllocatorIS2_EEEE", !25, i64 0, !25, i64 8, !11, i64 16}
!25 = !{!"long", !12, i64 0}
!26 = !{!"_ZTS8VkFormat", !12, i64 0}
!27 = !{!"_ZTS10VkExtent2D", !18, i64 0, !18, i64 4}
!28 = !{!"_ZTSN3JPH5ArrayIP13VkImageView_TNS_12STLAllocatorIS2_EEEE", !25, i64 0, !25, i64 8, !11, i64 16}
!29 = !{!"_ZTSN3JPH5ArrayIP15VkFramebuffer_TNS_12STLAllocatorIS2_EEEE", !25, i64 0, !25, i64 8, !11, i64 16}
!30 = !{!"_ZTSN3JPH3RefI9TextureVKEE", !11, i64 0}
!31 = !{!"_ZTSN3JPH12UnorderedMapIN10RendererVK3KeyENS_5ArrayI8BufferVKNS_12STLAllocatorIS4_EEEENS1_9KeyHasherESt8equal_toIS2_EEE", !32, i64 0}
!32 = !{!"_ZTSN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EEE", !11, i64 0, !11, i64 8, !18, i64 16, !18, i64 20, !18, i64 24}
!33 = !{!"_ZTSN3JPH12UnorderedMapIN10RendererVK3KeyENS_5ArrayINS1_6MemoryENS_12STLAllocatorIS4_EEEENS1_9KeyHasherESt8equal_toIS2_EEE", !34, i64 0}
!34 = !{!"_ZTSN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayINS1_6MemoryENS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EEE", !11, i64 0, !11, i64 8, !18, i64 16, !18, i64 20, !18, i64 24}
!35 = !{!11, !11, i64 0}
!36 = !{!9, !18, i64 1916}
!37 = !{!9, !25, i64 1928}
!38 = !{!9, !11, i64 1616}
!39 = !{!40, !25, i64 8}
!40 = !{!"_ZTSN10RendererVK6MemoryE", !11, i64 0, !25, i64 8}
!41 = !{!40, !11, i64 0}
!42 = !{!9, !11, i64 1656}
!43 = !{!9, !11, i64 1608}
!44 = !{!9, !11, i64 1592}
!45 = !{!9, !11, i64 1600}
!46 = !{!9, !11, i64 1536}
!47 = !{!9, !11, i64 1576}
!48 = !{!9, !11, i64 1584}
!49 = !{!9, !11, i64 1520}
!50 = !{!9, !11, i64 1528}
!51 = !{!9, !11, i64 832}
!52 = !{!9, !11, i64 1408}
!53 = !{!9, !11, i64 840}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SROAPass,SimplifyCFGPass,TailCallElimPass