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

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

%struct.VkDescriptorPoolSize = type { i32, i32 }
%"class.JPH::Array.21" = type { i64, i64, ptr }
%"class.JPH::Array.24" = type { i64, i64, ptr }
%"class.JPH::Array.27" = type { i64, i64, ptr }
%"class.JPH::STLAllocator.28" = type { i8 }
%struct.VkInstanceCreateInfo = type { i32, ptr, i32, ptr, i32, ptr, i32, ptr }
%struct.VkDebugUtilsMessengerCreateInfoEXT = type { i32, ptr, i32, i32, i32, ptr, ptr }
%struct.VkXlibSurfaceCreateInfoKHR = type { i32, ptr, i32, ptr, i64 }
%"class.JPH::Array.32" = type { i64, i64, ptr }
%"class.JPH::Array.35" = type { i64, i64, ptr }
%struct.VkPhysicalDeviceProperties = type { i32, i32, i32, i32, i32, [256 x i8], [16 x i8], %struct.VkPhysicalDeviceLimits, %struct.VkPhysicalDeviceSparseProperties }
%struct.VkPhysicalDeviceLimits = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i64, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [3 x i32], i32, [3 x i32], i32, i32, i32, i32, i32, float, float, i32, [2 x i32], [2 x float], i32, i64, i64, i64, i64, i32, i32, i32, i32, float, float, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, i32, i32, i32, i32, [2 x float], [2 x float], float, float, i32, i32, i64, i64, i64 }
%struct.VkPhysicalDeviceSparseProperties = type { i32, i32, i32, i32, i32 }
%"class.JPH::Array.38" = type { i64, i64, ptr }
%struct.VkSurfaceFormatKHR = type { i32, i32 }
%struct.Device = type <{ ptr, %"class.std::__cxx11::basic_string", %struct.VkSurfaceFormatKHR, i32, i32, i32, [4 x i8] }>
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider", i64, %union.anon.43 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.43 = type { i64, [8 x i8] }
%"class.JPH::STLAllocator.41" = type { i8 }
%class.anon = type { i8 }
%struct.VkPhysicalDeviceFeatures = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.VkDeviceQueueCreateInfo = type { i32, ptr, i32, i32, i32, ptr }
%struct.VkDeviceCreateInfo = type { i32, ptr, i32, i32, ptr, i32, ptr, i32, ptr, ptr }
%struct.VkCommandPoolCreateInfo = type { i32, ptr, i32, i32 }
%struct.VkCommandBufferAllocateInfo = type { i32, ptr, ptr, i32, i32 }
%struct.VkSemaphoreCreateInfo = type { i32, ptr, i32 }
%struct.VkFenceCreateInfo = type { i32, ptr, i32 }
%"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 }
%struct.VkDescriptorSetLayoutBinding = type { i32, i32, i32, i32, ptr }
%struct.VkDescriptorSetLayoutCreateInfo = type { i32, ptr, i32, i32, ptr }
%struct.VkPipelineLayoutCreateInfo = type { i32, ptr, i32, i32, ptr, i32, ptr }
%struct.VkDescriptorPoolCreateInfo = type { i32, ptr, i32, i32, i32, ptr }
%"class.JPH::Array.44" = type { i64, i64, ptr }
%"class.JPH::STLAllocator.45" = type { i8 }
%struct.VkDescriptorSetAllocateInfo = type { i32, ptr, ptr, i32, ptr }
%struct.VkDescriptorBufferInfo = type { ptr, i64, i64 }
%struct.VkWriteDescriptorSet = type { i32, ptr, ptr, i32, i32, i32, i32, ptr, ptr, ptr }
%struct.VkSamplerCreateInfo = type { i32, ptr, i32, i32, i32, i32, i32, i32, i32, float, i32, float, i32, i32, float, float, i32, i32 }
%struct.VkAttachmentDescription = type { i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.VkAttachmentReference = type { i32, i32 }
%struct.VkSubpassDescription = type { i32, i32, i32, ptr, i32, ptr, ptr, ptr, i32, ptr }
%struct.VkSubpassDependency = type { i32, i32, i32, i32, i32, i32, i32 }
%struct.VkRenderPassCreateInfo = type { i32, ptr, i32, i32, ptr, i32, ptr, i32, ptr }
%struct.VkFramebufferCreateInfo = type { i32, ptr, i32, ptr, i32, ptr, i32, i32, i32 }
%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.VkLayerProperties = type { [256 x i8], i32, i32, [256 x i8] }
%struct.VkExtensionProperties = type { [256 x i8], 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 }
%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.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.VkQueueFamilyProperties = type { i32, i32, i32, %struct.VkExtent3D }
%struct.VkExtent3D = type { i32, i32, i32 }

@_ZN3JPH5TraceE = external global ptr, align 8
@.str.2 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [17 x i8], align 1
@__const._ZN10RendererVK10InitializeEP17ApplicationWindow.desired_validation_layers = external hidden unnamed_addr constant [1 x ptr], align 8
@.str.6 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [32 x i8], align 1
@__const._ZN10RendererVK10InitializeEP17ApplicationWindow.descriptor_pool_sizes = external hidden unnamed_addr constant [2 x %struct.VkDescriptorPoolSize], align 16

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) #4

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN10RendererVK10InitializeEP17ApplicationWindow(ptr noundef nonnull align 16 dereferenceable(1936) %0, ptr noundef %1) unnamed_addr #5 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca %"class.JPH::Array.21", align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca %"class.JPH::Array.21", align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca %"class.JPH::Array.24", align 8
  %14 = alloca i32, align 4
  %15 = alloca %"class.JPH::Array.27", align 8
  %16 = alloca %"class.JPH::STLAllocator.28", align 1
  %17 = alloca %struct.VkInstanceCreateInfo, align 8
  %18 = alloca [1 x ptr], align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca %struct.VkDebugUtilsMessengerCreateInfoEXT, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca %struct.VkXlibSurfaceCreateInfoKHR, align 8
  %32 = alloca i32, align 4
  %33 = alloca %"class.JPH::Array.32", align 8
  %34 = alloca %"class.JPH::Array.35", align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca %struct.VkPhysicalDeviceProperties, align 8
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca %"class.JPH::Array.24", align 8
  %43 = alloca i32, align 4
  %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 i32, align 4
  %53 = alloca %"class.JPH::Array.38", align 8
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  %56 = alloca i32, align 4
  %57 = alloca i32, align 4
  %58 = alloca %struct.VkSurfaceFormatKHR, align 4
  %59 = alloca %struct.Device, align 8
  %60 = alloca %"class.JPH::STLAllocator.41", align 1
  %61 = alloca %class.anon, align 1
  %62 = alloca ptr, align 8
  %63 = alloca %struct.VkPhysicalDeviceFeatures, align 4
  %64 = alloca float, align 4
  %65 = alloca [2 x %struct.VkDeviceQueueCreateInfo], align 16
  %66 = alloca i64, align 8
  %67 = alloca %struct.VkPhysicalDeviceFeatures, align 4
  %68 = alloca %struct.VkDeviceCreateInfo, align 8
  %69 = alloca %struct.VkCommandPoolCreateInfo, align 8
  %70 = alloca %struct.VkCommandBufferAllocateInfo, align 8
  %71 = alloca i32, align 4
  %72 = alloca %struct.VkSemaphoreCreateInfo, align 8
  %73 = alloca i32, align 4
  %74 = alloca %struct.VkFenceCreateInfo, align 8
  %75 = alloca i32, align 4
  %76 = alloca i32, align 4
  %77 = alloca %"class.std::unique_ptr", align 8
  %78 = alloca %"class.std::unique_ptr", align 8
  %79 = alloca %"class.std::unique_ptr", align 8
  %80 = alloca [2 x %struct.VkDescriptorSetLayoutBinding], align 16
  %81 = alloca %struct.VkDescriptorSetLayoutCreateInfo, align 8
  %82 = alloca %struct.VkDescriptorSetLayoutBinding, align 8
  %83 = alloca %struct.VkDescriptorSetLayoutCreateInfo, align 8
  %84 = alloca %struct.VkPipelineLayoutCreateInfo, align 8
  %85 = alloca [2 x ptr], align 16
  %86 = alloca [2 x %struct.VkDescriptorPoolSize], align 16
  %87 = alloca %struct.VkDescriptorPoolCreateInfo, align 8
  %88 = alloca %"class.JPH::Array.44", align 8
  %89 = alloca %"class.JPH::STLAllocator.45", align 1
  %90 = alloca %struct.VkDescriptorSetAllocateInfo, align 8
  %91 = alloca i32, align 4
  %92 = alloca %struct.VkDescriptorBufferInfo, align 8
  %93 = alloca %struct.VkDescriptorBufferInfo, align 8
  %94 = alloca [2 x %struct.VkWriteDescriptorSet], align 16
  %95 = alloca i32, align 4
  %96 = alloca %struct.VkDescriptorBufferInfo, align 8
  %97 = alloca %struct.VkWriteDescriptorSet, align 8
  %98 = alloca %struct.VkSamplerCreateInfo, align 8
  %99 = alloca %struct.VkAttachmentDescription, align 4
  %100 = alloca %struct.VkAttachmentReference, align 4
  %101 = alloca %struct.VkSubpassDescription, align 8
  %102 = alloca %struct.VkSubpassDependency, align 4
  %103 = alloca %struct.VkRenderPassCreateInfo, align 8
  %104 = alloca [1 x ptr], align 8
  %105 = alloca %struct.VkFramebufferCreateInfo, align 8
  %106 = alloca [2 x %struct.VkAttachmentDescription], align 16
  %107 = alloca ptr, align 8
  %108 = alloca %struct.VkAttachmentReference, align 4
  %109 = alloca ptr, align 8
  %110 = alloca %struct.VkAttachmentReference, align 4
  %111 = alloca %struct.VkSubpassDescription, align 8
  %112 = alloca %struct.VkSubpassDependency, align 4
  %113 = alloca %struct.VkRenderPassCreateInfo, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %114 = load ptr, ptr %3, align 8
  %115 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN8Renderer10InitializeEP17ApplicationWindow(ptr noundef nonnull align 16 dereferenceable(832) %114, ptr noundef %115)
  %116 = getelementptr inbounds %class.Renderer, ptr %114, i32 0, i32 2
  store float -1.000000e+00, ptr %116, align 16, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 24, ptr %5) #12
  call void @_ZN3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #12
  store ptr @.str.2, ptr %6, align 8, !tbaa !5
  invoke void @_ZN3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %6)
          to label %117 unwind label %152

117:                                              ; preds = %2
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #12
  store ptr @.str.3, ptr %9, align 8, !tbaa !5
  invoke void @_ZN3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %9)
          to label %118 unwind label %156

118:                                              ; preds = %117
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #12
  call void @llvm.lifetime.start.p0(i64 24, ptr %10) #12
  call void @_ZN3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #12
  store ptr @.str.4, ptr %11, align 8, !tbaa !5
  invoke void @_ZN3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 8 dereferenceable(8) %11)
          to label %119 unwind label %160

119:                                              ; preds = %118
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #12
  store i32 0, ptr %12, align 4, !tbaa !21
  %120 = invoke i32 @vkEnumerateInstanceExtensionProperties(ptr noundef null, ptr noundef %12, ptr noundef null)
          to label %121 unwind label %164

121:                                              ; preds = %119
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %120)
          to label %122 unwind label %164

122:                                              ; preds = %121
  call void @llvm.lifetime.start.p0(i64 24, ptr %13) #12
  call void @_ZN3JPH5ArrayI21VkExtensionPropertiesNS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #12
  %123 = load i32, ptr %12, align 4, !tbaa !21
  %124 = zext i32 %123 to i64
  invoke void @_ZN3JPH5ArrayI21VkExtensionPropertiesNS_12STLAllocatorIS1_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %124)
          to label %125 unwind label %168

125:                                              ; preds = %122
  %126 = invoke noundef ptr @_ZN3JPH5ArrayI21VkExtensionPropertiesNS_12STLAllocatorIS1_EEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %13)
          to label %127 unwind label %168

127:                                              ; preds = %125
  %128 = invoke i32 @vkEnumerateInstanceExtensionProperties(ptr noundef null, ptr noundef %12, ptr noundef %126)
          to label %129 unwind label %168

129:                                              ; preds = %127
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %128)
          to label %130 unwind label %168

130:                                              ; preds = %129
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #12
  %131 = invoke i32 @vkEnumerateInstanceLayerProperties(ptr noundef %14, ptr noundef null)
          to label %132 unwind label %172

132:                                              ; preds = %130
  call void @llvm.lifetime.start.p0(i64 24, ptr %15) #12
  %133 = load i32, ptr %14, align 4, !tbaa !21
  %134 = zext i32 %133 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #12
  invoke void @_ZN3JPH5ArrayI17VkLayerPropertiesNS_12STLAllocatorIS1_EEEC2EmRKS3_(ptr noundef nonnull align 8 dereferenceable(24) %15, i64 noundef %134, ptr noundef nonnull align 1 dereferenceable(1) %16)
          to label %135 unwind label %176

135:                                              ; preds = %132
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #12
  %136 = invoke noundef ptr @_ZN3JPH5ArrayI17VkLayerPropertiesNS_12STLAllocatorIS1_EEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %15)
          to label %137 unwind label %180

137:                                              ; preds = %135
  %138 = invoke i32 @vkEnumerateInstanceLayerProperties(ptr noundef %14, ptr noundef %136)
          to label %139 unwind label %180

139:                                              ; preds = %137
  call void @llvm.lifetime.start.p0(i64 64, ptr %17) #12
  call void @llvm.memset.p0.i64(ptr align 8 %17, i8 0, i64 64, i1 false)
  %140 = getelementptr inbounds %struct.VkInstanceCreateInfo, ptr %17, i32 0, i32 0
  store i32 1, ptr %140, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %18, ptr align 8 @__const._ZN10RendererVK10InitializeEP17ApplicationWindow.desired_validation_layers, i64 8, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #12
  store ptr %15, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #12
  %141 = load ptr, ptr %19, align 8, !tbaa !5
  %142 = invoke noundef ptr @_ZN3JPH5ArrayI17VkLayerPropertiesNS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %141)
          to label %143 unwind label %184

143:                                              ; preds = %139
  store ptr %142, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #12
  %144 = load ptr, ptr %19, align 8, !tbaa !5
  %145 = invoke noundef ptr @_ZN3JPH5ArrayI17VkLayerPropertiesNS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %144)
          to label %146 unwind label %188

146:                                              ; preds = %143
  store ptr %145, ptr %21, align 8, !tbaa !5
  br label %147

147:                                              ; preds = %209, %146
  %148 = load ptr, ptr %20, align 8, !tbaa !5
  %149 = load ptr, ptr %21, align 8, !tbaa !5
  %150 = icmp ne ptr %148, %149
  br i1 %150, label %192, label %151

151:                                              ; preds = %147
  store i32 2, ptr %22, align 4
  br label %212

152:                                              ; preds = %2
  %153 = landingpad { ptr, i32 }
          cleanup
  %154 = extractvalue { ptr, i32 } %153, 0
  store ptr %154, ptr %7, align 8
  %155 = extractvalue { ptr, i32 } %153, 1
  store i32 %155, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #12
  br label %1356

156:                                              ; preds = %117
  %157 = landingpad { ptr, i32 }
          cleanup
  %158 = extractvalue { ptr, i32 } %157, 0
  store ptr %158, ptr %7, align 8
  %159 = extractvalue { ptr, i32 } %157, 1
  store i32 %159, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #12
  br label %1356

160:                                              ; preds = %118
  %161 = landingpad { ptr, i32 }
          cleanup
  %162 = extractvalue { ptr, i32 } %161, 0
  store ptr %162, ptr %7, align 8
  %163 = extractvalue { ptr, i32 } %161, 1
  store i32 %163, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #12
  br label %1355

164:                                              ; preds = %121, %119
  %165 = landingpad { ptr, i32 }
          cleanup
  %166 = extractvalue { ptr, i32 } %165, 0
  store ptr %166, ptr %7, align 8
  %167 = extractvalue { ptr, i32 } %165, 1
  store i32 %167, ptr %8, align 4
  br label %1354

168:                                              ; preds = %129, %127, %125, %122
  %169 = landingpad { ptr, i32 }
          cleanup
  %170 = extractvalue { ptr, i32 } %169, 0
  store ptr %170, ptr %7, align 8
  %171 = extractvalue { ptr, i32 } %169, 1
  store i32 %171, ptr %8, align 4
  br label %1353

172:                                              ; preds = %130
  %173 = landingpad { ptr, i32 }
          cleanup
  %174 = extractvalue { ptr, i32 } %173, 0
  store ptr %174, ptr %7, align 8
  %175 = extractvalue { ptr, i32 } %173, 1
  store i32 %175, ptr %8, align 4
  br label %1352

176:                                              ; preds = %132
  %177 = landingpad { ptr, i32 }
          cleanup
  %178 = extractvalue { ptr, i32 } %177, 0
  store ptr %178, ptr %7, align 8
  %179 = extractvalue { ptr, i32 } %177, 1
  store i32 %179, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #12
  br label %1351

180:                                              ; preds = %137, %135
  %181 = landingpad { ptr, i32 }
          cleanup
  %182 = extractvalue { ptr, i32 } %181, 0
  store ptr %182, ptr %7, align 8
  %183 = extractvalue { ptr, i32 } %181, 1
  store i32 %183, ptr %8, align 4
  br label %1350

184:                                              ; preds = %139
  %185 = landingpad { ptr, i32 }
          cleanup
  %186 = extractvalue { ptr, i32 } %185, 0
  store ptr %186, ptr %7, align 8
  %187 = extractvalue { ptr, i32 } %185, 1
  store i32 %187, ptr %8, align 4
  br label %213

188:                                              ; preds = %143
  %189 = landingpad { ptr, i32 }
          cleanup
  %190 = extractvalue { ptr, i32 } %189, 0
  store ptr %190, ptr %7, align 8
  %191 = extractvalue { ptr, i32 } %189, 1
  store i32 %191, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #12
  br label %213

192:                                              ; preds = %147
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #12
  %193 = load ptr, ptr %20, align 8, !tbaa !5
  store ptr %193, ptr %23, align 8, !tbaa !5
  %194 = getelementptr inbounds [1 x ptr], ptr %18, i64 0, i64 0
  %195 = load ptr, ptr %194, align 8, !tbaa !5
  %196 = load ptr, ptr %23, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.VkLayerProperties, ptr %196, i32 0, i32 0
  %198 = getelementptr inbounds [256 x i8], ptr %197, i64 0, i64 0
  %199 = call i32 @strcmp(ptr noundef %195, ptr noundef %198) #13
  %200 = icmp eq i32 %199, 0
  br i1 %200, label %201, label %205

201:                                              ; preds = %192
  %202 = getelementptr inbounds %struct.VkInstanceCreateInfo, ptr %17, i32 0, i32 4
  store i32 1, ptr %202, align 8, !tbaa !25
  %203 = getelementptr inbounds [1 x ptr], ptr %18, i64 0, i64 0
  %204 = getelementptr inbounds %struct.VkInstanceCreateInfo, ptr %17, i32 0, i32 5
  store ptr %203, ptr %204, align 8, !tbaa !26
  store i32 2, ptr %22, align 4
  br label %206

205:                                              ; preds = %192
  store i32 0, ptr %22, align 4
  br label %206

206:                                              ; preds = %205, %201
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #12
  %207 = load i32, ptr %22, align 4
  switch i32 %207, label %212 [
    i32 0, label %208
  ]

208:                                              ; preds = %206
  br label %209

209:                                              ; preds = %208
  %210 = load ptr, ptr %20, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.VkLayerProperties, ptr %210, i32 1
  store ptr %211, ptr %20, align 8, !tbaa !5
  br label %147

212:                                              ; preds = %206, %151
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #12
  br label %214

213:                                              ; preds = %188, %184
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #12
  br label %1349

214:                                              ; preds = %212
  call void @llvm.lifetime.start.p0(i64 48, ptr %24) #12
  call void @llvm.memset.p0.i64(ptr align 8 %24, i8 0, i64 48, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #12
  store ptr %13, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #12
  %215 = load ptr, ptr %25, align 8, !tbaa !5
  %216 = invoke noundef ptr @_ZN3JPH5ArrayI21VkExtensionPropertiesNS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %215)
          to label %217 unwind label %226

217:                                              ; preds = %214
  store ptr %216, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #12
  %218 = load ptr, ptr %25, align 8, !tbaa !5
  %219 = invoke noundef ptr @_ZN3JPH5ArrayI21VkExtensionPropertiesNS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %218)
          to label %220 unwind label %230

220:                                              ; preds = %217
  store ptr %219, ptr %27, align 8, !tbaa !5
  br label %221

221:                                              ; preds = %256, %220
  %222 = load ptr, ptr %26, align 8, !tbaa !5
  %223 = load ptr, ptr %27, align 8, !tbaa !5
  %224 = icmp ne ptr %222, %223
  br i1 %224, label %234, label %225

225:                                              ; preds = %221
  store i32 4, ptr %22, align 4
  br label %259

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

230:                                              ; preds = %217
  %231 = landingpad { ptr, i32 }
          cleanup
  %232 = extractvalue { ptr, i32 } %231, 0
  store ptr %232, ptr %7, align 8
  %233 = extractvalue { ptr, i32 } %231, 1
  store i32 %233, ptr %8, align 4
  br label %260

234:                                              ; preds = %221
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #12
  %235 = load ptr, ptr %26, align 8, !tbaa !5
  store ptr %235, ptr %28, align 8, !tbaa !5
  %236 = load ptr, ptr %28, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.VkExtensionProperties, ptr %236, i32 0, i32 0
  %238 = getelementptr inbounds [256 x i8], ptr %237, i64 0, i64 0
  %239 = call i32 @strcmp(ptr noundef @.str.6, ptr noundef %238) #13
  %240 = icmp eq i32 %239, 0
  br i1 %240, label %241, label %252

241:                                              ; preds = %234
  %242 = getelementptr inbounds %struct.VkDebugUtilsMessengerCreateInfoEXT, ptr %24, i32 0, i32 0
  store i32 1000128004, ptr %242, align 8, !tbaa !27
  %243 = getelementptr inbounds %struct.VkDebugUtilsMessengerCreateInfoEXT, ptr %24, i32 0, i32 3
  store i32 4369, ptr %243, align 4, !tbaa !29
  %244 = getelementptr inbounds %struct.VkDebugUtilsMessengerCreateInfoEXT, ptr %24, i32 0, i32 4
  store i32 7, ptr %244, align 8, !tbaa !30
  %245 = getelementptr inbounds %struct.VkDebugUtilsMessengerCreateInfoEXT, ptr %24, i32 0, i32 5
  store ptr @_ZL20sVulkanDebugCallback38VkDebugUtilsMessageSeverityFlagBitsEXTjPK36VkDebugUtilsMessengerCallbackDataEXTPv, ptr %245, align 8, !tbaa !31
  %246 = getelementptr inbounds %struct.VkInstanceCreateInfo, ptr %17, i32 0, i32 1
  store ptr %24, ptr %246, align 8, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #12
  store ptr @.str.6, ptr %29, align 8, !tbaa !5
  invoke void @_ZN3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %29)
          to label %247 unwind label %248

247:                                              ; preds = %241
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #12
  store i32 4, ptr %22, align 4
  br label %253

248:                                              ; preds = %241
  %249 = landingpad { ptr, i32 }
          cleanup
  %250 = extractvalue { ptr, i32 } %249, 0
  store ptr %250, ptr %7, align 8
  %251 = extractvalue { ptr, i32 } %249, 1
  store i32 %251, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #12
  br label %260

252:                                              ; preds = %234
  store i32 0, ptr %22, align 4
  br label %253

253:                                              ; preds = %252, %247
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #12
  %254 = load i32, ptr %22, align 4
  switch i32 %254, label %259 [
    i32 0, label %255
  ]

255:                                              ; preds = %253
  br label %256

256:                                              ; preds = %255
  %257 = load ptr, ptr %26, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct.VkExtensionProperties, ptr %257, i32 1
  store ptr %258, ptr %26, align 8, !tbaa !5
  br label %221

259:                                              ; preds = %253, %225
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #12
  br label %262

260:                                              ; preds = %248, %230
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #12
  br label %261

261:                                              ; preds = %260, %226
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #12
  br label %1348

262:                                              ; preds = %259
  %263 = invoke noundef i64 @_ZNK3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %5)
          to label %264 unwind label %290

264:                                              ; preds = %262
  %265 = trunc i64 %263 to i32
  %266 = getelementptr inbounds %struct.VkInstanceCreateInfo, ptr %17, i32 0, i32 6
  store i32 %265, ptr %266, align 8, !tbaa !33
  %267 = invoke noundef ptr @_ZN3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %5)
          to label %268 unwind label %290

268:                                              ; preds = %264
  %269 = getelementptr inbounds %struct.VkInstanceCreateInfo, ptr %17, i32 0, i32 7
  store ptr %267, ptr %269, align 8, !tbaa !34
  %270 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 1
  %271 = invoke i32 @vkCreateInstance(ptr noundef %17, ptr noundef null, ptr noundef %270)
          to label %272 unwind label %290

272:                                              ; preds = %268
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %271)
          to label %273 unwind label %290

273:                                              ; preds = %272
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #12
  %274 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 1
  %275 = load ptr, ptr %274, align 16, !tbaa !35
  %276 = invoke ptr @vkGetInstanceProcAddr(ptr noundef %275, ptr noundef @.str.7)
          to label %277 unwind label %294

277:                                              ; preds = %273
  %278 = ptrtoint ptr %276 to i64
  %279 = inttoptr i64 %278 to ptr
  store ptr %279, ptr %30, align 8, !tbaa !5
  %280 = load ptr, ptr %30, align 8, !tbaa !5
  %281 = icmp ne ptr %280, null
  br i1 %281, label %282, label %298

282:                                              ; preds = %277
  %283 = load ptr, ptr %30, align 8, !tbaa !5
  %284 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 1
  %285 = load ptr, ptr %284, align 16, !tbaa !35
  %286 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 2
  %287 = invoke noundef i32 %283(ptr noundef %285, ptr noundef %24, ptr noundef null, ptr noundef %286)
          to label %288 unwind label %294

288:                                              ; preds = %282
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %287)
          to label %289 unwind label %294

289:                                              ; preds = %288
  br label %298

290:                                              ; preds = %272, %268, %264, %262
  %291 = landingpad { ptr, i32 }
          cleanup
  %292 = extractvalue { ptr, i32 } %291, 0
  store ptr %292, ptr %7, align 8
  %293 = extractvalue { ptr, i32 } %291, 1
  store i32 %293, ptr %8, align 4
  br label %1348

294:                                              ; preds = %288, %282, %273
  %295 = landingpad { ptr, i32 }
          cleanup
  %296 = extractvalue { ptr, i32 } %295, 0
  store ptr %296, ptr %7, align 8
  %297 = extractvalue { ptr, i32 } %295, 1
  store i32 %297, ptr %8, align 4
  br label %1347

298:                                              ; preds = %289, %277
  call void @llvm.lifetime.start.p0(i64 40, ptr %31) #12
  call void @llvm.memset.p0.i64(ptr align 8 %31, i8 0, i64 40, i1 false)
  %299 = getelementptr inbounds %struct.VkXlibSurfaceCreateInfoKHR, ptr %31, i32 0, i32 0
  store i32 1000004000, ptr %299, align 8, !tbaa !49
  %300 = getelementptr inbounds %class.Renderer, ptr %114, i32 0, i32 1
  %301 = load ptr, ptr %300, align 8, !tbaa !51
  %302 = invoke noundef ptr @_ZNK22ApplicationWindowLinux10GetDisplayEv(ptr noundef nonnull align 8 dereferenceable(104) %301)
          to label %303 unwind label %342

303:                                              ; preds = %298
  %304 = getelementptr inbounds %struct.VkXlibSurfaceCreateInfoKHR, ptr %31, i32 0, i32 3
  store ptr %302, ptr %304, align 8, !tbaa !52
  %305 = getelementptr inbounds %class.Renderer, ptr %114, i32 0, i32 1
  %306 = load ptr, ptr %305, align 8, !tbaa !51
  %307 = invoke noundef i64 @_ZNK22ApplicationWindowLinux9GetWindowEv(ptr noundef nonnull align 8 dereferenceable(104) %306)
          to label %308 unwind label %342

308:                                              ; preds = %303
  %309 = getelementptr inbounds %struct.VkXlibSurfaceCreateInfoKHR, ptr %31, i32 0, i32 4
  store i64 %307, ptr %309, align 8, !tbaa !53
  %310 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 1
  %311 = load ptr, ptr %310, align 16, !tbaa !35
  %312 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 10
  %313 = invoke i32 @vkCreateXlibSurfaceKHR(ptr noundef %311, ptr noundef %31, ptr noundef null, ptr noundef %312)
          to label %314 unwind label %342

314:                                              ; preds = %308
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %313)
          to label %315 unwind label %342

315:                                              ; preds = %314
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #12
  store i32 0, ptr %32, align 4, !tbaa !21
  %316 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 1
  %317 = load ptr, ptr %316, align 16, !tbaa !35
  %318 = invoke i32 @vkEnumeratePhysicalDevices(ptr noundef %317, ptr noundef %32, ptr noundef null)
          to label %319 unwind label %346

319:                                              ; preds = %315
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %318)
          to label %320 unwind label %346

320:                                              ; preds = %319
  call void @llvm.lifetime.start.p0(i64 24, ptr %33) #12
  call void @_ZN3JPH5ArrayIP18VkPhysicalDevice_TNS_12STLAllocatorIS2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %33) #12
  %321 = load i32, ptr %32, align 4, !tbaa !21
  %322 = zext i32 %321 to i64
  invoke void @_ZN3JPH5ArrayIP18VkPhysicalDevice_TNS_12STLAllocatorIS2_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %33, i64 noundef %322)
          to label %323 unwind label %350

323:                                              ; preds = %320
  %324 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 1
  %325 = load ptr, ptr %324, align 16, !tbaa !35
  %326 = invoke noundef ptr @_ZN3JPH5ArrayIP18VkPhysicalDevice_TNS_12STLAllocatorIS2_EEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %33)
          to label %327 unwind label %350

327:                                              ; preds = %323
  %328 = invoke i32 @vkEnumeratePhysicalDevices(ptr noundef %325, ptr noundef %32, ptr noundef %326)
          to label %329 unwind label %350

329:                                              ; preds = %327
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %328)
          to label %330 unwind label %350

330:                                              ; preds = %329
  call void @llvm.lifetime.start.p0(i64 24, ptr %34) #12
  call void @_ZN3JPH5ArrayIZN10RendererVK10InitializeEP17ApplicationWindowE6DeviceNS_12STLAllocatorIS4_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %34) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #12
  store ptr %33, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #12
  %331 = load ptr, ptr %35, align 8, !tbaa !5
  %332 = invoke noundef ptr @_ZN3JPH5ArrayIP18VkPhysicalDevice_TNS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %331)
          to label %333 unwind label %354

333:                                              ; preds = %330
  store ptr %332, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #12
  %334 = load ptr, ptr %35, align 8, !tbaa !5
  %335 = invoke noundef ptr @_ZN3JPH5ArrayIP18VkPhysicalDevice_TNS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %334)
          to label %336 unwind label %358

336:                                              ; preds = %333
  store ptr %335, ptr %37, align 8, !tbaa !5
  br label %337

337:                                              ; preds = %590, %336
  %338 = load ptr, ptr %36, align 8, !tbaa !5
  %339 = load ptr, ptr %37, align 8, !tbaa !5
  %340 = icmp ne ptr %338, %339
  br i1 %340, label %362, label %341

341:                                              ; preds = %337
  store i32 6, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #12
  br label %612

342:                                              ; preds = %314, %308, %303, %298
  %343 = landingpad { ptr, i32 }
          cleanup
  %344 = extractvalue { ptr, i32 } %343, 0
  store ptr %344, ptr %7, align 8
  %345 = extractvalue { ptr, i32 } %343, 1
  store i32 %345, ptr %8, align 4
  br label %1346

346:                                              ; preds = %319, %315
  %347 = landingpad { ptr, i32 }
          cleanup
  %348 = extractvalue { ptr, i32 } %347, 0
  store ptr %348, ptr %7, align 8
  %349 = extractvalue { ptr, i32 } %347, 1
  store i32 %349, ptr %8, align 4
  br label %1345

350:                                              ; preds = %329, %327, %323, %320
  %351 = landingpad { ptr, i32 }
          cleanup
  %352 = extractvalue { ptr, i32 } %351, 0
  store ptr %352, ptr %7, align 8
  %353 = extractvalue { ptr, i32 } %351, 1
  store i32 %353, ptr %8, align 4
  br label %1344

354:                                              ; preds = %330
  %355 = landingpad { ptr, i32 }
          cleanup
  %356 = extractvalue { ptr, i32 } %355, 0
  store ptr %356, ptr %7, align 8
  %357 = extractvalue { ptr, i32 } %355, 1
  store i32 %357, ptr %8, align 4
  br label %611

358:                                              ; preds = %333
  %359 = landingpad { ptr, i32 }
          cleanup
  %360 = extractvalue { ptr, i32 } %359, 0
  store ptr %360, ptr %7, align 8
  %361 = extractvalue { ptr, i32 } %359, 1
  store i32 %361, ptr %8, align 4
  br label %610

362:                                              ; preds = %337
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #12
  %363 = load ptr, ptr %36, align 8, !tbaa !5
  %364 = load ptr, ptr %363, align 8, !tbaa !5
  store ptr %364, ptr %38, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 824, ptr %39) #12
  %365 = load ptr, ptr %38, align 8, !tbaa !5
  invoke void @vkGetPhysicalDeviceProperties(ptr noundef %365, ptr noundef %39)
          to label %366 unwind label %369

366:                                              ; preds = %362
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #12
  store i32 0, ptr %40, align 4, !tbaa !21
  %367 = getelementptr inbounds %struct.VkPhysicalDeviceProperties, ptr %39, i32 0, i32 4
  %368 = load i32, ptr %367, align 8, !tbaa !54
  switch i32 %368, label %378 [
    i32 2, label %373
    i32 1, label %374
    i32 3, label %375
    i32 4, label %376
    i32 0, label %377
    i32 2147483647, label %377
  ]

369:                                              ; preds = %362
  %370 = landingpad { ptr, i32 }
          cleanup
  %371 = extractvalue { ptr, i32 } %370, 0
  store ptr %371, ptr %7, align 8
  %372 = extractvalue { ptr, i32 } %370, 1
  store i32 %372, ptr %8, align 4
  br label %609

373:                                              ; preds = %366
  store i32 30, ptr %40, align 4, !tbaa !21
  br label %378

374:                                              ; preds = %366
  store i32 20, ptr %40, align 4, !tbaa !21
  br label %378

375:                                              ; preds = %366
  store i32 10, ptr %40, align 4, !tbaa !21
  br label %378

376:                                              ; preds = %366
  store i32 5, ptr %40, align 4, !tbaa !21
  br label %378

377:                                              ; preds = %366, %366
  store i32 7, ptr %22, align 4
  br label %584

378:                                              ; preds = %376, %375, %374, %373, %366
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #12
  %379 = load ptr, ptr %38, align 8, !tbaa !5
  %380 = invoke i32 @vkEnumerateDeviceExtensionProperties(ptr noundef %379, ptr noundef null, ptr noundef %41, ptr noundef null)
          to label %381 unwind label %401

381:                                              ; preds = %378
  call void @llvm.lifetime.start.p0(i64 24, ptr %42) #12
  call void @_ZN3JPH5ArrayI21VkExtensionPropertiesNS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %42) #12
  %382 = load i32, ptr %41, align 4, !tbaa !21
  %383 = zext i32 %382 to i64
  invoke void @_ZN3JPH5ArrayI21VkExtensionPropertiesNS_12STLAllocatorIS1_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %42, i64 noundef %383)
          to label %384 unwind label %405

384:                                              ; preds = %381
  %385 = load ptr, ptr %38, align 8, !tbaa !5
  %386 = invoke noundef ptr @_ZN3JPH5ArrayI21VkExtensionPropertiesNS_12STLAllocatorIS1_EEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %42)
          to label %387 unwind label %405

387:                                              ; preds = %384
  %388 = invoke i32 @vkEnumerateDeviceExtensionProperties(ptr noundef %385, ptr noundef null, ptr noundef %41, ptr noundef %386)
          to label %389 unwind label %405

389:                                              ; preds = %387
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #12
  store i32 0, ptr %43, align 4, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #12
  store ptr %10, ptr %44, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #12
  %390 = load ptr, ptr %44, align 8, !tbaa !5
  %391 = invoke noundef ptr @_ZN3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %390)
          to label %392 unwind label %409

392:                                              ; preds = %389
  store ptr %391, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #12
  %393 = load ptr, ptr %44, align 8, !tbaa !5
  %394 = invoke noundef ptr @_ZN3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %393)
          to label %395 unwind label %413

395:                                              ; preds = %392
  store ptr %394, ptr %46, align 8, !tbaa !5
  br label %396

396:                                              ; preds = %460, %395
  %397 = load ptr, ptr %45, align 8, !tbaa !5
  %398 = load ptr, ptr %46, align 8, !tbaa !5
  %399 = icmp ne ptr %397, %398
  br i1 %399, label %417, label %400

400:                                              ; preds = %396
  store i32 9, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #12
  br label %465

401:                                              ; preds = %378
  %402 = landingpad { ptr, i32 }
          cleanup
  %403 = extractvalue { ptr, i32 } %402, 0
  store ptr %403, ptr %7, align 8
  %404 = extractvalue { ptr, i32 } %402, 1
  store i32 %404, ptr %8, align 4
  br label %608

405:                                              ; preds = %387, %384, %381
  %406 = landingpad { ptr, i32 }
          cleanup
  %407 = extractvalue { ptr, i32 } %406, 0
  store ptr %407, ptr %7, align 8
  %408 = extractvalue { ptr, i32 } %406, 1
  store i32 %408, ptr %8, align 4
  br label %607

409:                                              ; preds = %389
  %410 = landingpad { ptr, i32 }
          cleanup
  %411 = extractvalue { ptr, i32 } %410, 0
  store ptr %411, ptr %7, align 8
  %412 = extractvalue { ptr, i32 } %410, 1
  store i32 %412, ptr %8, align 4
  br label %464

413:                                              ; preds = %392
  %414 = landingpad { ptr, i32 }
          cleanup
  %415 = extractvalue { ptr, i32 } %414, 0
  store ptr %415, ptr %7, align 8
  %416 = extractvalue { ptr, i32 } %414, 1
  store i32 %416, ptr %8, align 4
  br label %463

417:                                              ; preds = %396
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #12
  %418 = load ptr, ptr %45, align 8, !tbaa !5
  %419 = load ptr, ptr %418, align 8, !tbaa !5
  store ptr %419, ptr %47, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #12
  store ptr %42, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #12
  %420 = load ptr, ptr %48, align 8, !tbaa !5
  %421 = invoke noundef ptr @_ZN3JPH5ArrayI21VkExtensionPropertiesNS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %420)
          to label %422 unwind label %431

422:                                              ; preds = %417
  store ptr %421, ptr %49, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #12
  %423 = load ptr, ptr %48, align 8, !tbaa !5
  %424 = invoke noundef ptr @_ZN3JPH5ArrayI21VkExtensionPropertiesNS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %423)
          to label %425 unwind label %435

425:                                              ; preds = %422
  store ptr %424, ptr %50, align 8, !tbaa !5
  br label %426

426:                                              ; preds = %454, %425
  %427 = load ptr, ptr %49, align 8, !tbaa !5
  %428 = load ptr, ptr %50, align 8, !tbaa !5
  %429 = icmp ne ptr %427, %428
  br i1 %429, label %439, label %430

430:                                              ; preds = %426
  store i32 11, ptr %22, align 4
  br label %457

431:                                              ; preds = %417
  %432 = landingpad { ptr, i32 }
          cleanup
  %433 = extractvalue { ptr, i32 } %432, 0
  store ptr %433, ptr %7, align 8
  %434 = extractvalue { ptr, i32 } %432, 1
  store i32 %434, ptr %8, align 4
  br label %458

435:                                              ; preds = %422
  %436 = landingpad { ptr, i32 }
          cleanup
  %437 = extractvalue { ptr, i32 } %436, 0
  store ptr %437, ptr %7, align 8
  %438 = extractvalue { ptr, i32 } %436, 1
  store i32 %438, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #12
  br label %458

439:                                              ; preds = %426
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #12
  %440 = load ptr, ptr %49, align 8, !tbaa !5
  store ptr %440, ptr %51, align 8, !tbaa !5
  %441 = load ptr, ptr %47, align 8, !tbaa !5
  %442 = load ptr, ptr %51, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.VkExtensionProperties, ptr %442, i32 0, i32 0
  %444 = getelementptr inbounds [256 x i8], ptr %443, i64 0, i64 0
  %445 = call i32 @strcmp(ptr noundef %441, ptr noundef %444) #13
  %446 = icmp eq i32 %445, 0
  br i1 %446, label %447, label %450

447:                                              ; preds = %439
  %448 = load i32, ptr %43, align 4, !tbaa !21
  %449 = add nsw i32 %448, 1
  store i32 %449, ptr %43, align 4, !tbaa !21
  store i32 11, ptr %22, align 4
  br label %451

450:                                              ; preds = %439
  store i32 0, ptr %22, align 4
  br label %451

451:                                              ; preds = %450, %447
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #12
  %452 = load i32, ptr %22, align 4
  switch i32 %452, label %457 [
    i32 0, label %453
  ]

453:                                              ; preds = %451
  br label %454

454:                                              ; preds = %453
  %455 = load ptr, ptr %49, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.VkExtensionProperties, ptr %455, i32 1
  store ptr %456, ptr %49, align 8, !tbaa !5
  br label %426

457:                                              ; preds = %451, %430
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #12
  br label %459

458:                                              ; preds = %435, %431
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #12
  br label %463

459:                                              ; preds = %457
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #12
  br label %460

460:                                              ; preds = %459
  %461 = load ptr, ptr %45, align 8, !tbaa !5
  %462 = getelementptr inbounds ptr, ptr %461, i32 1
  store ptr %462, ptr %45, align 8, !tbaa !5
  br label %396

463:                                              ; preds = %458, %413
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #12
  br label %464

464:                                              ; preds = %463, %409
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #12
  br label %606

465:                                              ; preds = %400
  %466 = load i32, ptr %43, align 4, !tbaa !21
  %467 = invoke noundef i64 @_ZNK3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %10)
          to label %468 unwind label %472

468:                                              ; preds = %465
  %469 = trunc i64 %467 to i32
  %470 = icmp ne i32 %466, %469
  br i1 %470, label %471, label %476

471:                                              ; preds = %468
  store i32 7, ptr %22, align 4
  br label %583

472:                                              ; preds = %465
  %473 = landingpad { ptr, i32 }
          cleanup
  %474 = extractvalue { ptr, i32 } %473, 0
  store ptr %474, ptr %7, align 8
  %475 = extractvalue { ptr, i32 } %473, 1
  store i32 %475, ptr %8, align 4
  br label %606

476:                                              ; preds = %468
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #12
  store i32 0, ptr %52, align 4, !tbaa !21
  %477 = load ptr, ptr %38, align 8, !tbaa !5
  invoke void @vkGetPhysicalDeviceQueueFamilyProperties(ptr noundef %477, ptr noundef %52, ptr noundef null)
          to label %478 unwind label %493

478:                                              ; preds = %476
  call void @llvm.lifetime.start.p0(i64 24, ptr %53) #12
  call void @_ZN3JPH5ArrayI23VkQueueFamilyPropertiesNS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %53) #12
  %479 = load i32, ptr %52, align 4, !tbaa !21
  %480 = zext i32 %479 to i64
  invoke void @_ZN3JPH5ArrayI23VkQueueFamilyPropertiesNS_12STLAllocatorIS1_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %53, i64 noundef %480)
          to label %481 unwind label %497

481:                                              ; preds = %478
  %482 = load ptr, ptr %38, align 8, !tbaa !5
  %483 = invoke noundef ptr @_ZN3JPH5ArrayI23VkQueueFamilyPropertiesNS_12STLAllocatorIS1_EEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %53)
          to label %484 unwind label %497

484:                                              ; preds = %481
  invoke void @vkGetPhysicalDeviceQueueFamilyProperties(ptr noundef %482, ptr noundef %52, ptr noundef %483)
          to label %485 unwind label %497

485:                                              ; preds = %484
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #12
  store i32 -1, ptr %54, align 4, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #12
  store i32 -1, ptr %55, align 4, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #12
  store i32 0, ptr %56, align 4, !tbaa !21
  br label %486

486:                                              ; preds = %542, %485
  %487 = load i32, ptr %56, align 4, !tbaa !21
  %488 = invoke noundef i64 @_ZNK3JPH5ArrayI23VkQueueFamilyPropertiesNS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %53)
          to label %489 unwind label %501

489:                                              ; preds = %486
  %490 = trunc i64 %488 to i32
  %491 = icmp ult i32 %487, %490
  br i1 %491, label %505, label %492

492:                                              ; preds = %489
  store i32 13, ptr %22, align 4
  br label %545

493:                                              ; preds = %476
  %494 = landingpad { ptr, i32 }
          cleanup
  %495 = extractvalue { ptr, i32 } %494, 0
  store ptr %495, ptr %7, align 8
  %496 = extractvalue { ptr, i32 } %494, 1
  store i32 %496, ptr %8, align 4
  br label %605

497:                                              ; preds = %484, %481, %478
  %498 = landingpad { ptr, i32 }
          cleanup
  %499 = extractvalue { ptr, i32 } %498, 0
  store ptr %499, ptr %7, align 8
  %500 = extractvalue { ptr, i32 } %498, 1
  store i32 %500, ptr %8, align 4
  br label %604

501:                                              ; preds = %505, %486
  %502 = landingpad { ptr, i32 }
          cleanup
  %503 = extractvalue { ptr, i32 } %502, 0
  store ptr %503, ptr %7, align 8
  %504 = extractvalue { ptr, i32 } %502, 1
  store i32 %504, ptr %8, align 4
  br label %546

505:                                              ; preds = %489
  %506 = load i32, ptr %56, align 4, !tbaa !21
  %507 = zext i32 %506 to i64
  %508 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZN3JPH5ArrayI23VkQueueFamilyPropertiesNS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %53, i64 noundef %507)
          to label %509 unwind label %501

509:                                              ; preds = %505
  %510 = getelementptr inbounds %struct.VkQueueFamilyProperties, ptr %508, i32 0, i32 0
  %511 = load i32, ptr %510, align 4, !tbaa !59
  %512 = and i32 %511, 1
  %513 = icmp ne i32 %512, 0
  br i1 %513, label %514, label %516

514:                                              ; preds = %509
  %515 = load i32, ptr %56, align 4, !tbaa !21
  store i32 %515, ptr %54, align 4, !tbaa !21
  br label %516

516:                                              ; preds = %514, %509
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #12
  store i32 0, ptr %57, align 4, !tbaa !21
  %517 = load ptr, ptr %38, align 8, !tbaa !5
  %518 = load i32, ptr %56, align 4, !tbaa !21
  %519 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 10
  %520 = load ptr, ptr %519, align 16, !tbaa !62
  %521 = invoke i32 @vkGetPhysicalDeviceSurfaceSupportKHR(ptr noundef %517, i32 noundef %518, ptr noundef %520, ptr noundef %57)
          to label %522 unwind label %527

522:                                              ; preds = %516
  %523 = load i32, ptr %57, align 4, !tbaa !21
  %524 = icmp ne i32 %523, 0
  br i1 %524, label %525, label %531

525:                                              ; preds = %522
  %526 = load i32, ptr %56, align 4, !tbaa !21
  store i32 %526, ptr %55, align 4, !tbaa !21
  br label %531

527:                                              ; preds = %516
  %528 = landingpad { ptr, i32 }
          cleanup
  %529 = extractvalue { ptr, i32 } %528, 0
  store ptr %529, ptr %7, align 8
  %530 = extractvalue { ptr, i32 } %528, 1
  store i32 %530, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #12
  br label %546

531:                                              ; preds = %525, %522
  %532 = load i32, ptr %54, align 4, !tbaa !21
  %533 = icmp ne i32 %532, -1
  br i1 %533, label %534, label %538

534:                                              ; preds = %531
  %535 = load i32, ptr %55, align 4, !tbaa !21
  %536 = icmp ne i32 %535, -1
  br i1 %536, label %537, label %538

537:                                              ; preds = %534
  store i32 13, ptr %22, align 4
  br label %539

538:                                              ; preds = %534, %531
  store i32 0, ptr %22, align 4
  br label %539

539:                                              ; preds = %538, %537
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #12
  %540 = load i32, ptr %22, align 4
  switch i32 %540, label %545 [
    i32 0, label %541
  ]

541:                                              ; preds = %539
  br label %542

542:                                              ; preds = %541
  %543 = load i32, ptr %56, align 4, !tbaa !21
  %544 = add i32 %543, 1
  store i32 %544, ptr %56, align 4, !tbaa !21
  br label %486, !llvm.loop !63

545:                                              ; preds = %539, %492
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #12
  br label %547

546:                                              ; preds = %527, %501
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #12
  br label %603

547:                                              ; preds = %545
  %548 = load i32, ptr %54, align 4, !tbaa !21
  %549 = icmp eq i32 %548, -1
  br i1 %549, label %553, label %550

550:                                              ; preds = %547
  %551 = load i32, ptr %55, align 4, !tbaa !21
  %552 = icmp eq i32 %551, -1
  br i1 %552, label %553, label %554

553:                                              ; preds = %550, %547
  store i32 7, ptr %22, align 4
  br label %582

554:                                              ; preds = %550
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #12
  %555 = load ptr, ptr %38, align 8, !tbaa !5
  %556 = invoke i64 @_ZN10RendererVK12SelectFormatEP18VkPhysicalDevice_T(ptr noundef nonnull align 16 dereferenceable(1936) %114, ptr noundef %555)
          to label %557 unwind label %562

557:                                              ; preds = %554
  store i64 %556, ptr %58, align 4
  %558 = getelementptr inbounds %struct.VkSurfaceFormatKHR, ptr %58, i32 0, i32 0
  %559 = load i32, ptr %558, align 4, !tbaa !65
  %560 = icmp eq i32 %559, 0
  br i1 %560, label %561, label %566

561:                                              ; preds = %557
  store i32 7, ptr %22, align 4
  br label %581

562:                                              ; preds = %554
  %563 = landingpad { ptr, i32 }
          cleanup
  %564 = extractvalue { ptr, i32 } %563, 0
  store ptr %564, ptr %7, align 8
  %565 = extractvalue { ptr, i32 } %563, 1
  store i32 %565, ptr %8, align 4
  br label %602

566:                                              ; preds = %557
  call void @llvm.lifetime.start.p0(i64 64, ptr %59) #12
  %567 = getelementptr inbounds %struct.Device, ptr %59, i32 0, i32 0
  %568 = load ptr, ptr %38, align 8, !tbaa !5
  store ptr %568, ptr %567, align 8, !tbaa !68
  %569 = getelementptr inbounds %struct.Device, ptr %59, i32 0, i32 1
  %570 = getelementptr inbounds %struct.VkPhysicalDeviceProperties, ptr %39, i32 0, i32 5
  %571 = getelementptr inbounds [256 x i8], ptr %570, i64 0, i64 0
  call void @llvm.lifetime.start.p0(i64 1, ptr %60) #12
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEC2IS5_EEPKcRKS5_(ptr noundef nonnull align 8 dereferenceable(32) %569, ptr noundef %571, ptr noundef nonnull align 1 dereferenceable(1) %60)
          to label %572 unwind label %593

572:                                              ; preds = %566
  %573 = getelementptr inbounds %struct.Device, ptr %59, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %573, ptr align 4 %58, i64 8, i1 false), !tbaa.struct !72
  %574 = getelementptr inbounds %struct.Device, ptr %59, i32 0, i32 3
  %575 = load i32, ptr %54, align 4, !tbaa !21
  store i32 %575, ptr %574, align 8, !tbaa !75
  %576 = getelementptr inbounds %struct.Device, ptr %59, i32 0, i32 4
  %577 = load i32, ptr %55, align 4, !tbaa !21
  store i32 %577, ptr %576, align 4, !tbaa !76
  %578 = getelementptr inbounds %struct.Device, ptr %59, i32 0, i32 5
  %579 = load i32, ptr %40, align 4, !tbaa !21
  store i32 %579, ptr %578, align 8, !tbaa !77
  invoke void @_ZN3JPH5ArrayIZN10RendererVK10InitializeEP17ApplicationWindowE6DeviceNS_12STLAllocatorIS4_EEE9push_backEOS4_(ptr noundef nonnull align 8 dereferenceable(24) %34, ptr noundef nonnull align 8 dereferenceable(60) %59)
          to label %580 unwind label %597

580:                                              ; preds = %572
  call void @_ZZN10RendererVK10InitializeEP17ApplicationWindowEN6DeviceD2Ev(ptr noundef nonnull align 8 dereferenceable(60) %59) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr %60) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %59) #12
  store i32 0, ptr %22, align 4
  br label %581

581:                                              ; preds = %580, %561
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #12
  br label %582

582:                                              ; preds = %581, %553
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #12
  call void @_ZN3JPH5ArrayI23VkQueueFamilyPropertiesNS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %53) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %53) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #12
  br label %583

583:                                              ; preds = %582, %471
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #12
  call void @_ZN3JPH5ArrayI21VkExtensionPropertiesNS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %42) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %42) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #12
  br label %584

584:                                              ; preds = %583, %377
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #12
  call void @llvm.lifetime.end.p0(i64 824, ptr %39) #12
  %585 = load i32, ptr %22, align 4
  switch i32 %585, label %587 [
    i32 0, label %586
  ]

586:                                              ; preds = %584
  store i32 0, ptr %22, align 4
  br label %587

587:                                              ; preds = %586, %584
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #12
  %588 = load i32, ptr %22, align 4
  switch i32 %588, label %1362 [
    i32 0, label %589
    i32 7, label %590
  ]

589:                                              ; preds = %587
  br label %590

590:                                              ; preds = %589, %587
  %591 = load ptr, ptr %36, align 8, !tbaa !5
  %592 = getelementptr inbounds ptr, ptr %591, i32 1
  store ptr %592, ptr %36, align 8, !tbaa !5
  br label %337

593:                                              ; preds = %566
  %594 = landingpad { ptr, i32 }
          cleanup
  %595 = extractvalue { ptr, i32 } %594, 0
  store ptr %595, ptr %7, align 8
  %596 = extractvalue { ptr, i32 } %594, 1
  store i32 %596, ptr %8, align 4
  br label %601

597:                                              ; preds = %572
  %598 = landingpad { ptr, i32 }
          cleanup
  %599 = extractvalue { ptr, i32 } %598, 0
  store ptr %599, ptr %7, align 8
  %600 = extractvalue { ptr, i32 } %598, 1
  store i32 %600, ptr %8, align 4
  call void @_ZZN10RendererVK10InitializeEP17ApplicationWindowEN6DeviceD2Ev(ptr noundef nonnull align 8 dereferenceable(60) %59) #12
  br label %601

601:                                              ; preds = %597, %593
  call void @llvm.lifetime.end.p0(i64 1, ptr %60) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %59) #12
  br label %602

602:                                              ; preds = %601, %562
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #12
  br label %603

603:                                              ; preds = %602, %546
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #12
  br label %604

604:                                              ; preds = %603, %497
  call void @_ZN3JPH5ArrayI23VkQueueFamilyPropertiesNS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %53) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %53) #12
  br label %605

605:                                              ; preds = %604, %493
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #12
  br label %606

606:                                              ; preds = %605, %472, %464
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #12
  br label %607

607:                                              ; preds = %606, %405
  call void @_ZN3JPH5ArrayI21VkExtensionPropertiesNS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %42) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %42) #12
  br label %608

608:                                              ; preds = %607, %401
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #12
  br label %609

609:                                              ; preds = %608, %369
  call void @llvm.lifetime.end.p0(i64 824, ptr %39) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #12
  br label %610

610:                                              ; preds = %609, %358
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #12
  br label %611

611:                                              ; preds = %610, %354
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #12
  br label %1343

612:                                              ; preds = %341
  %613 = invoke noundef zeroext i1 @_ZNK3JPH5ArrayIZN10RendererVK10InitializeEP17ApplicationWindowE6DeviceNS_12STLAllocatorIS4_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %34)
          to label %614 unwind label %617

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

615:                                              ; preds = %614
  invoke void (ptr, ...) @_Z10FatalErrorPKcz(ptr noundef @.str.8) #14
          to label %616 unwind label %617

616:                                              ; preds = %615
  unreachable

617:                                              ; preds = %625, %623, %621, %615, %612
  %618 = landingpad { ptr, i32 }
          cleanup
  %619 = extractvalue { ptr, i32 } %618, 0
  store ptr %619, ptr %7, align 8
  %620 = extractvalue { ptr, i32 } %618, 1
  store i32 %620, ptr %8, align 4
  br label %1343

621:                                              ; preds = %614
  %622 = invoke noundef ptr @_ZN3JPH5ArrayIZN10RendererVK10InitializeEP17ApplicationWindowE6DeviceNS_12STLAllocatorIS4_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %34)
          to label %623 unwind label %617

623:                                              ; preds = %621
  %624 = invoke noundef ptr @_ZN3JPH5ArrayIZN10RendererVK10InitializeEP17ApplicationWindowE6DeviceNS_12STLAllocatorIS4_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %34)
          to label %625 unwind label %617

625:                                              ; preds = %623
  invoke void @"_ZN3JPH9QuickSortIPZN10RendererVK10InitializeEP17ApplicationWindowE6DeviceZNS1_10InitializeES3_E3$_0EEvT_S7_T0_"(ptr noundef %622, ptr noundef %624)
          to label %626 unwind label %617

626:                                              ; preds = %625
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #12
  %627 = invoke noundef nonnull align 8 dereferenceable(60) ptr @_ZN3JPH5ArrayIZN10RendererVK10InitializeEP17ApplicationWindowE6DeviceNS_12STLAllocatorIS4_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %34, i64 noundef 0)
          to label %628 unwind label %650

628:                                              ; preds = %626
  store ptr %627, ptr %62, align 8, !tbaa !5
  %629 = load ptr, ptr @_ZN3JPH5TraceE, align 8, !tbaa !5
  %630 = load ptr, ptr %62, align 8, !tbaa !5
  %631 = getelementptr inbounds %struct.Device, ptr %630, i32 0, i32 1
  %632 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %631) #12
  invoke void (ptr, ...) %629(ptr noundef @.str.9, ptr noundef %632)
          to label %633 unwind label %650

633:                                              ; preds = %628
  %634 = load ptr, ptr %62, align 8, !tbaa !5
  %635 = getelementptr inbounds %struct.Device, ptr %634, i32 0, i32 0
  %636 = load ptr, ptr %635, align 8, !tbaa !68
  %637 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 3
  store ptr %636, ptr %637, align 16, !tbaa !78
  %638 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 3
  %639 = load ptr, ptr %638, align 16, !tbaa !78
  %640 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 4
  invoke void @vkGetPhysicalDeviceMemoryProperties(ptr noundef %639, ptr noundef %640)
          to label %641 unwind label %650

641:                                              ; preds = %633
  call void @llvm.lifetime.start.p0(i64 220, ptr %63) #12
  call void @llvm.memset.p0.i64(ptr align 4 %63, i8 0, i64 220, i1 false)
  %642 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 3
  %643 = load ptr, ptr %642, align 16, !tbaa !78
  invoke void @vkGetPhysicalDeviceFeatures(ptr noundef %643, ptr noundef %63)
          to label %644 unwind label %654

644:                                              ; preds = %641
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #12
  store float 1.000000e+00, ptr %64, align 4, !tbaa !79
  call void @llvm.lifetime.start.p0(i64 80, ptr %65) #12
  call void @llvm.memset.p0.i64(ptr align 16 %65, i8 0, i64 80, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #12
  store i64 0, ptr %66, align 8, !tbaa !80
  br label %645

645:                                              ; preds = %668, %644
  %646 = load i64, ptr %66, align 8, !tbaa !80
  %647 = call noundef i64 @_ZSt4sizeI23VkDeviceQueueCreateInfoLm2EEmRAT0__KT_(ptr noundef nonnull align 8 dereferenceable(80) %65) #12
  %648 = icmp ult i64 %646, %647
  br i1 %648, label %658, label %649

649:                                              ; preds = %645
  store i32 16, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #12
  br label %671

650:                                              ; preds = %633, %628, %626
  %651 = landingpad { ptr, i32 }
          cleanup
  %652 = extractvalue { ptr, i32 } %651, 0
  store ptr %652, ptr %7, align 8
  %653 = extractvalue { ptr, i32 } %651, 1
  store i32 %653, ptr %8, align 4
  br label %1342

654:                                              ; preds = %641
  %655 = landingpad { ptr, i32 }
          cleanup
  %656 = extractvalue { ptr, i32 } %655, 0
  store ptr %656, ptr %7, align 8
  %657 = extractvalue { ptr, i32 } %655, 1
  store i32 %657, ptr %8, align 4
  br label %1341

658:                                              ; preds = %645
  %659 = load i64, ptr %66, align 8, !tbaa !80
  %660 = getelementptr inbounds [2 x %struct.VkDeviceQueueCreateInfo], ptr %65, i64 0, i64 %659
  %661 = getelementptr inbounds %struct.VkDeviceQueueCreateInfo, ptr %660, i32 0, i32 0
  store i32 2, ptr %661, align 8, !tbaa !81
  %662 = load i64, ptr %66, align 8, !tbaa !80
  %663 = getelementptr inbounds [2 x %struct.VkDeviceQueueCreateInfo], ptr %65, i64 0, i64 %662
  %664 = getelementptr inbounds %struct.VkDeviceQueueCreateInfo, ptr %663, i32 0, i32 4
  store i32 1, ptr %664, align 8, !tbaa !83
  %665 = load i64, ptr %66, align 8, !tbaa !80
  %666 = getelementptr inbounds [2 x %struct.VkDeviceQueueCreateInfo], ptr %65, i64 0, i64 %665
  %667 = getelementptr inbounds %struct.VkDeviceQueueCreateInfo, ptr %666, i32 0, i32 5
  store ptr %64, ptr %667, align 8, !tbaa !84
  br label %668

668:                                              ; preds = %658
  %669 = load i64, ptr %66, align 8, !tbaa !80
  %670 = add i64 %669, 1
  store i64 %670, ptr %66, align 8, !tbaa !80
  br label %645, !llvm.loop !85

671:                                              ; preds = %649
  %672 = load ptr, ptr %62, align 8, !tbaa !5
  %673 = getelementptr inbounds %struct.Device, ptr %672, i32 0, i32 3
  %674 = load i32, ptr %673, align 8, !tbaa !75
  %675 = getelementptr inbounds [2 x %struct.VkDeviceQueueCreateInfo], ptr %65, i64 0, i64 0
  %676 = getelementptr inbounds %struct.VkDeviceQueueCreateInfo, ptr %675, i32 0, i32 3
  store i32 %674, ptr %676, align 4, !tbaa !86
  %677 = load ptr, ptr %62, align 8, !tbaa !5
  %678 = getelementptr inbounds %struct.Device, ptr %677, i32 0, i32 4
  %679 = load i32, ptr %678, align 4, !tbaa !76
  %680 = getelementptr inbounds [2 x %struct.VkDeviceQueueCreateInfo], ptr %65, i64 0, i64 1
  %681 = getelementptr inbounds %struct.VkDeviceQueueCreateInfo, ptr %680, i32 0, i32 3
  store i32 %679, ptr %681, align 4, !tbaa !86
  call void @llvm.lifetime.start.p0(i64 220, ptr %67) #12
  call void @llvm.memset.p0.i64(ptr align 4 %67, i8 0, i64 220, i1 false)
  %682 = getelementptr inbounds %struct.VkPhysicalDeviceFeatures, ptr %63, i32 0, i32 13
  %683 = load i32, ptr %682, align 4, !tbaa !87
  %684 = icmp ne i32 %683, 0
  br i1 %684, label %691, label %685

685:                                              ; preds = %671
  invoke void (ptr, ...) @_Z10FatalErrorPKcz(ptr noundef @.str.10) #14
          to label %686 unwind label %687

686:                                              ; preds = %685
  unreachable

687:                                              ; preds = %685
  %688 = landingpad { ptr, i32 }
          cleanup
  %689 = extractvalue { ptr, i32 } %688, 0
  store ptr %689, ptr %7, align 8
  %690 = extractvalue { ptr, i32 } %688, 1
  store i32 %690, ptr %8, align 4
  br label %1340

691:                                              ; preds = %671
  %692 = getelementptr inbounds %struct.VkPhysicalDeviceFeatures, ptr %67, i32 0, i32 13
  store i32 1, ptr %692, align 4, !tbaa !87
  call void @llvm.lifetime.start.p0(i64 72, ptr %68) #12
  call void @llvm.memset.p0.i64(ptr align 8 %68, i8 0, i64 72, i1 false)
  %693 = getelementptr inbounds %struct.VkDeviceCreateInfo, ptr %68, i32 0, i32 0
  store i32 3, ptr %693, align 8, !tbaa !89
  %694 = load ptr, ptr %62, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct.Device, ptr %694, i32 0, i32 3
  %696 = load i32, ptr %695, align 8, !tbaa !75
  %697 = load ptr, ptr %62, align 8, !tbaa !5
  %698 = getelementptr inbounds %struct.Device, ptr %697, i32 0, i32 4
  %699 = load i32, ptr %698, align 4, !tbaa !76
  %700 = icmp ne i32 %696, %699
  %701 = zext i1 %700 to i64
  %702 = select i1 %700, i32 2, i32 1
  %703 = getelementptr inbounds %struct.VkDeviceCreateInfo, ptr %68, i32 0, i32 3
  store i32 %702, ptr %703, align 4, !tbaa !91
  %704 = getelementptr inbounds [2 x %struct.VkDeviceQueueCreateInfo], ptr %65, i64 0, i64 0
  %705 = getelementptr inbounds %struct.VkDeviceCreateInfo, ptr %68, i32 0, i32 4
  store ptr %704, ptr %705, align 8, !tbaa !92
  %706 = getelementptr inbounds %struct.VkInstanceCreateInfo, ptr %17, i32 0, i32 4
  %707 = load i32, ptr %706, align 8, !tbaa !25
  %708 = getelementptr inbounds %struct.VkDeviceCreateInfo, ptr %68, i32 0, i32 5
  store i32 %707, ptr %708, align 8, !tbaa !93
  %709 = getelementptr inbounds %struct.VkInstanceCreateInfo, ptr %17, i32 0, i32 5
  %710 = load ptr, ptr %709, align 8, !tbaa !26
  %711 = getelementptr inbounds %struct.VkDeviceCreateInfo, ptr %68, i32 0, i32 6
  store ptr %710, ptr %711, align 8, !tbaa !94
  %712 = invoke noundef i64 @_ZNK3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %10)
          to label %713 unwind label %769

713:                                              ; preds = %691
  %714 = trunc i64 %712 to i32
  %715 = getelementptr inbounds %struct.VkDeviceCreateInfo, ptr %68, i32 0, i32 7
  store i32 %714, ptr %715, align 8, !tbaa !95
  %716 = invoke noundef ptr @_ZN3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %10)
          to label %717 unwind label %769

717:                                              ; preds = %713
  %718 = getelementptr inbounds %struct.VkDeviceCreateInfo, ptr %68, i32 0, i32 8
  store ptr %716, ptr %718, align 8, !tbaa !96
  %719 = getelementptr inbounds %struct.VkDeviceCreateInfo, ptr %68, i32 0, i32 9
  store ptr %67, ptr %719, align 8, !tbaa !97
  %720 = load ptr, ptr %62, align 8, !tbaa !5
  %721 = getelementptr inbounds %struct.Device, ptr %720, i32 0, i32 0
  %722 = load ptr, ptr %721, align 8, !tbaa !68
  %723 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 5
  %724 = invoke i32 @vkCreateDevice(ptr noundef %722, ptr noundef %68, ptr noundef null, ptr noundef %723)
          to label %725 unwind label %769

725:                                              ; preds = %717
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %724)
          to label %726 unwind label %769

726:                                              ; preds = %725
  %727 = load ptr, ptr %62, align 8, !tbaa !5
  %728 = getelementptr inbounds %struct.Device, ptr %727, i32 0, i32 3
  %729 = load i32, ptr %728, align 8, !tbaa !75
  %730 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 6
  store i32 %729, ptr %730, align 8, !tbaa !98
  %731 = load ptr, ptr %62, align 8, !tbaa !5
  %732 = getelementptr inbounds %struct.Device, ptr %731, i32 0, i32 4
  %733 = load i32, ptr %732, align 4, !tbaa !76
  %734 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 7
  store i32 %733, ptr %734, align 4, !tbaa !99
  %735 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 5
  %736 = load ptr, ptr %735, align 16, !tbaa !100
  %737 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 6
  %738 = load i32, ptr %737, align 8, !tbaa !98
  %739 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 8
  invoke void @vkGetDeviceQueue(ptr noundef %736, i32 noundef %738, i32 noundef 0, ptr noundef %739)
          to label %740 unwind label %769

740:                                              ; preds = %726
  %741 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 5
  %742 = load ptr, ptr %741, align 16, !tbaa !100
  %743 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 7
  %744 = load i32, ptr %743, align 4, !tbaa !99
  %745 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 9
  invoke void @vkGetDeviceQueue(ptr noundef %742, i32 noundef %744, i32 noundef 0, ptr noundef %745)
          to label %746 unwind label %769

746:                                              ; preds = %740
  call void @llvm.lifetime.start.p0(i64 24, ptr %69) #12
  call void @llvm.memset.p0.i64(ptr align 8 %69, i8 0, i64 24, i1 false)
  %747 = getelementptr inbounds %struct.VkCommandPoolCreateInfo, ptr %69, i32 0, i32 0
  store i32 39, ptr %747, align 8, !tbaa !101
  %748 = getelementptr inbounds %struct.VkCommandPoolCreateInfo, ptr %69, i32 0, i32 2
  store i32 2, ptr %748, align 8, !tbaa !103
  %749 = load ptr, ptr %62, align 8, !tbaa !5
  %750 = getelementptr inbounds %struct.Device, ptr %749, i32 0, i32 3
  %751 = load i32, ptr %750, align 8, !tbaa !75
  %752 = getelementptr inbounds %struct.VkCommandPoolCreateInfo, ptr %69, i32 0, i32 3
  store i32 %751, ptr %752, align 4, !tbaa !104
  %753 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 5
  %754 = load ptr, ptr %753, align 16, !tbaa !100
  %755 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 33
  %756 = invoke i32 @vkCreateCommandPool(ptr noundef %754, ptr noundef %69, ptr noundef null, ptr noundef %755)
          to label %757 unwind label %773

757:                                              ; preds = %746
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %756)
          to label %758 unwind label %773

758:                                              ; preds = %757
  call void @llvm.lifetime.start.p0(i64 32, ptr %70) #12
  call void @llvm.memset.p0.i64(ptr align 8 %70, i8 0, i64 32, i1 false)
  %759 = getelementptr inbounds %struct.VkCommandBufferAllocateInfo, ptr %70, i32 0, i32 0
  store i32 40, ptr %759, align 8, !tbaa !105
  %760 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 33
  %761 = load ptr, ptr %760, align 8, !tbaa !108
  %762 = getelementptr inbounds %struct.VkCommandBufferAllocateInfo, ptr %70, i32 0, i32 2
  store ptr %761, ptr %762, align 8, !tbaa !109
  %763 = getelementptr inbounds %struct.VkCommandBufferAllocateInfo, ptr %70, i32 0, i32 3
  store i32 0, ptr %763, align 8, !tbaa !110
  %764 = getelementptr inbounds %struct.VkCommandBufferAllocateInfo, ptr %70, i32 0, i32 4
  store i32 1, ptr %764, align 4, !tbaa !111
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #12
  store i32 0, ptr %71, align 4, !tbaa !21
  br label %765

765:                                              ; preds = %787, %758
  %766 = load i32, ptr %71, align 4, !tbaa !21
  %767 = icmp ult i32 %766, 2
  br i1 %767, label %777, label %768

768:                                              ; preds = %765
  store i32 19, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #12
  br label %794

769:                                              ; preds = %740, %726, %725, %717, %713, %691
  %770 = landingpad { ptr, i32 }
          cleanup
  %771 = extractvalue { ptr, i32 } %770, 0
  store ptr %771, ptr %7, align 8
  %772 = extractvalue { ptr, i32 } %770, 1
  store i32 %772, ptr %8, align 4
  br label %1339

773:                                              ; preds = %757, %746
  %774 = landingpad { ptr, i32 }
          cleanup
  %775 = extractvalue { ptr, i32 } %774, 0
  store ptr %775, ptr %7, align 8
  %776 = extractvalue { ptr, i32 } %774, 1
  store i32 %776, ptr %8, align 4
  br label %1338

777:                                              ; preds = %765
  %778 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 5
  %779 = load ptr, ptr %778, align 16, !tbaa !100
  %780 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 34
  %781 = load i32, ptr %71, align 4, !tbaa !21
  %782 = zext i32 %781 to i64
  %783 = getelementptr inbounds [2 x ptr], ptr %780, i64 0, i64 %782
  %784 = invoke i32 @vkAllocateCommandBuffers(ptr noundef %779, ptr noundef %70, ptr noundef %783)
          to label %785 unwind label %790

785:                                              ; preds = %777
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %784)
          to label %786 unwind label %790

786:                                              ; preds = %785
  br label %787

787:                                              ; preds = %786
  %788 = load i32, ptr %71, align 4, !tbaa !21
  %789 = add i32 %788, 1
  store i32 %789, ptr %71, align 4, !tbaa !21
  br label %765, !llvm.loop !112

790:                                              ; preds = %785, %777
  %791 = landingpad { ptr, i32 }
          cleanup
  %792 = extractvalue { ptr, i32 } %791, 0
  store ptr %792, ptr %7, align 8
  %793 = extractvalue { ptr, i32 } %791, 1
  store i32 %793, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #12
  br label %1337

794:                                              ; preds = %768
  call void @llvm.lifetime.start.p0(i64 24, ptr %72) #12
  call void @llvm.memset.p0.i64(ptr align 8 %72, i8 0, i64 24, i1 false)
  %795 = getelementptr inbounds %struct.VkSemaphoreCreateInfo, ptr %72, i32 0, i32 0
  store i32 9, ptr %795, align 8, !tbaa !113
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #12
  store i32 0, ptr %73, align 4, !tbaa !21
  br label %796

796:                                              ; preds = %819, %794
  %797 = load i32, ptr %73, align 4, !tbaa !21
  %798 = icmp ult i32 %797, 2
  br i1 %798, label %800, label %799

799:                                              ; preds = %796
  store i32 22, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #12
  br label %826

800:                                              ; preds = %796
  %801 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 5
  %802 = load ptr, ptr %801, align 16, !tbaa !100
  %803 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 35
  %804 = load i32, ptr %73, align 4, !tbaa !21
  %805 = zext i32 %804 to i64
  %806 = getelementptr inbounds [2 x ptr], ptr %803, i64 0, i64 %805
  %807 = invoke i32 @vkCreateSemaphore(ptr noundef %802, ptr noundef %72, ptr noundef null, ptr noundef %806)
          to label %808 unwind label %822

808:                                              ; preds = %800
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %807)
          to label %809 unwind label %822

809:                                              ; preds = %808
  %810 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 5
  %811 = load ptr, ptr %810, align 16, !tbaa !100
  %812 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 36
  %813 = load i32, ptr %73, align 4, !tbaa !21
  %814 = zext i32 %813 to i64
  %815 = getelementptr inbounds [2 x ptr], ptr %812, i64 0, i64 %814
  %816 = invoke i32 @vkCreateSemaphore(ptr noundef %811, ptr noundef %72, ptr noundef null, ptr noundef %815)
          to label %817 unwind label %822

817:                                              ; preds = %809
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %816)
          to label %818 unwind label %822

818:                                              ; preds = %817
  br label %819

819:                                              ; preds = %818
  %820 = load i32, ptr %73, align 4, !tbaa !21
  %821 = add i32 %820, 1
  store i32 %821, ptr %73, align 4, !tbaa !21
  br label %796, !llvm.loop !115

822:                                              ; preds = %817, %809, %808, %800
  %823 = landingpad { ptr, i32 }
          cleanup
  %824 = extractvalue { ptr, i32 } %823, 0
  store ptr %824, ptr %7, align 8
  %825 = extractvalue { ptr, i32 } %823, 1
  store i32 %825, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #12
  br label %1336

826:                                              ; preds = %799
  call void @llvm.lifetime.start.p0(i64 24, ptr %74) #12
  call void @llvm.memset.p0.i64(ptr align 8 %74, i8 0, i64 24, i1 false)
  %827 = getelementptr inbounds %struct.VkFenceCreateInfo, ptr %74, i32 0, i32 0
  store i32 8, ptr %827, align 8, !tbaa !116
  %828 = getelementptr inbounds %struct.VkFenceCreateInfo, ptr %74, i32 0, i32 2
  store i32 1, ptr %828, align 8, !tbaa !118
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #12
  store i32 0, ptr %75, align 4, !tbaa !21
  br label %829

829:                                              ; preds = %843, %826
  %830 = load i32, ptr %75, align 4, !tbaa !21
  %831 = icmp ult i32 %830, 2
  br i1 %831, label %833, label %832

832:                                              ; preds = %829
  store i32 25, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #12
  br label %850

833:                                              ; preds = %829
  %834 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 5
  %835 = load ptr, ptr %834, align 16, !tbaa !100
  %836 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 37
  %837 = load i32, ptr %75, align 4, !tbaa !21
  %838 = zext i32 %837 to i64
  %839 = getelementptr inbounds [2 x ptr], ptr %836, i64 0, i64 %838
  %840 = invoke i32 @vkCreateFence(ptr noundef %835, ptr noundef %74, ptr noundef null, ptr noundef %839)
          to label %841 unwind label %846

841:                                              ; preds = %833
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %840)
          to label %842 unwind label %846

842:                                              ; preds = %841
  br label %843

843:                                              ; preds = %842
  %844 = load i32, ptr %75, align 4, !tbaa !21
  %845 = add i32 %844, 1
  store i32 %845, ptr %75, align 4, !tbaa !21
  br label %829, !llvm.loop !119

846:                                              ; preds = %841, %833
  %847 = landingpad { ptr, i32 }
          cleanup
  %848 = extractvalue { ptr, i32 } %847, 0
  store ptr %848, ptr %7, align 8
  %849 = extractvalue { ptr, i32 } %847, 1
  store i32 %849, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #12
  br label %1335

850:                                              ; preds = %832
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #12
  store i32 0, ptr %76, align 4, !tbaa !21
  br label %851

851:                                              ; preds = %874, %850
  %852 = load i32, ptr %76, align 4, !tbaa !21
  %853 = icmp ult i32 %852, 2
  br i1 %853, label %855, label %854

854:                                              ; preds = %851
  store i32 28, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #12
  br label %890

855:                                              ; preds = %851
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #12
  invoke void @_ZN10RendererVK20CreateConstantBufferEm(ptr dead_on_unwind writable sret(%"class.std::unique_ptr") align 8 %77, ptr noundef nonnull align 16 dereferenceable(1936) %114, i64 noundef 256)
          to label %856 unwind label %877

856:                                              ; preds = %855
  %857 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 39
  %858 = load i32, ptr %76, align 4, !tbaa !21
  %859 = zext i32 %858 to i64
  %860 = getelementptr inbounds [2 x %"class.std::unique_ptr"], ptr %857, i64 0, i64 %859
  %861 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %860, ptr noundef nonnull align 8 dereferenceable(8) %77) #12
  call void @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %77) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #12
  invoke void @_ZN10RendererVK20CreateConstantBufferEm(ptr dead_on_unwind writable sret(%"class.std::unique_ptr") align 8 %78, ptr noundef nonnull align 16 dereferenceable(1936) %114, i64 noundef 256)
          to label %862 unwind label %881

862:                                              ; preds = %856
  %863 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 40
  %864 = load i32, ptr %76, align 4, !tbaa !21
  %865 = zext i32 %864 to i64
  %866 = getelementptr inbounds [2 x %"class.std::unique_ptr"], ptr %863, i64 0, i64 %865
  %867 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %866, ptr noundef nonnull align 8 dereferenceable(8) %78) #12
  call void @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %78) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #12
  invoke void @_ZN10RendererVK20CreateConstantBufferEm(ptr dead_on_unwind writable sret(%"class.std::unique_ptr") align 8 %79, ptr noundef nonnull align 16 dereferenceable(1936) %114, i64 noundef 32)
          to label %868 unwind label %885

868:                                              ; preds = %862
  %869 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 41
  %870 = load i32, ptr %76, align 4, !tbaa !21
  %871 = zext i32 %870 to i64
  %872 = getelementptr inbounds [2 x %"class.std::unique_ptr"], ptr %869, i64 0, i64 %871
  %873 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %872, ptr noundef nonnull align 8 dereferenceable(8) %79) #12
  call void @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %79) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #12
  br label %874

874:                                              ; preds = %868
  %875 = load i32, ptr %76, align 4, !tbaa !21
  %876 = add i32 %875, 1
  store i32 %876, ptr %76, align 4, !tbaa !21
  br label %851, !llvm.loop !120

877:                                              ; preds = %855
  %878 = landingpad { ptr, i32 }
          cleanup
  %879 = extractvalue { ptr, i32 } %878, 0
  store ptr %879, ptr %7, align 8
  %880 = extractvalue { ptr, i32 } %878, 1
  store i32 %880, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #12
  br label %889

881:                                              ; preds = %856
  %882 = landingpad { ptr, i32 }
          cleanup
  %883 = extractvalue { ptr, i32 } %882, 0
  store ptr %883, ptr %7, align 8
  %884 = extractvalue { ptr, i32 } %882, 1
  store i32 %884, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #12
  br label %889

885:                                              ; preds = %862
  %886 = landingpad { ptr, i32 }
          cleanup
  %887 = extractvalue { ptr, i32 } %886, 0
  store ptr %887, ptr %7, align 8
  %888 = extractvalue { ptr, i32 } %886, 1
  store i32 %888, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #12
  br label %889

889:                                              ; preds = %885, %881, %877
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #12
  br label %1335

890:                                              ; preds = %854
  call void @llvm.lifetime.start.p0(i64 48, ptr %80) #12
  call void @llvm.memset.p0.i64(ptr align 16 %80, i8 0, i64 48, i1 false)
  %891 = getelementptr inbounds [2 x %struct.VkDescriptorSetLayoutBinding], ptr %80, i64 0, i64 0
  %892 = getelementptr inbounds %struct.VkDescriptorSetLayoutBinding, ptr %891, i32 0, i32 0
  store i32 0, ptr %892, align 16, !tbaa !121
  %893 = getelementptr inbounds [2 x %struct.VkDescriptorSetLayoutBinding], ptr %80, i64 0, i64 0
  %894 = getelementptr inbounds %struct.VkDescriptorSetLayoutBinding, ptr %893, i32 0, i32 2
  store i32 1, ptr %894, align 8, !tbaa !124
  %895 = getelementptr inbounds [2 x %struct.VkDescriptorSetLayoutBinding], ptr %80, i64 0, i64 0
  %896 = getelementptr inbounds %struct.VkDescriptorSetLayoutBinding, ptr %895, i32 0, i32 1
  store i32 6, ptr %896, align 4, !tbaa !125
  %897 = getelementptr inbounds [2 x %struct.VkDescriptorSetLayoutBinding], ptr %80, i64 0, i64 0
  %898 = getelementptr inbounds %struct.VkDescriptorSetLayoutBinding, ptr %897, i32 0, i32 3
  store i32 1, ptr %898, align 4, !tbaa !126
  %899 = getelementptr inbounds [2 x %struct.VkDescriptorSetLayoutBinding], ptr %80, i64 0, i64 1
  %900 = getelementptr inbounds %struct.VkDescriptorSetLayoutBinding, ptr %899, i32 0, i32 0
  store i32 1, ptr %900, align 8, !tbaa !121
  %901 = getelementptr inbounds [2 x %struct.VkDescriptorSetLayoutBinding], ptr %80, i64 0, i64 1
  %902 = getelementptr inbounds %struct.VkDescriptorSetLayoutBinding, ptr %901, i32 0, i32 2
  store i32 1, ptr %902, align 8, !tbaa !124
  %903 = getelementptr inbounds [2 x %struct.VkDescriptorSetLayoutBinding], ptr %80, i64 0, i64 1
  %904 = getelementptr inbounds %struct.VkDescriptorSetLayoutBinding, ptr %903, i32 0, i32 1
  store i32 6, ptr %904, align 4, !tbaa !125
  %905 = getelementptr inbounds [2 x %struct.VkDescriptorSetLayoutBinding], ptr %80, i64 0, i64 1
  %906 = getelementptr inbounds %struct.VkDescriptorSetLayoutBinding, ptr %905, i32 0, i32 3
  store i32 16, ptr %906, align 4, !tbaa !126
  call void @llvm.lifetime.start.p0(i64 32, ptr %81) #12
  call void @llvm.memset.p0.i64(ptr align 8 %81, i8 0, i64 32, i1 false)
  %907 = getelementptr inbounds %struct.VkDescriptorSetLayoutCreateInfo, ptr %81, i32 0, i32 0
  store i32 32, ptr %907, align 8, !tbaa !127
  %908 = call noundef i64 @_ZSt4sizeI28VkDescriptorSetLayoutBindingLm2EEmRAT0__KT_(ptr noundef nonnull align 8 dereferenceable(48) %80) #12
  %909 = trunc i64 %908 to i32
  %910 = getelementptr inbounds %struct.VkDescriptorSetLayoutCreateInfo, ptr %81, i32 0, i32 3
  store i32 %909, ptr %910, align 4, !tbaa !129
  %911 = getelementptr inbounds [2 x %struct.VkDescriptorSetLayoutBinding], ptr %80, i64 0, i64 0
  %912 = getelementptr inbounds %struct.VkDescriptorSetLayoutCreateInfo, ptr %81, i32 0, i32 4
  store ptr %911, ptr %912, align 8, !tbaa !130
  %913 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 5
  %914 = load ptr, ptr %913, align 16, !tbaa !100
  %915 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 20
  %916 = invoke i32 @vkCreateDescriptorSetLayout(ptr noundef %914, ptr noundef %81, ptr noundef null, ptr noundef %915)
          to label %917 unwind label %984

917:                                              ; preds = %890
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %916)
          to label %918 unwind label %984

918:                                              ; preds = %917
  call void @llvm.lifetime.start.p0(i64 24, ptr %82) #12
  call void @llvm.memset.p0.i64(ptr align 8 %82, i8 0, i64 24, i1 false)
  %919 = getelementptr inbounds %struct.VkDescriptorSetLayoutBinding, ptr %82, i32 0, i32 0
  store i32 0, ptr %919, align 8, !tbaa !121
  %920 = getelementptr inbounds %struct.VkDescriptorSetLayoutBinding, ptr %82, i32 0, i32 2
  store i32 1, ptr %920, align 8, !tbaa !124
  %921 = getelementptr inbounds %struct.VkDescriptorSetLayoutBinding, ptr %82, i32 0, i32 1
  store i32 1, ptr %921, align 4, !tbaa !125
  %922 = getelementptr inbounds %struct.VkDescriptorSetLayoutBinding, ptr %82, i32 0, i32 3
  store i32 16, ptr %922, align 4, !tbaa !126
  call void @llvm.lifetime.start.p0(i64 32, ptr %83) #12
  call void @llvm.memset.p0.i64(ptr align 8 %83, i8 0, i64 32, i1 false)
  %923 = getelementptr inbounds %struct.VkDescriptorSetLayoutCreateInfo, ptr %83, i32 0, i32 0
  store i32 32, ptr %923, align 8, !tbaa !127
  %924 = getelementptr inbounds %struct.VkDescriptorSetLayoutCreateInfo, ptr %83, i32 0, i32 3
  store i32 1, ptr %924, align 4, !tbaa !129
  %925 = getelementptr inbounds %struct.VkDescriptorSetLayoutCreateInfo, ptr %83, i32 0, i32 4
  store ptr %82, ptr %925, align 8, !tbaa !130
  %926 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 5
  %927 = load ptr, ptr %926, align 16, !tbaa !100
  %928 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 21
  %929 = invoke i32 @vkCreateDescriptorSetLayout(ptr noundef %927, ptr noundef %83, ptr noundef null, ptr noundef %928)
          to label %930 unwind label %988

930:                                              ; preds = %918
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %929)
          to label %931 unwind label %988

931:                                              ; preds = %930
  call void @llvm.lifetime.start.p0(i64 48, ptr %84) #12
  call void @llvm.memset.p0.i64(ptr align 8 %84, i8 0, i64 48, i1 false)
  call void @llvm.lifetime.start.p0(i64 16, ptr %85) #12
  %932 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 20
  %933 = load ptr, ptr %932, align 16, !tbaa !131
  store ptr %933, ptr %85, align 8, !tbaa !5
  %934 = getelementptr inbounds ptr, ptr %85, i64 1
  %935 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 21
  %936 = load ptr, ptr %935, align 8, !tbaa !132
  store ptr %936, ptr %934, align 8, !tbaa !5
  %937 = getelementptr inbounds %struct.VkPipelineLayoutCreateInfo, ptr %84, i32 0, i32 0
  store i32 30, ptr %937, align 8, !tbaa !133
  %938 = call noundef i64 @_ZSt4sizeIP23VkDescriptorSetLayout_TLm2EEmRAT0__KT_(ptr noundef nonnull align 8 dereferenceable(16) %85) #12
  %939 = trunc i64 %938 to i32
  %940 = getelementptr inbounds %struct.VkPipelineLayoutCreateInfo, ptr %84, i32 0, i32 3
  store i32 %939, ptr %940, align 4, !tbaa !135
  %941 = getelementptr inbounds [2 x ptr], ptr %85, i64 0, i64 0
  %942 = getelementptr inbounds %struct.VkPipelineLayoutCreateInfo, ptr %84, i32 0, i32 4
  store ptr %941, ptr %942, align 8, !tbaa !136
  %943 = getelementptr inbounds %struct.VkPipelineLayoutCreateInfo, ptr %84, i32 0, i32 5
  store i32 0, ptr %943, align 8, !tbaa !137
  %944 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 5
  %945 = load ptr, ptr %944, align 16, !tbaa !100
  %946 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 29
  %947 = invoke i32 @vkCreatePipelineLayout(ptr noundef %945, ptr noundef %84, ptr noundef null, ptr noundef %946)
          to label %948 unwind label %992

948:                                              ; preds = %931
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %947)
          to label %949 unwind label %992

949:                                              ; preds = %948
  call void @llvm.lifetime.start.p0(i64 16, ptr %86) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %86, ptr align 16 @__const._ZN10RendererVK10InitializeEP17ApplicationWindow.descriptor_pool_sizes, i64 16, i1 false)
  call void @llvm.lifetime.start.p0(i64 40, ptr %87) #12
  call void @llvm.memset.p0.i64(ptr align 8 %87, i8 0, i64 40, i1 false)
  %950 = getelementptr inbounds %struct.VkDescriptorPoolCreateInfo, ptr %87, i32 0, i32 0
  store i32 33, ptr %950, align 8, !tbaa !138
  %951 = call noundef i64 @_ZSt4sizeI20VkDescriptorPoolSizeLm2EEmRAT0__KT_(ptr noundef nonnull align 4 dereferenceable(16) %86) #12
  %952 = trunc i64 %951 to i32
  %953 = getelementptr inbounds %struct.VkDescriptorPoolCreateInfo, ptr %87, i32 0, i32 4
  store i32 %952, ptr %953, align 8, !tbaa !140
  %954 = getelementptr inbounds [2 x %struct.VkDescriptorPoolSize], ptr %86, i64 0, i64 0
  %955 = getelementptr inbounds %struct.VkDescriptorPoolCreateInfo, ptr %87, i32 0, i32 5
  store ptr %954, ptr %955, align 8, !tbaa !141
  %956 = getelementptr inbounds %struct.VkDescriptorPoolCreateInfo, ptr %87, i32 0, i32 3
  store i32 256, ptr %956, align 4, !tbaa !142
  %957 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 5
  %958 = load ptr, ptr %957, align 16, !tbaa !100
  %959 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 22
  %960 = invoke i32 @vkCreateDescriptorPool(ptr noundef %958, ptr noundef %87, ptr noundef null, ptr noundef %959)
          to label %961 unwind label %996

961:                                              ; preds = %949
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %960)
          to label %962 unwind label %996

962:                                              ; preds = %961
  call void @llvm.lifetime.start.p0(i64 24, ptr %88) #12
  %963 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 20
  call void @llvm.lifetime.start.p0(i64 1, ptr %89) #12
  invoke void @_ZN3JPH5ArrayIP23VkDescriptorSetLayout_TNS_12STLAllocatorIS2_EEEC2EmRKS2_RKS4_(ptr noundef nonnull align 8 dereferenceable(24) %88, i64 noundef 2, ptr noundef nonnull align 8 dereferenceable(8) %963, ptr noundef nonnull align 1 dereferenceable(1) %89)
          to label %964 unwind label %1000

964:                                              ; preds = %962
  call void @llvm.lifetime.end.p0(i64 1, ptr %89) #12
  call void @llvm.lifetime.start.p0(i64 40, ptr %90) #12
  call void @llvm.memset.p0.i64(ptr align 8 %90, i8 0, i64 40, i1 false)
  %965 = getelementptr inbounds %struct.VkDescriptorSetAllocateInfo, ptr %90, i32 0, i32 0
  store i32 34, ptr %965, align 8, !tbaa !143
  %966 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 22
  %967 = load ptr, ptr %966, align 16, !tbaa !145
  %968 = getelementptr inbounds %struct.VkDescriptorSetAllocateInfo, ptr %90, i32 0, i32 2
  store ptr %967, ptr %968, align 8, !tbaa !146
  %969 = getelementptr inbounds %struct.VkDescriptorSetAllocateInfo, ptr %90, i32 0, i32 3
  store i32 2, ptr %969, align 8, !tbaa !147
  %970 = invoke noundef ptr @_ZN3JPH5ArrayIP23VkDescriptorSetLayout_TNS_12STLAllocatorIS2_EEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %88)
          to label %971 unwind label %1004

971:                                              ; preds = %964
  %972 = getelementptr inbounds %struct.VkDescriptorSetAllocateInfo, ptr %90, i32 0, i32 4
  store ptr %970, ptr %972, align 8, !tbaa !148
  %973 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 5
  %974 = load ptr, ptr %973, align 16, !tbaa !100
  %975 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 23
  %976 = getelementptr inbounds [2 x ptr], ptr %975, i64 0, i64 0
  %977 = invoke i32 @vkAllocateDescriptorSets(ptr noundef %974, ptr noundef %90, ptr noundef %976)
          to label %978 unwind label %1004

978:                                              ; preds = %971
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %977)
          to label %979 unwind label %1004

979:                                              ; preds = %978
  call void @llvm.lifetime.start.p0(i64 4, ptr %91) #12
  store i32 0, ptr %91, align 4, !tbaa !21
  br label %980

980:                                              ; preds = %1065, %979
  %981 = load i32, ptr %91, align 4, !tbaa !21
  %982 = icmp ult i32 %981, 2
  br i1 %982, label %1008, label %983

983:                                              ; preds = %980
  store i32 31, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #12
  br label %1082

984:                                              ; preds = %917, %890
  %985 = landingpad { ptr, i32 }
          cleanup
  %986 = extractvalue { ptr, i32 } %985, 0
  store ptr %986, ptr %7, align 8
  %987 = extractvalue { ptr, i32 } %985, 1
  store i32 %987, ptr %8, align 4
  br label %1334

988:                                              ; preds = %930, %918
  %989 = landingpad { ptr, i32 }
          cleanup
  %990 = extractvalue { ptr, i32 } %989, 0
  store ptr %990, ptr %7, align 8
  %991 = extractvalue { ptr, i32 } %989, 1
  store i32 %991, ptr %8, align 4
  br label %1333

992:                                              ; preds = %948, %931
  %993 = landingpad { ptr, i32 }
          cleanup
  %994 = extractvalue { ptr, i32 } %993, 0
  store ptr %994, ptr %7, align 8
  %995 = extractvalue { ptr, i32 } %993, 1
  store i32 %995, ptr %8, align 4
  br label %1332

996:                                              ; preds = %961, %949
  %997 = landingpad { ptr, i32 }
          cleanup
  %998 = extractvalue { ptr, i32 } %997, 0
  store ptr %998, ptr %7, align 8
  %999 = extractvalue { ptr, i32 } %997, 1
  store i32 %999, ptr %8, align 4
  br label %1331

1000:                                             ; preds = %962
  %1001 = landingpad { ptr, i32 }
          cleanup
  %1002 = extractvalue { ptr, i32 } %1001, 0
  store ptr %1002, ptr %7, align 8
  %1003 = extractvalue { ptr, i32 } %1001, 1
  store i32 %1003, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %89) #12
  br label %1330

1004:                                             ; preds = %1088, %1082, %978, %971, %964
  %1005 = landingpad { ptr, i32 }
          cleanup
  %1006 = extractvalue { ptr, i32 } %1005, 0
  store ptr %1006, ptr %7, align 8
  %1007 = extractvalue { ptr, i32 } %1005, 1
  store i32 %1007, ptr %8, align 4
  br label %1329

1008:                                             ; preds = %980
  call void @llvm.lifetime.start.p0(i64 24, ptr %92) #12
  call void @llvm.memset.p0.i64(ptr align 8 %92, i8 0, i64 24, i1 false)
  %1009 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 39
  %1010 = load i32, ptr %91, align 4, !tbaa !21
  %1011 = zext i32 %1010 to i64
  %1012 = getelementptr inbounds [2 x %"class.std::unique_ptr"], ptr %1009, i64 0, i64 %1011
  %1013 = call noundef ptr @_ZNKSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %1012) #12
  %1014 = invoke noundef ptr @_ZNK16ConstantBufferVK9GetBufferEv(ptr noundef nonnull align 8 dereferenceable(56) %1013)
          to label %1015 unwind label %1068

1015:                                             ; preds = %1008
  %1016 = getelementptr inbounds %struct.VkDescriptorBufferInfo, ptr %92, i32 0, i32 0
  store ptr %1014, ptr %1016, align 8, !tbaa !149
  %1017 = getelementptr inbounds %struct.VkDescriptorBufferInfo, ptr %92, i32 0, i32 2
  store i64 256, ptr %1017, align 8, !tbaa !151
  call void @llvm.lifetime.start.p0(i64 24, ptr %93) #12
  call void @llvm.memset.p0.i64(ptr align 8 %93, i8 0, i64 24, i1 false)
  %1018 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 41
  %1019 = load i32, ptr %91, align 4, !tbaa !21
  %1020 = zext i32 %1019 to i64
  %1021 = getelementptr inbounds [2 x %"class.std::unique_ptr"], ptr %1018, i64 0, i64 %1020
  %1022 = call noundef ptr @_ZNKSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %1021) #12
  %1023 = invoke noundef ptr @_ZNK16ConstantBufferVK9GetBufferEv(ptr noundef nonnull align 8 dereferenceable(56) %1022)
          to label %1024 unwind label %1072

1024:                                             ; preds = %1015
  %1025 = getelementptr inbounds %struct.VkDescriptorBufferInfo, ptr %93, i32 0, i32 0
  store ptr %1023, ptr %1025, align 8, !tbaa !149
  %1026 = getelementptr inbounds %struct.VkDescriptorBufferInfo, ptr %93, i32 0, i32 2
  store i64 32, ptr %1026, align 8, !tbaa !151
  call void @llvm.lifetime.start.p0(i64 128, ptr %94) #12
  call void @llvm.memset.p0.i64(ptr align 16 %94, i8 0, i64 128, i1 false)
  %1027 = getelementptr inbounds [2 x %struct.VkWriteDescriptorSet], ptr %94, i64 0, i64 0
  %1028 = getelementptr inbounds %struct.VkWriteDescriptorSet, ptr %1027, i32 0, i32 0
  store i32 35, ptr %1028, align 16, !tbaa !152
  %1029 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 23
  %1030 = load i32, ptr %91, align 4, !tbaa !21
  %1031 = zext i32 %1030 to i64
  %1032 = getelementptr inbounds [2 x ptr], ptr %1029, i64 0, i64 %1031
  %1033 = load ptr, ptr %1032, align 8, !tbaa !5
  %1034 = getelementptr inbounds [2 x %struct.VkWriteDescriptorSet], ptr %94, i64 0, i64 0
  %1035 = getelementptr inbounds %struct.VkWriteDescriptorSet, ptr %1034, i32 0, i32 2
  store ptr %1033, ptr %1035, align 16, !tbaa !154
  %1036 = getelementptr inbounds [2 x %struct.VkWriteDescriptorSet], ptr %94, i64 0, i64 0
  %1037 = getelementptr inbounds %struct.VkWriteDescriptorSet, ptr %1036, i32 0, i32 3
  store i32 0, ptr %1037, align 8, !tbaa !155
  %1038 = getelementptr inbounds [2 x %struct.VkWriteDescriptorSet], ptr %94, i64 0, i64 0
  %1039 = getelementptr inbounds %struct.VkWriteDescriptorSet, ptr %1038, i32 0, i32 6
  store i32 6, ptr %1039, align 4, !tbaa !156
  %1040 = getelementptr inbounds [2 x %struct.VkWriteDescriptorSet], ptr %94, i64 0, i64 0
  %1041 = getelementptr inbounds %struct.VkWriteDescriptorSet, ptr %1040, i32 0, i32 5
  store i32 1, ptr %1041, align 16, !tbaa !157
  %1042 = getelementptr inbounds [2 x %struct.VkWriteDescriptorSet], ptr %94, i64 0, i64 0
  %1043 = getelementptr inbounds %struct.VkWriteDescriptorSet, ptr %1042, i32 0, i32 8
  store ptr %92, ptr %1043, align 16, !tbaa !158
  %1044 = getelementptr inbounds [2 x %struct.VkWriteDescriptorSet], ptr %94, i64 0, i64 1
  %1045 = getelementptr inbounds %struct.VkWriteDescriptorSet, ptr %1044, i32 0, i32 0
  store i32 35, ptr %1045, align 16, !tbaa !152
  %1046 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 23
  %1047 = load i32, ptr %91, align 4, !tbaa !21
  %1048 = zext i32 %1047 to i64
  %1049 = getelementptr inbounds [2 x ptr], ptr %1046, i64 0, i64 %1048
  %1050 = load ptr, ptr %1049, align 8, !tbaa !5
  %1051 = getelementptr inbounds [2 x %struct.VkWriteDescriptorSet], ptr %94, i64 0, i64 1
  %1052 = getelementptr inbounds %struct.VkWriteDescriptorSet, ptr %1051, i32 0, i32 2
  store ptr %1050, ptr %1052, align 16, !tbaa !154
  %1053 = getelementptr inbounds [2 x %struct.VkWriteDescriptorSet], ptr %94, i64 0, i64 1
  %1054 = getelementptr inbounds %struct.VkWriteDescriptorSet, ptr %1053, i32 0, i32 3
  store i32 1, ptr %1054, align 8, !tbaa !155
  %1055 = getelementptr inbounds [2 x %struct.VkWriteDescriptorSet], ptr %94, i64 0, i64 1
  %1056 = getelementptr inbounds %struct.VkWriteDescriptorSet, ptr %1055, i32 0, i32 6
  store i32 6, ptr %1056, align 4, !tbaa !156
  %1057 = getelementptr inbounds [2 x %struct.VkWriteDescriptorSet], ptr %94, i64 0, i64 1
  %1058 = getelementptr inbounds %struct.VkWriteDescriptorSet, ptr %1057, i32 0, i32 5
  store i32 1, ptr %1058, align 16, !tbaa !157
  %1059 = getelementptr inbounds [2 x %struct.VkWriteDescriptorSet], ptr %94, i64 0, i64 1
  %1060 = getelementptr inbounds %struct.VkWriteDescriptorSet, ptr %1059, i32 0, i32 8
  store ptr %93, ptr %1060, align 16, !tbaa !158
  %1061 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 5
  %1062 = load ptr, ptr %1061, align 16, !tbaa !100
  %1063 = getelementptr inbounds [2 x %struct.VkWriteDescriptorSet], ptr %94, i64 0, i64 0
  invoke void @vkUpdateDescriptorSets(ptr noundef %1062, i32 noundef 2, ptr noundef %1063, i32 noundef 0, ptr noundef null)
          to label %1064 unwind label %1076

1064:                                             ; preds = %1024
  call void @llvm.lifetime.end.p0(i64 128, ptr %94) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %93) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %92) #12
  br label %1065

1065:                                             ; preds = %1064
  %1066 = load i32, ptr %91, align 4, !tbaa !21
  %1067 = add i32 %1066, 1
  store i32 %1067, ptr %91, align 4, !tbaa !21
  br label %980, !llvm.loop !159

1068:                                             ; preds = %1008
  %1069 = landingpad { ptr, i32 }
          cleanup
  %1070 = extractvalue { ptr, i32 } %1069, 0
  store ptr %1070, ptr %7, align 8
  %1071 = extractvalue { ptr, i32 } %1069, 1
  store i32 %1071, ptr %8, align 4
  br label %1081

1072:                                             ; preds = %1015
  %1073 = landingpad { ptr, i32 }
          cleanup
  %1074 = extractvalue { ptr, i32 } %1073, 0
  store ptr %1074, ptr %7, align 8
  %1075 = extractvalue { ptr, i32 } %1073, 1
  store i32 %1075, ptr %8, align 4
  br label %1080

1076:                                             ; preds = %1024
  %1077 = landingpad { ptr, i32 }
          cleanup
  %1078 = extractvalue { ptr, i32 } %1077, 0
  store ptr %1078, ptr %7, align 8
  %1079 = extractvalue { ptr, i32 } %1077, 1
  store i32 %1079, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 128, ptr %94) #12
  br label %1080

1080:                                             ; preds = %1076, %1072
  call void @llvm.lifetime.end.p0(i64 24, ptr %93) #12
  br label %1081

1081:                                             ; preds = %1080, %1068
  call void @llvm.lifetime.end.p0(i64 24, ptr %92) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #12
  br label %1329

1082:                                             ; preds = %983
  %1083 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 5
  %1084 = load ptr, ptr %1083, align 16, !tbaa !100
  %1085 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 24
  %1086 = getelementptr inbounds [2 x ptr], ptr %1085, i64 0, i64 0
  %1087 = invoke i32 @vkAllocateDescriptorSets(ptr noundef %1084, ptr noundef %90, ptr noundef %1086)
          to label %1088 unwind label %1004

1088:                                             ; preds = %1082
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %1087)
          to label %1089 unwind label %1004

1089:                                             ; preds = %1088
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #12
  store i32 0, ptr %95, align 4, !tbaa !21
  br label %1090

1090:                                             ; preds = %1118, %1089
  %1091 = load i32, ptr %95, align 4, !tbaa !21
  %1092 = icmp ult i32 %1091, 2
  br i1 %1092, label %1094, label %1093

1093:                                             ; preds = %1090
  store i32 34, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #12
  br label %1130

1094:                                             ; preds = %1090
  call void @llvm.lifetime.start.p0(i64 24, ptr %96) #12
  call void @llvm.memset.p0.i64(ptr align 8 %96, i8 0, i64 24, i1 false)
  %1095 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 40
  %1096 = load i32, ptr %95, align 4, !tbaa !21
  %1097 = zext i32 %1096 to i64
  %1098 = getelementptr inbounds [2 x %"class.std::unique_ptr"], ptr %1095, i64 0, i64 %1097
  %1099 = call noundef ptr @_ZNKSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %1098) #12
  %1100 = invoke noundef ptr @_ZNK16ConstantBufferVK9GetBufferEv(ptr noundef nonnull align 8 dereferenceable(56) %1099)
          to label %1101 unwind label %1121

1101:                                             ; preds = %1094
  %1102 = getelementptr inbounds %struct.VkDescriptorBufferInfo, ptr %96, i32 0, i32 0
  store ptr %1100, ptr %1102, align 8, !tbaa !149
  %1103 = getelementptr inbounds %struct.VkDescriptorBufferInfo, ptr %96, i32 0, i32 2
  store i64 256, ptr %1103, align 8, !tbaa !151
  call void @llvm.lifetime.start.p0(i64 64, ptr %97) #12
  call void @llvm.memset.p0.i64(ptr align 8 %97, i8 0, i64 64, i1 false)
  %1104 = getelementptr inbounds %struct.VkWriteDescriptorSet, ptr %97, i32 0, i32 0
  store i32 35, ptr %1104, align 8, !tbaa !152
  %1105 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 24
  %1106 = load i32, ptr %95, align 4, !tbaa !21
  %1107 = zext i32 %1106 to i64
  %1108 = getelementptr inbounds [2 x ptr], ptr %1105, i64 0, i64 %1107
  %1109 = load ptr, ptr %1108, align 8, !tbaa !5
  %1110 = getelementptr inbounds %struct.VkWriteDescriptorSet, ptr %97, i32 0, i32 2
  store ptr %1109, ptr %1110, align 8, !tbaa !154
  %1111 = getelementptr inbounds %struct.VkWriteDescriptorSet, ptr %97, i32 0, i32 3
  store i32 0, ptr %1111, align 8, !tbaa !155
  %1112 = getelementptr inbounds %struct.VkWriteDescriptorSet, ptr %97, i32 0, i32 6
  store i32 6, ptr %1112, align 4, !tbaa !156
  %1113 = getelementptr inbounds %struct.VkWriteDescriptorSet, ptr %97, i32 0, i32 5
  store i32 1, ptr %1113, align 8, !tbaa !157
  %1114 = getelementptr inbounds %struct.VkWriteDescriptorSet, ptr %97, i32 0, i32 8
  store ptr %96, ptr %1114, align 8, !tbaa !158
  %1115 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 5
  %1116 = load ptr, ptr %1115, align 16, !tbaa !100
  invoke void @vkUpdateDescriptorSets(ptr noundef %1116, i32 noundef 1, ptr noundef %97, i32 noundef 0, ptr noundef null)
          to label %1117 unwind label %1125

1117:                                             ; preds = %1101
  call void @llvm.lifetime.end.p0(i64 64, ptr %97) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %96) #12
  br label %1118

1118:                                             ; preds = %1117
  %1119 = load i32, ptr %95, align 4, !tbaa !21
  %1120 = add i32 %1119, 1
  store i32 %1120, ptr %95, align 4, !tbaa !21
  br label %1090, !llvm.loop !160

1121:                                             ; preds = %1094
  %1122 = landingpad { ptr, i32 }
          cleanup
  %1123 = extractvalue { ptr, i32 } %1122, 0
  store ptr %1123, ptr %7, align 8
  %1124 = extractvalue { ptr, i32 } %1122, 1
  store i32 %1124, ptr %8, align 4
  br label %1129

1125:                                             ; preds = %1101
  %1126 = landingpad { ptr, i32 }
          cleanup
  %1127 = extractvalue { ptr, i32 } %1126, 0
  store ptr %1127, ptr %7, align 8
  %1128 = extractvalue { ptr, i32 } %1126, 1
  store i32 %1128, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %97) #12
  br label %1129

1129:                                             ; preds = %1125, %1121
  call void @llvm.lifetime.end.p0(i64 24, ptr %96) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #12
  br label %1329

1130:                                             ; preds = %1093
  call void @llvm.lifetime.start.p0(i64 80, ptr %98) #12
  call void @llvm.memset.p0.i64(ptr align 8 %98, i8 0, i64 80, i1 false)
  %1131 = getelementptr inbounds %struct.VkSamplerCreateInfo, ptr %98, i32 0, i32 0
  store i32 31, ptr %1131, align 8, !tbaa !161
  %1132 = getelementptr inbounds %struct.VkSamplerCreateInfo, ptr %98, i32 0, i32 3
  store i32 1, ptr %1132, align 4, !tbaa !168
  %1133 = getelementptr inbounds %struct.VkSamplerCreateInfo, ptr %98, i32 0, i32 4
  store i32 1, ptr %1133, align 8, !tbaa !169
  %1134 = getelementptr inbounds %struct.VkSamplerCreateInfo, ptr %98, i32 0, i32 6
  store i32 0, ptr %1134, align 8, !tbaa !170
  %1135 = getelementptr inbounds %struct.VkSamplerCreateInfo, ptr %98, i32 0, i32 7
  store i32 0, ptr %1135, align 4, !tbaa !171
  %1136 = getelementptr inbounds %struct.VkSamplerCreateInfo, ptr %98, i32 0, i32 8
  store i32 0, ptr %1136, align 8, !tbaa !172
  %1137 = getelementptr inbounds %struct.VkSamplerCreateInfo, ptr %98, i32 0, i32 16
  store i32 3, ptr %1137, align 8, !tbaa !173
  %1138 = getelementptr inbounds %struct.VkSamplerCreateInfo, ptr %98, i32 0, i32 17
  store i32 0, ptr %1138, align 4, !tbaa !174
  %1139 = getelementptr inbounds %struct.VkSamplerCreateInfo, ptr %98, i32 0, i32 14
  store float 0.000000e+00, ptr %1139, align 8, !tbaa !175
  %1140 = getelementptr inbounds %struct.VkSamplerCreateInfo, ptr %98, i32 0, i32 15
  store float 1.000000e+03, ptr %1140, align 4, !tbaa !176
  %1141 = getelementptr inbounds %struct.VkSamplerCreateInfo, ptr %98, i32 0, i32 5
  store i32 0, ptr %1141, align 4, !tbaa !177
  %1142 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 5
  %1143 = load ptr, ptr %1142, align 16, !tbaa !100
  %1144 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 26
  %1145 = invoke i32 @vkCreateSampler(ptr noundef %1143, ptr noundef %98, ptr noundef null, ptr noundef %1144)
          to label %1146 unwind label %1292

1146:                                             ; preds = %1130
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %1145)
          to label %1147 unwind label %1292

1147:                                             ; preds = %1146
  %1148 = getelementptr inbounds %struct.VkSamplerCreateInfo, ptr %98, i32 0, i32 6
  store i32 2, ptr %1148, align 8, !tbaa !170
  %1149 = getelementptr inbounds %struct.VkSamplerCreateInfo, ptr %98, i32 0, i32 7
  store i32 2, ptr %1149, align 4, !tbaa !171
  %1150 = getelementptr inbounds %struct.VkSamplerCreateInfo, ptr %98, i32 0, i32 8
  store i32 2, ptr %1150, align 8, !tbaa !172
  %1151 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 5
  %1152 = load ptr, ptr %1151, align 16, !tbaa !100
  %1153 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 25
  %1154 = invoke i32 @vkCreateSampler(ptr noundef %1152, ptr noundef %98, ptr noundef null, ptr noundef %1153)
          to label %1155 unwind label %1292

1155:                                             ; preds = %1147
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %1154)
          to label %1156 unwind label %1292

1156:                                             ; preds = %1155
  call void @llvm.lifetime.start.p0(i64 36, ptr %99) #12
  call void @llvm.memset.p0.i64(ptr align 4 %99, i8 0, i64 36, i1 false)
  %1157 = invoke noundef i32 @_ZN10RendererVK15FindDepthFormatEv(ptr noundef nonnull align 16 dereferenceable(1936) %114)
          to label %1158 unwind label %1296

1158:                                             ; preds = %1156
  %1159 = getelementptr inbounds %struct.VkAttachmentDescription, ptr %99, i32 0, i32 1
  store i32 %1157, ptr %1159, align 4, !tbaa !178
  %1160 = getelementptr inbounds %struct.VkAttachmentDescription, ptr %99, i32 0, i32 2
  store i32 1, ptr %1160, align 4, !tbaa !184
  %1161 = getelementptr inbounds %struct.VkAttachmentDescription, ptr %99, i32 0, i32 3
  store i32 1, ptr %1161, align 4, !tbaa !185
  %1162 = getelementptr inbounds %struct.VkAttachmentDescription, ptr %99, i32 0, i32 4
  store i32 0, ptr %1162, align 4, !tbaa !186
  %1163 = getelementptr inbounds %struct.VkAttachmentDescription, ptr %99, i32 0, i32 5
  store i32 2, ptr %1163, align 4, !tbaa !187
  %1164 = getelementptr inbounds %struct.VkAttachmentDescription, ptr %99, i32 0, i32 6
  store i32 1, ptr %1164, align 4, !tbaa !188
  %1165 = getelementptr inbounds %struct.VkAttachmentDescription, ptr %99, i32 0, i32 7
  store i32 0, ptr %1165, align 4, !tbaa !189
  %1166 = getelementptr inbounds %struct.VkAttachmentDescription, ptr %99, i32 0, i32 8
  store i32 5, ptr %1166, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 8, ptr %100) #12
  call void @llvm.memset.p0.i64(ptr align 4 %100, i8 0, i64 8, i1 false)
  %1167 = getelementptr inbounds %struct.VkAttachmentReference, ptr %100, i32 0, i32 0
  store i32 0, ptr %1167, align 4, !tbaa !191
  %1168 = getelementptr inbounds %struct.VkAttachmentReference, ptr %100, i32 0, i32 1
  store i32 3, ptr %1168, align 4, !tbaa !193
  call void @llvm.lifetime.start.p0(i64 72, ptr %101) #12
  call void @llvm.memset.p0.i64(ptr align 8 %101, i8 0, i64 72, i1 false)
  %1169 = getelementptr inbounds %struct.VkSubpassDescription, ptr %101, i32 0, i32 1
  store i32 0, ptr %1169, align 4, !tbaa !194
  %1170 = getelementptr inbounds %struct.VkSubpassDescription, ptr %101, i32 0, i32 7
  store ptr %100, ptr %1170, align 8, !tbaa !197
  call void @llvm.lifetime.start.p0(i64 28, ptr %102) #12
  call void @llvm.memset.p0.i64(ptr align 4 %102, i8 0, i64 28, i1 false)
  %1171 = getelementptr inbounds %struct.VkSubpassDependency, ptr %102, i32 0, i32 0
  store i32 -1, ptr %1171, align 4, !tbaa !198
  %1172 = getelementptr inbounds %struct.VkSubpassDependency, ptr %102, i32 0, i32 1
  store i32 0, ptr %1172, align 4, !tbaa !200
  %1173 = getelementptr inbounds %struct.VkSubpassDependency, ptr %102, i32 0, i32 2
  store i32 512, ptr %1173, align 4, !tbaa !201
  %1174 = getelementptr inbounds %struct.VkSubpassDependency, ptr %102, i32 0, i32 4
  store i32 1024, ptr %1174, align 4, !tbaa !202
  %1175 = getelementptr inbounds %struct.VkSubpassDependency, ptr %102, i32 0, i32 3
  store i32 256, ptr %1175, align 4, !tbaa !203
  %1176 = getelementptr inbounds %struct.VkSubpassDependency, ptr %102, i32 0, i32 5
  store i32 1024, ptr %1176, align 4, !tbaa !204
  call void @llvm.lifetime.start.p0(i64 64, ptr %103) #12
  call void @llvm.memset.p0.i64(ptr align 8 %103, i8 0, i64 64, i1 false)
  %1177 = getelementptr inbounds %struct.VkRenderPassCreateInfo, ptr %103, i32 0, i32 0
  store i32 38, ptr %1177, align 8, !tbaa !205
  %1178 = getelementptr inbounds %struct.VkRenderPassCreateInfo, ptr %103, i32 0, i32 3
  store i32 1, ptr %1178, align 4, !tbaa !207
  %1179 = getelementptr inbounds %struct.VkRenderPassCreateInfo, ptr %103, i32 0, i32 4
  store ptr %99, ptr %1179, align 8, !tbaa !208
  %1180 = getelementptr inbounds %struct.VkRenderPassCreateInfo, ptr %103, i32 0, i32 5
  store i32 1, ptr %1180, align 8, !tbaa !209
  %1181 = getelementptr inbounds %struct.VkRenderPassCreateInfo, ptr %103, i32 0, i32 6
  store ptr %101, ptr %1181, align 8, !tbaa !210
  %1182 = getelementptr inbounds %struct.VkRenderPassCreateInfo, ptr %103, i32 0, i32 7
  store i32 1, ptr %1182, align 8, !tbaa !211
  %1183 = getelementptr inbounds %struct.VkRenderPassCreateInfo, ptr %103, i32 0, i32 8
  store ptr %102, ptr %1183, align 8, !tbaa !212
  %1184 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 5
  %1185 = load ptr, ptr %1184, align 16, !tbaa !100
  %1186 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 27
  %1187 = invoke i32 @vkCreateRenderPass(ptr noundef %1185, ptr noundef %103, ptr noundef null, ptr noundef %1186)
          to label %1188 unwind label %1300

1188:                                             ; preds = %1158
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %1187)
          to label %1189 unwind label %1300

1189:                                             ; preds = %1188
  call void @llvm.lifetime.end.p0(i64 64, ptr %103) #12
  call void @llvm.lifetime.end.p0(i64 28, ptr %102) #12
  call void @llvm.lifetime.end.p0(i64 72, ptr %101) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #12
  call void @llvm.lifetime.end.p0(i64 36, ptr %99) #12
  %1190 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 64) #15
          to label %1191 unwind label %1292

1191:                                             ; preds = %1189
  invoke void @_ZN9TextureVKC1EP10RendererVKii(ptr noundef nonnull align 8 dereferenceable(64) %1190, ptr noundef %114, i32 noundef 4096, i32 noundef 4096)
          to label %1192 unwind label %1305

1192:                                             ; preds = %1191
  %1193 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 38
  %1194 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefI9TextureVKEaSEPS1_(ptr noundef nonnull align 8 dereferenceable(8) %1193, ptr noundef %1190)
          to label %1195 unwind label %1292

1195:                                             ; preds = %1192
  call void @llvm.lifetime.start.p0(i64 8, ptr %104) #12
  %1196 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 38
  %1197 = invoke noundef ptr @_ZNK3JPH3RefI9TextureVKEptEv(ptr noundef nonnull align 8 dereferenceable(8) %1196)
          to label %1198 unwind label %1309

1198:                                             ; preds = %1195
  %1199 = invoke noundef ptr @_ZNK9TextureVK12GetImageViewEv(ptr noundef nonnull align 8 dereferenceable(64) %1197)
          to label %1200 unwind label %1309

1200:                                             ; preds = %1198
  store ptr %1199, ptr %104, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 64, ptr %105) #12
  call void @llvm.memset.p0.i64(ptr align 8 %105, i8 0, i64 64, i1 false)
  %1201 = getelementptr inbounds %struct.VkFramebufferCreateInfo, ptr %105, i32 0, i32 0
  store i32 37, ptr %1201, align 8, !tbaa !213
  %1202 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 27
  %1203 = load ptr, ptr %1202, align 8, !tbaa !215
  %1204 = getelementptr inbounds %struct.VkFramebufferCreateInfo, ptr %105, i32 0, i32 3
  store ptr %1203, ptr %1204, align 8, !tbaa !216
  %1205 = call noundef i64 @_ZSt4sizeIP13VkImageView_TLm1EEmRAT0__KT_(ptr noundef nonnull align 8 dereferenceable(8) %104) #12
  %1206 = trunc i64 %1205 to i32
  %1207 = getelementptr inbounds %struct.VkFramebufferCreateInfo, ptr %105, i32 0, i32 4
  store i32 %1206, ptr %1207, align 8, !tbaa !217
  %1208 = getelementptr inbounds [1 x ptr], ptr %104, i64 0, i64 0
  %1209 = getelementptr inbounds %struct.VkFramebufferCreateInfo, ptr %105, i32 0, i32 5
  store ptr %1208, ptr %1209, align 8, !tbaa !218
  %1210 = getelementptr inbounds %struct.VkFramebufferCreateInfo, ptr %105, i32 0, i32 6
  store i32 4096, ptr %1210, align 8, !tbaa !219
  %1211 = getelementptr inbounds %struct.VkFramebufferCreateInfo, ptr %105, i32 0, i32 7
  store i32 4096, ptr %1211, align 4, !tbaa !220
  %1212 = getelementptr inbounds %struct.VkFramebufferCreateInfo, ptr %105, i32 0, i32 8
  store i32 1, ptr %1212, align 8, !tbaa !221
  %1213 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 5
  %1214 = load ptr, ptr %1213, align 16, !tbaa !100
  %1215 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 30
  %1216 = invoke i32 @vkCreateFramebuffer(ptr noundef %1214, ptr noundef %105, ptr noundef null, ptr noundef %1215)
          to label %1217 unwind label %1313

1217:                                             ; preds = %1200
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %1216)
          to label %1218 unwind label %1313

1218:                                             ; preds = %1217
  call void @llvm.lifetime.start.p0(i64 72, ptr %106) #12
  call void @llvm.memset.p0.i64(ptr align 16 %106, i8 0, i64 72, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %107) #12
  %1219 = getelementptr inbounds [2 x %struct.VkAttachmentDescription], ptr %106, i64 0, i64 0
  store ptr %1219, ptr %107, align 8, !tbaa !5
  %1220 = load ptr, ptr %62, align 8, !tbaa !5
  %1221 = getelementptr inbounds %struct.Device, ptr %1220, i32 0, i32 2
  %1222 = getelementptr inbounds %struct.VkSurfaceFormatKHR, ptr %1221, i32 0, i32 0
  %1223 = load i32, ptr %1222, align 8, !tbaa !222
  %1224 = load ptr, ptr %107, align 8, !tbaa !5
  %1225 = getelementptr inbounds %struct.VkAttachmentDescription, ptr %1224, i32 0, i32 1
  store i32 %1223, ptr %1225, align 4, !tbaa !178
  %1226 = load ptr, ptr %107, align 8, !tbaa !5
  %1227 = getelementptr inbounds %struct.VkAttachmentDescription, ptr %1226, i32 0, i32 2
  store i32 1, ptr %1227, align 4, !tbaa !184
  %1228 = load ptr, ptr %107, align 8, !tbaa !5
  %1229 = getelementptr inbounds %struct.VkAttachmentDescription, ptr %1228, i32 0, i32 3
  store i32 1, ptr %1229, align 4, !tbaa !185
  %1230 = load ptr, ptr %107, align 8, !tbaa !5
  %1231 = getelementptr inbounds %struct.VkAttachmentDescription, ptr %1230, i32 0, i32 4
  store i32 0, ptr %1231, align 4, !tbaa !186
  %1232 = load ptr, ptr %107, align 8, !tbaa !5
  %1233 = getelementptr inbounds %struct.VkAttachmentDescription, ptr %1232, i32 0, i32 5
  store i32 2, ptr %1233, align 4, !tbaa !187
  %1234 = load ptr, ptr %107, align 8, !tbaa !5
  %1235 = getelementptr inbounds %struct.VkAttachmentDescription, ptr %1234, i32 0, i32 6
  store i32 1, ptr %1235, align 4, !tbaa !188
  %1236 = load ptr, ptr %107, align 8, !tbaa !5
  %1237 = getelementptr inbounds %struct.VkAttachmentDescription, ptr %1236, i32 0, i32 7
  store i32 0, ptr %1237, align 4, !tbaa !189
  %1238 = load ptr, ptr %107, align 8, !tbaa !5
  %1239 = getelementptr inbounds %struct.VkAttachmentDescription, ptr %1238, i32 0, i32 8
  store i32 1000001002, ptr %1239, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 8, ptr %108) #12
  call void @llvm.memset.p0.i64(ptr align 4 %108, i8 0, i64 8, i1 false)
  %1240 = getelementptr inbounds %struct.VkAttachmentReference, ptr %108, i32 0, i32 0
  store i32 0, ptr %1240, align 4, !tbaa !191
  %1241 = getelementptr inbounds %struct.VkAttachmentReference, ptr %108, i32 0, i32 1
  store i32 2, ptr %1241, align 4, !tbaa !193
  call void @llvm.lifetime.start.p0(i64 8, ptr %109) #12
  %1242 = getelementptr inbounds [2 x %struct.VkAttachmentDescription], ptr %106, i64 0, i64 1
  store ptr %1242, ptr %109, align 8, !tbaa !5
  %1243 = invoke noundef i32 @_ZN10RendererVK15FindDepthFormatEv(ptr noundef nonnull align 16 dereferenceable(1936) %114)
          to label %1244 unwind label %1317

1244:                                             ; preds = %1218
  %1245 = load ptr, ptr %109, align 8, !tbaa !5
  %1246 = getelementptr inbounds %struct.VkAttachmentDescription, ptr %1245, i32 0, i32 1
  store i32 %1243, ptr %1246, align 4, !tbaa !178
  %1247 = load ptr, ptr %109, align 8, !tbaa !5
  %1248 = getelementptr inbounds %struct.VkAttachmentDescription, ptr %1247, i32 0, i32 2
  store i32 1, ptr %1248, align 4, !tbaa !184
  %1249 = load ptr, ptr %109, align 8, !tbaa !5
  %1250 = getelementptr inbounds %struct.VkAttachmentDescription, ptr %1249, i32 0, i32 3
  store i32 1, ptr %1250, align 4, !tbaa !185
  %1251 = load ptr, ptr %109, align 8, !tbaa !5
  %1252 = getelementptr inbounds %struct.VkAttachmentDescription, ptr %1251, i32 0, i32 4
  store i32 1, ptr %1252, align 4, !tbaa !186
  %1253 = load ptr, ptr %109, align 8, !tbaa !5
  %1254 = getelementptr inbounds %struct.VkAttachmentDescription, ptr %1253, i32 0, i32 5
  store i32 2, ptr %1254, align 4, !tbaa !187
  %1255 = load ptr, ptr %109, align 8, !tbaa !5
  %1256 = getelementptr inbounds %struct.VkAttachmentDescription, ptr %1255, i32 0, i32 6
  store i32 1, ptr %1256, align 4, !tbaa !188
  %1257 = load ptr, ptr %109, align 8, !tbaa !5
  %1258 = getelementptr inbounds %struct.VkAttachmentDescription, ptr %1257, i32 0, i32 7
  store i32 0, ptr %1258, align 4, !tbaa !189
  %1259 = load ptr, ptr %109, align 8, !tbaa !5
  %1260 = getelementptr inbounds %struct.VkAttachmentDescription, ptr %1259, i32 0, i32 8
  store i32 3, ptr %1260, align 4, !tbaa !190
  call void @llvm.lifetime.start.p0(i64 8, ptr %110) #12
  call void @llvm.memset.p0.i64(ptr align 4 %110, i8 0, i64 8, i1 false)
  %1261 = getelementptr inbounds %struct.VkAttachmentReference, ptr %110, i32 0, i32 0
  store i32 1, ptr %1261, align 4, !tbaa !191
  %1262 = getelementptr inbounds %struct.VkAttachmentReference, ptr %110, i32 0, i32 1
  store i32 3, ptr %1262, align 4, !tbaa !193
  call void @llvm.lifetime.start.p0(i64 72, ptr %111) #12
  call void @llvm.memset.p0.i64(ptr align 8 %111, i8 0, i64 72, i1 false)
  %1263 = getelementptr inbounds %struct.VkSubpassDescription, ptr %111, i32 0, i32 1
  store i32 0, ptr %1263, align 4, !tbaa !194
  %1264 = getelementptr inbounds %struct.VkSubpassDescription, ptr %111, i32 0, i32 4
  store i32 1, ptr %1264, align 8, !tbaa !223
  %1265 = getelementptr inbounds %struct.VkSubpassDescription, ptr %111, i32 0, i32 5
  store ptr %108, ptr %1265, align 8, !tbaa !224
  %1266 = getelementptr inbounds %struct.VkSubpassDescription, ptr %111, i32 0, i32 7
  store ptr %110, ptr %1266, align 8, !tbaa !197
  call void @llvm.lifetime.start.p0(i64 28, ptr %112) #12
  call void @llvm.memset.p0.i64(ptr align 4 %112, i8 0, i64 28, i1 false)
  %1267 = getelementptr inbounds %struct.VkSubpassDependency, ptr %112, i32 0, i32 0
  store i32 -1, ptr %1267, align 4, !tbaa !198
  %1268 = getelementptr inbounds %struct.VkSubpassDependency, ptr %112, i32 0, i32 1
  store i32 0, ptr %1268, align 4, !tbaa !200
  %1269 = getelementptr inbounds %struct.VkSubpassDependency, ptr %112, i32 0, i32 2
  store i32 1536, ptr %1269, align 4, !tbaa !201
  %1270 = getelementptr inbounds %struct.VkSubpassDependency, ptr %112, i32 0, i32 4
  store i32 1024, ptr %1270, align 4, !tbaa !202
  %1271 = getelementptr inbounds %struct.VkSubpassDependency, ptr %112, i32 0, i32 3
  store i32 1152, ptr %1271, align 4, !tbaa !203
  %1272 = getelementptr inbounds %struct.VkSubpassDependency, ptr %112, i32 0, i32 5
  store i32 288, ptr %1272, align 4, !tbaa !204
  call void @llvm.lifetime.start.p0(i64 64, ptr %113) #12
  call void @llvm.memset.p0.i64(ptr align 8 %113, i8 0, i64 64, i1 false)
  %1273 = getelementptr inbounds %struct.VkRenderPassCreateInfo, ptr %113, i32 0, i32 0
  store i32 38, ptr %1273, align 8, !tbaa !205
  %1274 = call noundef i64 @_ZSt4sizeI23VkAttachmentDescriptionLm2EEmRAT0__KT_(ptr noundef nonnull align 4 dereferenceable(72) %106) #12
  %1275 = trunc i64 %1274 to i32
  %1276 = getelementptr inbounds %struct.VkRenderPassCreateInfo, ptr %113, i32 0, i32 3
  store i32 %1275, ptr %1276, align 4, !tbaa !207
  %1277 = getelementptr inbounds [2 x %struct.VkAttachmentDescription], ptr %106, i64 0, i64 0
  %1278 = getelementptr inbounds %struct.VkRenderPassCreateInfo, ptr %113, i32 0, i32 4
  store ptr %1277, ptr %1278, align 8, !tbaa !208
  %1279 = getelementptr inbounds %struct.VkRenderPassCreateInfo, ptr %113, i32 0, i32 5
  store i32 1, ptr %1279, align 8, !tbaa !209
  %1280 = getelementptr inbounds %struct.VkRenderPassCreateInfo, ptr %113, i32 0, i32 6
  store ptr %111, ptr %1280, align 8, !tbaa !210
  %1281 = getelementptr inbounds %struct.VkRenderPassCreateInfo, ptr %113, i32 0, i32 7
  store i32 1, ptr %1281, align 8, !tbaa !211
  %1282 = getelementptr inbounds %struct.VkRenderPassCreateInfo, ptr %113, i32 0, i32 8
  store ptr %112, ptr %1282, align 8, !tbaa !212
  %1283 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 5
  %1284 = load ptr, ptr %1283, align 16, !tbaa !100
  %1285 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 28
  %1286 = invoke i32 @vkCreateRenderPass(ptr noundef %1284, ptr noundef %113, ptr noundef null, ptr noundef %1285)
          to label %1287 unwind label %1321

1287:                                             ; preds = %1244
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %1286)
          to label %1288 unwind label %1321

1288:                                             ; preds = %1287
  call void @llvm.lifetime.end.p0(i64 64, ptr %113) #12
  call void @llvm.lifetime.end.p0(i64 28, ptr %112) #12
  call void @llvm.lifetime.end.p0(i64 72, ptr %111) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #12
  call void @llvm.lifetime.end.p0(i64 72, ptr %106) #12
  %1289 = getelementptr inbounds %class.RendererVK, ptr %114, i32 0, i32 3
  %1290 = load ptr, ptr %1289, align 16, !tbaa !78
  invoke void @_ZN10RendererVK15CreateSwapChainEP18VkPhysicalDevice_T(ptr noundef nonnull align 16 dereferenceable(1936) %114, ptr noundef %1290)
          to label %1291 unwind label %1313

1291:                                             ; preds = %1288
  call void @llvm.lifetime.end.p0(i64 64, ptr %105) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #12
  call void @llvm.lifetime.end.p0(i64 80, ptr %98) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr %90) #12
  call void @_ZN3JPH5ArrayIP23VkDescriptorSetLayout_TNS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %88) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %88) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr %87) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %86) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %85) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %84) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr %83) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %82) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr %81) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %80) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %74) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %72) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr %70) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %69) #12
  call void @llvm.lifetime.end.p0(i64 72, ptr %68) #12
  call void @llvm.lifetime.end.p0(i64 220, ptr %67) #12
  call void @llvm.lifetime.end.p0(i64 80, ptr %65) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #12
  call void @llvm.lifetime.end.p0(i64 220, ptr %63) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #12
  call void @_ZN3JPH5ArrayIZN10RendererVK10InitializeEP17ApplicationWindowE6DeviceNS_12STLAllocatorIS4_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %34) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %34) #12
  call void @_ZN3JPH5ArrayIP18VkPhysicalDevice_TNS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %33) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %33) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr %31) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %24) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %17) #12
  call void @_ZN3JPH5ArrayI17VkLayerPropertiesNS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %15) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #12
  call void @_ZN3JPH5ArrayI21VkExtensionPropertiesNS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #12
  call void @_ZN3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #12
  call void @_ZN3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %5) #12
  ret void

1292:                                             ; preds = %1192, %1189, %1155, %1147, %1146, %1130
  %1293 = landingpad { ptr, i32 }
          cleanup
  %1294 = extractvalue { ptr, i32 } %1293, 0
  store ptr %1294, ptr %7, align 8
  %1295 = extractvalue { ptr, i32 } %1293, 1
  store i32 %1295, ptr %8, align 4
  br label %1328

1296:                                             ; preds = %1156
  %1297 = landingpad { ptr, i32 }
          cleanup
  %1298 = extractvalue { ptr, i32 } %1297, 0
  store ptr %1298, ptr %7, align 8
  %1299 = extractvalue { ptr, i32 } %1297, 1
  store i32 %1299, ptr %8, align 4
  br label %1304

1300:                                             ; preds = %1188, %1158
  %1301 = landingpad { ptr, i32 }
          cleanup
  %1302 = extractvalue { ptr, i32 } %1301, 0
  store ptr %1302, ptr %7, align 8
  %1303 = extractvalue { ptr, i32 } %1301, 1
  store i32 %1303, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %103) #12
  call void @llvm.lifetime.end.p0(i64 28, ptr %102) #12
  call void @llvm.lifetime.end.p0(i64 72, ptr %101) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #12
  br label %1304

1304:                                             ; preds = %1300, %1296
  call void @llvm.lifetime.end.p0(i64 36, ptr %99) #12
  br label %1328

1305:                                             ; preds = %1191
  %1306 = landingpad { ptr, i32 }
          cleanup
  %1307 = extractvalue { ptr, i32 } %1306, 0
  store ptr %1307, ptr %7, align 8
  %1308 = extractvalue { ptr, i32 } %1306, 1
  store i32 %1308, ptr %8, align 4
  call void @_ZdlPvm(ptr noundef %1190, i64 noundef 64) #16
  br label %1328

1309:                                             ; preds = %1198, %1195
  %1310 = landingpad { ptr, i32 }
          cleanup
  %1311 = extractvalue { ptr, i32 } %1310, 0
  store ptr %1311, ptr %7, align 8
  %1312 = extractvalue { ptr, i32 } %1310, 1
  store i32 %1312, ptr %8, align 4
  br label %1327

1313:                                             ; preds = %1288, %1217, %1200
  %1314 = landingpad { ptr, i32 }
          cleanup
  %1315 = extractvalue { ptr, i32 } %1314, 0
  store ptr %1315, ptr %7, align 8
  %1316 = extractvalue { ptr, i32 } %1314, 1
  store i32 %1316, ptr %8, align 4
  br label %1326

1317:                                             ; preds = %1218
  %1318 = landingpad { ptr, i32 }
          cleanup
  %1319 = extractvalue { ptr, i32 } %1318, 0
  store ptr %1319, ptr %7, align 8
  %1320 = extractvalue { ptr, i32 } %1318, 1
  store i32 %1320, ptr %8, align 4
  br label %1325

1321:                                             ; preds = %1287, %1244
  %1322 = landingpad { ptr, i32 }
          cleanup
  %1323 = extractvalue { ptr, i32 } %1322, 0
  store ptr %1323, ptr %7, align 8
  %1324 = extractvalue { ptr, i32 } %1322, 1
  store i32 %1324, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %113) #12
  call void @llvm.lifetime.end.p0(i64 28, ptr %112) #12
  call void @llvm.lifetime.end.p0(i64 72, ptr %111) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #12
  br label %1325

1325:                                             ; preds = %1321, %1317
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #12
  call void @llvm.lifetime.end.p0(i64 72, ptr %106) #12
  br label %1326

1326:                                             ; preds = %1325, %1313
  call void @llvm.lifetime.end.p0(i64 64, ptr %105) #12
  br label %1327

1327:                                             ; preds = %1326, %1309
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #12
  br label %1328

1328:                                             ; preds = %1327, %1305, %1304, %1292
  call void @llvm.lifetime.end.p0(i64 80, ptr %98) #12
  br label %1329

1329:                                             ; preds = %1328, %1129, %1081, %1004
  call void @llvm.lifetime.end.p0(i64 40, ptr %90) #12
  call void @_ZN3JPH5ArrayIP23VkDescriptorSetLayout_TNS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %88) #12
  br label %1330

1330:                                             ; preds = %1329, %1000
  call void @llvm.lifetime.end.p0(i64 24, ptr %88) #12
  br label %1331

1331:                                             ; preds = %1330, %996
  call void @llvm.lifetime.end.p0(i64 40, ptr %87) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %86) #12
  br label %1332

1332:                                             ; preds = %1331, %992
  call void @llvm.lifetime.end.p0(i64 16, ptr %85) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %84) #12
  br label %1333

1333:                                             ; preds = %1332, %988
  call void @llvm.lifetime.end.p0(i64 32, ptr %83) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %82) #12
  br label %1334

1334:                                             ; preds = %1333, %984
  call void @llvm.lifetime.end.p0(i64 32, ptr %81) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr %80) #12
  br label %1335

1335:                                             ; preds = %1334, %889, %846
  call void @llvm.lifetime.end.p0(i64 24, ptr %74) #12
  br label %1336

1336:                                             ; preds = %1335, %822
  call void @llvm.lifetime.end.p0(i64 24, ptr %72) #12
  br label %1337

1337:                                             ; preds = %1336, %790
  call void @llvm.lifetime.end.p0(i64 32, ptr %70) #12
  br label %1338

1338:                                             ; preds = %1337, %773
  call void @llvm.lifetime.end.p0(i64 24, ptr %69) #12
  br label %1339

1339:                                             ; preds = %1338, %769
  call void @llvm.lifetime.end.p0(i64 72, ptr %68) #12
  br label %1340

1340:                                             ; preds = %1339, %687
  call void @llvm.lifetime.end.p0(i64 220, ptr %67) #12
  call void @llvm.lifetime.end.p0(i64 80, ptr %65) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #12
  br label %1341

1341:                                             ; preds = %1340, %654
  call void @llvm.lifetime.end.p0(i64 220, ptr %63) #12
  br label %1342

1342:                                             ; preds = %1341, %650
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #12
  br label %1343

1343:                                             ; preds = %1342, %617, %611
  call void @_ZN3JPH5ArrayIZN10RendererVK10InitializeEP17ApplicationWindowE6DeviceNS_12STLAllocatorIS4_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %34) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %34) #12
  br label %1344

1344:                                             ; preds = %1343, %350
  call void @_ZN3JPH5ArrayIP18VkPhysicalDevice_TNS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %33) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %33) #12
  br label %1345

1345:                                             ; preds = %1344, %346
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #12
  br label %1346

1346:                                             ; preds = %1345, %342
  call void @llvm.lifetime.end.p0(i64 40, ptr %31) #12
  br label %1347

1347:                                             ; preds = %1346, %294
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #12
  br label %1348

1348:                                             ; preds = %1347, %290, %261
  call void @llvm.lifetime.end.p0(i64 48, ptr %24) #12
  br label %1349

1349:                                             ; preds = %1348, %213
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr %17) #12
  br label %1350

1350:                                             ; preds = %1349, %180
  call void @_ZN3JPH5ArrayI17VkLayerPropertiesNS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #12
  br label %1351

1351:                                             ; preds = %1350, %176
  call void @llvm.lifetime.end.p0(i64 24, ptr %15) #12
  br label %1352

1352:                                             ; preds = %1351, %172
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #12
  br label %1353

1353:                                             ; preds = %1352, %168
  call void @_ZN3JPH5ArrayI21VkExtensionPropertiesNS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #12
  br label %1354

1354:                                             ; preds = %1353, %164
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #12
  br label %1355

1355:                                             ; preds = %1354, %160
  call void @_ZN3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #12
  br label %1356

1356:                                             ; preds = %1355, %156, %152
  call void @_ZN3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %5) #12
  br label %1357

1357:                                             ; preds = %1356
  %1358 = load ptr, ptr %7, align 8
  %1359 = load i32, ptr %8, align 4
  %1360 = insertvalue { ptr, i32 } poison, ptr %1358, 0
  %1361 = insertvalue { ptr, i32 } %1360, i32 %1359, 1
  resume { ptr, i32 } %1361

1362:                                             ; preds = %587
  unreachable
}

declare void @_ZN8Renderer10InitializeEP17ApplicationWindow(ptr noundef nonnull align 16 dereferenceable(832), ptr noundef) unnamed_addr #2

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

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

declare void @_Z18FatalErrorIfFailed8VkResult(i32 noundef) #2

declare i32 @vkEnumerateInstanceExtensionProperties(ptr noundef, ptr noundef, ptr noundef) #2

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

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

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

declare i32 @vkEnumerateInstanceLayerProperties(ptr noundef, ptr noundef) #2

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #7

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

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

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

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strcmp(ptr noundef, ptr noundef) #9

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

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

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL20sVulkanDebugCallback38VkDebugUtilsMessageSeverityFlagBitsEXTjPK36VkDebugUtilsMessengerCallbackDataEXTPv(i32 noundef, i32 noundef, ptr noundef, ptr noundef) #5

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

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

declare i32 @vkCreateInstance(ptr noundef, ptr noundef, ptr noundef) #2

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

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

declare i32 @vkCreateXlibSurfaceKHR(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare i32 @vkEnumeratePhysicalDevices(ptr noundef, ptr noundef, ptr noundef) #2

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

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

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

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

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

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

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

declare i32 @vkEnumerateDeviceExtensionProperties(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

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

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

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

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

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

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

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

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

declare i32 @vkGetPhysicalDeviceSurfaceSupportKHR(ptr noundef, i32 noundef, ptr noundef, ptr noundef) #2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEC2IS5_EEPKcRKS5_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #5 align 2

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZNK3JPH5ArrayIZN10RendererVK10InitializeEP17ApplicationWindowE6DeviceNS_12STLAllocatorIS4_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) #6 align 2

; Function Attrs: noreturn
declare void @_Z10FatalErrorPKcz(ptr noundef, ...) #10

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @"_ZN3JPH9QuickSortIPZN10RendererVK10InitializeEP17ApplicationWindowE6DeviceZNS1_10InitializeES3_E3$_0EEvT_S7_T0_"(ptr noundef, ptr noundef) #1

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef nonnull align 8 dereferenceable(60) ptr @_ZN3JPH5ArrayIZN10RendererVK10InitializeEP17ApplicationWindowE6DeviceNS_12STLAllocatorIS4_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #1 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZSt4sizeI23VkDeviceQueueCreateInfoLm2EEmRAT0__KT_(ptr noundef nonnull align 8 dereferenceable(80)) #3

declare i32 @vkCreateDevice(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare void @vkGetDeviceQueue(ptr noundef, i32 noundef, i32 noundef, ptr noundef) #2

declare i32 @vkCreateCommandPool(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare i32 @vkAllocateCommandBuffers(ptr noundef, ptr noundef, ptr noundef) #2

declare i32 @vkCreateSemaphore(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare i32 @vkCreateFence(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN10RendererVK20CreateConstantBufferEm(ptr dead_on_unwind noalias writable sret(%"class.std::unique_ptr") align 8, ptr noundef nonnull align 16 dereferenceable(1936), i64 noundef) #5 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZSt4sizeI28VkDescriptorSetLayoutBindingLm2EEmRAT0__KT_(ptr noundef nonnull align 8 dereferenceable(48)) #3

declare i32 @vkCreateDescriptorSetLayout(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZSt4sizeIP23VkDescriptorSetLayout_TLm2EEmRAT0__KT_(ptr noundef nonnull align 8 dereferenceable(16)) #3

declare i32 @vkCreatePipelineLayout(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

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

declare i32 @vkCreateDescriptorPool(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

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

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

declare i32 @vkAllocateDescriptorSets(ptr noundef, ptr noundef, ptr noundef) #2

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

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

declare void @vkUpdateDescriptorSets(ptr noundef, i32 noundef, ptr noundef, i32 noundef, ptr noundef) #2

declare i32 @vkCreateSampler(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

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

declare i32 @vkCreateRenderPass(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) #11

declare void @_ZN9TextureVKC1EP10RendererVKii(ptr noundef nonnull align 8 dereferenceable(64), ptr noundef, i32 noundef, i32 noundef) unnamed_addr #2

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

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

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

declare i32 @vkCreateFramebuffer(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZSt4sizeI23VkAttachmentDescriptionLm2EEmRAT0__KT_(ptr noundef nonnull align 4 dereferenceable(72)) #3

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

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

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nobuiltin 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 #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 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #8 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #9 = { nounwind willreturn memory(read) "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 #10 = { noreturn "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 #11 = { nobuiltin allocsize(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 #12 = { nounwind }
attributes #13 = { nounwind willreturn memory(read) }
attributes #14 = { noreturn }
attributes #15 = { builtin allocsize(0) }
attributes #16 = { builtin 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, !11, i64 16}
!10 = !{!"_ZTS8Renderer", !6, i64 8, !11, i64 16, !12, i64 20, !13, i64 32, !14, i64 96, !15, i64 112, !15, i64 192, !16, i64 272, !17, i64 288, !17, i64 544, !19, i64 800}
!11 = !{!"float", !7, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{!"_ZTS11CameraState", !14, i64 0, !14, i64 16, !14, i64 32, !11, i64 48}
!14 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!15 = !{!"_ZTS7Frustum", !7, i64 0}
!16 = !{!"int", !7, i64 0}
!17 = !{!"_ZTSN8Renderer26VertexShaderConstantBufferE", !18, i64 0, !18, i64 64, !18, i64 128, !18, i64 192}
!18 = !{!"_ZTSN3JPH5Mat44E", !7, i64 0}
!19 = !{!"_ZTSN8Renderer25PixelShaderConstantBufferE", !20, i64 0, !20, i64 16}
!20 = !{!"_ZTSN3JPH4Vec4E", !7, i64 0}
!21 = !{!16, !16, i64 0}
!22 = !{!23, !24, i64 0}
!23 = !{!"_ZTS20VkInstanceCreateInfo", !24, i64 0, !6, i64 8, !16, i64 16, !6, i64 24, !16, i64 32, !6, i64 40, !16, i64 48, !6, i64 56}
!24 = !{!"_ZTS15VkStructureType", !7, i64 0}
!25 = !{!23, !16, i64 32}
!26 = !{!23, !6, i64 40}
!27 = !{!28, !24, i64 0}
!28 = !{!"_ZTS34VkDebugUtilsMessengerCreateInfoEXT", !24, i64 0, !6, i64 8, !16, i64 16, !16, i64 20, !16, i64 24, !6, i64 32, !6, i64 40}
!29 = !{!28, !16, i64 20}
!30 = !{!28, !16, i64 24}
!31 = !{!28, !6, i64 32}
!32 = !{!23, !6, i64 8}
!33 = !{!23, !16, i64 48}
!34 = !{!23, !6, i64 56}
!35 = !{!36, !6, i64 832}
!36 = !{!"_ZTS10RendererVK", !10, i64 0, !6, i64 832, !6, i64 840, !6, i64 848, !37, i64 856, !6, i64 1376, !16, i64 1384, !16, i64 1388, !6, i64 1392, !6, i64 1400, !6, i64 1408, !6, i64 1416, !12, i64 1424, !38, i64 1432, !40, i64 1456, !41, i64 1460, !42, 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, !43, i64 1624, !16, i64 1648, !6, i64 1656, !7, i64 1664, !7, i64 1680, !7, i64 1696, !7, i64 1712, !44, i64 1728, !7, i64 1736, !7, i64 1752, !7, i64 1768, !7, i64 1784, !45, i64 1848, !47, i64 1880, !16, i64 1912, !16, i64 1916, !39, i64 1920, !39, i64 1928}
!37 = !{!"_ZTS32VkPhysicalDeviceMemoryProperties", !16, i64 0, !7, i64 4, !16, i64 260, !7, i64 264}
!38 = !{!"_ZTSN3JPH5ArrayIP9VkImage_TNS_12STLAllocatorIS2_EEEE", !39, i64 0, !39, i64 8, !6, i64 16}
!39 = !{!"long", !7, i64 0}
!40 = !{!"_ZTS8VkFormat", !7, i64 0}
!41 = !{!"_ZTS10VkExtent2D", !16, i64 0, !16, i64 4}
!42 = !{!"_ZTSN3JPH5ArrayIP13VkImageView_TNS_12STLAllocatorIS2_EEEE", !39, i64 0, !39, i64 8, !6, i64 16}
!43 = !{!"_ZTSN3JPH5ArrayIP15VkFramebuffer_TNS_12STLAllocatorIS2_EEEE", !39, i64 0, !39, i64 8, !6, i64 16}
!44 = !{!"_ZTSN3JPH3RefI9TextureVKEE", !6, i64 0}
!45 = !{!"_ZTSN3JPH12UnorderedMapIN10RendererVK3KeyENS_5ArrayI8BufferVKNS_12STLAllocatorIS4_EEEENS1_9KeyHasherESt8equal_toIS2_EEE", !46, i64 0}
!46 = !{!"_ZTSN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EEE", !6, i64 0, !6, i64 8, !16, i64 16, !16, i64 20, !16, i64 24}
!47 = !{!"_ZTSN3JPH12UnorderedMapIN10RendererVK3KeyENS_5ArrayINS1_6MemoryENS_12STLAllocatorIS4_EEEENS1_9KeyHasherESt8equal_toIS2_EEE", !48, i64 0}
!48 = !{!"_ZTSN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayINS1_6MemoryENS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EEE", !6, i64 0, !6, i64 8, !16, i64 16, !16, i64 20, !16, i64 24}
!49 = !{!50, !24, i64 0}
!50 = !{!"_ZTS26VkXlibSurfaceCreateInfoKHR", !24, i64 0, !6, i64 8, !16, i64 16, !6, i64 24, !39, i64 32}
!51 = !{!10, !6, i64 8}
!52 = !{!50, !6, i64 24}
!53 = !{!50, !39, i64 32}
!54 = !{!55, !56, i64 16}
!55 = !{!"_ZTS26VkPhysicalDeviceProperties", !16, i64 0, !16, i64 4, !16, i64 8, !16, i64 12, !56, i64 16, !7, i64 20, !7, i64 276, !57, i64 296, !58, i64 800}
!56 = !{!"_ZTS20VkPhysicalDeviceType", !7, i64 0}
!57 = !{!"_ZTS22VkPhysicalDeviceLimits", !16, i64 0, !16, i64 4, !16, i64 8, !16, i64 12, !16, i64 16, !16, i64 20, !16, i64 24, !16, i64 28, !16, i64 32, !16, i64 36, !16, i64 40, !39, i64 48, !39, i64 56, !16, i64 64, !16, i64 68, !16, i64 72, !16, i64 76, !16, i64 80, !16, i64 84, !16, i64 88, !16, i64 92, !16, i64 96, !16, i64 100, !16, i64 104, !16, i64 108, !16, i64 112, !16, i64 116, !16, i64 120, !16, i64 124, !16, i64 128, !16, i64 132, !16, i64 136, !16, i64 140, !16, i64 144, !16, i64 148, !16, i64 152, !16, i64 156, !16, i64 160, !16, i64 164, !16, i64 168, !16, i64 172, !16, i64 176, !16, i64 180, !16, i64 184, !16, i64 188, !16, i64 192, !16, i64 196, !16, i64 200, !16, i64 204, !16, i64 208, !16, i64 212, !16, i64 216, !7, i64 220, !16, i64 232, !7, i64 236, !16, i64 248, !16, i64 252, !16, i64 256, !16, i64 260, !16, i64 264, !11, i64 268, !11, i64 272, !16, i64 276, !7, i64 280, !7, i64 288, !16, i64 296, !39, i64 304, !39, i64 312, !39, i64 320, !39, i64 328, !16, i64 336, !16, i64 340, !16, i64 344, !16, i64 348, !11, i64 352, !11, i64 356, !16, i64 360, !16, i64 364, !16, i64 368, !16, i64 372, !16, i64 376, !16, i64 380, !16, i64 384, !16, i64 388, !16, i64 392, !16, i64 396, !16, i64 400, !16, i64 404, !16, i64 408, !16, i64 412, !16, i64 416, !16, i64 420, !11, i64 424, !16, i64 428, !16, i64 432, !16, i64 436, !16, i64 440, !7, i64 444, !7, i64 452, !11, i64 460, !11, i64 464, !16, i64 468, !16, i64 472, !39, i64 480, !39, i64 488, !39, i64 496}
!58 = !{!"_ZTS32VkPhysicalDeviceSparseProperties", !16, i64 0, !16, i64 4, !16, i64 8, !16, i64 12, !16, i64 16}
!59 = !{!60, !16, i64 0}
!60 = !{!"_ZTS23VkQueueFamilyProperties", !16, i64 0, !16, i64 4, !16, i64 8, !61, i64 12}
!61 = !{!"_ZTS10VkExtent3D", !16, i64 0, !16, i64 4, !16, i64 8}
!62 = !{!36, !6, i64 1408}
!63 = distinct !{!63, !64}
!64 = !{!"llvm.loop.mustprogress"}
!65 = !{!66, !40, i64 0}
!66 = !{!"_ZTS18VkSurfaceFormatKHR", !40, i64 0, !67, i64 4}
!67 = !{!"_ZTS15VkColorSpaceKHR", !7, i64 0}
!68 = !{!69, !6, i64 0}
!69 = !{!"_ZTSZN10RendererVK10InitializeEP17ApplicationWindowE6Device", !6, i64 0, !70, i64 8, !66, i64 40, !16, i64 48, !16, i64 52, !16, i64 56}
!70 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEE", !71, i64 0, !39, i64 8, !7, i64 16}
!71 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEE12_Alloc_hiderE", !6, i64 0}
!72 = !{i64 0, i64 4, !73, i64 4, i64 4, !74}
!73 = !{!40, !40, i64 0}
!74 = !{!67, !67, i64 0}
!75 = !{!69, !16, i64 48}
!76 = !{!69, !16, i64 52}
!77 = !{!69, !16, i64 56}
!78 = !{!36, !6, i64 848}
!79 = !{!11, !11, i64 0}
!80 = !{!39, !39, i64 0}
!81 = !{!82, !24, i64 0}
!82 = !{!"_ZTS23VkDeviceQueueCreateInfo", !24, i64 0, !6, i64 8, !16, i64 16, !16, i64 20, !16, i64 24, !6, i64 32}
!83 = !{!82, !16, i64 24}
!84 = !{!82, !6, i64 32}
!85 = distinct !{!85, !64}
!86 = !{!82, !16, i64 20}
!87 = !{!88, !16, i64 52}
!88 = !{!"_ZTS24VkPhysicalDeviceFeatures", !16, i64 0, !16, i64 4, !16, i64 8, !16, i64 12, !16, i64 16, !16, i64 20, !16, i64 24, !16, i64 28, !16, i64 32, !16, i64 36, !16, i64 40, !16, i64 44, !16, i64 48, !16, i64 52, !16, i64 56, !16, i64 60, !16, i64 64, !16, i64 68, !16, i64 72, !16, i64 76, !16, i64 80, !16, i64 84, !16, i64 88, !16, i64 92, !16, i64 96, !16, i64 100, !16, i64 104, !16, i64 108, !16, i64 112, !16, i64 116, !16, i64 120, !16, i64 124, !16, i64 128, !16, i64 132, !16, i64 136, !16, i64 140, !16, i64 144, !16, i64 148, !16, i64 152, !16, i64 156, !16, i64 160, !16, i64 164, !16, i64 168, !16, i64 172, !16, i64 176, !16, i64 180, !16, i64 184, !16, i64 188, !16, i64 192, !16, i64 196, !16, i64 200, !16, i64 204, !16, i64 208, !16, i64 212, !16, i64 216}
!89 = !{!90, !24, i64 0}
!90 = !{!"_ZTS18VkDeviceCreateInfo", !24, i64 0, !6, i64 8, !16, i64 16, !16, i64 20, !6, i64 24, !16, i64 32, !6, i64 40, !16, i64 48, !6, i64 56, !6, i64 64}
!91 = !{!90, !16, i64 20}
!92 = !{!90, !6, i64 24}
!93 = !{!90, !16, i64 32}
!94 = !{!90, !6, i64 40}
!95 = !{!90, !16, i64 48}
!96 = !{!90, !6, i64 56}
!97 = !{!90, !6, i64 64}
!98 = !{!36, !16, i64 1384}
!99 = !{!36, !16, i64 1388}
!100 = !{!36, !6, i64 1376}
!101 = !{!102, !24, i64 0}
!102 = !{!"_ZTS23VkCommandPoolCreateInfo", !24, i64 0, !6, i64 8, !16, i64 16, !16, i64 20}
!103 = !{!102, !16, i64 16}
!104 = !{!102, !16, i64 20}
!105 = !{!106, !24, i64 0}
!106 = !{!"_ZTS27VkCommandBufferAllocateInfo", !24, i64 0, !6, i64 8, !6, i64 16, !107, i64 24, !16, i64 28}
!107 = !{!"_ZTS20VkCommandBufferLevel", !7, i64 0}
!108 = !{!36, !6, i64 1656}
!109 = !{!106, !6, i64 16}
!110 = !{!106, !107, i64 24}
!111 = !{!106, !16, i64 28}
!112 = distinct !{!112, !64}
!113 = !{!114, !24, i64 0}
!114 = !{!"_ZTS21VkSemaphoreCreateInfo", !24, i64 0, !6, i64 8, !16, i64 16}
!115 = distinct !{!115, !64}
!116 = !{!117, !24, i64 0}
!117 = !{!"_ZTS17VkFenceCreateInfo", !24, i64 0, !6, i64 8, !16, i64 16}
!118 = !{!117, !16, i64 16}
!119 = distinct !{!119, !64}
!120 = distinct !{!120, !64}
!121 = !{!122, !16, i64 0}
!122 = !{!"_ZTS28VkDescriptorSetLayoutBinding", !16, i64 0, !123, i64 4, !16, i64 8, !16, i64 12, !6, i64 16}
!123 = !{!"_ZTS16VkDescriptorType", !7, i64 0}
!124 = !{!122, !16, i64 8}
!125 = !{!122, !123, i64 4}
!126 = !{!122, !16, i64 12}
!127 = !{!128, !24, i64 0}
!128 = !{!"_ZTS31VkDescriptorSetLayoutCreateInfo", !24, i64 0, !6, i64 8, !16, i64 16, !16, i64 20, !6, i64 24}
!129 = !{!128, !16, i64 20}
!130 = !{!128, !6, i64 24}
!131 = !{!36, !6, i64 1520}
!132 = !{!36, !6, i64 1528}
!133 = !{!134, !24, i64 0}
!134 = !{!"_ZTS26VkPipelineLayoutCreateInfo", !24, i64 0, !6, i64 8, !16, i64 16, !16, i64 20, !6, i64 24, !16, i64 32, !6, i64 40}
!135 = !{!134, !16, i64 20}
!136 = !{!134, !6, i64 24}
!137 = !{!134, !16, i64 32}
!138 = !{!139, !24, i64 0}
!139 = !{!"_ZTS26VkDescriptorPoolCreateInfo", !24, i64 0, !6, i64 8, !16, i64 16, !16, i64 20, !16, i64 24, !6, i64 32}
!140 = !{!139, !16, i64 24}
!141 = !{!139, !6, i64 32}
!142 = !{!139, !16, i64 20}
!143 = !{!144, !24, i64 0}
!144 = !{!"_ZTS27VkDescriptorSetAllocateInfo", !24, i64 0, !6, i64 8, !6, i64 16, !16, i64 24, !6, i64 32}
!145 = !{!36, !6, i64 1536}
!146 = !{!144, !6, i64 16}
!147 = !{!144, !16, i64 24}
!148 = !{!144, !6, i64 32}
!149 = !{!150, !6, i64 0}
!150 = !{!"_ZTS22VkDescriptorBufferInfo", !6, i64 0, !39, i64 8, !39, i64 16}
!151 = !{!150, !39, i64 16}
!152 = !{!153, !24, i64 0}
!153 = !{!"_ZTS20VkWriteDescriptorSet", !24, i64 0, !6, i64 8, !6, i64 16, !16, i64 24, !16, i64 28, !16, i64 32, !123, i64 36, !6, i64 40, !6, i64 48, !6, i64 56}
!154 = !{!153, !6, i64 16}
!155 = !{!153, !16, i64 24}
!156 = !{!153, !123, i64 36}
!157 = !{!153, !16, i64 32}
!158 = !{!153, !6, i64 48}
!159 = distinct !{!159, !64}
!160 = distinct !{!160, !64}
!161 = !{!162, !24, i64 0}
!162 = !{!"_ZTS19VkSamplerCreateInfo", !24, i64 0, !6, i64 8, !16, i64 16, !163, i64 20, !163, i64 24, !164, i64 28, !165, i64 32, !165, i64 36, !165, i64 40, !11, i64 44, !16, i64 48, !11, i64 52, !16, i64 56, !166, i64 60, !11, i64 64, !11, i64 68, !167, i64 72, !16, i64 76}
!163 = !{!"_ZTS8VkFilter", !7, i64 0}
!164 = !{!"_ZTS19VkSamplerMipmapMode", !7, i64 0}
!165 = !{!"_ZTS20VkSamplerAddressMode", !7, i64 0}
!166 = !{!"_ZTS11VkCompareOp", !7, i64 0}
!167 = !{!"_ZTS13VkBorderColor", !7, i64 0}
!168 = !{!162, !163, i64 20}
!169 = !{!162, !163, i64 24}
!170 = !{!162, !165, i64 32}
!171 = !{!162, !165, i64 36}
!172 = !{!162, !165, i64 40}
!173 = !{!162, !167, i64 72}
!174 = !{!162, !16, i64 76}
!175 = !{!162, !11, i64 64}
!176 = !{!162, !11, i64 68}
!177 = !{!162, !164, i64 28}
!178 = !{!179, !40, i64 4}
!179 = !{!"_ZTS23VkAttachmentDescription", !16, i64 0, !40, i64 4, !180, i64 8, !181, i64 12, !182, i64 16, !181, i64 20, !182, i64 24, !183, i64 28, !183, i64 32}
!180 = !{!"_ZTS21VkSampleCountFlagBits", !7, i64 0}
!181 = !{!"_ZTS18VkAttachmentLoadOp", !7, i64 0}
!182 = !{!"_ZTS19VkAttachmentStoreOp", !7, i64 0}
!183 = !{!"_ZTS13VkImageLayout", !7, i64 0}
!184 = !{!179, !180, i64 8}
!185 = !{!179, !181, i64 12}
!186 = !{!179, !182, i64 16}
!187 = !{!179, !181, i64 20}
!188 = !{!179, !182, i64 24}
!189 = !{!179, !183, i64 28}
!190 = !{!179, !183, i64 32}
!191 = !{!192, !16, i64 0}
!192 = !{!"_ZTS21VkAttachmentReference", !16, i64 0, !183, i64 4}
!193 = !{!192, !183, i64 4}
!194 = !{!195, !196, i64 4}
!195 = !{!"_ZTS20VkSubpassDescription", !16, i64 0, !196, i64 4, !16, i64 8, !6, i64 16, !16, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !16, i64 56, !6, i64 64}
!196 = !{!"_ZTS19VkPipelineBindPoint", !7, i64 0}
!197 = !{!195, !6, i64 48}
!198 = !{!199, !16, i64 0}
!199 = !{!"_ZTS19VkSubpassDependency", !16, i64 0, !16, i64 4, !16, i64 8, !16, i64 12, !16, i64 16, !16, i64 20, !16, i64 24}
!200 = !{!199, !16, i64 4}
!201 = !{!199, !16, i64 8}
!202 = !{!199, !16, i64 16}
!203 = !{!199, !16, i64 12}
!204 = !{!199, !16, i64 20}
!205 = !{!206, !24, i64 0}
!206 = !{!"_ZTS22VkRenderPassCreateInfo", !24, i64 0, !6, i64 8, !16, i64 16, !16, i64 20, !6, i64 24, !16, i64 32, !6, i64 40, !16, i64 48, !6, i64 56}
!207 = !{!206, !16, i64 20}
!208 = !{!206, !6, i64 24}
!209 = !{!206, !16, i64 32}
!210 = !{!206, !6, i64 40}
!211 = !{!206, !16, i64 48}
!212 = !{!206, !6, i64 56}
!213 = !{!214, !24, i64 0}
!214 = !{!"_ZTS23VkFramebufferCreateInfo", !24, i64 0, !6, i64 8, !16, i64 16, !6, i64 24, !16, i64 32, !6, i64 40, !16, i64 48, !16, i64 52, !16, i64 56}
!215 = !{!36, !6, i64 1592}
!216 = !{!214, !6, i64 24}
!217 = !{!214, !16, i64 32}
!218 = !{!214, !6, i64 40}
!219 = !{!214, !16, i64 48}
!220 = !{!214, !16, i64 52}
!221 = !{!214, !16, i64 56}
!222 = !{!69, !40, i64 40}
!223 = !{!195, !16, i64 24}
!224 = !{!195, !6, i64 32}


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

%struct.VkDescriptorPoolSize = type { i32, i32 }
%"class.JPH::Array.21" = type { i64, i64, ptr }
%"class.JPH::Array.24" = type { i64, i64, ptr }
%"class.JPH::Array.27" = type { i64, i64, ptr }
%"class.JPH::STLAllocator.28" = type { i8 }
%struct.VkInstanceCreateInfo = type { i32, ptr, i32, ptr, i32, ptr, i32, ptr }
%struct.VkDebugUtilsMessengerCreateInfoEXT = type { i32, ptr, i32, i32, i32, ptr, ptr }
%struct.VkXlibSurfaceCreateInfoKHR = type { i32, ptr, i32, ptr, i64 }
%"class.JPH::Array.32" = type { i64, i64, ptr }
%"class.JPH::Array.35" = type { i64, i64, ptr }
%struct.VkPhysicalDeviceProperties = type { i32, i32, i32, i32, i32, [256 x i8], [16 x i8], %struct.VkPhysicalDeviceLimits, %struct.VkPhysicalDeviceSparseProperties }
%struct.VkPhysicalDeviceLimits = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i64, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [3 x i32], i32, [3 x i32], i32, i32, i32, i32, i32, float, float, i32, [2 x i32], [2 x float], i32, i64, i64, i64, i64, i32, i32, i32, i32, float, float, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, i32, i32, i32, i32, [2 x float], [2 x float], float, float, i32, i32, i64, i64, i64 }
%struct.VkPhysicalDeviceSparseProperties = type { i32, i32, i32, i32, i32 }
%"class.JPH::Array.38" = type { i64, i64, ptr }
%struct.Device = type <{ ptr, %"class.std::__cxx11::basic_string", %struct.VkSurfaceFormatKHR, i32, i32, i32, [4 x i8] }>
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider", i64, %union.anon.43 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.43 = type { i64, [8 x i8] }
%struct.VkSurfaceFormatKHR = type { i32, i32 }
%"class.JPH::STLAllocator.41" = type { i8 }
%struct.VkPhysicalDeviceFeatures = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.VkDeviceQueueCreateInfo = type { i32, ptr, i32, i32, i32, ptr }
%struct.VkDeviceCreateInfo = type { i32, ptr, i32, i32, ptr, i32, ptr, i32, ptr, ptr }
%struct.VkCommandPoolCreateInfo = type { i32, ptr, i32, i32 }
%struct.VkCommandBufferAllocateInfo = type { i32, ptr, ptr, i32, i32 }
%struct.VkSemaphoreCreateInfo = type { i32, ptr, i32 }
%struct.VkFenceCreateInfo = type { i32, ptr, i32 }
%"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 }
%struct.VkDescriptorSetLayoutBinding = type { i32, i32, i32, i32, ptr }
%struct.VkDescriptorSetLayoutCreateInfo = type { i32, ptr, i32, i32, ptr }
%struct.VkPipelineLayoutCreateInfo = type { i32, ptr, i32, i32, ptr, i32, ptr }
%struct.VkDescriptorPoolCreateInfo = type { i32, ptr, i32, i32, i32, ptr }
%"class.JPH::Array.44" = type { i64, i64, ptr }
%"class.JPH::STLAllocator.45" = type { i8 }
%struct.VkDescriptorSetAllocateInfo = type { i32, ptr, ptr, i32, ptr }
%struct.VkDescriptorBufferInfo = type { ptr, i64, i64 }
%struct.VkWriteDescriptorSet = type { i32, ptr, ptr, i32, i32, i32, i32, ptr, ptr, ptr }
%struct.VkSamplerCreateInfo = type { i32, ptr, i32, i32, i32, i32, i32, i32, i32, float, i32, float, i32, i32, float, float, i32, i32 }
%struct.VkAttachmentDescription = type { i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.VkAttachmentReference = type { i32, i32 }
%struct.VkSubpassDescription = type { i32, i32, i32, ptr, i32, ptr, ptr, ptr, i32, ptr }
%struct.VkSubpassDependency = type { i32, i32, i32, i32, i32, i32, i32 }
%struct.VkRenderPassCreateInfo = type { i32, ptr, i32, i32, ptr, i32, ptr, i32, ptr }
%struct.VkFramebufferCreateInfo = type { i32, ptr, i32, ptr, i32, ptr, i32, i32, i32 }

@_ZN3JPH5TraceE = external local_unnamed_addr global ptr, align 8
@.str.2 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [17 x i8], align 1
@__const._ZN10RendererVK10InitializeEP17ApplicationWindow.desired_validation_layers = external hidden unnamed_addr constant [1 x ptr], align 8
@.str.6 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [32 x i8], align 1
@__const._ZN10RendererVK10InitializeEP17ApplicationWindow.descriptor_pool_sizes = external hidden unnamed_addr constant [2 x %struct.VkDescriptorPoolSize], align 16

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: 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 #1 align 2

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

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

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN10RendererVK10InitializeEP17ApplicationWindow(ptr noundef nonnull align 16 dereferenceable(1936) %0, ptr noundef %1) unnamed_addr #5 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.JPH::Array.21", align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca %"class.JPH::Array.21", align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca %"class.JPH::Array.24", align 8
  %10 = alloca i32, align 4
  %11 = alloca %"class.JPH::Array.27", align 8
  %12 = alloca %"class.JPH::STLAllocator.28", align 1
  %13 = alloca %struct.VkInstanceCreateInfo, align 8
  %14 = alloca [1 x ptr], align 8
  %15 = alloca %struct.VkDebugUtilsMessengerCreateInfoEXT, align 8
  %16 = alloca ptr, align 8
  %17 = alloca %struct.VkXlibSurfaceCreateInfoKHR, align 8
  %18 = alloca i32, align 4
  %19 = alloca %"class.JPH::Array.32", align 8
  %20 = alloca %"class.JPH::Array.35", align 8
  %21 = alloca %struct.VkPhysicalDeviceProperties, align 8
  %22 = alloca i32, align 4
  %23 = alloca %"class.JPH::Array.24", align 8
  %24 = alloca i32, align 4
  %25 = alloca %"class.JPH::Array.38", align 8
  %26 = alloca i32, align 4
  %27 = alloca %struct.Device, align 8
  %28 = alloca %"class.JPH::STLAllocator.41", align 1
  %29 = alloca %struct.VkPhysicalDeviceFeatures, align 4
  %30 = alloca float, align 4
  %31 = alloca [2 x %struct.VkDeviceQueueCreateInfo], align 16
  %32 = alloca %struct.VkPhysicalDeviceFeatures, align 4
  %33 = alloca %struct.VkDeviceCreateInfo, align 8
  %34 = alloca %struct.VkCommandPoolCreateInfo, align 8
  %35 = alloca %struct.VkCommandBufferAllocateInfo, align 8
  %36 = alloca %struct.VkSemaphoreCreateInfo, align 8
  %37 = alloca %struct.VkFenceCreateInfo, align 8
  %38 = alloca %"class.std::unique_ptr", align 8
  %39 = alloca %"class.std::unique_ptr", align 8
  %40 = alloca %"class.std::unique_ptr", align 8
  %41 = alloca [2 x %struct.VkDescriptorSetLayoutBinding], align 16
  %42 = alloca %struct.VkDescriptorSetLayoutCreateInfo, align 8
  %43 = alloca %struct.VkDescriptorSetLayoutBinding, align 8
  %44 = alloca %struct.VkDescriptorSetLayoutCreateInfo, align 8
  %45 = alloca %struct.VkPipelineLayoutCreateInfo, align 8
  %46 = alloca [2 x ptr], align 16
  %47 = alloca [2 x %struct.VkDescriptorPoolSize], align 16
  %48 = alloca %struct.VkDescriptorPoolCreateInfo, align 8
  %49 = alloca %"class.JPH::Array.44", align 8
  %50 = alloca %"class.JPH::STLAllocator.45", align 1
  %51 = alloca %struct.VkDescriptorSetAllocateInfo, align 8
  %52 = alloca %struct.VkDescriptorBufferInfo, align 8
  %53 = alloca %struct.VkDescriptorBufferInfo, align 8
  %54 = alloca [2 x %struct.VkWriteDescriptorSet], align 16
  %55 = alloca %struct.VkDescriptorBufferInfo, align 8
  %56 = alloca %struct.VkWriteDescriptorSet, align 8
  %57 = alloca %struct.VkSamplerCreateInfo, align 8
  %58 = alloca %struct.VkAttachmentDescription, align 4
  %59 = alloca %struct.VkAttachmentReference, align 8
  %60 = alloca %struct.VkSubpassDescription, align 8
  %61 = alloca %struct.VkSubpassDependency, align 16
  %62 = alloca %struct.VkRenderPassCreateInfo, align 8
  %63 = alloca [1 x ptr], align 8
  %64 = alloca %struct.VkFramebufferCreateInfo, align 8
  %65 = alloca [2 x %struct.VkAttachmentDescription], align 16
  %66 = alloca %struct.VkAttachmentReference, align 8
  %67 = alloca %struct.VkAttachmentReference, align 8
  %68 = alloca %struct.VkSubpassDescription, align 8
  %69 = alloca %struct.VkSubpassDependency, align 16
  %70 = alloca %struct.VkRenderPassCreateInfo, align 8
  tail call void @_ZN8Renderer10InitializeEP17ApplicationWindow(ptr noundef nonnull align 16 dereferenceable(832) %0, ptr noundef %1)
  %71 = getelementptr inbounds i8, ptr %0, i64 16
  store float -1.000000e+00, ptr %71, align 16, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %3) #12
  call void @_ZN3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #12
  store ptr @.str.2, ptr %4, align 8, !tbaa !20
  invoke void @_ZN3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(8) %4)
          to label %72 unwind label %99

72:                                               ; preds = %2
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #12
  store ptr @.str.3, ptr %5, align 8, !tbaa !20
  invoke void @_ZN3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(8) %5)
          to label %73 unwind label %101

73:                                               ; preds = %72
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #12
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #12
  call void @_ZN3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #12
  store ptr @.str.4, ptr %7, align 8, !tbaa !20
  invoke void @_ZN3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %74 unwind label %103

74:                                               ; preds = %73
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #12
  store i32 0, ptr %8, align 4, !tbaa !21
  %75 = invoke i32 @vkEnumerateInstanceExtensionProperties(ptr noundef null, ptr noundef nonnull %8, ptr noundef null)
          to label %76 unwind label %105

76:                                               ; preds = %74
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %75)
          to label %77 unwind label %105

77:                                               ; preds = %76
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %9) #12
  call void @_ZN3JPH5ArrayI21VkExtensionPropertiesNS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #12
  %78 = load i32, ptr %8, align 4, !tbaa !21
  %79 = zext i32 %78 to i64
  invoke void @_ZN3JPH5ArrayI21VkExtensionPropertiesNS_12STLAllocatorIS1_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef %79)
          to label %80 unwind label %107

80:                                               ; preds = %77
  %81 = call noundef ptr @_ZN3JPH5ArrayI21VkExtensionPropertiesNS_12STLAllocatorIS1_EEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %9)
  %82 = invoke i32 @vkEnumerateInstanceExtensionProperties(ptr noundef null, ptr noundef nonnull %8, ptr noundef %81)
          to label %83 unwind label %107

83:                                               ; preds = %80
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %82)
          to label %84 unwind label %107

84:                                               ; preds = %83
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #12
  %85 = invoke i32 @vkEnumerateInstanceLayerProperties(ptr noundef nonnull %10, ptr noundef null)
          to label %86 unwind label %109

86:                                               ; preds = %84
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #12
  %87 = load i32, ptr %10, align 4, !tbaa !21
  %88 = zext i32 %87 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %12) #12
  invoke void @_ZN3JPH5ArrayI17VkLayerPropertiesNS_12STLAllocatorIS1_EEEC2EmRKS3_(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %88, ptr noundef nonnull align 1 dereferenceable(1) %12)
          to label %89 unwind label %111

89:                                               ; preds = %86
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #12
  %90 = call noundef ptr @_ZN3JPH5ArrayI17VkLayerPropertiesNS_12STLAllocatorIS1_EEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %11)
  %91 = invoke i32 @vkEnumerateInstanceLayerProperties(ptr noundef nonnull %10, ptr noundef %90)
          to label %92 unwind label %113

92:                                               ; preds = %89
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %13) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %13, i8 0, i64 64, i1 false)
  store i32 1, ptr %13, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #12
  %93 = load i64, ptr @__const._ZN10RendererVK10InitializeEP17ApplicationWindow.desired_validation_layers, align 8
  store i64 %93, ptr %14, align 8
  %94 = call noundef ptr @_ZN3JPH5ArrayI17VkLayerPropertiesNS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %11)
  %95 = call noundef ptr @_ZN3JPH5ArrayI17VkLayerPropertiesNS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %11)
  %.not277 = icmp eq ptr %94, %95
  br i1 %.not277, label %.loopexit276, label %.critedge.lr.ph

.critedge.lr.ph:                                  ; preds = %92
  %96 = load ptr, ptr %14, align 8, !tbaa !20
  br label %.critedge

97:                                               ; preds = %.critedge
  %98 = getelementptr inbounds i8, ptr %.0179278, i64 520
  %.not = icmp eq ptr %98, %95
  br i1 %.not, label %.loopexit276, label %.critedge

99:                                               ; preds = %2
  %100 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #12
  br label %705

101:                                              ; preds = %72
  %102 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #12
  br label %705

103:                                              ; preds = %73
  %104 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #12
  br label %704

105:                                              ; preds = %76, %74
  %106 = landingpad { ptr, i32 }
          cleanup
  br label %703

107:                                              ; preds = %83, %80, %77
  %108 = landingpad { ptr, i32 }
          cleanup
  br label %702

109:                                              ; preds = %84
  %110 = landingpad { ptr, i32 }
          cleanup
  br label %701

111:                                              ; preds = %86
  %112 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #12
  br label %700

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

.critedge:                                        ; preds = %.critedge.lr.ph, %97
  %.0179278 = phi ptr [ %94, %.critedge.lr.ph ], [ %98, %97 ]
  %115 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %96, ptr noundef nonnull dereferenceable(1) %.0179278) #13
  %.not205 = icmp eq i32 %115, 0
  br i1 %.not205, label %116, label %97

116:                                              ; preds = %.critedge
  %117 = getelementptr inbounds i8, ptr %13, i64 32
  store i32 1, ptr %117, align 8, !tbaa !25
  %118 = getelementptr inbounds i8, ptr %13, i64 40
  store ptr %14, ptr %118, align 8, !tbaa !26
  br label %.loopexit276

.loopexit276:                                     ; preds = %97, %92, %116
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %15) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(48) %15, i8 0, i64 48, i1 false)
  %119 = call noundef ptr @_ZN3JPH5ArrayI21VkExtensionPropertiesNS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %9)
  %120 = call noundef ptr @_ZN3JPH5ArrayI21VkExtensionPropertiesNS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %9)
  %.not206279 = icmp eq ptr %119, %120
  br i1 %.not206279, label %.loopexit, label %.critedge271

121:                                              ; preds = %.critedge271
  %122 = getelementptr inbounds i8, ptr %.0188280, i64 260
  %.not206 = icmp eq ptr %122, %120
  br i1 %.not206, label %.loopexit, label %.critedge271

.critedge271:                                     ; preds = %.loopexit276, %121
  %.0188280 = phi ptr [ %122, %121 ], [ %119, %.loopexit276 ]
  %123 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) @.str.6, ptr noundef nonnull dereferenceable(1) %.0188280) #13
  %.not207 = icmp eq i32 %123, 0
  br i1 %.not207, label %124, label %121

124:                                              ; preds = %.critedge271
  store i32 1000128004, ptr %15, align 8, !tbaa !27
  %125 = getelementptr inbounds i8, ptr %15, i64 20
  store i32 4369, ptr %125, align 4, !tbaa !29
  %126 = getelementptr inbounds i8, ptr %15, i64 24
  store i32 7, ptr %126, align 8, !tbaa !30
  %127 = getelementptr inbounds i8, ptr %15, i64 32
  store ptr @_ZL20sVulkanDebugCallback38VkDebugUtilsMessageSeverityFlagBitsEXTjPK36VkDebugUtilsMessengerCallbackDataEXTPv, ptr %127, align 8, !tbaa !31
  %128 = getelementptr inbounds i8, ptr %13, i64 8
  store ptr %15, ptr %128, align 8, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #12
  store ptr @.str.6, ptr %16, align 8, !tbaa !20
  invoke void @_ZN3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(8) %16)
          to label %129 unwind label %130

129:                                              ; preds = %124
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #12
  br label %.loopexit

130:                                              ; preds = %124
  %131 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #12
  br label %698

.loopexit:                                        ; preds = %121, %.loopexit276, %129
  %132 = call noundef i64 @_ZNK3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %3)
  %133 = trunc i64 %132 to i32
  %134 = getelementptr inbounds i8, ptr %13, i64 48
  store i32 %133, ptr %134, align 8, !tbaa !33
  %135 = call noundef ptr @_ZN3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %3)
  %136 = getelementptr inbounds i8, ptr %13, i64 56
  store ptr %135, ptr %136, align 8, !tbaa !34
  %137 = getelementptr inbounds i8, ptr %0, i64 832
  %138 = invoke i32 @vkCreateInstance(ptr noundef nonnull %13, ptr noundef null, ptr noundef nonnull %137)
          to label %139 unwind label %149

139:                                              ; preds = %.loopexit
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %138)
          to label %140 unwind label %149

140:                                              ; preds = %139
  %141 = load ptr, ptr %137, align 16, !tbaa !35
  %142 = invoke ptr @vkGetInstanceProcAddr(ptr noundef %141, ptr noundef nonnull @.str.7)
          to label %143 unwind label %151

143:                                              ; preds = %140
  %.not208 = icmp eq ptr %142, null
  br i1 %.not208, label %153, label %144

144:                                              ; preds = %143
  %145 = load ptr, ptr %137, align 16, !tbaa !35
  %146 = getelementptr inbounds i8, ptr %0, i64 840
  %147 = invoke noundef i32 %142(ptr noundef %145, ptr noundef nonnull %15, ptr noundef null, ptr noundef nonnull %146)
          to label %148 unwind label %151

148:                                              ; preds = %144
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %147)
          to label %153 unwind label %151

149:                                              ; preds = %139, %.loopexit
  %150 = landingpad { ptr, i32 }
          cleanup
  br label %698

151:                                              ; preds = %148, %144, %140
  %152 = landingpad { ptr, i32 }
          cleanup
  br label %698

153:                                              ; preds = %148, %143
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %17) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(40) %17, i8 0, i64 40, i1 false)
  store i32 1000004000, ptr %17, align 8, !tbaa !49
  %154 = getelementptr inbounds i8, ptr %0, i64 8
  %155 = load ptr, ptr %154, align 8, !tbaa !51
  %156 = call noundef ptr @_ZNK22ApplicationWindowLinux10GetDisplayEv(ptr noundef nonnull align 8 dereferenceable(104) %155)
  %157 = getelementptr inbounds i8, ptr %17, i64 24
  store ptr %156, ptr %157, align 8, !tbaa !52
  %158 = load ptr, ptr %154, align 8, !tbaa !51
  %159 = call noundef i64 @_ZNK22ApplicationWindowLinux9GetWindowEv(ptr noundef nonnull align 8 dereferenceable(104) %158)
  %160 = getelementptr inbounds i8, ptr %17, i64 32
  store i64 %159, ptr %160, align 8, !tbaa !53
  %161 = load ptr, ptr %137, align 16, !tbaa !35
  %162 = getelementptr inbounds i8, ptr %0, i64 1408
  %163 = invoke i32 @vkCreateXlibSurfaceKHR(ptr noundef %161, ptr noundef nonnull %17, ptr noundef null, ptr noundef nonnull %162)
          to label %164 unwind label %188

164:                                              ; preds = %153
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %163)
          to label %165 unwind label %188

165:                                              ; preds = %164
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #12
  store i32 0, ptr %18, align 4, !tbaa !21
  %166 = load ptr, ptr %137, align 16, !tbaa !35
  %167 = invoke i32 @vkEnumeratePhysicalDevices(ptr noundef %166, ptr noundef nonnull %18, ptr noundef null)
          to label %168 unwind label %190

168:                                              ; preds = %165
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %167)
          to label %169 unwind label %190

169:                                              ; preds = %168
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %19) #12
  call void @_ZN3JPH5ArrayIP18VkPhysicalDevice_TNS_12STLAllocatorIS2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #12
  %170 = load i32, ptr %18, align 4, !tbaa !21
  %171 = zext i32 %170 to i64
  invoke void @_ZN3JPH5ArrayIP18VkPhysicalDevice_TNS_12STLAllocatorIS2_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %171)
          to label %172 unwind label %192

172:                                              ; preds = %169
  %173 = load ptr, ptr %137, align 16, !tbaa !35
  %174 = call noundef ptr @_ZN3JPH5ArrayIP18VkPhysicalDevice_TNS_12STLAllocatorIS2_EEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %19)
  %175 = invoke i32 @vkEnumeratePhysicalDevices(ptr noundef %173, ptr noundef nonnull %18, ptr noundef %174)
          to label %176 unwind label %192

176:                                              ; preds = %172
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %175)
          to label %177 unwind label %192

177:                                              ; preds = %176
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %20) #12
  call void @_ZN3JPH5ArrayIZN10RendererVK10InitializeEP17ApplicationWindowE6DeviceNS_12STLAllocatorIS4_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #12
  %178 = call noundef ptr @_ZN3JPH5ArrayIP18VkPhysicalDevice_TNS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %19)
  %179 = call noundef ptr @_ZN3JPH5ArrayIP18VkPhysicalDevice_TNS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %19)
  %.not209299 = icmp eq ptr %178, %179
  br i1 %.not209299, label %._crit_edge303, label %.lr.ph302

.lr.ph302:                                        ; preds = %177
  %180 = getelementptr inbounds i8, ptr %21, i64 16
  %181 = getelementptr inbounds i8, ptr %27, i64 8
  %182 = getelementptr inbounds i8, ptr %21, i64 20
  %183 = getelementptr inbounds i8, ptr %27, i64 40
  %.sroa.6.0..sroa_idx = getelementptr inbounds i8, ptr %27, i64 44
  %184 = getelementptr inbounds i8, ptr %27, i64 48
  %185 = getelementptr inbounds i8, ptr %27, i64 52
  %186 = getelementptr inbounds i8, ptr %27, i64 56
  br label %194

._crit_edge303:                                   ; preds = %272, %177
  %187 = call noundef zeroext i1 @_ZNK3JPH5ArrayIZN10RendererVK10InitializeEP17ApplicationWindowE6DeviceNS_12STLAllocatorIS4_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %20)
  br i1 %187, label %284, label %288

188:                                              ; preds = %164, %153
  %189 = landingpad { ptr, i32 }
          cleanup
  br label %697

190:                                              ; preds = %168, %165
  %191 = landingpad { ptr, i32 }
          cleanup
  br label %696

192:                                              ; preds = %176, %172, %169
  %193 = landingpad { ptr, i32 }
          cleanup
  br label %695

194:                                              ; preds = %.lr.ph302, %272
  %.0196300 = phi ptr [ %178, %.lr.ph302 ], [ %273, %272 ]
  %195 = load ptr, ptr %.0196300, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 824, ptr nonnull %21) #12
  invoke void @vkGetPhysicalDeviceProperties(ptr noundef %195, ptr noundef nonnull %21)
          to label %196 unwind label %198

196:                                              ; preds = %194
  %197 = load i32, ptr %180, align 8, !tbaa !54
  switch i32 %197, label %204 [
    i32 2, label %200
    i32 1, label %201
    i32 3, label %202
    i32 4, label %203
    i32 0, label %272
    i32 2147483647, label %272
  ]

198:                                              ; preds = %194
  %199 = landingpad { ptr, i32 }
          cleanup
  br label %283

200:                                              ; preds = %196
  br label %204

201:                                              ; preds = %196
  br label %204

202:                                              ; preds = %196
  br label %204

203:                                              ; preds = %196
  br label %204

204:                                              ; preds = %203, %202, %201, %200, %196
  %.0197 = phi i32 [ 0, %196 ], [ 5, %203 ], [ 10, %202 ], [ 20, %201 ], [ 30, %200 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #12
  %205 = invoke i32 @vkEnumerateDeviceExtensionProperties(ptr noundef %195, ptr noundef null, ptr noundef nonnull %22, ptr noundef null)
          to label %206 unwind label %217

206:                                              ; preds = %204
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %23) #12
  call void @_ZN3JPH5ArrayI21VkExtensionPropertiesNS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #12
  %207 = load i32, ptr %22, align 4, !tbaa !21
  %208 = zext i32 %207 to i64
  invoke void @_ZN3JPH5ArrayI21VkExtensionPropertiesNS_12STLAllocatorIS1_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %23, i64 noundef %208)
          to label %209 unwind label %219

209:                                              ; preds = %206
  %210 = call noundef ptr @_ZN3JPH5ArrayI21VkExtensionPropertiesNS_12STLAllocatorIS1_EEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %23)
  %211 = invoke i32 @vkEnumerateDeviceExtensionProperties(ptr noundef %195, ptr noundef null, ptr noundef nonnull %22, ptr noundef %210)
          to label %212 unwind label %219

212:                                              ; preds = %209
  %213 = call noundef ptr @_ZN3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %6)
  %214 = call noundef ptr @_ZN3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %6)
  %.not238285 = icmp eq ptr %213, %214
  br i1 %.not238285, label %._crit_edge, label %.lr.ph288

._crit_edge:                                      ; preds = %.split.loop.exit, %212
  %.0199.lcssa = phi i32 [ 0, %212 ], [ %.3202, %.split.loop.exit ]
  %215 = call noundef i64 @_ZNK3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %6)
  %216 = trunc i64 %215 to i32
  %.not239 = icmp eq i32 %.0199.lcssa, %216
  br i1 %.not239, label %229, label %271

217:                                              ; preds = %204
  %218 = landingpad { ptr, i32 }
          cleanup
  br label %282

219:                                              ; preds = %209, %206
  %220 = landingpad { ptr, i32 }
          cleanup
  br label %281

.lr.ph288:                                        ; preds = %212, %.split.loop.exit
  %.0199287 = phi i32 [ %.3202, %.split.loop.exit ], [ 0, %212 ]
  %.0203286 = phi ptr [ %228, %.split.loop.exit ], [ %213, %212 ]
  %221 = load ptr, ptr %.0203286, align 8, !tbaa !20
  %222 = call noundef ptr @_ZN3JPH5ArrayI21VkExtensionPropertiesNS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %23)
  %223 = call noundef ptr @_ZN3JPH5ArrayI21VkExtensionPropertiesNS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %23)
  %.not268283 = icmp eq ptr %222, %223
  br i1 %.not268283, label %.split.loop.exit, label %.lr.ph

224:                                              ; preds = %.lr.ph
  %225 = getelementptr inbounds i8, ptr %.0198284, i64 260
  %.not268 = icmp eq ptr %225, %223
  br i1 %.not268, label %.split.loop.exit, label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph288, %224
  %.0198284 = phi ptr [ %225, %224 ], [ %222, %.lr.ph288 ]
  %226 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %221, ptr noundef nonnull dereferenceable(1) %.0198284) #13
  %.not269 = icmp eq i32 %226, 0
  br i1 %.not269, label %.split.loop.exit281, label %224

.split.loop.exit281:                              ; preds = %.lr.ph
  %227 = add nsw i32 %.0199287, 1
  br label %.split.loop.exit

.split.loop.exit:                                 ; preds = %224, %.lr.ph288, %.split.loop.exit281
  %.3202 = phi i32 [ %227, %.split.loop.exit281 ], [ %.0199287, %.lr.ph288 ], [ %.0199287, %224 ]
  %228 = getelementptr inbounds i8, ptr %.0203286, i64 8
  %.not238 = icmp eq ptr %228, %214
  br i1 %.not238, label %._crit_edge, label %.lr.ph288

229:                                              ; preds = %._crit_edge
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %24) #12
  store i32 0, ptr %24, align 4, !tbaa !21
  invoke void @vkGetPhysicalDeviceQueueFamilyProperties(ptr noundef %195, ptr noundef nonnull %24, ptr noundef null)
          to label %230 unwind label %241

230:                                              ; preds = %229
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %25) #12
  call void @_ZN3JPH5ArrayI23VkQueueFamilyPropertiesNS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #12
  %231 = load i32, ptr %24, align 4, !tbaa !21
  %232 = zext i32 %231 to i64
  invoke void @_ZN3JPH5ArrayI23VkQueueFamilyPropertiesNS_12STLAllocatorIS1_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %232)
          to label %233 unwind label %243

233:                                              ; preds = %230
  %234 = call noundef ptr @_ZN3JPH5ArrayI23VkQueueFamilyPropertiesNS_12STLAllocatorIS1_EEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %25)
  invoke void @vkGetPhysicalDeviceQueueFamilyProperties(ptr noundef %195, ptr noundef nonnull %24, ptr noundef %234)
          to label %.preheader275 unwind label %243

.preheader275:                                    ; preds = %233
  %235 = call noundef i64 @_ZNK3JPH5ArrayI23VkQueueFamilyPropertiesNS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %25)
  %236 = and i64 %235, 4294967295
  %.not314 = icmp eq i64 %236, 0
  br i1 %.not314, label %._crit_edge293.thread, label %.lr.ph292

237:                                              ; preds = %254
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %238 = call noundef i64 @_ZNK3JPH5ArrayI23VkQueueFamilyPropertiesNS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %25)
  %239 = and i64 %238, 4294967295
  %240 = icmp ult i64 %indvars.iv.next, %239
  br i1 %240, label %.lr.ph292, label %._crit_edge293, !llvm.loop !59

241:                                              ; preds = %229
  %242 = landingpad { ptr, i32 }
          cleanup
  br label %280

243:                                              ; preds = %233, %230
  %244 = landingpad { ptr, i32 }
          cleanup
  br label %279

245:                                              ; preds = %.lr.ph292
  %246 = landingpad { ptr, i32 }
          cleanup
  br label %279

.lr.ph292:                                        ; preds = %.preheader275, %237
  %indvars.iv = phi i64 [ %indvars.iv.next, %237 ], [ 0, %.preheader275 ]
  %.0190290 = phi i32 [ %spec.select272, %237 ], [ -1, %.preheader275 ]
  %.0193289 = phi i32 [ %spec.select, %237 ], [ -1, %.preheader275 ]
  %247 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZN3JPH5ArrayI23VkQueueFamilyPropertiesNS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %indvars.iv)
          to label %248 unwind label %245

248:                                              ; preds = %.lr.ph292
  %249 = load i32, ptr %247, align 4, !tbaa !61
  %250 = and i32 %249, 1
  %.not240 = icmp eq i32 %250, 0
  %251 = trunc nuw i64 %indvars.iv to i32
  %spec.select = select i1 %.not240, i32 %.0193289, i32 %251
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %26) #12
  store i32 0, ptr %26, align 4, !tbaa !21
  %252 = load ptr, ptr %162, align 16, !tbaa !64
  %253 = invoke i32 @vkGetPhysicalDeviceSurfaceSupportKHR(ptr noundef %195, i32 noundef %251, ptr noundef %252, ptr noundef nonnull %26)
          to label %254 unwind label %258

254:                                              ; preds = %248
  %255 = load i32, ptr %26, align 4, !tbaa !21
  %.not243 = icmp eq i32 %255, 0
  %spec.select272 = select i1 %.not243, i32 %.0190290, i32 %251
  %256 = icmp eq i32 %spec.select, -1
  %257 = icmp eq i32 %spec.select272, -1
  %or.cond.not = select i1 %256, i1 true, i1 %257
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #12
  br i1 %or.cond.not, label %237, label %._crit_edge293

258:                                              ; preds = %248
  %259 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #12
  br label %279

._crit_edge293:                                   ; preds = %254, %237
  %260 = icmp eq i32 %spec.select, -1
  %261 = icmp eq i32 %spec.select272, -1
  %or.cond7 = select i1 %260, i1 true, i1 %261
  br i1 %or.cond7, label %._crit_edge293.thread, label %262

262:                                              ; preds = %._crit_edge293
  %263 = invoke i64 @_ZN10RendererVK12SelectFormatEP18VkPhysicalDevice_T(ptr noundef nonnull align 16 dereferenceable(1936) %0, ptr noundef %195)
          to label %264 unwind label %266

264:                                              ; preds = %262
  %.sroa.0.0.extract.trunc = trunc i64 %263 to i32
  %.sroa.6.0.extract.shift = lshr i64 %263, 32
  %.sroa.6.0.extract.trunc = trunc nuw i64 %.sroa.6.0.extract.shift to i32
  %265 = icmp eq i32 %.sroa.0.0.extract.trunc, 0
  br i1 %265, label %._crit_edge293.thread, label %268

266:                                              ; preds = %262
  %267 = landingpad { ptr, i32 }
          cleanup
  br label %279

268:                                              ; preds = %264
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %27) #12
  store ptr %195, ptr %27, align 8, !tbaa !65
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %28) #12
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEC2IS5_EEPKcRKS5_(ptr noundef nonnull align 8 dereferenceable(32) %181, ptr noundef nonnull %182, ptr noundef nonnull align 1 dereferenceable(1) %28)
          to label %269 unwind label %274

269:                                              ; preds = %268
  store i32 %.sroa.0.0.extract.trunc, ptr %183, align 8, !tbaa !71
  store i32 %.sroa.6.0.extract.trunc, ptr %.sroa.6.0..sroa_idx, align 4, !tbaa !72
  store i32 %spec.select, ptr %184, align 8, !tbaa !73
  store i32 %spec.select272, ptr %185, align 4, !tbaa !74
  store i32 %.0197, ptr %186, align 8, !tbaa !75
  invoke void @_ZN3JPH5ArrayIZN10RendererVK10InitializeEP17ApplicationWindowE6DeviceNS_12STLAllocatorIS4_EEE9push_backEOS4_(ptr noundef nonnull align 8 dereferenceable(24) %20, ptr noundef nonnull align 8 dereferenceable(60) %27)
          to label %270 unwind label %276

270:                                              ; preds = %269
  call void @_ZZN10RendererVK10InitializeEP17ApplicationWindowEN6DeviceD2Ev(ptr noundef nonnull align 8 dereferenceable(60) %27) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %28) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %27) #12
  br label %._crit_edge293.thread

._crit_edge293.thread:                            ; preds = %.preheader275, %270, %264, %._crit_edge293
  call void @_ZN3JPH5ArrayI23VkQueueFamilyPropertiesNS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %25) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #12
  br label %271

271:                                              ; preds = %._crit_edge, %._crit_edge293.thread
  call void @_ZN3JPH5ArrayI21VkExtensionPropertiesNS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %23) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #12
  br label %272

272:                                              ; preds = %196, %196, %271
  call void @llvm.lifetime.end.p0(i64 824, ptr nonnull %21) #12
  %273 = getelementptr inbounds i8, ptr %.0196300, i64 8
  %.not209 = icmp eq ptr %273, %179
  br i1 %.not209, label %._crit_edge303, label %194

274:                                              ; preds = %268
  %275 = landingpad { ptr, i32 }
          cleanup
  br label %278

276:                                              ; preds = %269
  %277 = landingpad { ptr, i32 }
          cleanup
  call void @_ZZN10RendererVK10InitializeEP17ApplicationWindowEN6DeviceD2Ev(ptr noundef nonnull align 8 dereferenceable(60) %27) #12
  br label %278

278:                                              ; preds = %276, %274
  %.pn246 = phi { ptr, i32 } [ %277, %276 ], [ %275, %274 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %28) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %27) #12
  br label %279

279:                                              ; preds = %258, %245, %278, %266, %243
  %.pn246.pn.pn.pn = phi { ptr, i32 } [ %244, %243 ], [ %259, %258 ], [ %246, %245 ], [ %.pn246, %278 ], [ %267, %266 ]
  call void @_ZN3JPH5ArrayI23VkQueueFamilyPropertiesNS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %25) #12
  br label %280

280:                                              ; preds = %279, %241
  %.pn246.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn246.pn.pn.pn, %279 ], [ %242, %241 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #12
  br label %281

281:                                              ; preds = %280, %219
  %.pn246.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn246.pn.pn.pn.pn, %280 ], [ %220, %219 ]
  call void @_ZN3JPH5ArrayI21VkExtensionPropertiesNS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %23) #12
  br label %282

282:                                              ; preds = %281, %217
  %.pn246.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn246.pn.pn.pn.pn.pn, %281 ], [ %218, %217 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #12
  br label %283

283:                                              ; preds = %282, %198
  %.pn246.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn246.pn.pn.pn.pn.pn.pn, %282 ], [ %199, %198 ]
  call void @llvm.lifetime.end.p0(i64 824, ptr nonnull %21) #12
  br label %694

284:                                              ; preds = %._crit_edge303
  invoke void (ptr, ...) @_Z10FatalErrorPKcz(ptr noundef nonnull @.str.8) #14
          to label %285 unwind label %286

285:                                              ; preds = %284
  unreachable

286:                                              ; preds = %288, %284
  %287 = landingpad { ptr, i32 }
          cleanup
  br label %694

288:                                              ; preds = %._crit_edge303
  %289 = call noundef ptr @_ZN3JPH5ArrayIZN10RendererVK10InitializeEP17ApplicationWindowE6DeviceNS_12STLAllocatorIS4_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %20)
  %290 = call noundef ptr @_ZN3JPH5ArrayIZN10RendererVK10InitializeEP17ApplicationWindowE6DeviceNS_12STLAllocatorIS4_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %20)
  invoke void @"_ZN3JPH9QuickSortIPZN10RendererVK10InitializeEP17ApplicationWindowE6DeviceZNS1_10InitializeES3_E3$_0EEvT_S7_T0_"(ptr noundef %289, ptr noundef %290)
          to label %291 unwind label %286

291:                                              ; preds = %288
  %292 = invoke noundef nonnull align 8 dereferenceable(60) ptr @_ZN3JPH5ArrayIZN10RendererVK10InitializeEP17ApplicationWindowE6DeviceNS_12STLAllocatorIS4_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %20, i64 noundef 0)
          to label %293 unwind label %313

293:                                              ; preds = %291
  %294 = load ptr, ptr @_ZN3JPH5TraceE, align 8, !tbaa !20
  %295 = getelementptr inbounds i8, ptr %292, i64 8
  %296 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %295) #12
  invoke void (ptr, ...) %294(ptr noundef nonnull @.str.9, ptr noundef %296)
          to label %297 unwind label %313

297:                                              ; preds = %293
  %298 = load ptr, ptr %292, align 8, !tbaa !65
  %299 = getelementptr inbounds i8, ptr %0, i64 848
  store ptr %298, ptr %299, align 16, !tbaa !76
  %300 = getelementptr inbounds i8, ptr %0, i64 856
  invoke void @vkGetPhysicalDeviceMemoryProperties(ptr noundef %298, ptr noundef nonnull %300)
          to label %301 unwind label %313

301:                                              ; preds = %297
  call void @llvm.lifetime.start.p0(i64 220, ptr nonnull %29) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(220) %29, i8 0, i64 220, i1 false)
  %302 = load ptr, ptr %299, align 16, !tbaa !76
  invoke void @vkGetPhysicalDeviceFeatures(ptr noundef %302, ptr noundef nonnull %29)
          to label %303 unwind label %315

303:                                              ; preds = %301
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %30) #12
  store float 1.000000e+00, ptr %30, align 4, !tbaa !77
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %31) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(80) %31, i8 0, i64 80, i1 false)
  %304 = call noundef i64 @_ZSt4sizeI23VkDeviceQueueCreateInfoLm2EEmRAT0__KT_(ptr noundef nonnull align 8 dereferenceable(80) %31) #12
  %.not315 = icmp eq i64 %304, 0
  br i1 %.not315, label %._crit_edge307, label %.lr.ph306

._crit_edge307:                                   ; preds = %.lr.ph306, %303
  %305 = getelementptr inbounds i8, ptr %292, i64 48
  %306 = load i32, ptr %305, align 8, !tbaa !73
  %307 = getelementptr inbounds i8, ptr %31, i64 20
  store i32 %306, ptr %307, align 4, !tbaa !78
  %308 = getelementptr inbounds i8, ptr %292, i64 52
  %309 = load i32, ptr %308, align 4, !tbaa !74
  %310 = getelementptr inbounds i8, ptr %31, i64 60
  store i32 %309, ptr %310, align 4, !tbaa !78
  call void @llvm.lifetime.start.p0(i64 220, ptr nonnull %32) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(220) %32, i8 0, i64 220, i1 false)
  %311 = getelementptr inbounds i8, ptr %29, i64 52
  %312 = load i32, ptr %311, align 4, !tbaa !80
  %.not210 = icmp eq i32 %312, 0
  br i1 %.not210, label %323, label %327

313:                                              ; preds = %297, %293, %291
  %314 = landingpad { ptr, i32 }
          cleanup
  br label %694

315:                                              ; preds = %301
  %316 = landingpad { ptr, i32 }
          cleanup
  br label %693

.lr.ph306:                                        ; preds = %303, %.lr.ph306
  %.0178304 = phi i64 [ %320, %.lr.ph306 ], [ 0, %303 ]
  %317 = getelementptr inbounds [2 x %struct.VkDeviceQueueCreateInfo], ptr %31, i64 0, i64 %.0178304
  store i32 2, ptr %317, align 8, !tbaa !82
  %318 = getelementptr inbounds i8, ptr %317, i64 24
  store i32 1, ptr %318, align 8, !tbaa !83
  %319 = getelementptr inbounds i8, ptr %317, i64 32
  store ptr %30, ptr %319, align 8, !tbaa !84
  %320 = add nuw i64 %.0178304, 1
  %321 = call noundef i64 @_ZSt4sizeI23VkDeviceQueueCreateInfoLm2EEmRAT0__KT_(ptr noundef nonnull align 8 dereferenceable(80) %31) #12
  %322 = icmp ult i64 %320, %321
  br i1 %322, label %.lr.ph306, label %._crit_edge307, !llvm.loop !85

323:                                              ; preds = %._crit_edge307
  invoke void (ptr, ...) @_Z10FatalErrorPKcz(ptr noundef nonnull @.str.10) #14
          to label %324 unwind label %325

324:                                              ; preds = %323
  unreachable

325:                                              ; preds = %323
  %326 = landingpad { ptr, i32 }
          cleanup
  br label %692

327:                                              ; preds = %._crit_edge307
  %328 = getelementptr inbounds i8, ptr %32, i64 52
  store i32 1, ptr %328, align 4, !tbaa !80
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %33) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(72) %33, i8 0, i64 72, i1 false)
  store i32 3, ptr %33, align 8, !tbaa !86
  %329 = load i32, ptr %305, align 8, !tbaa !73
  %330 = load i32, ptr %308, align 4, !tbaa !74
  %.not211 = icmp eq i32 %329, %330
  %331 = select i1 %.not211, i32 1, i32 2
  %332 = getelementptr inbounds i8, ptr %33, i64 20
  store i32 %331, ptr %332, align 4, !tbaa !88
  %333 = getelementptr inbounds i8, ptr %33, i64 24
  store ptr %31, ptr %333, align 8, !tbaa !89
  %334 = getelementptr inbounds i8, ptr %13, i64 32
  %335 = load i32, ptr %334, align 8, !tbaa !25
  %336 = getelementptr inbounds i8, ptr %33, i64 32
  store i32 %335, ptr %336, align 8, !tbaa !90
  %337 = getelementptr inbounds i8, ptr %13, i64 40
  %338 = load ptr, ptr %337, align 8, !tbaa !26
  %339 = getelementptr inbounds i8, ptr %33, i64 40
  store ptr %338, ptr %339, align 8, !tbaa !91
  %340 = call noundef i64 @_ZNK3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %6)
  %341 = trunc i64 %340 to i32
  %342 = getelementptr inbounds i8, ptr %33, i64 48
  store i32 %341, ptr %342, align 8, !tbaa !92
  %343 = call noundef ptr @_ZN3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %6)
  %344 = getelementptr inbounds i8, ptr %33, i64 56
  store ptr %343, ptr %344, align 8, !tbaa !93
  %345 = getelementptr inbounds i8, ptr %33, i64 64
  store ptr %32, ptr %345, align 8, !tbaa !94
  %346 = load ptr, ptr %292, align 8, !tbaa !65
  %347 = getelementptr inbounds i8, ptr %0, i64 1376
  %348 = invoke i32 @vkCreateDevice(ptr noundef %346, ptr noundef nonnull %33, ptr noundef null, ptr noundef nonnull %347)
          to label %349 unwind label %377

349:                                              ; preds = %327
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %348)
          to label %350 unwind label %377

350:                                              ; preds = %349
  %351 = getelementptr inbounds i8, ptr %0, i64 1384
  %352 = load <2 x i32>, ptr %305, align 8, !tbaa !21
  store <2 x i32> %352, ptr %351, align 8, !tbaa !21
  %353 = load ptr, ptr %347, align 16, !tbaa !95
  %354 = getelementptr inbounds i8, ptr %0, i64 1392
  %355 = extractelement <2 x i32> %352, i64 0
  invoke void @vkGetDeviceQueue(ptr noundef %353, i32 noundef %355, i32 noundef 0, ptr noundef nonnull %354)
          to label %356 unwind label %377

356:                                              ; preds = %350
  %357 = getelementptr inbounds i8, ptr %0, i64 1388
  %358 = load ptr, ptr %347, align 16, !tbaa !95
  %359 = load i32, ptr %357, align 4, !tbaa !96
  %360 = getelementptr inbounds i8, ptr %0, i64 1400
  invoke void @vkGetDeviceQueue(ptr noundef %358, i32 noundef %359, i32 noundef 0, ptr noundef nonnull %360)
          to label %361 unwind label %377

361:                                              ; preds = %356
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %34) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %34, i8 0, i64 16, i1 false)
  store i32 39, ptr %34, align 8, !tbaa !97
  %362 = getelementptr inbounds i8, ptr %34, i64 16
  store i32 2, ptr %362, align 8, !tbaa !99
  %363 = load i32, ptr %305, align 8, !tbaa !73
  %364 = getelementptr inbounds i8, ptr %34, i64 20
  store i32 %363, ptr %364, align 4, !tbaa !100
  %365 = load ptr, ptr %347, align 16, !tbaa !95
  %366 = getelementptr inbounds i8, ptr %0, i64 1656
  %367 = invoke i32 @vkCreateCommandPool(ptr noundef %365, ptr noundef nonnull %34, ptr noundef null, ptr noundef nonnull %366)
          to label %368 unwind label %379

368:                                              ; preds = %361
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %367)
          to label %369 unwind label %379

369:                                              ; preds = %368
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %35) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(32) %35, i8 0, i64 16, i1 false)
  store i32 40, ptr %35, align 8, !tbaa !101
  %370 = load ptr, ptr %366, align 8, !tbaa !104
  %371 = getelementptr inbounds i8, ptr %35, i64 16
  store ptr %370, ptr %371, align 8, !tbaa !105
  %372 = getelementptr inbounds i8, ptr %35, i64 24
  store i32 0, ptr %372, align 8, !tbaa !106
  %373 = getelementptr inbounds i8, ptr %35, i64 28
  store i32 1, ptr %373, align 4, !tbaa !107
  %374 = getelementptr inbounds i8, ptr %0, i64 1664
  %375 = load ptr, ptr %347, align 16, !tbaa !95
  %376 = invoke i32 @vkAllocateCommandBuffers(ptr noundef %375, ptr noundef nonnull %35, ptr noundef nonnull %374)
          to label %381 unwind label %392

377:                                              ; preds = %356, %350, %349, %327
  %378 = landingpad { ptr, i32 }
          cleanup
  br label %691

379:                                              ; preds = %368, %361
  %380 = landingpad { ptr, i32 }
          cleanup
  br label %690

381:                                              ; preds = %369
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %376)
          to label %382 unwind label %392

382:                                              ; preds = %381
  %383 = load ptr, ptr %347, align 16, !tbaa !95
  %384 = getelementptr inbounds i8, ptr %0, i64 1672
  %385 = invoke i32 @vkAllocateCommandBuffers(ptr noundef %383, ptr noundef nonnull %35, ptr noundef nonnull %384)
          to label %386 unwind label %392

386:                                              ; preds = %382
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %385)
          to label %387 unwind label %392

387:                                              ; preds = %386
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %36) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %36, i8 0, i64 24, i1 false)
  store i32 9, ptr %36, align 8, !tbaa !108
  %388 = getelementptr inbounds i8, ptr %0, i64 1680
  %389 = getelementptr inbounds i8, ptr %0, i64 1696
  %390 = load ptr, ptr %347, align 16, !tbaa !95
  %391 = invoke i32 @vkCreateSemaphore(ptr noundef %390, ptr noundef nonnull %36, ptr noundef null, ptr noundef nonnull %388)
          to label %394 unwind label %414

392:                                              ; preds = %386, %382, %381, %369
  %393 = landingpad { ptr, i32 }
          cleanup
  br label %689

394:                                              ; preds = %387
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %391)
          to label %395 unwind label %414

395:                                              ; preds = %394
  %396 = load ptr, ptr %347, align 16, !tbaa !95
  %397 = invoke i32 @vkCreateSemaphore(ptr noundef %396, ptr noundef nonnull %36, ptr noundef null, ptr noundef nonnull %389)
          to label %398 unwind label %414

398:                                              ; preds = %395
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %397)
          to label %399 unwind label %414

399:                                              ; preds = %398
  %400 = load ptr, ptr %347, align 16, !tbaa !95
  %401 = getelementptr inbounds i8, ptr %0, i64 1688
  %402 = invoke i32 @vkCreateSemaphore(ptr noundef %400, ptr noundef nonnull %36, ptr noundef null, ptr noundef nonnull %401)
          to label %403 unwind label %414

403:                                              ; preds = %399
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %402)
          to label %404 unwind label %414

404:                                              ; preds = %403
  %405 = load ptr, ptr %347, align 16, !tbaa !95
  %406 = getelementptr inbounds i8, ptr %0, i64 1704
  %407 = invoke i32 @vkCreateSemaphore(ptr noundef %405, ptr noundef nonnull %36, ptr noundef null, ptr noundef nonnull %406)
          to label %408 unwind label %414

408:                                              ; preds = %404
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %407)
          to label %409 unwind label %414

409:                                              ; preds = %408
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %37) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %37, i8 0, i64 24, i1 false)
  store i32 8, ptr %37, align 8, !tbaa !110
  %410 = getelementptr inbounds i8, ptr %37, i64 16
  store i32 1, ptr %410, align 8, !tbaa !112
  %411 = getelementptr inbounds i8, ptr %0, i64 1712
  %412 = load ptr, ptr %347, align 16, !tbaa !95
  %413 = invoke i32 @vkCreateFence(ptr noundef %412, ptr noundef nonnull %37, ptr noundef null, ptr noundef nonnull %411)
          to label %416 unwind label %425

414:                                              ; preds = %408, %404, %403, %399, %398, %395, %394, %387
  %415 = landingpad { ptr, i32 }
          cleanup
  br label %688

416:                                              ; preds = %409
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %413)
          to label %417 unwind label %425

417:                                              ; preds = %416
  %418 = load ptr, ptr %347, align 16, !tbaa !95
  %419 = getelementptr inbounds i8, ptr %0, i64 1720
  %420 = invoke i32 @vkCreateFence(ptr noundef %418, ptr noundef nonnull %37, ptr noundef null, ptr noundef nonnull %419)
          to label %421 unwind label %425

421:                                              ; preds = %417
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %420)
          to label %.preheader274 unwind label %425

.preheader274:                                    ; preds = %421
  %422 = getelementptr inbounds i8, ptr %0, i64 1736
  %423 = getelementptr inbounds i8, ptr %0, i64 1752
  %424 = getelementptr inbounds i8, ptr %0, i64 1768
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %38) #12
  invoke void @_ZN10RendererVK20CreateConstantBufferEm(ptr dead_on_unwind nonnull writable sret(%"class.std::unique_ptr") align 8 %38, ptr noundef nonnull align 16 dereferenceable(1936) %0, i64 noundef 256)
          to label %427 unwind label %453

425:                                              ; preds = %421, %417, %416, %409
  %426 = landingpad { ptr, i32 }
          cleanup
  br label %687

427:                                              ; preds = %.preheader274
  %428 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %422, ptr noundef nonnull align 8 dereferenceable(8) %38) #12
  call void @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %38) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %39) #12
  invoke void @_ZN10RendererVK20CreateConstantBufferEm(ptr dead_on_unwind nonnull writable sret(%"class.std::unique_ptr") align 8 %39, ptr noundef nonnull align 16 dereferenceable(1936) %0, i64 noundef 256)
          to label %429 unwind label %455

429:                                              ; preds = %427
  %430 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %423, ptr noundef nonnull align 8 dereferenceable(8) %39) #12
  call void @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %39) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %40) #12
  invoke void @_ZN10RendererVK20CreateConstantBufferEm(ptr dead_on_unwind nonnull writable sret(%"class.std::unique_ptr") align 8 %40, ptr noundef nonnull align 16 dereferenceable(1936) %0, i64 noundef 32)
          to label %431 unwind label %457

431:                                              ; preds = %429
  %432 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %424, ptr noundef nonnull align 8 dereferenceable(8) %40) #12
  call void @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %40) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %38) #12
  invoke void @_ZN10RendererVK20CreateConstantBufferEm(ptr dead_on_unwind nonnull writable sret(%"class.std::unique_ptr") align 8 %38, ptr noundef nonnull align 16 dereferenceable(1936) %0, i64 noundef 256)
          to label %433 unwind label %453

433:                                              ; preds = %431
  %434 = getelementptr inbounds i8, ptr %0, i64 1744
  %435 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %434, ptr noundef nonnull align 8 dereferenceable(8) %38) #12
  call void @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %38) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %39) #12
  invoke void @_ZN10RendererVK20CreateConstantBufferEm(ptr dead_on_unwind nonnull writable sret(%"class.std::unique_ptr") align 8 %39, ptr noundef nonnull align 16 dereferenceable(1936) %0, i64 noundef 256)
          to label %436 unwind label %455

436:                                              ; preds = %433
  %437 = getelementptr inbounds i8, ptr %0, i64 1760
  %438 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %437, ptr noundef nonnull align 8 dereferenceable(8) %39) #12
  call void @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %39) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %40) #12
  invoke void @_ZN10RendererVK20CreateConstantBufferEm(ptr dead_on_unwind nonnull writable sret(%"class.std::unique_ptr") align 8 %40, ptr noundef nonnull align 16 dereferenceable(1936) %0, i64 noundef 32)
          to label %439 unwind label %457

439:                                              ; preds = %436
  %440 = getelementptr inbounds i8, ptr %0, i64 1776
  %441 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %440, ptr noundef nonnull align 8 dereferenceable(8) %40) #12
  call void @_ZNSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %40) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #12
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %41) #12
  %442 = getelementptr inbounds i8, ptr %41, i64 8
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(48) %41, i8 0, i64 48, i1 false)
  store i32 1, ptr %442, align 8, !tbaa !113
  %443 = getelementptr inbounds i8, ptr %41, i64 4
  store i32 6, ptr %443, align 4, !tbaa !116
  %444 = getelementptr inbounds i8, ptr %41, i64 12
  store i32 1, ptr %444, align 4, !tbaa !117
  %445 = getelementptr inbounds i8, ptr %41, i64 24
  store <4 x i32> <i32 1, i32 6, i32 1, i32 16>, ptr %445, align 8, !tbaa !118
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %42) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(32) %42, i8 0, i64 32, i1 false)
  store i32 32, ptr %42, align 8, !tbaa !119
  %446 = call noundef i64 @_ZSt4sizeI28VkDescriptorSetLayoutBindingLm2EEmRAT0__KT_(ptr noundef nonnull align 8 dereferenceable(48) %41) #12
  %447 = trunc i64 %446 to i32
  %448 = getelementptr inbounds i8, ptr %42, i64 20
  store i32 %447, ptr %448, align 4, !tbaa !121
  %449 = getelementptr inbounds i8, ptr %42, i64 24
  store ptr %41, ptr %449, align 8, !tbaa !122
  %450 = load ptr, ptr %347, align 16, !tbaa !95
  %451 = getelementptr inbounds i8, ptr %0, i64 1520
  %452 = invoke i32 @vkCreateDescriptorSetLayout(ptr noundef %450, ptr noundef nonnull %42, ptr noundef null, ptr noundef nonnull %451)
          to label %459 unwind label %520

453:                                              ; preds = %431, %.preheader274
  %454 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #12
  br label %687

455:                                              ; preds = %433, %427
  %456 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #12
  br label %687

457:                                              ; preds = %436, %429
  %458 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #12
  br label %687

459:                                              ; preds = %439
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %452)
          to label %460 unwind label %520

460:                                              ; preds = %459
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %43) #12
  %461 = getelementptr inbounds i8, ptr %43, i64 8
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %43, i8 0, i64 24, i1 false)
  store i32 1, ptr %461, align 8, !tbaa !113
  %462 = getelementptr inbounds i8, ptr %43, i64 4
  store i32 1, ptr %462, align 4, !tbaa !116
  %463 = getelementptr inbounds i8, ptr %43, i64 12
  store i32 16, ptr %463, align 4, !tbaa !117
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %44) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(32) %44, i8 0, i64 24, i1 false)
  store i32 32, ptr %44, align 8, !tbaa !119
  %464 = getelementptr inbounds i8, ptr %44, i64 20
  store i32 1, ptr %464, align 4, !tbaa !121
  %465 = getelementptr inbounds i8, ptr %44, i64 24
  store ptr %43, ptr %465, align 8, !tbaa !122
  %466 = load ptr, ptr %347, align 16, !tbaa !95
  %467 = getelementptr inbounds i8, ptr %0, i64 1528
  %468 = invoke i32 @vkCreateDescriptorSetLayout(ptr noundef %466, ptr noundef nonnull %44, ptr noundef null, ptr noundef nonnull %467)
          to label %469 unwind label %522

469:                                              ; preds = %460
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %468)
          to label %470 unwind label %522

470:                                              ; preds = %469
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %45) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(48) %45, i8 0, i64 48, i1 false)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %46) #12
  %471 = load <2 x ptr>, ptr %451, align 16, !tbaa !20
  store <2 x ptr> %471, ptr %46, align 16, !tbaa !20
  store i32 30, ptr %45, align 8, !tbaa !123
  %472 = call noundef i64 @_ZSt4sizeIP23VkDescriptorSetLayout_TLm2EEmRAT0__KT_(ptr noundef nonnull align 8 dereferenceable(16) %46) #12
  %473 = trunc i64 %472 to i32
  %474 = getelementptr inbounds i8, ptr %45, i64 20
  store i32 %473, ptr %474, align 4, !tbaa !125
  %475 = getelementptr inbounds i8, ptr %45, i64 24
  store ptr %46, ptr %475, align 8, !tbaa !126
  %476 = getelementptr inbounds i8, ptr %45, i64 32
  store i32 0, ptr %476, align 8, !tbaa !127
  %477 = load ptr, ptr %347, align 16, !tbaa !95
  %478 = getelementptr inbounds i8, ptr %0, i64 1608
  %479 = invoke i32 @vkCreatePipelineLayout(ptr noundef %477, ptr noundef nonnull %45, ptr noundef null, ptr noundef nonnull %478)
          to label %480 unwind label %524

480:                                              ; preds = %470
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %479)
          to label %481 unwind label %524

481:                                              ; preds = %480
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %47) #12
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %47, ptr noundef nonnull align 16 dereferenceable(16) @__const._ZN10RendererVK10InitializeEP17ApplicationWindow.descriptor_pool_sizes, i64 16, i1 false)
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %48) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(40) %48, i8 0, i64 40, i1 false)
  store i32 33, ptr %48, align 8, !tbaa !128
  %482 = call noundef i64 @_ZSt4sizeI20VkDescriptorPoolSizeLm2EEmRAT0__KT_(ptr noundef nonnull align 4 dereferenceable(16) %47) #12
  %483 = trunc i64 %482 to i32
  %484 = getelementptr inbounds i8, ptr %48, i64 24
  store i32 %483, ptr %484, align 8, !tbaa !130
  %485 = getelementptr inbounds i8, ptr %48, i64 32
  store ptr %47, ptr %485, align 8, !tbaa !131
  %486 = getelementptr inbounds i8, ptr %48, i64 20
  store i32 256, ptr %486, align 4, !tbaa !132
  %487 = load ptr, ptr %347, align 16, !tbaa !95
  %488 = getelementptr inbounds i8, ptr %0, i64 1536
  %489 = invoke i32 @vkCreateDescriptorPool(ptr noundef %487, ptr noundef nonnull %48, ptr noundef null, ptr noundef nonnull %488)
          to label %490 unwind label %526

490:                                              ; preds = %481
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %489)
          to label %491 unwind label %526

491:                                              ; preds = %490
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %49) #12
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %50) #12
  invoke void @_ZN3JPH5ArrayIP23VkDescriptorSetLayout_TNS_12STLAllocatorIS2_EEEC2EmRKS2_RKS4_(ptr noundef nonnull align 8 dereferenceable(24) %49, i64 noundef 2, ptr noundef nonnull align 8 dereferenceable(8) %451, ptr noundef nonnull align 1 dereferenceable(1) %50)
          to label %492 unwind label %528

492:                                              ; preds = %491
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %50) #12
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %51) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(40) %51, i8 0, i64 40, i1 false)
  store i32 34, ptr %51, align 8, !tbaa !133
  %493 = load ptr, ptr %488, align 16, !tbaa !135
  %494 = getelementptr inbounds i8, ptr %51, i64 16
  store ptr %493, ptr %494, align 8, !tbaa !136
  %495 = getelementptr inbounds i8, ptr %51, i64 24
  store i32 2, ptr %495, align 8, !tbaa !137
  %496 = call noundef ptr @_ZN3JPH5ArrayIP23VkDescriptorSetLayout_TNS_12STLAllocatorIS2_EEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %49)
  %497 = getelementptr inbounds i8, ptr %51, i64 32
  store ptr %496, ptr %497, align 8, !tbaa !138
  %498 = load ptr, ptr %347, align 16, !tbaa !95
  %499 = getelementptr inbounds i8, ptr %0, i64 1544
  %500 = invoke i32 @vkAllocateDescriptorSets(ptr noundef %498, ptr noundef nonnull %51, ptr noundef nonnull %499)
          to label %501 unwind label %530

501:                                              ; preds = %492
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %500)
          to label %.preheader273 unwind label %530

.preheader273:                                    ; preds = %501
  %502 = getelementptr inbounds i8, ptr %52, i64 16
  %503 = getelementptr inbounds i8, ptr %53, i64 16
  %504 = getelementptr inbounds i8, ptr %54, i64 16
  %505 = getelementptr inbounds i8, ptr %54, i64 36
  %506 = getelementptr inbounds i8, ptr %54, i64 32
  %507 = getelementptr inbounds i8, ptr %54, i64 48
  %508 = getelementptr inbounds i8, ptr %54, i64 64
  %509 = getelementptr inbounds i8, ptr %54, i64 80
  %510 = getelementptr inbounds i8, ptr %54, i64 88
  %511 = getelementptr inbounds i8, ptr %54, i64 100
  %512 = getelementptr inbounds i8, ptr %54, i64 96
  %513 = getelementptr inbounds i8, ptr %54, i64 112
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %52) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %52, i8 0, i64 24, i1 false)
  %514 = call noundef ptr @_ZNKSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %422) #12
  %515 = call noundef ptr @_ZNK16ConstantBufferVK9GetBufferEv(ptr noundef nonnull align 8 dereferenceable(56) %514)
  store ptr %515, ptr %52, align 8, !tbaa !139
  store i64 256, ptr %502, align 8, !tbaa !141
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %53) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %53, i8 0, i64 24, i1 false)
  %516 = call noundef ptr @_ZNKSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %424) #12
  %517 = call noundef ptr @_ZNK16ConstantBufferVK9GetBufferEv(ptr noundef nonnull align 8 dereferenceable(56) %516)
  store ptr %517, ptr %53, align 8, !tbaa !139
  store i64 32, ptr %503, align 8, !tbaa !141
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %54) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(128) %54, i8 0, i64 128, i1 false)
  store i32 35, ptr %54, align 16, !tbaa !142
  %518 = load ptr, ptr %499, align 8, !tbaa !20
  store ptr %518, ptr %504, align 16, !tbaa !144
  store i32 6, ptr %505, align 4, !tbaa !145
  store i32 1, ptr %506, align 16, !tbaa !146
  store ptr %52, ptr %507, align 16, !tbaa !147
  store i32 35, ptr %508, align 16, !tbaa !142
  store ptr %518, ptr %509, align 16, !tbaa !144
  store i32 1, ptr %510, align 8, !tbaa !148
  store i32 6, ptr %511, align 4, !tbaa !145
  store i32 1, ptr %512, align 16, !tbaa !146
  store ptr %53, ptr %513, align 16, !tbaa !147
  %519 = load ptr, ptr %347, align 16, !tbaa !95
  invoke void @vkUpdateDescriptorSets(ptr noundef %519, i32 noundef 2, ptr noundef nonnull %54, i32 noundef 0, ptr noundef null)
          to label %532 unwind label %544

520:                                              ; preds = %459, %439
  %521 = landingpad { ptr, i32 }
          cleanup
  br label %686

522:                                              ; preds = %469, %460
  %523 = landingpad { ptr, i32 }
          cleanup
  br label %685

524:                                              ; preds = %480, %470
  %525 = landingpad { ptr, i32 }
          cleanup
  br label %684

526:                                              ; preds = %490, %481
  %527 = landingpad { ptr, i32 }
          cleanup
  br label %683

528:                                              ; preds = %491
  %529 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %50) #12
  br label %682

530:                                              ; preds = %546, %540, %501, %492
  %531 = landingpad { ptr, i32 }
          cleanup
  br label %681

532:                                              ; preds = %.preheader273
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %54) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %53) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %52) #12
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %52) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %52, i8 0, i64 24, i1 false)
  %533 = call noundef ptr @_ZNKSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %434) #12
  %534 = call noundef ptr @_ZNK16ConstantBufferVK9GetBufferEv(ptr noundef nonnull align 8 dereferenceable(56) %533)
  store ptr %534, ptr %52, align 8, !tbaa !139
  store i64 256, ptr %502, align 8, !tbaa !141
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %53) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %53, i8 0, i64 24, i1 false)
  %535 = call noundef ptr @_ZNKSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %440) #12
  %536 = call noundef ptr @_ZNK16ConstantBufferVK9GetBufferEv(ptr noundef nonnull align 8 dereferenceable(56) %535)
  store ptr %536, ptr %53, align 8, !tbaa !139
  store i64 32, ptr %503, align 8, !tbaa !141
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %54) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(128) %54, i8 0, i64 128, i1 false)
  store i32 35, ptr %54, align 16, !tbaa !142
  %537 = getelementptr inbounds i8, ptr %0, i64 1552
  %538 = load ptr, ptr %537, align 16, !tbaa !20
  store ptr %538, ptr %504, align 16, !tbaa !144
  store i32 6, ptr %505, align 4, !tbaa !145
  store i32 1, ptr %506, align 16, !tbaa !146
  store ptr %52, ptr %507, align 16, !tbaa !147
  store i32 35, ptr %508, align 16, !tbaa !142
  store ptr %538, ptr %509, align 16, !tbaa !144
  store i32 1, ptr %510, align 8, !tbaa !148
  store i32 6, ptr %511, align 4, !tbaa !145
  store i32 1, ptr %512, align 16, !tbaa !146
  store ptr %53, ptr %513, align 16, !tbaa !147
  %539 = load ptr, ptr %347, align 16, !tbaa !95
  invoke void @vkUpdateDescriptorSets(ptr noundef %539, i32 noundef 2, ptr noundef nonnull %54, i32 noundef 0, ptr noundef null)
          to label %540 unwind label %544

540:                                              ; preds = %532
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %54) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %53) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %52) #12
  %541 = load ptr, ptr %347, align 16, !tbaa !95
  %542 = getelementptr inbounds i8, ptr %0, i64 1560
  %543 = invoke i32 @vkAllocateDescriptorSets(ptr noundef %541, ptr noundef nonnull %51, ptr noundef nonnull %542)
          to label %546 unwind label %530

544:                                              ; preds = %532, %.preheader273
  %545 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %54) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %53) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %52) #12
  br label %681

546:                                              ; preds = %540
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %543)
          to label %.preheader unwind label %530

.preheader:                                       ; preds = %546
  %547 = getelementptr inbounds i8, ptr %55, i64 16
  %548 = getelementptr inbounds i8, ptr %56, i64 16
  %549 = getelementptr inbounds i8, ptr %56, i64 36
  %550 = getelementptr inbounds i8, ptr %56, i64 32
  %551 = getelementptr inbounds i8, ptr %56, i64 48
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %55) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %55, i8 0, i64 24, i1 false)
  %552 = call noundef ptr @_ZNKSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %423) #12
  %553 = call noundef ptr @_ZNK16ConstantBufferVK9GetBufferEv(ptr noundef nonnull align 8 dereferenceable(56) %552)
  store ptr %553, ptr %55, align 8, !tbaa !139
  store i64 256, ptr %547, align 8, !tbaa !141
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %56) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %56, i8 0, i64 64, i1 false)
  store i32 35, ptr %56, align 8, !tbaa !142
  %554 = load ptr, ptr %542, align 8, !tbaa !20
  store ptr %554, ptr %548, align 8, !tbaa !144
  store i32 6, ptr %549, align 4, !tbaa !145
  store i32 1, ptr %550, align 8, !tbaa !146
  store ptr %55, ptr %551, align 8, !tbaa !147
  %555 = load ptr, ptr %347, align 16, !tbaa !95
  invoke void @vkUpdateDescriptorSets(ptr noundef %555, i32 noundef 1, ptr noundef nonnull %56, i32 noundef 0, ptr noundef null)
          to label %556 unwind label %574

556:                                              ; preds = %.preheader
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %56) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %55) #12
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %55) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %55, i8 0, i64 24, i1 false)
  %557 = call noundef ptr @_ZNKSt10unique_ptrI16ConstantBufferVKSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %437) #12
  %558 = call noundef ptr @_ZNK16ConstantBufferVK9GetBufferEv(ptr noundef nonnull align 8 dereferenceable(56) %557)
  store ptr %558, ptr %55, align 8, !tbaa !139
  store i64 256, ptr %547, align 8, !tbaa !141
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %56) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %56, i8 0, i64 64, i1 false)
  store i32 35, ptr %56, align 8, !tbaa !142
  %559 = getelementptr inbounds i8, ptr %0, i64 1568
  %560 = load ptr, ptr %559, align 16, !tbaa !20
  store ptr %560, ptr %548, align 8, !tbaa !144
  store i32 6, ptr %549, align 4, !tbaa !145
  store i32 1, ptr %550, align 8, !tbaa !146
  store ptr %55, ptr %551, align 8, !tbaa !147
  %561 = load ptr, ptr %347, align 16, !tbaa !95
  invoke void @vkUpdateDescriptorSets(ptr noundef %561, i32 noundef 1, ptr noundef nonnull %56, i32 noundef 0, ptr noundef null)
          to label %562 unwind label %574

562:                                              ; preds = %556
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %56) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %55) #12
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %57) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(80) %57, i8 0, i64 64, i1 false)
  store i32 31, ptr %57, align 8, !tbaa !149
  %563 = getelementptr inbounds i8, ptr %57, i64 20
  store i32 1, ptr %563, align 4, !tbaa !156
  %564 = getelementptr inbounds i8, ptr %57, i64 24
  store i32 1, ptr %564, align 8, !tbaa !157
  %565 = getelementptr inbounds i8, ptr %57, i64 32
  %566 = getelementptr inbounds i8, ptr %57, i64 36
  store i32 0, ptr %566, align 4, !tbaa !158
  %567 = getelementptr inbounds i8, ptr %57, i64 40
  %568 = getelementptr inbounds i8, ptr %57, i64 72
  store i32 3, ptr %568, align 8, !tbaa !159
  %569 = getelementptr inbounds i8, ptr %57, i64 76
  store i32 0, ptr %569, align 4, !tbaa !160
  %570 = getelementptr inbounds i8, ptr %57, i64 64
  store <2 x float> <float 0.000000e+00, float 1.000000e+03>, ptr %570, align 8, !tbaa !77
  %571 = load ptr, ptr %347, align 16, !tbaa !95
  %572 = getelementptr inbounds i8, ptr %0, i64 1584
  %573 = invoke i32 @vkCreateSampler(ptr noundef %571, ptr noundef nonnull %57, ptr noundef null, ptr noundef nonnull %572)
          to label %576 unwind label %663

574:                                              ; preds = %556, %.preheader
  %575 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %56) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %55) #12
  br label %681

576:                                              ; preds = %562
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %573)
          to label %577 unwind label %663

577:                                              ; preds = %576
  store i32 2, ptr %565, align 8, !tbaa !161
  store i32 2, ptr %566, align 4, !tbaa !158
  store i32 2, ptr %567, align 8, !tbaa !162
  %578 = load ptr, ptr %347, align 16, !tbaa !95
  %579 = getelementptr inbounds i8, ptr %0, i64 1576
  %580 = invoke i32 @vkCreateSampler(ptr noundef %578, ptr noundef nonnull %57, ptr noundef null, ptr noundef nonnull %579)
          to label %581 unwind label %663

581:                                              ; preds = %577
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %580)
          to label %582 unwind label %663

582:                                              ; preds = %581
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %58) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(36) %58, i8 0, i64 36, i1 false)
  %583 = invoke noundef i32 @_ZN10RendererVK15FindDepthFormatEv(ptr noundef nonnull align 16 dereferenceable(1936) %0)
          to label %584 unwind label %665

584:                                              ; preds = %582
  %585 = getelementptr inbounds i8, ptr %58, i64 4
  store i32 %583, ptr %585, align 4, !tbaa !163
  %586 = getelementptr inbounds i8, ptr %58, i64 8
  store <4 x i32> <i32 1, i32 1, i32 0, i32 2>, ptr %586, align 4, !tbaa !118
  %587 = getelementptr inbounds i8, ptr %58, i64 24
  store i32 1, ptr %587, align 4, !tbaa !169
  %588 = getelementptr inbounds i8, ptr %58, i64 28
  store i32 0, ptr %588, align 4, !tbaa !170
  %589 = getelementptr inbounds i8, ptr %58, i64 32
  store i32 5, ptr %589, align 4, !tbaa !171
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %59) #12
  store i64 12884901888, ptr %59, align 8
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %60) #12
  %590 = getelementptr inbounds i8, ptr %60, i64 48
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(72) %60, i8 0, i64 72, i1 false)
  store ptr %59, ptr %590, align 8, !tbaa !172
  call void @llvm.lifetime.start.p0(i64 28, ptr nonnull %61) #12
  %591 = getelementptr inbounds i8, ptr %61, i64 24
  store i32 0, ptr %591, align 8
  %592 = getelementptr inbounds i8, ptr %61, i64 16
  store i32 1024, ptr %592, align 16, !tbaa !175
  store <4 x i32> <i32 -1, i32 0, i32 512, i32 256>, ptr %61, align 16, !tbaa !21
  %593 = getelementptr inbounds i8, ptr %61, i64 20
  store i32 1024, ptr %593, align 4, !tbaa !177
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %62) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %62, i8 0, i64 56, i1 false)
  store i32 38, ptr %62, align 8, !tbaa !178
  %594 = getelementptr inbounds i8, ptr %62, i64 20
  store i32 1, ptr %594, align 4, !tbaa !180
  %595 = getelementptr inbounds i8, ptr %62, i64 24
  store ptr %58, ptr %595, align 8, !tbaa !181
  %596 = getelementptr inbounds i8, ptr %62, i64 32
  store i32 1, ptr %596, align 8, !tbaa !182
  %597 = getelementptr inbounds i8, ptr %62, i64 40
  store ptr %60, ptr %597, align 8, !tbaa !183
  %598 = getelementptr inbounds i8, ptr %62, i64 48
  store i32 1, ptr %598, align 8, !tbaa !184
  %599 = getelementptr inbounds i8, ptr %62, i64 56
  store ptr %61, ptr %599, align 8, !tbaa !185
  %600 = load ptr, ptr %347, align 16, !tbaa !95
  %601 = getelementptr inbounds i8, ptr %0, i64 1592
  %602 = invoke i32 @vkCreateRenderPass(ptr noundef %600, ptr noundef nonnull %62, ptr noundef null, ptr noundef nonnull %601)
          to label %603 unwind label %667

603:                                              ; preds = %584
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %602)
          to label %604 unwind label %667

604:                                              ; preds = %603
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %62) #12
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %61) #12
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %60) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %59) #12
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %58) #12
  %605 = invoke noalias noundef nonnull dereferenceable(64) ptr @_Znwm(i64 noundef 64) #15
          to label %606 unwind label %663

606:                                              ; preds = %604
  invoke void @_ZN9TextureVKC1EP10RendererVKii(ptr noundef nonnull align 8 dereferenceable(64) %605, ptr noundef nonnull %0, i32 noundef 4096, i32 noundef 4096)
          to label %607 unwind label %670

607:                                              ; preds = %606
  %608 = getelementptr inbounds i8, ptr %0, i64 1728
  %609 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefI9TextureVKEaSEPS1_(ptr noundef nonnull align 8 dereferenceable(8) %608, ptr noundef nonnull %605)
          to label %610 unwind label %663

610:                                              ; preds = %607
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %63) #12
  %611 = call noundef ptr @_ZNK3JPH3RefI9TextureVKEptEv(ptr noundef nonnull align 8 dereferenceable(8) %608)
  %612 = call noundef ptr @_ZNK9TextureVK12GetImageViewEv(ptr noundef nonnull align 8 dereferenceable(64) %611)
  store ptr %612, ptr %63, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %64) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %64, i8 0, i64 64, i1 false)
  store i32 37, ptr %64, align 8, !tbaa !186
  %613 = load ptr, ptr %601, align 8, !tbaa !188
  %614 = getelementptr inbounds i8, ptr %64, i64 24
  store ptr %613, ptr %614, align 8, !tbaa !189
  %615 = call noundef i64 @_ZSt4sizeIP13VkImageView_TLm1EEmRAT0__KT_(ptr noundef nonnull align 8 dereferenceable(8) %63) #12
  %616 = trunc i64 %615 to i32
  %617 = getelementptr inbounds i8, ptr %64, i64 32
  store i32 %616, ptr %617, align 8, !tbaa !190
  %618 = getelementptr inbounds i8, ptr %64, i64 40
  store ptr %63, ptr %618, align 8, !tbaa !191
  %619 = getelementptr inbounds i8, ptr %64, i64 48
  store i32 4096, ptr %619, align 8, !tbaa !192
  %620 = getelementptr inbounds i8, ptr %64, i64 52
  store i32 4096, ptr %620, align 4, !tbaa !193
  %621 = getelementptr inbounds i8, ptr %64, i64 56
  store i32 1, ptr %621, align 8, !tbaa !194
  %622 = load ptr, ptr %347, align 16, !tbaa !95
  %623 = getelementptr inbounds i8, ptr %0, i64 1616
  %624 = invoke i32 @vkCreateFramebuffer(ptr noundef %622, ptr noundef nonnull %64, ptr noundef null, ptr noundef nonnull %623)
          to label %625 unwind label %672

625:                                              ; preds = %610
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %624)
          to label %626 unwind label %672

626:                                              ; preds = %625
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %65) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(72) %65, i8 0, i64 72, i1 false)
  %627 = getelementptr inbounds i8, ptr %292, i64 40
  %628 = load i32, ptr %627, align 8, !tbaa !195
  %629 = getelementptr inbounds i8, ptr %65, i64 4
  store i32 %628, ptr %629, align 4, !tbaa !163
  %630 = getelementptr inbounds i8, ptr %65, i64 8
  store i32 1, ptr %630, align 8, !tbaa !196
  %631 = getelementptr inbounds i8, ptr %65, i64 12
  store i32 1, ptr %631, align 4, !tbaa !197
  %632 = getelementptr inbounds i8, ptr %65, i64 20
  store i32 2, ptr %632, align 4, !tbaa !198
  %633 = getelementptr inbounds i8, ptr %65, i64 24
  store i32 1, ptr %633, align 8, !tbaa !169
  %634 = getelementptr inbounds i8, ptr %65, i64 32
  store i32 1000001002, ptr %634, align 16, !tbaa !171
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %66) #12
  store i64 8589934592, ptr %66, align 8
  %635 = invoke noundef i32 @_ZN10RendererVK15FindDepthFormatEv(ptr noundef nonnull align 16 dereferenceable(1936) %0)
          to label %636 unwind label %674

636:                                              ; preds = %626
  %637 = getelementptr inbounds i8, ptr %65, i64 40
  store i32 %635, ptr %637, align 8, !tbaa !163
  %638 = getelementptr inbounds i8, ptr %65, i64 44
  store <4 x i32> <i32 1, i32 1, i32 1, i32 2>, ptr %638, align 4, !tbaa !118
  %639 = getelementptr inbounds i8, ptr %65, i64 60
  store i32 1, ptr %639, align 4, !tbaa !169
  %640 = getelementptr inbounds i8, ptr %65, i64 64
  store i32 0, ptr %640, align 16, !tbaa !170
  %641 = getelementptr inbounds i8, ptr %65, i64 68
  store i32 3, ptr %641, align 4, !tbaa !171
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %67) #12
  store i64 12884901889, ptr %67, align 8
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %68) #12
  %642 = getelementptr inbounds i8, ptr %68, i64 24
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(72) %68, i8 0, i64 72, i1 false)
  store i32 1, ptr %642, align 8, !tbaa !199
  %643 = getelementptr inbounds i8, ptr %68, i64 32
  store ptr %66, ptr %643, align 8, !tbaa !200
  %644 = getelementptr inbounds i8, ptr %68, i64 48
  store ptr %67, ptr %644, align 8, !tbaa !172
  call void @llvm.lifetime.start.p0(i64 28, ptr nonnull %69) #12
  %645 = getelementptr inbounds i8, ptr %69, i64 24
  store i32 0, ptr %645, align 8
  %646 = getelementptr inbounds i8, ptr %69, i64 16
  store i32 1024, ptr %646, align 16, !tbaa !175
  store <4 x i32> <i32 -1, i32 0, i32 1536, i32 1152>, ptr %69, align 16, !tbaa !21
  %647 = getelementptr inbounds i8, ptr %69, i64 20
  store i32 288, ptr %647, align 4, !tbaa !177
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %70) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %70, i8 0, i64 64, i1 false)
  store i32 38, ptr %70, align 8, !tbaa !178
  %648 = call noundef i64 @_ZSt4sizeI23VkAttachmentDescriptionLm2EEmRAT0__KT_(ptr noundef nonnull align 4 dereferenceable(72) %65) #12
  %649 = trunc i64 %648 to i32
  %650 = getelementptr inbounds i8, ptr %70, i64 20
  store i32 %649, ptr %650, align 4, !tbaa !180
  %651 = getelementptr inbounds i8, ptr %70, i64 24
  store ptr %65, ptr %651, align 8, !tbaa !181
  %652 = getelementptr inbounds i8, ptr %70, i64 32
  store i32 1, ptr %652, align 8, !tbaa !182
  %653 = getelementptr inbounds i8, ptr %70, i64 40
  store ptr %68, ptr %653, align 8, !tbaa !183
  %654 = getelementptr inbounds i8, ptr %70, i64 48
  store i32 1, ptr %654, align 8, !tbaa !184
  %655 = getelementptr inbounds i8, ptr %70, i64 56
  store ptr %69, ptr %655, align 8, !tbaa !185
  %656 = load ptr, ptr %347, align 16, !tbaa !95
  %657 = getelementptr inbounds i8, ptr %0, i64 1600
  %658 = invoke i32 @vkCreateRenderPass(ptr noundef %656, ptr noundef nonnull %70, ptr noundef null, ptr noundef nonnull %657)
          to label %659 unwind label %676

659:                                              ; preds = %636
  invoke void @_Z18FatalErrorIfFailed8VkResult(i32 noundef %658)
          to label %660 unwind label %676

660:                                              ; preds = %659
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %70) #12
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %69) #12
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %68) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %67) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %66) #12
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %65) #12
  %661 = load ptr, ptr %299, align 16, !tbaa !76
  invoke void @_ZN10RendererVK15CreateSwapChainEP18VkPhysicalDevice_T(ptr noundef nonnull align 16 dereferenceable(1936) %0, ptr noundef %661)
          to label %662 unwind label %672

662:                                              ; preds = %660
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %64) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %63) #12
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %57) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %51) #12
  call void @_ZN3JPH5ArrayIP23VkDescriptorSetLayout_TNS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %49) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %49) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %48) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %47) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %46) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %45) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %43) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %42) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %41) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %37) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %36) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %34) #12
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %33) #12
  call void @llvm.lifetime.end.p0(i64 220, ptr nonnull %32) #12
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %31) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %30) #12
  call void @llvm.lifetime.end.p0(i64 220, ptr nonnull %29) #12
  call void @_ZN3JPH5ArrayIZN10RendererVK10InitializeEP17ApplicationWindowE6DeviceNS_12STLAllocatorIS4_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %20) #12
  call void @_ZN3JPH5ArrayIP18VkPhysicalDevice_TNS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %19) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %17) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %15) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %13) #12
  call void @_ZN3JPH5ArrayI17VkLayerPropertiesNS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #12
  call void @_ZN3JPH5ArrayI21VkExtensionPropertiesNS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #12
  call void @_ZN3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #12
  call void @_ZN3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3) #12
  ret void

663:                                              ; preds = %607, %604, %581, %577, %576, %562
  %664 = landingpad { ptr, i32 }
          cleanup
  br label %680

665:                                              ; preds = %582
  %666 = landingpad { ptr, i32 }
          cleanup
  br label %669

667:                                              ; preds = %603, %584
  %668 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %62) #12
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %61) #12
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %60) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %59) #12
  br label %669

669:                                              ; preds = %667, %665
  %.pn = phi { ptr, i32 } [ %668, %667 ], [ %666, %665 ]
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %58) #12
  br label %680

670:                                              ; preds = %606
  %671 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %605, i64 noundef 64) #16
  br label %680

672:                                              ; preds = %660, %625, %610
  %673 = landingpad { ptr, i32 }
          cleanup
  br label %679

674:                                              ; preds = %626
  %675 = landingpad { ptr, i32 }
          cleanup
  br label %678

676:                                              ; preds = %659, %636
  %677 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %70) #12
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %69) #12
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %68) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %67) #12
  br label %678

678:                                              ; preds = %676, %674
  %.pn213 = phi { ptr, i32 } [ %677, %676 ], [ %675, %674 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %66) #12
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %65) #12
  br label %679

679:                                              ; preds = %678, %672
  %.pn215 = phi { ptr, i32 } [ %673, %672 ], [ %.pn213, %678 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %64) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %63) #12
  br label %680

680:                                              ; preds = %679, %670, %669, %663
  %.pn215.pn = phi { ptr, i32 } [ %.pn215, %679 ], [ %664, %663 ], [ %671, %670 ], [ %.pn, %669 ]
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %57) #12
  br label %681

681:                                              ; preds = %680, %574, %544, %530
  %.pn218 = phi { ptr, i32 } [ %545, %544 ], [ %575, %574 ], [ %.pn215.pn, %680 ], [ %531, %530 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %51) #12
  call void @_ZN3JPH5ArrayIP23VkDescriptorSetLayout_TNS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %49) #12
  br label %682

682:                                              ; preds = %681, %528
  %.pn218.pn = phi { ptr, i32 } [ %.pn218, %681 ], [ %529, %528 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %49) #12
  br label %683

683:                                              ; preds = %682, %526
  %.pn218.pn.pn = phi { ptr, i32 } [ %.pn218.pn, %682 ], [ %527, %526 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %48) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %47) #12
  br label %684

684:                                              ; preds = %683, %524
  %.pn218.pn.pn.pn = phi { ptr, i32 } [ %.pn218.pn.pn, %683 ], [ %525, %524 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %46) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %45) #12
  br label %685

685:                                              ; preds = %684, %522
  %.pn218.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn218.pn.pn.pn, %684 ], [ %523, %522 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %43) #12
  br label %686

686:                                              ; preds = %685, %520
  %.pn218.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn218.pn.pn.pn.pn, %685 ], [ %521, %520 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %42) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %41) #12
  br label %687

687:                                              ; preds = %453, %455, %457, %686, %425
  %.pn227 = phi { ptr, i32 } [ %426, %425 ], [ %.pn218.pn.pn.pn.pn.pn, %686 ], [ %458, %457 ], [ %456, %455 ], [ %454, %453 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %37) #12
  br label %688

688:                                              ; preds = %687, %414
  %.pn229 = phi { ptr, i32 } [ %415, %414 ], [ %.pn227, %687 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %36) #12
  br label %689

689:                                              ; preds = %688, %392
  %.pn231 = phi { ptr, i32 } [ %393, %392 ], [ %.pn229, %688 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #12
  br label %690

690:                                              ; preds = %689, %379
  %.pn231.pn = phi { ptr, i32 } [ %.pn231, %689 ], [ %380, %379 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %34) #12
  br label %691

691:                                              ; preds = %690, %377
  %.pn231.pn.pn = phi { ptr, i32 } [ %.pn231.pn, %690 ], [ %378, %377 ]
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %33) #12
  br label %692

692:                                              ; preds = %691, %325
  %.pn231.pn.pn.pn = phi { ptr, i32 } [ %.pn231.pn.pn, %691 ], [ %326, %325 ]
  call void @llvm.lifetime.end.p0(i64 220, ptr nonnull %32) #12
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %31) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %30) #12
  br label %693

693:                                              ; preds = %692, %315
  %.pn231.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn231.pn.pn.pn, %692 ], [ %316, %315 ]
  call void @llvm.lifetime.end.p0(i64 220, ptr nonnull %29) #12
  br label %694

694:                                              ; preds = %313, %693, %286, %283
  %.pn246.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn246.pn.pn.pn.pn.pn.pn.pn, %283 ], [ %287, %286 ], [ %.pn231.pn.pn.pn.pn, %693 ], [ %314, %313 ]
  call void @_ZN3JPH5ArrayIZN10RendererVK10InitializeEP17ApplicationWindowE6DeviceNS_12STLAllocatorIS4_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %20) #12
  br label %695

695:                                              ; preds = %694, %192
  %.pn246.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn246.pn.pn.pn.pn.pn.pn.pn.pn, %694 ], [ %193, %192 ]
  call void @_ZN3JPH5ArrayIP18VkPhysicalDevice_TNS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %19) #12
  br label %696

696:                                              ; preds = %695, %190
  %.pn246.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn246.pn.pn.pn.pn.pn.pn.pn.pn.pn, %695 ], [ %191, %190 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #12
  br label %697

697:                                              ; preds = %696, %188
  %.pn246.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn246.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %696 ], [ %189, %188 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %17) #12
  br label %698

698:                                              ; preds = %151, %697, %149, %130
  %.pn246.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %150, %149 ], [ %131, %130 ], [ %.pn246.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %697 ], [ %152, %151 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %15) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #12
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %13) #12
  br label %699

699:                                              ; preds = %698, %113
  %.pn246.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn246.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %698 ], [ %114, %113 ]
  call void @_ZN3JPH5ArrayI17VkLayerPropertiesNS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #12
  br label %700

700:                                              ; preds = %699, %111
  %.pn246.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn246.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %699 ], [ %112, %111 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #12
  br label %701

701:                                              ; preds = %700, %109
  %.pn246.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn246.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %700 ], [ %110, %109 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #12
  br label %702

702:                                              ; preds = %701, %107
  %.pn246.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn246.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %701 ], [ %108, %107 ]
  call void @_ZN3JPH5ArrayI21VkExtensionPropertiesNS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #12
  br label %703

703:                                              ; preds = %702, %105
  %.pn246.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn246.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %702 ], [ %106, %105 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #12
  br label %704

704:                                              ; preds = %703, %103
  %.pn246.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn246.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %703 ], [ %104, %103 ]
  call void @_ZN3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #12
  br label %705

705:                                              ; preds = %704, %101, %99
  %.pn246.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn246.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %704 ], [ %102, %101 ], [ %100, %99 ]
  call void @_ZN3JPH5ArrayIPKcNS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3) #12
  resume { ptr, i32 } %.pn246.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn
}

declare void @_ZN8Renderer10InitializeEP17ApplicationWindow(ptr noundef nonnull align 16 dereferenceable(832), ptr noundef) unnamed_addr #2

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

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

declare void @_Z18FatalErrorIfFailed8VkResult(i32 noundef) local_unnamed_addr #2

declare i32 @vkEnumerateInstanceExtensionProperties(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

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

declare i32 @vkEnumerateInstanceLayerProperties(ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #7

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

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i32 @strcmp(ptr nocapture noundef, ptr nocapture noundef) local_unnamed_addr #9

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

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL20sVulkanDebugCallback38VkDebugUtilsMessageSeverityFlagBitsEXTjPK36VkDebugUtilsMessengerCallbackDataEXTPv(i32 noundef, i32 noundef, ptr noundef, ptr noundef) #5

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

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

declare i32 @vkCreateInstance(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

declare i32 @vkCreateXlibSurfaceKHR(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare i32 @vkEnumeratePhysicalDevices(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

declare i32 @vkEnumerateDeviceExtensionProperties(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

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

declare i32 @vkGetPhysicalDeviceSurfaceSupportKHR(ptr noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEC2IS5_EEPKcRKS5_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #5 align 2

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

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

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

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

; Function Attrs: noreturn
declare void @_Z10FatalErrorPKcz(ptr noundef, ...) local_unnamed_addr #10

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @"_ZN3JPH9QuickSortIPZN10RendererVK10InitializeEP17ApplicationWindowE6DeviceZNS1_10InitializeES3_E3$_0EEvT_S7_T0_"(ptr noundef, ptr noundef) local_unnamed_addr #1

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZSt4sizeI23VkDeviceQueueCreateInfoLm2EEmRAT0__KT_(ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #3

declare i32 @vkCreateDevice(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @vkGetDeviceQueue(ptr noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #2

declare i32 @vkCreateCommandPool(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare i32 @vkAllocateCommandBuffers(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare i32 @vkCreateSemaphore(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare i32 @vkCreateFence(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN10RendererVK20CreateConstantBufferEm(ptr dead_on_unwind noalias writable sret(%"class.std::unique_ptr") align 8, ptr noundef nonnull align 16 dereferenceable(1936), i64 noundef) local_unnamed_addr #5 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZSt4sizeI28VkDescriptorSetLayoutBindingLm2EEmRAT0__KT_(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #3

declare i32 @vkCreateDescriptorSetLayout(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZSt4sizeIP23VkDescriptorSetLayout_TLm2EEmRAT0__KT_(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #3

declare i32 @vkCreatePipelineLayout(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

declare i32 @vkCreateDescriptorPool(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

declare i32 @vkAllocateDescriptorSets(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

declare void @vkUpdateDescriptorSets(ptr noundef, i32 noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #2

declare i32 @vkCreateSampler(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

declare i32 @vkCreateRenderPass(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) local_unnamed_addr #11

declare void @_ZN9TextureVKC1EP10RendererVKii(ptr noundef nonnull align 8 dereferenceable(64), ptr noundef, i32 noundef, i32 noundef) unnamed_addr #2

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

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

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

declare i32 @vkCreateFramebuffer(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZSt4sizeI23VkAttachmentDescriptionLm2EEmRAT0__KT_(ptr noundef nonnull align 4 dereferenceable(72)) local_unnamed_addr #3

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

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nobuiltin 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 #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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #8 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #9 = { mustprogress nofree nounwind willreturn memory(argmem: read) "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 #10 = { noreturn "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 #11 = { nobuiltin allocsize(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 #12 = { nounwind }
attributes #13 = { nounwind willreturn memory(read) }
attributes #14 = { noreturn }
attributes #15 = { builtin allocsize(0) }
attributes #16 = { builtin 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, !10, i64 16}
!6 = !{!"_ZTS8Renderer", !7, i64 8, !10, i64 16, !11, i64 20, !12, i64 32, !13, i64 96, !14, i64 112, !14, i64 192, !15, i64 272, !16, i64 288, !16, i64 544, !18, i64 800}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"float", !8, i64 0}
!11 = !{!"bool", !8, i64 0}
!12 = !{!"_ZTS11CameraState", !13, i64 0, !13, i64 16, !13, i64 32, !10, i64 48}
!13 = !{!"_ZTSN3JPH4Vec3E", !8, i64 0}
!14 = !{!"_ZTS7Frustum", !8, i64 0}
!15 = !{!"int", !8, i64 0}
!16 = !{!"_ZTSN8Renderer26VertexShaderConstantBufferE", !17, i64 0, !17, i64 64, !17, i64 128, !17, i64 192}
!17 = !{!"_ZTSN3JPH5Mat44E", !8, i64 0}
!18 = !{!"_ZTSN8Renderer25PixelShaderConstantBufferE", !19, i64 0, !19, i64 16}
!19 = !{!"_ZTSN3JPH4Vec4E", !8, i64 0}
!20 = !{!7, !7, i64 0}
!21 = !{!15, !15, i64 0}
!22 = !{!23, !24, i64 0}
!23 = !{!"_ZTS20VkInstanceCreateInfo", !24, i64 0, !7, i64 8, !15, i64 16, !7, i64 24, !15, i64 32, !7, i64 40, !15, i64 48, !7, i64 56}
!24 = !{!"_ZTS15VkStructureType", !8, i64 0}
!25 = !{!23, !15, i64 32}
!26 = !{!23, !7, i64 40}
!27 = !{!28, !24, i64 0}
!28 = !{!"_ZTS34VkDebugUtilsMessengerCreateInfoEXT", !24, i64 0, !7, i64 8, !15, i64 16, !15, i64 20, !15, i64 24, !7, i64 32, !7, i64 40}
!29 = !{!28, !15, i64 20}
!30 = !{!28, !15, i64 24}
!31 = !{!28, !7, i64 32}
!32 = !{!23, !7, i64 8}
!33 = !{!23, !15, i64 48}
!34 = !{!23, !7, i64 56}
!35 = !{!36, !7, i64 832}
!36 = !{!"_ZTS10RendererVK", !6, i64 0, !7, i64 832, !7, i64 840, !7, i64 848, !37, i64 856, !7, i64 1376, !15, i64 1384, !15, i64 1388, !7, i64 1392, !7, i64 1400, !7, i64 1408, !7, i64 1416, !11, i64 1424, !38, i64 1432, !40, i64 1456, !41, i64 1460, !42, i64 1472, !7, i64 1496, !7, i64 1504, !7, i64 1512, !7, i64 1520, !7, i64 1528, !7, i64 1536, !8, i64 1544, !8, i64 1560, !7, i64 1576, !7, i64 1584, !7, i64 1592, !7, i64 1600, !7, i64 1608, !7, i64 1616, !43, i64 1624, !15, i64 1648, !7, i64 1656, !8, i64 1664, !8, i64 1680, !8, i64 1696, !8, i64 1712, !44, i64 1728, !8, i64 1736, !8, i64 1752, !8, i64 1768, !8, i64 1784, !45, i64 1848, !47, i64 1880, !15, i64 1912, !15, i64 1916, !39, i64 1920, !39, i64 1928}
!37 = !{!"_ZTS32VkPhysicalDeviceMemoryProperties", !15, i64 0, !8, i64 4, !15, i64 260, !8, i64 264}
!38 = !{!"_ZTSN3JPH5ArrayIP9VkImage_TNS_12STLAllocatorIS2_EEEE", !39, i64 0, !39, i64 8, !7, i64 16}
!39 = !{!"long", !8, i64 0}
!40 = !{!"_ZTS8VkFormat", !8, i64 0}
!41 = !{!"_ZTS10VkExtent2D", !15, i64 0, !15, i64 4}
!42 = !{!"_ZTSN3JPH5ArrayIP13VkImageView_TNS_12STLAllocatorIS2_EEEE", !39, i64 0, !39, i64 8, !7, i64 16}
!43 = !{!"_ZTSN3JPH5ArrayIP15VkFramebuffer_TNS_12STLAllocatorIS2_EEEE", !39, i64 0, !39, i64 8, !7, i64 16}
!44 = !{!"_ZTSN3JPH3RefI9TextureVKEE", !7, i64 0}
!45 = !{!"_ZTSN3JPH12UnorderedMapIN10RendererVK3KeyENS_5ArrayI8BufferVKNS_12STLAllocatorIS4_EEEENS1_9KeyHasherESt8equal_toIS2_EEE", !46, i64 0}
!46 = !{!"_ZTSN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayI8BufferVKNS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EEE", !7, i64 0, !7, i64 8, !15, i64 16, !15, i64 20, !15, i64 24}
!47 = !{!"_ZTSN3JPH12UnorderedMapIN10RendererVK3KeyENS_5ArrayINS1_6MemoryENS_12STLAllocatorIS4_EEEENS1_9KeyHasherESt8equal_toIS2_EEE", !48, i64 0}
!48 = !{!"_ZTSN3JPH9HashTableIN10RendererVK3KeyESt4pairIS2_NS_5ArrayINS1_6MemoryENS_12STLAllocatorIS5_EEEEENS_18UnorderedMapDetailIS2_S8_EENS1_9KeyHasherESt8equal_toIS2_EEE", !7, i64 0, !7, i64 8, !15, i64 16, !15, i64 20, !15, i64 24}
!49 = !{!50, !24, i64 0}
!50 = !{!"_ZTS26VkXlibSurfaceCreateInfoKHR", !24, i64 0, !7, i64 8, !15, i64 16, !7, i64 24, !39, i64 32}
!51 = !{!6, !7, i64 8}
!52 = !{!50, !7, i64 24}
!53 = !{!50, !39, i64 32}
!54 = !{!55, !56, i64 16}
!55 = !{!"_ZTS26VkPhysicalDeviceProperties", !15, i64 0, !15, i64 4, !15, i64 8, !15, i64 12, !56, i64 16, !8, i64 20, !8, i64 276, !57, i64 296, !58, i64 800}
!56 = !{!"_ZTS20VkPhysicalDeviceType", !8, i64 0}
!57 = !{!"_ZTS22VkPhysicalDeviceLimits", !15, i64 0, !15, i64 4, !15, i64 8, !15, i64 12, !15, i64 16, !15, i64 20, !15, i64 24, !15, i64 28, !15, i64 32, !15, i64 36, !15, i64 40, !39, i64 48, !39, i64 56, !15, i64 64, !15, i64 68, !15, i64 72, !15, i64 76, !15, i64 80, !15, i64 84, !15, i64 88, !15, i64 92, !15, i64 96, !15, i64 100, !15, i64 104, !15, i64 108, !15, i64 112, !15, i64 116, !15, i64 120, !15, i64 124, !15, i64 128, !15, i64 132, !15, i64 136, !15, i64 140, !15, i64 144, !15, i64 148, !15, i64 152, !15, i64 156, !15, i64 160, !15, i64 164, !15, i64 168, !15, i64 172, !15, i64 176, !15, i64 180, !15, i64 184, !15, i64 188, !15, i64 192, !15, i64 196, !15, i64 200, !15, i64 204, !15, i64 208, !15, i64 212, !15, i64 216, !8, i64 220, !15, i64 232, !8, i64 236, !15, i64 248, !15, i64 252, !15, i64 256, !15, i64 260, !15, i64 264, !10, i64 268, !10, i64 272, !15, i64 276, !8, i64 280, !8, i64 288, !15, i64 296, !39, i64 304, !39, i64 312, !39, i64 320, !39, i64 328, !15, i64 336, !15, i64 340, !15, i64 344, !15, i64 348, !10, i64 352, !10, i64 356, !15, i64 360, !15, i64 364, !15, i64 368, !15, i64 372, !15, i64 376, !15, i64 380, !15, i64 384, !15, i64 388, !15, i64 392, !15, i64 396, !15, i64 400, !15, i64 404, !15, i64 408, !15, i64 412, !15, i64 416, !15, i64 420, !10, i64 424, !15, i64 428, !15, i64 432, !15, i64 436, !15, i64 440, !8, i64 444, !8, i64 452, !10, i64 460, !10, i64 464, !15, i64 468, !15, i64 472, !39, i64 480, !39, i64 488, !39, i64 496}
!58 = !{!"_ZTS32VkPhysicalDeviceSparseProperties", !15, i64 0, !15, i64 4, !15, i64 8, !15, i64 12, !15, i64 16}
!59 = distinct !{!59, !60}
!60 = !{!"llvm.loop.mustprogress"}
!61 = !{!62, !15, i64 0}
!62 = !{!"_ZTS23VkQueueFamilyProperties", !15, i64 0, !15, i64 4, !15, i64 8, !63, i64 12}
!63 = !{!"_ZTS10VkExtent3D", !15, i64 0, !15, i64 4, !15, i64 8}
!64 = !{!36, !7, i64 1408}
!65 = !{!66, !7, i64 0}
!66 = !{!"_ZTSZN10RendererVK10InitializeEP17ApplicationWindowE6Device", !7, i64 0, !67, i64 8, !69, i64 40, !15, i64 48, !15, i64 52, !15, i64 56}
!67 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEE", !68, i64 0, !39, i64 8, !8, i64 16}
!68 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEE12_Alloc_hiderE", !7, i64 0}
!69 = !{!"_ZTS18VkSurfaceFormatKHR", !40, i64 0, !70, i64 4}
!70 = !{!"_ZTS15VkColorSpaceKHR", !8, i64 0}
!71 = !{!40, !40, i64 0}
!72 = !{!70, !70, i64 0}
!73 = !{!66, !15, i64 48}
!74 = !{!66, !15, i64 52}
!75 = !{!66, !15, i64 56}
!76 = !{!36, !7, i64 848}
!77 = !{!10, !10, i64 0}
!78 = !{!79, !15, i64 20}
!79 = !{!"_ZTS23VkDeviceQueueCreateInfo", !24, i64 0, !7, i64 8, !15, i64 16, !15, i64 20, !15, i64 24, !7, i64 32}
!80 = !{!81, !15, i64 52}
!81 = !{!"_ZTS24VkPhysicalDeviceFeatures", !15, i64 0, !15, i64 4, !15, i64 8, !15, i64 12, !15, i64 16, !15, i64 20, !15, i64 24, !15, i64 28, !15, i64 32, !15, i64 36, !15, i64 40, !15, i64 44, !15, i64 48, !15, i64 52, !15, i64 56, !15, i64 60, !15, i64 64, !15, i64 68, !15, i64 72, !15, i64 76, !15, i64 80, !15, i64 84, !15, i64 88, !15, i64 92, !15, i64 96, !15, i64 100, !15, i64 104, !15, i64 108, !15, i64 112, !15, i64 116, !15, i64 120, !15, i64 124, !15, i64 128, !15, i64 132, !15, i64 136, !15, i64 140, !15, i64 144, !15, i64 148, !15, i64 152, !15, i64 156, !15, i64 160, !15, i64 164, !15, i64 168, !15, i64 172, !15, i64 176, !15, i64 180, !15, i64 184, !15, i64 188, !15, i64 192, !15, i64 196, !15, i64 200, !15, i64 204, !15, i64 208, !15, i64 212, !15, i64 216}
!82 = !{!79, !24, i64 0}
!83 = !{!79, !15, i64 24}
!84 = !{!79, !7, i64 32}
!85 = distinct !{!85, !60}
!86 = !{!87, !24, i64 0}
!87 = !{!"_ZTS18VkDeviceCreateInfo", !24, i64 0, !7, i64 8, !15, i64 16, !15, i64 20, !7, i64 24, !15, i64 32, !7, i64 40, !15, i64 48, !7, i64 56, !7, i64 64}
!88 = !{!87, !15, i64 20}
!89 = !{!87, !7, i64 24}
!90 = !{!87, !15, i64 32}
!91 = !{!87, !7, i64 40}
!92 = !{!87, !15, i64 48}
!93 = !{!87, !7, i64 56}
!94 = !{!87, !7, i64 64}
!95 = !{!36, !7, i64 1376}
!96 = !{!36, !15, i64 1388}
!97 = !{!98, !24, i64 0}
!98 = !{!"_ZTS23VkCommandPoolCreateInfo", !24, i64 0, !7, i64 8, !15, i64 16, !15, i64 20}
!99 = !{!98, !15, i64 16}
!100 = !{!98, !15, i64 20}
!101 = !{!102, !24, i64 0}
!102 = !{!"_ZTS27VkCommandBufferAllocateInfo", !24, i64 0, !7, i64 8, !7, i64 16, !103, i64 24, !15, i64 28}
!103 = !{!"_ZTS20VkCommandBufferLevel", !8, i64 0}
!104 = !{!36, !7, i64 1656}
!105 = !{!102, !7, i64 16}
!106 = !{!102, !103, i64 24}
!107 = !{!102, !15, i64 28}
!108 = !{!109, !24, i64 0}
!109 = !{!"_ZTS21VkSemaphoreCreateInfo", !24, i64 0, !7, i64 8, !15, i64 16}
!110 = !{!111, !24, i64 0}
!111 = !{!"_ZTS17VkFenceCreateInfo", !24, i64 0, !7, i64 8, !15, i64 16}
!112 = !{!111, !15, i64 16}
!113 = !{!114, !15, i64 8}
!114 = !{!"_ZTS28VkDescriptorSetLayoutBinding", !15, i64 0, !115, i64 4, !15, i64 8, !15, i64 12, !7, i64 16}
!115 = !{!"_ZTS16VkDescriptorType", !8, i64 0}
!116 = !{!114, !115, i64 4}
!117 = !{!114, !15, i64 12}
!118 = !{!8, !8, i64 0}
!119 = !{!120, !24, i64 0}
!120 = !{!"_ZTS31VkDescriptorSetLayoutCreateInfo", !24, i64 0, !7, i64 8, !15, i64 16, !15, i64 20, !7, i64 24}
!121 = !{!120, !15, i64 20}
!122 = !{!120, !7, i64 24}
!123 = !{!124, !24, i64 0}
!124 = !{!"_ZTS26VkPipelineLayoutCreateInfo", !24, i64 0, !7, i64 8, !15, i64 16, !15, i64 20, !7, i64 24, !15, i64 32, !7, i64 40}
!125 = !{!124, !15, i64 20}
!126 = !{!124, !7, i64 24}
!127 = !{!124, !15, i64 32}
!128 = !{!129, !24, i64 0}
!129 = !{!"_ZTS26VkDescriptorPoolCreateInfo", !24, i64 0, !7, i64 8, !15, i64 16, !15, i64 20, !15, i64 24, !7, i64 32}
!130 = !{!129, !15, i64 24}
!131 = !{!129, !7, i64 32}
!132 = !{!129, !15, i64 20}
!133 = !{!134, !24, i64 0}
!134 = !{!"_ZTS27VkDescriptorSetAllocateInfo", !24, i64 0, !7, i64 8, !7, i64 16, !15, i64 24, !7, i64 32}
!135 = !{!36, !7, i64 1536}
!136 = !{!134, !7, i64 16}
!137 = !{!134, !15, i64 24}
!138 = !{!134, !7, i64 32}
!139 = !{!140, !7, i64 0}
!140 = !{!"_ZTS22VkDescriptorBufferInfo", !7, i64 0, !39, i64 8, !39, i64 16}
!141 = !{!140, !39, i64 16}
!142 = !{!143, !24, i64 0}
!143 = !{!"_ZTS20VkWriteDescriptorSet", !24, i64 0, !7, i64 8, !7, i64 16, !15, i64 24, !15, i64 28, !15, i64 32, !115, i64 36, !7, i64 40, !7, i64 48, !7, i64 56}
!144 = !{!143, !7, i64 16}
!145 = !{!143, !115, i64 36}
!146 = !{!143, !15, i64 32}
!147 = !{!143, !7, i64 48}
!148 = !{!143, !15, i64 24}
!149 = !{!150, !24, i64 0}
!150 = !{!"_ZTS19VkSamplerCreateInfo", !24, i64 0, !7, i64 8, !15, i64 16, !151, i64 20, !151, i64 24, !152, i64 28, !153, i64 32, !153, i64 36, !153, i64 40, !10, i64 44, !15, i64 48, !10, i64 52, !15, i64 56, !154, i64 60, !10, i64 64, !10, i64 68, !155, i64 72, !15, i64 76}
!151 = !{!"_ZTS8VkFilter", !8, i64 0}
!152 = !{!"_ZTS19VkSamplerMipmapMode", !8, i64 0}
!153 = !{!"_ZTS20VkSamplerAddressMode", !8, i64 0}
!154 = !{!"_ZTS11VkCompareOp", !8, i64 0}
!155 = !{!"_ZTS13VkBorderColor", !8, i64 0}
!156 = !{!150, !151, i64 20}
!157 = !{!150, !151, i64 24}
!158 = !{!150, !153, i64 36}
!159 = !{!150, !155, i64 72}
!160 = !{!150, !15, i64 76}
!161 = !{!150, !153, i64 32}
!162 = !{!150, !153, i64 40}
!163 = !{!164, !40, i64 4}
!164 = !{!"_ZTS23VkAttachmentDescription", !15, i64 0, !40, i64 4, !165, i64 8, !166, i64 12, !167, i64 16, !166, i64 20, !167, i64 24, !168, i64 28, !168, i64 32}
!165 = !{!"_ZTS21VkSampleCountFlagBits", !8, i64 0}
!166 = !{!"_ZTS18VkAttachmentLoadOp", !8, i64 0}
!167 = !{!"_ZTS19VkAttachmentStoreOp", !8, i64 0}
!168 = !{!"_ZTS13VkImageLayout", !8, i64 0}
!169 = !{!164, !167, i64 24}
!170 = !{!164, !168, i64 28}
!171 = !{!164, !168, i64 32}
!172 = !{!173, !7, i64 48}
!173 = !{!"_ZTS20VkSubpassDescription", !15, i64 0, !174, i64 4, !15, i64 8, !7, i64 16, !15, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !15, i64 56, !7, i64 64}
!174 = !{!"_ZTS19VkPipelineBindPoint", !8, i64 0}
!175 = !{!176, !15, i64 16}
!176 = !{!"_ZTS19VkSubpassDependency", !15, i64 0, !15, i64 4, !15, i64 8, !15, i64 12, !15, i64 16, !15, i64 20, !15, i64 24}
!177 = !{!176, !15, i64 20}
!178 = !{!179, !24, i64 0}
!179 = !{!"_ZTS22VkRenderPassCreateInfo", !24, i64 0, !7, i64 8, !15, i64 16, !15, i64 20, !7, i64 24, !15, i64 32, !7, i64 40, !15, i64 48, !7, i64 56}
!180 = !{!179, !15, i64 20}
!181 = !{!179, !7, i64 24}
!182 = !{!179, !15, i64 32}
!183 = !{!179, !7, i64 40}
!184 = !{!179, !15, i64 48}
!185 = !{!179, !7, i64 56}
!186 = !{!187, !24, i64 0}
!187 = !{!"_ZTS23VkFramebufferCreateInfo", !24, i64 0, !7, i64 8, !15, i64 16, !7, i64 24, !15, i64 32, !7, i64 40, !15, i64 48, !15, i64 52, !15, i64 56}
!188 = !{!36, !7, i64 1592}
!189 = !{!187, !7, i64 24}
!190 = !{!187, !15, i64 32}
!191 = !{!187, !7, i64 40}
!192 = !{!187, !15, i64 48}
!193 = !{!187, !15, i64 52}
!194 = !{!187, !15, i64 56}
!195 = !{!66, !40, i64 40}
!196 = !{!164, !165, i64 8}
!197 = !{!164, !166, i64 12}
!198 = !{!164, !166, i64 20}
!199 = !{!173, !15, i64 24}
!200 = !{!173, !7, i64 32}


; Effective O3 passes: CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,MemCpyOptPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass