; LLVM IR from hasseily/SuperDuperDisplay :: imgui/examples/example_glfw_vulkan (main)

; 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.ImGui_ImplVulkanH_Window = type { i32, i32, ptr, ptr, %struct.VkSurfaceFormatKHR, i32, ptr, ptr, i8, i8, %union.VkClearValue, i32, i32, i32, i32, ptr, ptr }
%struct.VkSurfaceFormatKHR = type { i32, i32 }
%union.VkClearValue = type { %union.VkClearColorValue }
%union.VkClearColorValue = type { [4 x float] }
%struct.ImVector = type { i32, i32, ptr }
%struct.ImGui_ImplVulkan_InitInfo = type { ptr, ptr, ptr, i32, ptr, ptr, ptr, i32, i32, i32, i32, i8, i32, ptr, ptr, i64 }
%struct.ImVec4 = type { float, float, float, float }
%struct.ImVec2 = type { float, float }
%struct.ImGuiIO = type { i32, i32, %struct.ImVec2, float, float, ptr, ptr, ptr, ptr, float, i8, ptr, %struct.ImVec2, i8, i8, i8, i8, i8, i8, i8, i8, float, float, float, float, float, float, i8, i8, i8, i8, i8, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i16, i8, i8, i8, i8, i8, i8, i8, float, i32, i32, i32, i32, %struct.ImVec2, [666 x i32], [666 x i8], [16 x float], ptr, %struct.ImVec2, [5 x i8], float, float, i32, i8, i8, i8, i8, i32, [666 x %struct.ImGuiKeyData], i8, %struct.ImVec2, [5 x %struct.ImVec2], [5 x double], [5 x i8], [5 x i8], [5 x i16], [5 x i16], [5 x i8], [5 x i8], [5 x i8], i8, [5 x float], [5 x float], [5 x float], float, i8, i8, i8, i8, i16, %struct.ImVector.0 }
%struct.ImGuiKeyData = type { i8, float, float, float }
%struct.ImVector.0 = type { i32, i32, ptr }
%struct.ImDrawData = type { i8, i32, i32, i32, %struct.ImVector.1, %struct.ImVec2, %struct.ImVec2, %struct.ImVec2, ptr }
%struct.ImVector.1 = type { i32, i32, ptr }

@_ZL16g_MainWindowData = external hidden global %struct.ImGui_ImplVulkanH_Window, align 8
@.str = external hidden unnamed_addr constant [31 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [28 x i8], align 1
@_ZL10g_Instance = external hidden global ptr, align 8
@_ZL11g_Allocator = external hidden global ptr, align 8
@.str.2 = external hidden unnamed_addr constant [11 x i8], align 1
@_ZL16g_PhysicalDevice = external hidden global ptr, align 8
@_ZL8g_Device = external hidden global ptr, align 8
@_ZL13g_QueueFamily = external hidden global i32, align 4
@_ZL7g_Queue = external hidden global ptr, align 8
@_ZL15g_PipelineCache = external hidden global ptr, align 8
@_ZL16g_DescriptorPool = external hidden global ptr, align 8
@_ZL15g_MinImageCount = external hidden global i32, align 4
@_ZL18g_SwapChainRebuild = external hidden global i8, align 1
@_ZZ4mainE1f = external hidden global float, align 4
@_ZZ4mainE7counter = external hidden global i32, align 4
@.str.3 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [9 x i8], align 1

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main(i32 noundef %0, ptr noundef %1) #0 personality ptr @__gxx_personality_v0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca %struct.ImVector, align 8
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca %struct.ImVector, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca %struct.ImGui_ImplVulkan_InitInfo, align 8
  %22 = alloca i8, align 1
  %23 = alloca i8, align 1
  %24 = alloca %struct.ImVec4, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca %struct.ImVec2, align 4
  %28 = alloca %struct.ImVec2, align 4
  %29 = alloca ptr, align 8
  %30 = alloca i8, align 1
  store i32 0, ptr %3, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  %31 = call ptr @glfwSetErrorCallback(ptr noundef @_ZL19glfw_error_callbackiPKc)
  %32 = call i32 @glfwInit()
  %33 = icmp ne i32 %32, 0
  br i1 %33, label %35, label %34

34:                                               ; preds = %2
  store i32 1, ptr %3, align 4
  br label %344

35:                                               ; preds = %2
  call void @glfwWindowHint(i32 noundef 139265, i32 noundef 0)
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #8
  %36 = call ptr @glfwCreateWindow(i32 noundef 1280, i32 noundef 720, ptr noundef @.str, ptr noundef null, ptr noundef null)
  store ptr %36, ptr %6, align 8, !tbaa !9
  %37 = call i32 @glfwVulkanSupported()
  %38 = icmp ne i32 %37, 0
  br i1 %38, label %41, label %39

39:                                               ; preds = %35
  %40 = call i32 (ptr, ...) @printf(ptr noundef @.str.1)
  store i32 1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %343

41:                                               ; preds = %35
  call void @llvm.lifetime.start.p0(i64 16, ptr %8) #8
  call void @_ZN8ImVectorIPKcEC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %8)
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #8
  store i32 0, ptr %9, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #8
  %42 = invoke ptr @glfwGetRequiredInstanceExtensions(ptr noundef %9)
          to label %43 unwind label %49

43:                                               ; preds = %41
  store ptr %42, ptr %10, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #8
  store i32 0, ptr %13, align 4, !tbaa !5
  br label %44

44:                                               ; preds = %59, %43
  %45 = load i32, ptr %13, align 4, !tbaa !5
  %46 = load i32, ptr %9, align 4, !tbaa !5
  %47 = icmp ult i32 %45, %46
  br i1 %47, label %53, label %48

48:                                               ; preds = %44
  store i32 2, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #8
  br label %66

49:                                               ; preds = %66, %41
  %50 = landingpad { ptr, i32 }
          cleanup
  %51 = extractvalue { ptr, i32 } %50, 0
  store ptr %51, ptr %11, align 8
  %52 = extractvalue { ptr, i32 } %50, 1
  store i32 %52, ptr %12, align 4
  br label %342

53:                                               ; preds = %44
  %54 = load ptr, ptr %10, align 8, !tbaa !9
  %55 = load i32, ptr %13, align 4, !tbaa !5
  %56 = zext i32 %55 to i64
  %57 = getelementptr inbounds ptr, ptr %54, i64 %56
  invoke void @_ZN8ImVectorIPKcE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(16) %8, ptr noundef nonnull align 8 dereferenceable(8) %57)
          to label %58 unwind label %62

58:                                               ; preds = %53
  br label %59

59:                                               ; preds = %58
  %60 = load i32, ptr %13, align 4, !tbaa !5
  %61 = add i32 %60, 1
  store i32 %61, ptr %13, align 4, !tbaa !5
  br label %44, !llvm.loop !11

62:                                               ; preds = %53
  %63 = landingpad { ptr, i32 }
          cleanup
  %64 = extractvalue { ptr, i32 } %63, 0
  store ptr %64, ptr %11, align 8
  %65 = extractvalue { ptr, i32 } %63, 1
  store i32 %65, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #8
  br label %342

66:                                               ; preds = %48
  invoke void @_ZN8ImVectorIPKcEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %14, ptr noundef nonnull align 8 dereferenceable(16) %8)
          to label %67 unwind label %49

67:                                               ; preds = %66
  invoke void @_ZL11SetupVulkan8ImVectorIPKcE(ptr noundef %14)
          to label %68 unwind label %163

68:                                               ; preds = %67
  call void @_ZN8ImVectorIPKcED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %14) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #8
  %69 = load ptr, ptr @_ZL10g_Instance, align 8, !tbaa !9
  %70 = load ptr, ptr %6, align 8, !tbaa !9
  %71 = load ptr, ptr @_ZL11g_Allocator, align 8, !tbaa !9
  %72 = invoke i32 @glfwCreateWindowSurface(ptr noundef %69, ptr noundef %70, ptr noundef %71, ptr noundef %15)
          to label %73 unwind label %167

73:                                               ; preds = %68
  store i32 %72, ptr %16, align 4, !tbaa !13
  %74 = load i32, ptr %16, align 4, !tbaa !13
  invoke void @_ZL15check_vk_result8VkResult(i32 noundef %74)
          to label %75 unwind label %167

75:                                               ; preds = %73
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #8
  %76 = load ptr, ptr %6, align 8, !tbaa !9
  invoke void @glfwGetFramebufferSize(ptr noundef %76, ptr noundef %17, ptr noundef %18)
          to label %77 unwind label %171

77:                                               ; preds = %75
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  store ptr @_ZL16g_MainWindowData, ptr %19, align 8, !tbaa !9
  %78 = load ptr, ptr %19, align 8, !tbaa !9
  %79 = load ptr, ptr %15, align 8, !tbaa !9
  %80 = load i32, ptr %17, align 4, !tbaa !5
  %81 = load i32, ptr %18, align 4, !tbaa !5
  invoke void @_ZL17SetupVulkanWindowP24ImGui_ImplVulkanH_WindowP14VkSurfaceKHR_Tii(ptr noundef %78, ptr noundef %79, i32 noundef %80, i32 noundef %81)
          to label %82 unwind label %175

82:                                               ; preds = %77
  %83 = invoke noundef zeroext i1 @_ZN5ImGui30DebugCheckVersionAndDataLayoutEPKcmmmmmm(ptr noundef @.str.2, i64 noundef 14560, i64 noundef 1096, i64 noundef 8, i64 noundef 16, i64 noundef 20, i64 noundef 2)
          to label %84 unwind label %175

84:                                               ; preds = %82
  %85 = invoke noundef ptr @_ZN5ImGui13CreateContextEP11ImFontAtlas(ptr noundef null)
          to label %86 unwind label %175

86:                                               ; preds = %84
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  %87 = invoke noundef nonnull align 8 dereferenceable(14560) ptr @_ZN5ImGui5GetIOEv()
          to label %88 unwind label %179

88:                                               ; preds = %86
  store ptr %87, ptr %20, align 8, !tbaa !9
  %89 = load ptr, ptr %20, align 8, !tbaa !9
  %90 = load ptr, ptr %20, align 8, !tbaa !9
  %91 = getelementptr inbounds %struct.ImGuiIO, ptr %90, i32 0, i32 0
  %92 = load i32, ptr %91, align 8, !tbaa !15
  %93 = or i32 %92, 1
  store i32 %93, ptr %91, align 8, !tbaa !15
  %94 = load ptr, ptr %20, align 8, !tbaa !9
  %95 = getelementptr inbounds %struct.ImGuiIO, ptr %94, i32 0, i32 0
  %96 = load i32, ptr %95, align 8, !tbaa !15
  %97 = or i32 %96, 2
  store i32 %97, ptr %95, align 8, !tbaa !15
  invoke void @_ZN5ImGui15StyleColorsDarkEP10ImGuiStyle(ptr noundef null)
          to label %98 unwind label %179

98:                                               ; preds = %88
  %99 = load ptr, ptr %6, align 8, !tbaa !9
  %100 = invoke noundef zeroext i1 @_Z28ImGui_ImplGlfw_InitForVulkanP10GLFWwindowb(ptr noundef %99, i1 noundef zeroext true)
          to label %101 unwind label %179

101:                                              ; preds = %98
  call void @llvm.lifetime.start.p0(i64 104, ptr %21) #8
  call void @llvm.memset.p0.i64(ptr align 8 %21, i8 0, i64 104, i1 false)
  %102 = load ptr, ptr @_ZL10g_Instance, align 8, !tbaa !9
  %103 = getelementptr inbounds %struct.ImGui_ImplVulkan_InitInfo, ptr %21, i32 0, i32 0
  store ptr %102, ptr %103, align 8, !tbaa !23
  %104 = load ptr, ptr @_ZL16g_PhysicalDevice, align 8, !tbaa !9
  %105 = getelementptr inbounds %struct.ImGui_ImplVulkan_InitInfo, ptr %21, i32 0, i32 1
  store ptr %104, ptr %105, align 8, !tbaa !28
  %106 = load ptr, ptr @_ZL8g_Device, align 8, !tbaa !9
  %107 = getelementptr inbounds %struct.ImGui_ImplVulkan_InitInfo, ptr %21, i32 0, i32 2
  store ptr %106, ptr %107, align 8, !tbaa !29
  %108 = load i32, ptr @_ZL13g_QueueFamily, align 4, !tbaa !5
  %109 = getelementptr inbounds %struct.ImGui_ImplVulkan_InitInfo, ptr %21, i32 0, i32 3
  store i32 %108, ptr %109, align 8, !tbaa !30
  %110 = load ptr, ptr @_ZL7g_Queue, align 8, !tbaa !9
  %111 = getelementptr inbounds %struct.ImGui_ImplVulkan_InitInfo, ptr %21, i32 0, i32 4
  store ptr %110, ptr %111, align 8, !tbaa !31
  %112 = load ptr, ptr @_ZL15g_PipelineCache, align 8, !tbaa !9
  %113 = getelementptr inbounds %struct.ImGui_ImplVulkan_InitInfo, ptr %21, i32 0, i32 5
  store ptr %112, ptr %113, align 8, !tbaa !32
  %114 = load ptr, ptr @_ZL16g_DescriptorPool, align 8, !tbaa !9
  %115 = getelementptr inbounds %struct.ImGui_ImplVulkan_InitInfo, ptr %21, i32 0, i32 6
  store ptr %114, ptr %115, align 8, !tbaa !33
  %116 = getelementptr inbounds %struct.ImGui_ImplVulkan_InitInfo, ptr %21, i32 0, i32 7
  store i32 0, ptr %116, align 8, !tbaa !34
  %117 = load i32, ptr @_ZL15g_MinImageCount, align 4, !tbaa !5
  %118 = getelementptr inbounds %struct.ImGui_ImplVulkan_InitInfo, ptr %21, i32 0, i32 8
  store i32 %117, ptr %118, align 4, !tbaa !35
  %119 = load ptr, ptr %19, align 8, !tbaa !9
  %120 = getelementptr inbounds %struct.ImGui_ImplVulkanH_Window, ptr %119, i32 0, i32 12
  %121 = load i32, ptr %120, align 8, !tbaa !36
  %122 = getelementptr inbounds %struct.ImGui_ImplVulkan_InitInfo, ptr %21, i32 0, i32 9
  store i32 %121, ptr %122, align 8, !tbaa !41
  %123 = getelementptr inbounds %struct.ImGui_ImplVulkan_InitInfo, ptr %21, i32 0, i32 10
  store i32 1, ptr %123, align 4, !tbaa !42
  %124 = load ptr, ptr @_ZL11g_Allocator, align 8, !tbaa !9
  %125 = getelementptr inbounds %struct.ImGui_ImplVulkan_InitInfo, ptr %21, i32 0, i32 13
  store ptr %124, ptr %125, align 8, !tbaa !43
  %126 = getelementptr inbounds %struct.ImGui_ImplVulkan_InitInfo, ptr %21, i32 0, i32 14
  store ptr @_ZL15check_vk_result8VkResult, ptr %126, align 8, !tbaa !44
  %127 = load ptr, ptr %19, align 8, !tbaa !9
  %128 = getelementptr inbounds %struct.ImGui_ImplVulkanH_Window, ptr %127, i32 0, i32 6
  %129 = load ptr, ptr %128, align 8, !tbaa !45
  %130 = invoke noundef zeroext i1 @_Z21ImGui_ImplVulkan_InitP25ImGui_ImplVulkan_InitInfoP14VkRenderPass_T(ptr noundef %21, ptr noundef %129)
          to label %131 unwind label %183

131:                                              ; preds = %101
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #8
  store i8 1, ptr %22, align 1, !tbaa !46
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #8
  store i8 0, ptr %23, align 1, !tbaa !46
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #8
  invoke void @_ZN6ImVec4C2Effff(ptr noundef nonnull align 4 dereferenceable(16) %24, float noundef 0x3FDCCCCCC0000000, float noundef 0x3FE19999A0000000, float noundef 0x3FE3333340000000, float noundef 1.000000e+00)
          to label %132 unwind label %187

132:                                              ; preds = %131
  br label %133

133:                                              ; preds = %320, %132
  %134 = load ptr, ptr %6, align 8, !tbaa !9
  %135 = invoke i32 @glfwWindowShouldClose(ptr noundef %134)
          to label %136 unwind label %187

136:                                              ; preds = %133
  %137 = icmp ne i32 %135, 0
  %138 = xor i1 %137, true
  br i1 %138, label %139, label %322

139:                                              ; preds = %136
  invoke void @glfwPollEvents()
          to label %140 unwind label %187

140:                                              ; preds = %139
  %141 = load i8, ptr @_ZL18g_SwapChainRebuild, align 1, !tbaa !46, !range !47, !noundef !48
  %142 = trunc i8 %141 to i1
  br i1 %142, label %143, label %196

143:                                              ; preds = %140
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #8
  %144 = load ptr, ptr %6, align 8, !tbaa !9
  invoke void @glfwGetFramebufferSize(ptr noundef %144, ptr noundef %25, ptr noundef %26)
          to label %145 unwind label %191

145:                                              ; preds = %143
  %146 = load i32, ptr %25, align 4, !tbaa !5
  %147 = icmp sgt i32 %146, 0
  br i1 %147, label %148, label %195

148:                                              ; preds = %145
  %149 = load i32, ptr %26, align 4, !tbaa !5
  %150 = icmp sgt i32 %149, 0
  br i1 %150, label %151, label %195

151:                                              ; preds = %148
  %152 = load i32, ptr @_ZL15g_MinImageCount, align 4, !tbaa !5
  invoke void @_Z33ImGui_ImplVulkan_SetMinImageCountj(i32 noundef %152)
          to label %153 unwind label %191

153:                                              ; preds = %151
  %154 = load ptr, ptr @_ZL10g_Instance, align 8, !tbaa !9
  %155 = load ptr, ptr @_ZL16g_PhysicalDevice, align 8, !tbaa !9
  %156 = load ptr, ptr @_ZL8g_Device, align 8, !tbaa !9
  %157 = load i32, ptr @_ZL13g_QueueFamily, align 4, !tbaa !5
  %158 = load ptr, ptr @_ZL11g_Allocator, align 8, !tbaa !9
  %159 = load i32, ptr %25, align 4, !tbaa !5
  %160 = load i32, ptr %26, align 4, !tbaa !5
  %161 = load i32, ptr @_ZL15g_MinImageCount, align 4, !tbaa !5
  invoke void @_Z38ImGui_ImplVulkanH_CreateOrResizeWindowP12VkInstance_TP18VkPhysicalDevice_TP10VkDevice_TP24ImGui_ImplVulkanH_WindowjPK21VkAllocationCallbacksiij(ptr noundef %154, ptr noundef %155, ptr noundef %156, ptr noundef @_ZL16g_MainWindowData, i32 noundef %157, ptr noundef %158, i32 noundef %159, i32 noundef %160, i32 noundef %161)
          to label %162 unwind label %191

162:                                              ; preds = %153
  store i32 0, ptr getelementptr inbounds (%struct.ImGui_ImplVulkanH_Window, ptr @_ZL16g_MainWindowData, i32 0, i32 11), align 4, !tbaa !49
  store i8 0, ptr @_ZL18g_SwapChainRebuild, align 1, !tbaa !46
  br label %195

163:                                              ; preds = %67
  %164 = landingpad { ptr, i32 }
          cleanup
  %165 = extractvalue { ptr, i32 } %164, 0
  store ptr %165, ptr %11, align 8
  %166 = extractvalue { ptr, i32 } %164, 1
  store i32 %166, ptr %12, align 4
  call void @_ZN8ImVectorIPKcED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %14) #8
  br label %342

167:                                              ; preds = %73, %68
  %168 = landingpad { ptr, i32 }
          cleanup
  %169 = extractvalue { ptr, i32 } %168, 0
  store ptr %169, ptr %11, align 8
  %170 = extractvalue { ptr, i32 } %168, 1
  store i32 %170, ptr %12, align 4
  br label %341

171:                                              ; preds = %75
  %172 = landingpad { ptr, i32 }
          cleanup
  %173 = extractvalue { ptr, i32 } %172, 0
  store ptr %173, ptr %11, align 8
  %174 = extractvalue { ptr, i32 } %172, 1
  store i32 %174, ptr %12, align 4
  br label %340

175:                                              ; preds = %84, %82, %77
  %176 = landingpad { ptr, i32 }
          cleanup
  %177 = extractvalue { ptr, i32 } %176, 0
  store ptr %177, ptr %11, align 8
  %178 = extractvalue { ptr, i32 } %176, 1
  store i32 %178, ptr %12, align 4
  br label %339

179:                                              ; preds = %98, %88, %86
  %180 = landingpad { ptr, i32 }
          cleanup
  %181 = extractvalue { ptr, i32 } %180, 0
  store ptr %181, ptr %11, align 8
  %182 = extractvalue { ptr, i32 } %180, 1
  store i32 %182, ptr %12, align 4
  br label %338

183:                                              ; preds = %101
  %184 = landingpad { ptr, i32 }
          cleanup
  %185 = extractvalue { ptr, i32 } %184, 0
  store ptr %185, ptr %11, align 8
  %186 = extractvalue { ptr, i32 } %184, 1
  store i32 %186, ptr %12, align 4
  br label %337

187:                                              ; preds = %334, %332, %331, %330, %329, %328, %327, %325, %322, %257, %255, %245, %243, %239, %229, %227, %226, %213, %211, %209, %207, %206, %204, %202, %198, %197, %196, %139, %133, %131
  %188 = landingpad { ptr, i32 }
          cleanup
  %189 = extractvalue { ptr, i32 } %188, 0
  store ptr %189, ptr %11, align 8
  %190 = extractvalue { ptr, i32 } %188, 1
  store i32 %190, ptr %12, align 4
  br label %336

191:                                              ; preds = %153, %151, %143
  %192 = landingpad { ptr, i32 }
          cleanup
  %193 = extractvalue { ptr, i32 } %192, 0
  store ptr %193, ptr %11, align 8
  %194 = extractvalue { ptr, i32 } %192, 1
  store i32 %194, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #8
  br label %336

195:                                              ; preds = %162, %148, %145
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #8
  br label %196

196:                                              ; preds = %195, %140
  invoke void @_Z25ImGui_ImplVulkan_NewFramev()
          to label %197 unwind label %187

197:                                              ; preds = %196
  invoke void @_Z23ImGui_ImplGlfw_NewFramev()
          to label %198 unwind label %187

198:                                              ; preds = %197
  invoke void @_ZN5ImGui8NewFrameEv()
          to label %199 unwind label %187

199:                                              ; preds = %198
  %200 = load i8, ptr %22, align 1, !tbaa !46, !range !47, !noundef !48
  %201 = trunc i8 %200 to i1
  br i1 %201, label %202, label %204

202:                                              ; preds = %199
  invoke void @_ZN5ImGui14ShowDemoWindowEPb(ptr noundef %22)
          to label %203 unwind label %187

203:                                              ; preds = %202
  br label %204

204:                                              ; preds = %203, %199
  %205 = invoke noundef zeroext i1 @_ZN5ImGui5BeginEPKcPbi(ptr noundef @.str.3, ptr noundef null, i32 noundef 0)
          to label %206 unwind label %187

206:                                              ; preds = %204
  invoke void (ptr, ...) @_ZN5ImGui4TextEPKcz(ptr noundef @.str.4)
          to label %207 unwind label %187

207:                                              ; preds = %206
  %208 = invoke noundef zeroext i1 @_ZN5ImGui8CheckboxEPKcPb(ptr noundef @.str.5, ptr noundef %22)
          to label %209 unwind label %187

209:                                              ; preds = %207
  %210 = invoke noundef zeroext i1 @_ZN5ImGui8CheckboxEPKcPb(ptr noundef @.str.6, ptr noundef %23)
          to label %211 unwind label %187

211:                                              ; preds = %209
  %212 = invoke noundef zeroext i1 @_ZN5ImGui11SliderFloatEPKcPfffS1_i(ptr noundef @.str.7, ptr noundef @_ZZ4mainE1f, float noundef 0.000000e+00, float noundef 1.000000e+00, ptr noundef @.str.8, i32 noundef 0)
          to label %213 unwind label %187

213:                                              ; preds = %211
  %214 = invoke noundef zeroext i1 @_ZN5ImGui10ColorEdit3EPKcPfi(ptr noundef @.str.9, ptr noundef %24, i32 noundef 0)
          to label %215 unwind label %187

215:                                              ; preds = %213
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #8
  invoke void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %27, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %216 unwind label %222

216:                                              ; preds = %215
  %217 = invoke noundef zeroext i1 @_ZN5ImGui6ButtonEPKcRK6ImVec2(ptr noundef @.str.10, ptr noundef nonnull align 4 dereferenceable(8) %27)
          to label %218 unwind label %222

218:                                              ; preds = %216
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  br i1 %217, label %219, label %226

219:                                              ; preds = %218
  %220 = load i32, ptr @_ZZ4mainE7counter, align 4, !tbaa !5
  %221 = add nsw i32 %220, 1
  store i32 %221, ptr @_ZZ4mainE7counter, align 4, !tbaa !5
  br label %226

222:                                              ; preds = %216, %215
  %223 = landingpad { ptr, i32 }
          cleanup
  %224 = extractvalue { ptr, i32 } %223, 0
  store ptr %224, ptr %11, align 8
  %225 = extractvalue { ptr, i32 } %223, 1
  store i32 %225, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  br label %336

226:                                              ; preds = %219, %218
  invoke void @_ZN5ImGui8SameLineEff(float noundef 0.000000e+00, float noundef -1.000000e+00)
          to label %227 unwind label %187

227:                                              ; preds = %226
  %228 = load i32, ptr @_ZZ4mainE7counter, align 4, !tbaa !5
  invoke void (ptr, ...) @_ZN5ImGui4TextEPKcz(ptr noundef @.str.11, i32 noundef %228)
          to label %229 unwind label %187

229:                                              ; preds = %227
  %230 = load ptr, ptr %20, align 8, !tbaa !9
  %231 = getelementptr inbounds %struct.ImGuiIO, ptr %230, i32 0, i32 49
  %232 = load float, ptr %231, align 4, !tbaa !50
  %233 = fdiv float 1.000000e+03, %232
  %234 = fpext float %233 to double
  %235 = load ptr, ptr %20, align 8, !tbaa !9
  %236 = getelementptr inbounds %struct.ImGuiIO, ptr %235, i32 0, i32 49
  %237 = load float, ptr %236, align 4, !tbaa !50
  %238 = fpext float %237 to double
  invoke void (ptr, ...) @_ZN5ImGui4TextEPKcz(ptr noundef @.str.12, double noundef %234, double noundef %238)
          to label %239 unwind label %187

239:                                              ; preds = %229
  invoke void @_ZN5ImGui3EndEv()
          to label %240 unwind label %187

240:                                              ; preds = %239
  %241 = load i8, ptr %23, align 1, !tbaa !46, !range !47, !noundef !48
  %242 = trunc i8 %241 to i1
  br i1 %242, label %243, label %257

243:                                              ; preds = %240
  %244 = invoke noundef zeroext i1 @_ZN5ImGui5BeginEPKcPbi(ptr noundef @.str.6, ptr noundef %23, i32 noundef 0)
          to label %245 unwind label %187

245:                                              ; preds = %243
  invoke void (ptr, ...) @_ZN5ImGui4TextEPKcz(ptr noundef @.str.13)
          to label %246 unwind label %187

246:                                              ; preds = %245
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  invoke void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %28, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %247 unwind label %251

247:                                              ; preds = %246
  %248 = invoke noundef zeroext i1 @_ZN5ImGui6ButtonEPKcRK6ImVec2(ptr noundef @.str.14, ptr noundef nonnull align 4 dereferenceable(8) %28)
          to label %249 unwind label %251

249:                                              ; preds = %247
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  br i1 %248, label %250, label %255

250:                                              ; preds = %249
  store i8 0, ptr %23, align 1, !tbaa !46
  br label %255

251:                                              ; preds = %247, %246
  %252 = landingpad { ptr, i32 }
          cleanup
  %253 = extractvalue { ptr, i32 } %252, 0
  store ptr %253, ptr %11, align 8
  %254 = extractvalue { ptr, i32 } %252, 1
  store i32 %254, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  br label %336

255:                                              ; preds = %250, %249
  invoke void @_ZN5ImGui3EndEv()
          to label %256 unwind label %187

256:                                              ; preds = %255
  br label %257

257:                                              ; preds = %256, %240
  invoke void @_ZN5ImGui6RenderEv()
          to label %258 unwind label %187

258:                                              ; preds = %257
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #8
  %259 = invoke noundef ptr @_ZN5ImGui11GetDrawDataEv()
          to label %260 unwind label %312

260:                                              ; preds = %258
  store ptr %259, ptr %29, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %30) #8
  %261 = load ptr, ptr %29, align 8, !tbaa !9
  %262 = getelementptr inbounds %struct.ImDrawData, ptr %261, i32 0, i32 6
  %263 = getelementptr inbounds %struct.ImVec2, ptr %262, i32 0, i32 0
  %264 = load float, ptr %263, align 8, !tbaa !51
  %265 = fcmp ole float %264, 0.000000e+00
  br i1 %265, label %272, label %266

266:                                              ; preds = %260
  %267 = load ptr, ptr %29, align 8, !tbaa !9
  %268 = getelementptr inbounds %struct.ImDrawData, ptr %267, i32 0, i32 6
  %269 = getelementptr inbounds %struct.ImVec2, ptr %268, i32 0, i32 1
  %270 = load float, ptr %269, align 4, !tbaa !54
  %271 = fcmp ole float %270, 0.000000e+00
  br label %272

272:                                              ; preds = %266, %260
  %273 = phi i1 [ true, %260 ], [ %271, %266 ]
  %274 = zext i1 %273 to i8
  store i8 %274, ptr %30, align 1, !tbaa !46
  %275 = load i8, ptr %30, align 1, !tbaa !46, !range !47, !noundef !48
  %276 = trunc i8 %275 to i1
  br i1 %276, label %320, label %277

277:                                              ; preds = %272
  %278 = getelementptr inbounds %struct.ImVec4, ptr %24, i32 0, i32 0
  %279 = load float, ptr %278, align 4, !tbaa !55
  %280 = getelementptr inbounds %struct.ImVec4, ptr %24, i32 0, i32 3
  %281 = load float, ptr %280, align 4, !tbaa !57
  %282 = fmul float %279, %281
  %283 = load ptr, ptr %19, align 8, !tbaa !9
  %284 = getelementptr inbounds %struct.ImGui_ImplVulkanH_Window, ptr %283, i32 0, i32 10
  %285 = getelementptr inbounds [4 x float], ptr %284, i64 0, i64 0
  store float %282, ptr %285, align 4, !tbaa !58
  %286 = getelementptr inbounds %struct.ImVec4, ptr %24, i32 0, i32 1
  %287 = load float, ptr %286, align 4, !tbaa !59
  %288 = getelementptr inbounds %struct.ImVec4, ptr %24, i32 0, i32 3
  %289 = load float, ptr %288, align 4, !tbaa !57
  %290 = fmul float %287, %289
  %291 = load ptr, ptr %19, align 8, !tbaa !9
  %292 = getelementptr inbounds %struct.ImGui_ImplVulkanH_Window, ptr %291, i32 0, i32 10
  %293 = getelementptr inbounds [4 x float], ptr %292, i64 0, i64 1
  store float %290, ptr %293, align 4, !tbaa !58
  %294 = getelementptr inbounds %struct.ImVec4, ptr %24, i32 0, i32 2
  %295 = load float, ptr %294, align 4, !tbaa !60
  %296 = getelementptr inbounds %struct.ImVec4, ptr %24, i32 0, i32 3
  %297 = load float, ptr %296, align 4, !tbaa !57
  %298 = fmul float %295, %297
  %299 = load ptr, ptr %19, align 8, !tbaa !9
  %300 = getelementptr inbounds %struct.ImGui_ImplVulkanH_Window, ptr %299, i32 0, i32 10
  %301 = getelementptr inbounds [4 x float], ptr %300, i64 0, i64 2
  store float %298, ptr %301, align 4, !tbaa !58
  %302 = getelementptr inbounds %struct.ImVec4, ptr %24, i32 0, i32 3
  %303 = load float, ptr %302, align 4, !tbaa !57
  %304 = load ptr, ptr %19, align 8, !tbaa !9
  %305 = getelementptr inbounds %struct.ImGui_ImplVulkanH_Window, ptr %304, i32 0, i32 10
  %306 = getelementptr inbounds [4 x float], ptr %305, i64 0, i64 3
  store float %303, ptr %306, align 4, !tbaa !58
  %307 = load ptr, ptr %19, align 8, !tbaa !9
  %308 = load ptr, ptr %29, align 8, !tbaa !9
  invoke void @_ZL11FrameRenderP24ImGui_ImplVulkanH_WindowP10ImDrawData(ptr noundef %307, ptr noundef %308)
          to label %309 unwind label %316

309:                                              ; preds = %277
  %310 = load ptr, ptr %19, align 8, !tbaa !9
  invoke void @_ZL12FramePresentP24ImGui_ImplVulkanH_Window(ptr noundef %310)
          to label %311 unwind label %316

311:                                              ; preds = %309
  br label %320

312:                                              ; preds = %258
  %313 = landingpad { ptr, i32 }
          cleanup
  %314 = extractvalue { ptr, i32 } %313, 0
  store ptr %314, ptr %11, align 8
  %315 = extractvalue { ptr, i32 } %313, 1
  store i32 %315, ptr %12, align 4
  br label %321

316:                                              ; preds = %309, %277
  %317 = landingpad { ptr, i32 }
          cleanup
  %318 = extractvalue { ptr, i32 } %317, 0
  store ptr %318, ptr %11, align 8
  %319 = extractvalue { ptr, i32 } %317, 1
  store i32 %319, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #8
  br label %321

320:                                              ; preds = %311, %272
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  br label %133, !llvm.loop !61

321:                                              ; preds = %316, %312
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  br label %336

322:                                              ; preds = %136
  %323 = load ptr, ptr @_ZL8g_Device, align 8, !tbaa !9
  %324 = invoke i32 @vkDeviceWaitIdle(ptr noundef %323)
          to label %325 unwind label %187

325:                                              ; preds = %322
  store i32 %324, ptr %16, align 4, !tbaa !13
  %326 = load i32, ptr %16, align 4, !tbaa !13
  invoke void @_ZL15check_vk_result8VkResult(i32 noundef %326)
          to label %327 unwind label %187

327:                                              ; preds = %325
  invoke void @_Z25ImGui_ImplVulkan_Shutdownv()
          to label %328 unwind label %187

328:                                              ; preds = %327
  invoke void @_Z23ImGui_ImplGlfw_Shutdownv()
          to label %329 unwind label %187

329:                                              ; preds = %328
  invoke void @_ZN5ImGui14DestroyContextEP12ImGuiContext(ptr noundef null)
          to label %330 unwind label %187

330:                                              ; preds = %329
  invoke void @_ZL19CleanupVulkanWindowv()
          to label %331 unwind label %187

331:                                              ; preds = %330
  invoke void @_ZL13CleanupVulkanv()
          to label %332 unwind label %187

332:                                              ; preds = %331
  %333 = load ptr, ptr %6, align 8, !tbaa !9
  invoke void @glfwDestroyWindow(ptr noundef %333)
          to label %334 unwind label %187

334:                                              ; preds = %332
  invoke void @glfwTerminate()
          to label %335 unwind label %187

335:                                              ; preds = %334
  store i32 0, ptr %3, align 4
  store i32 1, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 104, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #8
  call void @_ZN8ImVectorIPKcED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %8) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %8) #8
  br label %343

336:                                              ; preds = %321, %251, %222, %191, %187
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #8
  br label %337

337:                                              ; preds = %336, %183
  call void @llvm.lifetime.end.p0(i64 104, ptr %21) #8
  br label %338

338:                                              ; preds = %337, %179
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  br label %339

339:                                              ; preds = %338, %175
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  br label %340

340:                                              ; preds = %339, %171
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  br label %341

341:                                              ; preds = %340, %167
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  br label %342

342:                                              ; preds = %341, %163, %62, %49
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #8
  call void @_ZN8ImVectorIPKcED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %8) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #8
  br label %346

343:                                              ; preds = %335, %39
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #8
  br label %344

344:                                              ; preds = %343, %34
  %345 = load i32, ptr %3, align 4
  ret i32 %345

346:                                              ; preds = %342
  %347 = load ptr, ptr %11, align 8
  %348 = load i32, ptr %12, align 4
  %349 = insertvalue { ptr, i32 } poison, ptr %347, 0
  %350 = insertvalue { ptr, i32 } %349, i32 %348, 1
  resume { ptr, i32 } %350
}

declare ptr @glfwSetErrorCallback(ptr noundef) #1

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZL19glfw_error_callbackiPKc(i32 noundef, ptr noundef) #2

declare i32 @glfwInit() #1

declare void @glfwWindowHint(i32 noundef, i32 noundef) #1

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

declare ptr @glfwCreateWindow(i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef) #1

declare i32 @glfwVulkanSupported() #1

declare i32 @printf(ptr noundef, ...) #1

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

declare ptr @glfwGetRequiredInstanceExtensions(ptr noundef) #1

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL11SetupVulkan8ImVectorIPKcE(ptr noundef) #6

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

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

declare i32 @glfwCreateWindowSurface(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #1

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZL15check_vk_result8VkResult(i32 noundef) #2

declare void @glfwGetFramebufferSize(ptr noundef, ptr noundef, ptr noundef) #1

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL17SetupVulkanWindowP24ImGui_ImplVulkanH_WindowP14VkSurfaceKHR_Tii(ptr noundef, ptr noundef, i32 noundef, i32 noundef) #6

declare noundef zeroext i1 @_ZN5ImGui30DebugCheckVersionAndDataLayoutEPKcmmmmmm(ptr noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef) #1

declare noundef ptr @_ZN5ImGui13CreateContextEP11ImFontAtlas(ptr noundef) #1

declare noundef nonnull align 8 dereferenceable(14560) ptr @_ZN5ImGui5GetIOEv() #1

declare void @_ZN5ImGui15StyleColorsDarkEP10ImGuiStyle(ptr noundef) #1

declare noundef zeroext i1 @_Z28ImGui_ImplGlfw_InitForVulkanP10GLFWwindowb(ptr noundef, i1 noundef zeroext) #1

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

declare noundef zeroext i1 @_Z21ImGui_ImplVulkan_InitP25ImGui_ImplVulkan_InitInfoP14VkRenderPass_T(ptr noundef, ptr noundef) #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN6ImVec4C2Effff(ptr noundef nonnull align 4 dereferenceable(16), float noundef, float noundef, float noundef, float noundef) unnamed_addr #2 align 2

declare i32 @glfwWindowShouldClose(ptr noundef) #1

declare void @glfwPollEvents() #1

declare void @_Z33ImGui_ImplVulkan_SetMinImageCountj(i32 noundef) #1

declare void @_Z38ImGui_ImplVulkanH_CreateOrResizeWindowP12VkInstance_TP18VkPhysicalDevice_TP10VkDevice_TP24ImGui_ImplVulkanH_WindowjPK21VkAllocationCallbacksiij(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef) #1

declare void @_Z25ImGui_ImplVulkan_NewFramev() #1

declare void @_Z23ImGui_ImplGlfw_NewFramev() #1

declare void @_ZN5ImGui8NewFrameEv() #1

declare void @_ZN5ImGui14ShowDemoWindowEPb(ptr noundef) #1

declare noundef zeroext i1 @_ZN5ImGui5BeginEPKcPbi(ptr noundef, ptr noundef, i32 noundef) #1

declare void @_ZN5ImGui4TextEPKcz(ptr noundef, ...) #1

declare noundef zeroext i1 @_ZN5ImGui8CheckboxEPKcPb(ptr noundef, ptr noundef) #1

declare noundef zeroext i1 @_ZN5ImGui11SliderFloatEPKcPfffS1_i(ptr noundef, ptr noundef, float noundef, float noundef, ptr noundef, i32 noundef) #1

declare noundef zeroext i1 @_ZN5ImGui10ColorEdit3EPKcPfi(ptr noundef, ptr noundef, i32 noundef) #1

declare noundef zeroext i1 @_ZN5ImGui6ButtonEPKcRK6ImVec2(ptr noundef, ptr noundef nonnull align 4 dereferenceable(8)) #1

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

declare void @_ZN5ImGui8SameLineEff(float noundef, float noundef) #1

declare void @_ZN5ImGui3EndEv() #1

declare void @_ZN5ImGui6RenderEv() #1

declare noundef ptr @_ZN5ImGui11GetDrawDataEv() #1

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL11FrameRenderP24ImGui_ImplVulkanH_WindowP10ImDrawData(ptr noundef, ptr noundef) #6

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL12FramePresentP24ImGui_ImplVulkanH_Window(ptr noundef) #6

declare i32 @vkDeviceWaitIdle(ptr noundef) #1

declare void @_Z25ImGui_ImplVulkan_Shutdownv() #1

declare void @_Z23ImGui_ImplGlfw_Shutdownv() #1

declare void @_ZN5ImGui14DestroyContextEP12ImGuiContext(ptr noundef) #1

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL19CleanupVulkanWindowv() #6

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL13CleanupVulkanv() #6

declare void @glfwDestroyWindow(ptr noundef) #1

declare void @glfwTerminate() #1

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!14, !14, i64 0}
!14 = !{!"_ZTS8VkResult", !7, i64 0}
!15 = !{!16, !6, i64 0}
!16 = !{!"_ZTS7ImGuiIO", !6, i64 0, !6, i64 4, !17, i64 8, !18, i64 16, !18, i64 20, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !18, i64 56, !19, i64 60, !10, i64 64, !17, i64 72, !19, i64 80, !19, i64 81, !19, i64 82, !19, i64 83, !19, i64 84, !19, i64 85, !19, i64 86, !19, i64 87, !18, i64 88, !18, i64 92, !18, i64 96, !18, i64 100, !18, i64 104, !18, i64 108, !19, i64 112, !19, i64 113, !19, i64 114, !19, i64 115, !19, i64 116, !10, i64 120, !10, i64 128, !10, i64 136, !10, i64 144, !10, i64 152, !10, i64 160, !10, i64 168, !10, i64 176, !10, i64 184, !20, i64 192, !19, i64 194, !19, i64 195, !19, i64 196, !19, i64 197, !19, i64 198, !19, i64 199, !19, i64 200, !18, i64 204, !6, i64 208, !6, i64 212, !6, i64 216, !6, i64 220, !17, i64 224, !7, i64 232, !7, i64 2896, !7, i64 3564, !10, i64 3632, !17, i64 3640, !7, i64 3648, !18, i64 3656, !18, i64 3660, !21, i64 3664, !19, i64 3668, !19, i64 3669, !19, i64 3670, !19, i64 3671, !6, i64 3672, !7, i64 3676, !19, i64 14332, !17, i64 14336, !7, i64 14344, !7, i64 14384, !7, i64 14424, !7, i64 14429, !7, i64 14434, !7, i64 14444, !7, i64 14454, !7, i64 14459, !7, i64 14464, !19, i64 14469, !7, i64 14472, !7, i64 14492, !7, i64 14512, !18, i64 14532, !19, i64 14536, !19, i64 14537, !7, i64 14538, !19, i64 14539, !20, i64 14540, !22, i64 14544}
!17 = !{!"_ZTS6ImVec2", !18, i64 0, !18, i64 4}
!18 = !{!"float", !7, i64 0}
!19 = !{!"bool", !7, i64 0}
!20 = !{!"short", !7, i64 0}
!21 = !{!"_ZTS16ImGuiMouseSource", !7, i64 0}
!22 = !{!"_ZTS8ImVectorItE", !6, i64 0, !6, i64 4, !10, i64 8}
!23 = !{!24, !10, i64 0}
!24 = !{!"_ZTS25ImGui_ImplVulkan_InitInfo", !10, i64 0, !10, i64 8, !10, i64 16, !6, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !6, i64 56, !6, i64 60, !6, i64 64, !25, i64 68, !19, i64 72, !26, i64 76, !10, i64 80, !10, i64 88, !27, i64 96}
!25 = !{!"_ZTS21VkSampleCountFlagBits", !7, i64 0}
!26 = !{!"_ZTS8VkFormat", !7, i64 0}
!27 = !{!"long", !7, i64 0}
!28 = !{!24, !10, i64 8}
!29 = !{!24, !10, i64 16}
!30 = !{!24, !6, i64 24}
!31 = !{!24, !10, i64 32}
!32 = !{!24, !10, i64 40}
!33 = !{!24, !10, i64 48}
!34 = !{!24, !6, i64 56}
!35 = !{!24, !6, i64 60}
!36 = !{!37, !6, i64 80}
!37 = !{!"_ZTS24ImGui_ImplVulkanH_Window", !6, i64 0, !6, i64 4, !10, i64 8, !10, i64 16, !38, i64 24, !40, i64 32, !10, i64 40, !10, i64 48, !19, i64 56, !19, i64 57, !7, i64 60, !6, i64 76, !6, i64 80, !6, i64 84, !6, i64 88, !10, i64 96, !10, i64 104}
!38 = !{!"_ZTS18VkSurfaceFormatKHR", !26, i64 0, !39, i64 4}
!39 = !{!"_ZTS15VkColorSpaceKHR", !7, i64 0}
!40 = !{!"_ZTS16VkPresentModeKHR", !7, i64 0}
!41 = !{!24, !6, i64 64}
!42 = !{!24, !25, i64 68}
!43 = !{!24, !10, i64 80}
!44 = !{!24, !10, i64 88}
!45 = !{!37, !10, i64 40}
!46 = !{!19, !19, i64 0}
!47 = !{i8 0, i8 2}
!48 = !{}
!49 = !{!37, !6, i64 76}
!50 = !{!16, !18, i64 204}
!51 = !{!52, !18, i64 40}
!52 = !{!"_ZTS10ImDrawData", !19, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !53, i64 16, !17, i64 32, !17, i64 40, !17, i64 48, !10, i64 56}
!53 = !{!"_ZTS8ImVectorIP10ImDrawListE", !6, i64 0, !6, i64 4, !10, i64 8}
!54 = !{!52, !18, i64 44}
!55 = !{!56, !18, i64 0}
!56 = !{!"_ZTS6ImVec4", !18, i64 0, !18, i64 4, !18, i64 8, !18, i64 12}
!57 = !{!56, !18, i64 12}
!58 = !{!7, !7, i64 0}
!59 = !{!56, !18, i64 4}
!60 = !{!56, !18, i64 8}
!61 = distinct !{!61, !12}


; 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.ImGui_ImplVulkanH_Window = type { i32, i32, ptr, ptr, %struct.VkSurfaceFormatKHR, i32, ptr, ptr, i8, i8, %union.VkClearValue, i32, i32, i32, i32, ptr, ptr }
%struct.VkSurfaceFormatKHR = type { i32, i32 }
%union.VkClearValue = type { %union.VkClearColorValue }
%union.VkClearColorValue = type { [4 x float] }
%struct.ImVector = type { i32, i32, ptr }
%struct.ImGui_ImplVulkan_InitInfo = type { ptr, ptr, ptr, i32, ptr, ptr, ptr, i32, i32, i32, i32, i8, i32, ptr, ptr, i64 }
%struct.ImVec4 = type { float, float, float, float }
%struct.ImVec2 = type { float, float }

@_ZL16g_MainWindowData = external hidden global %struct.ImGui_ImplVulkanH_Window, align 8
@.str = external hidden unnamed_addr constant [31 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [28 x i8], align 1
@_ZL10g_Instance = external hidden local_unnamed_addr global ptr, align 8
@_ZL11g_Allocator = external hidden local_unnamed_addr global ptr, align 8
@.str.2 = external hidden unnamed_addr constant [11 x i8], align 1
@_ZL16g_PhysicalDevice = external hidden local_unnamed_addr global ptr, align 8
@_ZL8g_Device = external hidden local_unnamed_addr global ptr, align 8
@_ZL13g_QueueFamily = external hidden local_unnamed_addr global i32, align 4
@_ZL7g_Queue = external hidden local_unnamed_addr global ptr, align 8
@_ZL15g_PipelineCache = external hidden local_unnamed_addr global ptr, align 8
@_ZL16g_DescriptorPool = external hidden local_unnamed_addr global ptr, align 8
@_ZL15g_MinImageCount = external hidden local_unnamed_addr global i32, align 4
@_ZL18g_SwapChainRebuild = external hidden local_unnamed_addr global i8, align 1
@_ZZ4mainE1f = external hidden global float, align 4
@_ZZ4mainE7counter = external hidden local_unnamed_addr global i32, align 4
@.str.3 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [9 x i8], align 1

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef range(i32 0, 2) i32 @main(i32 noundef %0, ptr nocapture noundef readnone %1) local_unnamed_addr #0 personality ptr @__gxx_personality_v0 {
  %3 = alloca %struct.ImVector, align 8
  %4 = alloca i32, align 4
  %5 = alloca %struct.ImVector, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca %struct.ImGui_ImplVulkan_InitInfo, align 8
  %10 = alloca i8, align 1
  %11 = alloca i8, align 1
  %12 = alloca %struct.ImVec4, align 16
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca %struct.ImVec2, align 4
  %16 = alloca %struct.ImVec2, align 4
  %17 = tail call ptr @glfwSetErrorCallback(ptr noundef nonnull @_ZL19glfw_error_callbackiPKc)
  %18 = tail call i32 @glfwInit()
  %.not = icmp eq i32 %18, 0
  br i1 %.not, label %217, label %19

19:                                               ; preds = %2
  tail call void @glfwWindowHint(i32 noundef 139265, i32 noundef 0)
  %20 = tail call ptr @glfwCreateWindow(i32 noundef 1280, i32 noundef 720, ptr noundef nonnull @.str, ptr noundef null, ptr noundef null)
  %21 = tail call i32 @glfwVulkanSupported()
  %.not44 = icmp eq i32 %21, 0
  br i1 %.not44, label %22, label %24

22:                                               ; preds = %19
  %23 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1)
  br label %217

24:                                               ; preds = %19
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #9
  call void @_ZN8ImVectorIPKcEC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %3)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #9
  store i32 0, ptr %4, align 4, !tbaa !5
  %25 = invoke ptr @glfwGetRequiredInstanceExtensions(ptr noundef nonnull %4)
          to label %.preheader unwind label %27

.preheader:                                       ; preds = %24
  %26 = load i32, ptr %4, align 4, !tbaa !5
  %.not56 = icmp eq i32 %26, 0
  br i1 %.not56, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %30, %.preheader
  invoke void @_ZN8ImVectorIPKcEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef nonnull align 8 dereferenceable(16) %3)
          to label %36 unwind label %27

27:                                               ; preds = %._crit_edge, %24
  %28 = landingpad { ptr, i32 }
          cleanup
  br label %216

.lr.ph:                                           ; preds = %.preheader, %30
  %indvars.iv = phi i64 [ %indvars.iv.next, %30 ], [ 0, %.preheader ]
  %29 = getelementptr inbounds ptr, ptr %25, i64 %indvars.iv
  invoke void @_ZN8ImVectorIPKcE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull align 8 dereferenceable(8) %29)
          to label %30 unwind label %34

30:                                               ; preds = %.lr.ph
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %31 = load i32, ptr %4, align 4, !tbaa !5
  %32 = zext i32 %31 to i64
  %33 = icmp ult i64 %indvars.iv.next, %32
  br i1 %33, label %.lr.ph, label %._crit_edge, !llvm.loop !9

34:                                               ; preds = %.lr.ph
  %35 = landingpad { ptr, i32 }
          cleanup
  br label %216

36:                                               ; preds = %._crit_edge
  invoke void @_ZL11SetupVulkan8ImVectorIPKcE(ptr noundef nonnull %5)
          to label %37 unwind label %111

37:                                               ; preds = %36
  call void @_ZN8ImVectorIPKcED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #9
  %38 = load ptr, ptr @_ZL10g_Instance, align 8, !tbaa !11
  %39 = load ptr, ptr @_ZL11g_Allocator, align 8, !tbaa !11
  %40 = invoke i32 @glfwCreateWindowSurface(ptr noundef %38, ptr noundef %20, ptr noundef %39, ptr noundef nonnull %6)
          to label %41 unwind label %113

41:                                               ; preds = %37
  call void @_ZL15check_vk_result8VkResult(i32 noundef %40)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #9
  invoke void @glfwGetFramebufferSize(ptr noundef %20, ptr noundef nonnull %7, ptr noundef nonnull %8)
          to label %42 unwind label %115

42:                                               ; preds = %41
  %43 = load ptr, ptr %6, align 8, !tbaa !11
  %44 = load i32, ptr %7, align 4, !tbaa !5
  %45 = load i32, ptr %8, align 4, !tbaa !5
  invoke void @_ZL17SetupVulkanWindowP24ImGui_ImplVulkanH_WindowP14VkSurfaceKHR_Tii(ptr noundef nonnull @_ZL16g_MainWindowData, ptr noundef %43, i32 noundef %44, i32 noundef %45)
          to label %46 unwind label %117

46:                                               ; preds = %42
  %47 = invoke noundef zeroext i1 @_ZN5ImGui30DebugCheckVersionAndDataLayoutEPKcmmmmmm(ptr noundef nonnull @.str.2, i64 noundef 14560, i64 noundef 1096, i64 noundef 8, i64 noundef 16, i64 noundef 20, i64 noundef 2)
          to label %48 unwind label %117

48:                                               ; preds = %46
  %49 = invoke noundef ptr @_ZN5ImGui13CreateContextEP11ImFontAtlas(ptr noundef null)
          to label %50 unwind label %117

50:                                               ; preds = %48
  %51 = invoke noundef nonnull align 8 dereferenceable(14560) ptr @_ZN5ImGui5GetIOEv()
          to label %52 unwind label %119

52:                                               ; preds = %50
  %53 = load i32, ptr %51, align 8, !tbaa !13
  %54 = or i32 %53, 3
  store i32 %54, ptr %51, align 8, !tbaa !13
  invoke void @_ZN5ImGui15StyleColorsDarkEP10ImGuiStyle(ptr noundef null)
          to label %55 unwind label %119

55:                                               ; preds = %52
  %56 = invoke noundef zeroext i1 @_Z28ImGui_ImplGlfw_InitForVulkanP10GLFWwindowb(ptr noundef %20, i1 noundef zeroext true)
          to label %57 unwind label %119

57:                                               ; preds = %55
  call void @llvm.lifetime.start.p0(i64 104, ptr nonnull %9) #9
  %58 = getelementptr inbounds i8, ptr %9, i64 24
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(104) %58, i8 0, i64 80, i1 false)
  %59 = load ptr, ptr @_ZL10g_Instance, align 8, !tbaa !11
  store ptr %59, ptr %9, align 8, !tbaa !21
  %60 = load ptr, ptr @_ZL16g_PhysicalDevice, align 8, !tbaa !11
  %61 = getelementptr inbounds i8, ptr %9, i64 8
  store ptr %60, ptr %61, align 8, !tbaa !26
  %62 = load ptr, ptr @_ZL8g_Device, align 8, !tbaa !11
  %63 = getelementptr inbounds i8, ptr %9, i64 16
  store ptr %62, ptr %63, align 8, !tbaa !27
  %64 = load i32, ptr @_ZL13g_QueueFamily, align 4, !tbaa !5
  %65 = getelementptr inbounds i8, ptr %9, i64 24
  store i32 %64, ptr %65, align 8, !tbaa !28
  %66 = load ptr, ptr @_ZL7g_Queue, align 8, !tbaa !11
  %67 = getelementptr inbounds i8, ptr %9, i64 32
  store ptr %66, ptr %67, align 8, !tbaa !29
  %68 = load ptr, ptr @_ZL15g_PipelineCache, align 8, !tbaa !11
  %69 = getelementptr inbounds i8, ptr %9, i64 40
  store ptr %68, ptr %69, align 8, !tbaa !30
  %70 = load ptr, ptr @_ZL16g_DescriptorPool, align 8, !tbaa !11
  %71 = getelementptr inbounds i8, ptr %9, i64 48
  store ptr %70, ptr %71, align 8, !tbaa !31
  %72 = load i32, ptr @_ZL15g_MinImageCount, align 4, !tbaa !5
  %73 = getelementptr inbounds i8, ptr %9, i64 60
  store i32 %72, ptr %73, align 4, !tbaa !32
  %74 = load i32, ptr getelementptr inbounds (i8, ptr @_ZL16g_MainWindowData, i64 80), align 8, !tbaa !33
  %75 = getelementptr inbounds i8, ptr %9, i64 64
  store i32 %74, ptr %75, align 8, !tbaa !38
  %76 = getelementptr inbounds i8, ptr %9, i64 68
  store i32 1, ptr %76, align 4, !tbaa !39
  %77 = load ptr, ptr @_ZL11g_Allocator, align 8, !tbaa !11
  %78 = getelementptr inbounds i8, ptr %9, i64 80
  store ptr %77, ptr %78, align 8, !tbaa !40
  %79 = getelementptr inbounds i8, ptr %9, i64 88
  store ptr @_ZL15check_vk_result8VkResult, ptr %79, align 8, !tbaa !41
  %80 = load ptr, ptr getelementptr inbounds (i8, ptr @_ZL16g_MainWindowData, i64 40), align 8, !tbaa !42
  %81 = invoke noundef zeroext i1 @_Z21ImGui_ImplVulkan_InitP25ImGui_ImplVulkan_InitInfoP14VkRenderPass_T(ptr noundef nonnull %9, ptr noundef %80)
          to label %82 unwind label %121

82:                                               ; preds = %57
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %10) #9
  store i8 1, ptr %10, align 1, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %11) #9
  store i8 0, ptr %11, align 1, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #9
  call void @_ZN6ImVec4C2Effff(ptr noundef nonnull align 4 dereferenceable(16) %12, float noundef 0x3FDCCCCCC0000000, float noundef 0x3FE19999A0000000, float noundef 0x3FE3333340000000, float noundef 1.000000e+00)
  %83 = getelementptr inbounds i8, ptr %51, i64 204
  %84 = getelementptr inbounds i8, ptr %12, i64 12
  %85 = getelementptr inbounds i8, ptr %12, i64 4
  %86 = getelementptr inbounds i8, ptr %12, i64 8
  br label %.critedge

.critedge:                                        ; preds = %.critedge.backedge, %82
  %87 = invoke i32 @glfwWindowShouldClose(ptr noundef %20)
          to label %88 unwind label %.loopexit

88:                                               ; preds = %.critedge
  %.not45 = icmp eq i32 %87, 0
  br i1 %.not45, label %89, label %201

89:                                               ; preds = %88
  invoke void @glfwPollEvents()
          to label %90 unwind label %.loopexit

90:                                               ; preds = %89
  %91 = load i8, ptr @_ZL18g_SwapChainRebuild, align 1, !tbaa !43, !range !44, !noundef !45
  %92 = trunc nuw i8 %91 to i1
  br i1 %92, label %93, label %126

93:                                               ; preds = %90
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #9
  invoke void @glfwGetFramebufferSize(ptr noundef %20, ptr noundef nonnull %13, ptr noundef nonnull %14)
          to label %94 unwind label %123

94:                                               ; preds = %93
  %95 = load i32, ptr %13, align 4, !tbaa !5
  %96 = icmp sgt i32 %95, 0
  %97 = load i32, ptr %14, align 4
  %98 = icmp sgt i32 %97, 0
  %or.cond = select i1 %96, i1 %98, i1 false
  br i1 %or.cond, label %99, label %125

99:                                               ; preds = %94
  %100 = load i32, ptr @_ZL15g_MinImageCount, align 4, !tbaa !5
  invoke void @_Z33ImGui_ImplVulkan_SetMinImageCountj(i32 noundef %100)
          to label %101 unwind label %123

101:                                              ; preds = %99
  %102 = load ptr, ptr @_ZL10g_Instance, align 8, !tbaa !11
  %103 = load ptr, ptr @_ZL16g_PhysicalDevice, align 8, !tbaa !11
  %104 = load ptr, ptr @_ZL8g_Device, align 8, !tbaa !11
  %105 = load i32, ptr @_ZL13g_QueueFamily, align 4, !tbaa !5
  %106 = load ptr, ptr @_ZL11g_Allocator, align 8, !tbaa !11
  %107 = load i32, ptr %13, align 4, !tbaa !5
  %108 = load i32, ptr %14, align 4, !tbaa !5
  %109 = load i32, ptr @_ZL15g_MinImageCount, align 4, !tbaa !5
  invoke void @_Z38ImGui_ImplVulkanH_CreateOrResizeWindowP12VkInstance_TP18VkPhysicalDevice_TP10VkDevice_TP24ImGui_ImplVulkanH_WindowjPK21VkAllocationCallbacksiij(ptr noundef %102, ptr noundef %103, ptr noundef %104, ptr noundef nonnull @_ZL16g_MainWindowData, i32 noundef %105, ptr noundef %106, i32 noundef %107, i32 noundef %108, i32 noundef %109)
          to label %110 unwind label %123

110:                                              ; preds = %101
  store i32 0, ptr getelementptr inbounds (i8, ptr @_ZL16g_MainWindowData, i64 76), align 4, !tbaa !46
  store i8 0, ptr @_ZL18g_SwapChainRebuild, align 1, !tbaa !43
  br label %125

111:                                              ; preds = %36
  %112 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN8ImVectorIPKcED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #9
  br label %216

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

115:                                              ; preds = %41
  %116 = landingpad { ptr, i32 }
          cleanup
  br label %214

117:                                              ; preds = %48, %46, %42
  %118 = landingpad { ptr, i32 }
          cleanup
  br label %214

119:                                              ; preds = %55, %52, %50
  %120 = landingpad { ptr, i32 }
          cleanup
  br label %214

121:                                              ; preds = %57
  %122 = landingpad { ptr, i32 }
          cleanup
  br label %213

.loopexit:                                        ; preds = %.critedge, %89, %126, %127, %128, %132, %133, %135, %136, %138, %140, %142, %152, %153, %155, %160, %164, %166, %173, %174
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %212

.loopexit.split-lp:                               ; preds = %201, %204, %205, %206, %207, %208, %209, %210
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %212

123:                                              ; preds = %101, %99, %93
  %124 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #9
  br label %212

125:                                              ; preds = %110, %94
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #9
  br label %126

126:                                              ; preds = %125, %90
  invoke void @_Z25ImGui_ImplVulkan_NewFramev()
          to label %127 unwind label %.loopexit

127:                                              ; preds = %126
  invoke void @_Z23ImGui_ImplGlfw_NewFramev()
          to label %128 unwind label %.loopexit

128:                                              ; preds = %127
  invoke void @_ZN5ImGui8NewFrameEv()
          to label %129 unwind label %.loopexit

129:                                              ; preds = %128
  %130 = load i8, ptr %10, align 1, !tbaa !43, !range !44, !noundef !45
  %131 = trunc nuw i8 %130 to i1
  br i1 %131, label %132, label %133

132:                                              ; preds = %129
  invoke void @_ZN5ImGui14ShowDemoWindowEPb(ptr noundef nonnull %10)
          to label %133 unwind label %.loopexit

133:                                              ; preds = %132, %129
  %134 = invoke noundef zeroext i1 @_ZN5ImGui5BeginEPKcPbi(ptr noundef nonnull @.str.3, ptr noundef null, i32 noundef 0)
          to label %135 unwind label %.loopexit

135:                                              ; preds = %133
  invoke void (ptr, ...) @_ZN5ImGui4TextEPKcz(ptr noundef nonnull @.str.4)
          to label %136 unwind label %.loopexit

136:                                              ; preds = %135
  %137 = invoke noundef zeroext i1 @_ZN5ImGui8CheckboxEPKcPb(ptr noundef nonnull @.str.5, ptr noundef nonnull %10)
          to label %138 unwind label %.loopexit

138:                                              ; preds = %136
  %139 = invoke noundef zeroext i1 @_ZN5ImGui8CheckboxEPKcPb(ptr noundef nonnull @.str.6, ptr noundef nonnull %11)
          to label %140 unwind label %.loopexit

140:                                              ; preds = %138
  %141 = invoke noundef zeroext i1 @_ZN5ImGui11SliderFloatEPKcPfffS1_i(ptr noundef nonnull @.str.7, ptr noundef nonnull @_ZZ4mainE1f, float noundef 0.000000e+00, float noundef 1.000000e+00, ptr noundef nonnull @.str.8, i32 noundef 0)
          to label %142 unwind label %.loopexit

142:                                              ; preds = %140
  %143 = invoke noundef zeroext i1 @_ZN5ImGui10ColorEdit3EPKcPfi(ptr noundef nonnull @.str.9, ptr noundef nonnull %12, i32 noundef 0)
          to label %144 unwind label %.loopexit

144:                                              ; preds = %142
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #9
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %15, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %145 = invoke noundef zeroext i1 @_ZN5ImGui6ButtonEPKcRK6ImVec2(ptr noundef nonnull @.str.10, ptr noundef nonnull align 4 dereferenceable(8) %15)
          to label %146 unwind label %150

146:                                              ; preds = %144
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #9
  br i1 %145, label %147, label %152

147:                                              ; preds = %146
  %148 = load i32, ptr @_ZZ4mainE7counter, align 4, !tbaa !5
  %149 = add nsw i32 %148, 1
  store i32 %149, ptr @_ZZ4mainE7counter, align 4, !tbaa !5
  br label %152

150:                                              ; preds = %144
  %151 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #9
  br label %212

152:                                              ; preds = %147, %146
  invoke void @_ZN5ImGui8SameLineEff(float noundef 0.000000e+00, float noundef -1.000000e+00)
          to label %153 unwind label %.loopexit

153:                                              ; preds = %152
  %154 = load i32, ptr @_ZZ4mainE7counter, align 4, !tbaa !5
  invoke void (ptr, ...) @_ZN5ImGui4TextEPKcz(ptr noundef nonnull @.str.11, i32 noundef %154)
          to label %155 unwind label %.loopexit

155:                                              ; preds = %153
  %156 = load float, ptr %83, align 4, !tbaa !47
  %157 = fdiv float 1.000000e+03, %156
  %158 = fpext float %157 to double
  %159 = fpext float %156 to double
  invoke void (ptr, ...) @_ZN5ImGui4TextEPKcz(ptr noundef nonnull @.str.12, double noundef %158, double noundef %159)
          to label %160 unwind label %.loopexit

160:                                              ; preds = %155
  invoke void @_ZN5ImGui3EndEv()
          to label %161 unwind label %.loopexit

161:                                              ; preds = %160
  %162 = load i8, ptr %11, align 1, !tbaa !43, !range !44, !noundef !45
  %163 = trunc nuw i8 %162 to i1
  br i1 %163, label %164, label %174

164:                                              ; preds = %161
  %165 = invoke noundef zeroext i1 @_ZN5ImGui5BeginEPKcPbi(ptr noundef nonnull @.str.6, ptr noundef nonnull %11, i32 noundef 0)
          to label %166 unwind label %.loopexit

166:                                              ; preds = %164
  invoke void (ptr, ...) @_ZN5ImGui4TextEPKcz(ptr noundef nonnull @.str.13)
          to label %167 unwind label %.loopexit

167:                                              ; preds = %166
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #9
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %16, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %168 = invoke noundef zeroext i1 @_ZN5ImGui6ButtonEPKcRK6ImVec2(ptr noundef nonnull @.str.14, ptr noundef nonnull align 4 dereferenceable(8) %16)
          to label %169 unwind label %171

169:                                              ; preds = %167
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #9
  br i1 %168, label %170, label %173

170:                                              ; preds = %169
  store i8 0, ptr %11, align 1, !tbaa !43
  br label %173

171:                                              ; preds = %167
  %172 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #9
  br label %212

173:                                              ; preds = %170, %169
  invoke void @_ZN5ImGui3EndEv()
          to label %174 unwind label %.loopexit

174:                                              ; preds = %173, %161
  invoke void @_ZN5ImGui6RenderEv()
          to label %175 unwind label %.loopexit

175:                                              ; preds = %174
  %176 = invoke noundef ptr @_ZN5ImGui11GetDrawDataEv()
          to label %177 unwind label %197

177:                                              ; preds = %175
  %178 = getelementptr inbounds i8, ptr %176, i64 40
  %179 = load float, ptr %178, align 8, !tbaa !48
  %180 = fcmp ugt float %179, 0.000000e+00
  br i1 %180, label %181, label %.critedge.backedge

.critedge.backedge:                               ; preds = %177, %196, %181
  br label %.critedge, !llvm.loop !51

181:                                              ; preds = %177
  %182 = getelementptr inbounds i8, ptr %176, i64 44
  %183 = load float, ptr %182, align 4, !tbaa !52
  %184 = fcmp ugt float %183, 0.000000e+00
  br i1 %184, label %185, label %.critedge.backedge

185:                                              ; preds = %181
  %186 = load <4 x float>, ptr %12, align 16
  %187 = shufflevector <4 x float> %186, <4 x float> poison, <2 x i32> <i32 0, i32 poison>
  %188 = load float, ptr %84, align 4, !tbaa !53
  %189 = load float, ptr %85, align 4, !tbaa !55
  %190 = insertelement <2 x float> %187, float %188, i64 1
  %191 = insertelement <2 x float> poison, float %188, i64 0
  %192 = insertelement <2 x float> %191, float %189, i64 1
  %193 = fmul <2 x float> %190, %192
  store <2 x float> %193, ptr getelementptr inbounds (i8, ptr @_ZL16g_MainWindowData, i64 60), align 4, !tbaa !56
  %194 = load float, ptr %86, align 8, !tbaa !57
  %195 = fmul float %188, %194
  store float %195, ptr getelementptr inbounds (i8, ptr @_ZL16g_MainWindowData, i64 68), align 4, !tbaa !56
  store float %188, ptr getelementptr inbounds (i8, ptr @_ZL16g_MainWindowData, i64 72), align 8, !tbaa !56
  invoke void @_ZL11FrameRenderP24ImGui_ImplVulkanH_WindowP10ImDrawData(ptr noundef nonnull @_ZL16g_MainWindowData, ptr noundef nonnull %176)
          to label %196 unwind label %199

196:                                              ; preds = %185
  invoke void @_ZL12FramePresentP24ImGui_ImplVulkanH_Window(ptr noundef nonnull @_ZL16g_MainWindowData)
          to label %.critedge.backedge unwind label %199

197:                                              ; preds = %175
  %198 = landingpad { ptr, i32 }
          cleanup
  br label %212

199:                                              ; preds = %196, %185
  %200 = landingpad { ptr, i32 }
          cleanup
  br label %212

201:                                              ; preds = %88
  %202 = load ptr, ptr @_ZL8g_Device, align 8, !tbaa !11
  %203 = invoke i32 @vkDeviceWaitIdle(ptr noundef %202)
          to label %204 unwind label %.loopexit.split-lp

204:                                              ; preds = %201
  call void @_ZL15check_vk_result8VkResult(i32 noundef %203)
  invoke void @_Z25ImGui_ImplVulkan_Shutdownv()
          to label %205 unwind label %.loopexit.split-lp

205:                                              ; preds = %204
  invoke void @_Z23ImGui_ImplGlfw_Shutdownv()
          to label %206 unwind label %.loopexit.split-lp

206:                                              ; preds = %205
  invoke void @_ZN5ImGui14DestroyContextEP12ImGuiContext(ptr noundef null)
          to label %207 unwind label %.loopexit.split-lp

207:                                              ; preds = %206
  invoke void @_ZL19CleanupVulkanWindowv()
          to label %208 unwind label %.loopexit.split-lp

208:                                              ; preds = %207
  invoke void @_ZL13CleanupVulkanv()
          to label %209 unwind label %.loopexit.split-lp

209:                                              ; preds = %208
  invoke void @glfwDestroyWindow(ptr noundef %20)
          to label %210 unwind label %.loopexit.split-lp

210:                                              ; preds = %209
  invoke void @glfwTerminate()
          to label %211 unwind label %.loopexit.split-lp

211:                                              ; preds = %210
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #9
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %9) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #9
  call void @_ZN8ImVectorIPKcED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %3) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #9
  br label %217

212:                                              ; preds = %.loopexit, %.loopexit.split-lp, %197, %199, %171, %150, %123
  %.pn.pn = phi { ptr, i32 } [ %172, %171 ], [ %151, %150 ], [ %124, %123 ], [ %200, %199 ], [ %198, %197 ], [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #9
  br label %213

213:                                              ; preds = %212, %121
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %212 ], [ %122, %121 ]
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %9) #9
  br label %214

214:                                              ; preds = %117, %213, %119, %115
  %.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %116, %115 ], [ %118, %117 ], [ %.pn.pn.pn, %213 ], [ %120, %119 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #9
  br label %215

215:                                              ; preds = %214, %113
  %.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn, %214 ], [ %114, %113 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #9
  br label %216

216:                                              ; preds = %215, %111, %34, %27
  %.pn53 = phi { ptr, i32 } [ %35, %34 ], [ %.pn.pn.pn.pn.pn.pn.pn, %215 ], [ %112, %111 ], [ %28, %27 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #9
  call void @_ZN8ImVectorIPKcED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %3) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #9
  resume { ptr, i32 } %.pn53

217:                                              ; preds = %22, %211, %2
  %.1 = phi i32 [ 1, %2 ], [ 0, %211 ], [ 1, %22 ]
  ret i32 %.1
}

declare ptr @glfwSetErrorCallback(ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZL19glfw_error_callbackiPKc(i32 noundef, ptr noundef) #2

declare i32 @glfwInit() local_unnamed_addr #1

declare void @glfwWindowHint(i32 noundef, i32 noundef) local_unnamed_addr #1

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

declare ptr @glfwCreateWindow(i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare i32 @glfwVulkanSupported() local_unnamed_addr #1

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #4

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

declare ptr @glfwGetRequiredInstanceExtensions(ptr noundef) local_unnamed_addr #1

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL11SetupVulkan8ImVectorIPKcE(ptr noundef) local_unnamed_addr #7

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

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

declare i32 @glfwCreateWindowSurface(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZL15check_vk_result8VkResult(i32 noundef) #2

declare void @glfwGetFramebufferSize(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL17SetupVulkanWindowP24ImGui_ImplVulkanH_WindowP14VkSurfaceKHR_Tii(ptr noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #7

declare noundef zeroext i1 @_ZN5ImGui30DebugCheckVersionAndDataLayoutEPKcmmmmmm(ptr noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef) local_unnamed_addr #1

declare noundef ptr @_ZN5ImGui13CreateContextEP11ImFontAtlas(ptr noundef) local_unnamed_addr #1

declare noundef nonnull align 8 dereferenceable(14560) ptr @_ZN5ImGui5GetIOEv() local_unnamed_addr #1

declare void @_ZN5ImGui15StyleColorsDarkEP10ImGuiStyle(ptr noundef) local_unnamed_addr #1

declare noundef zeroext i1 @_Z28ImGui_ImplGlfw_InitForVulkanP10GLFWwindowb(ptr noundef, i1 noundef zeroext) local_unnamed_addr #1

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

declare noundef zeroext i1 @_Z21ImGui_ImplVulkan_InitP25ImGui_ImplVulkan_InitInfoP14VkRenderPass_T(ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN6ImVec4C2Effff(ptr noundef nonnull align 4 dereferenceable(16), float noundef, float noundef, float noundef, float noundef) unnamed_addr #2 align 2

declare i32 @glfwWindowShouldClose(ptr noundef) local_unnamed_addr #1

declare void @glfwPollEvents() local_unnamed_addr #1

declare void @_Z33ImGui_ImplVulkan_SetMinImageCountj(i32 noundef) local_unnamed_addr #1

declare void @_Z38ImGui_ImplVulkanH_CreateOrResizeWindowP12VkInstance_TP18VkPhysicalDevice_TP10VkDevice_TP24ImGui_ImplVulkanH_WindowjPK21VkAllocationCallbacksiij(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare void @_Z25ImGui_ImplVulkan_NewFramev() local_unnamed_addr #1

declare void @_Z23ImGui_ImplGlfw_NewFramev() local_unnamed_addr #1

declare void @_ZN5ImGui8NewFrameEv() local_unnamed_addr #1

declare void @_ZN5ImGui14ShowDemoWindowEPb(ptr noundef) local_unnamed_addr #1

declare noundef zeroext i1 @_ZN5ImGui5BeginEPKcPbi(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #1

declare void @_ZN5ImGui4TextEPKcz(ptr noundef, ...) local_unnamed_addr #1

declare noundef zeroext i1 @_ZN5ImGui8CheckboxEPKcPb(ptr noundef, ptr noundef) local_unnamed_addr #1

declare noundef zeroext i1 @_ZN5ImGui11SliderFloatEPKcPfffS1_i(ptr noundef, ptr noundef, float noundef, float noundef, ptr noundef, i32 noundef) local_unnamed_addr #1

declare noundef zeroext i1 @_ZN5ImGui10ColorEdit3EPKcPfi(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #1

declare noundef zeroext i1 @_ZN5ImGui6ButtonEPKcRK6ImVec2(ptr noundef, ptr noundef nonnull align 4 dereferenceable(8)) local_unnamed_addr #1

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

declare void @_ZN5ImGui8SameLineEff(float noundef, float noundef) local_unnamed_addr #1

declare void @_ZN5ImGui3EndEv() local_unnamed_addr #1

declare void @_ZN5ImGui6RenderEv() local_unnamed_addr #1

declare noundef ptr @_ZN5ImGui11GetDrawDataEv() local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL11FrameRenderP24ImGui_ImplVulkanH_WindowP10ImDrawData(ptr noundef, ptr noundef) local_unnamed_addr #7

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL12FramePresentP24ImGui_ImplVulkanH_Window(ptr noundef) local_unnamed_addr #7

declare i32 @vkDeviceWaitIdle(ptr noundef) local_unnamed_addr #1

declare void @_Z25ImGui_ImplVulkan_Shutdownv() local_unnamed_addr #1

declare void @_Z23ImGui_ImplGlfw_Shutdownv() local_unnamed_addr #1

declare void @_ZN5ImGui14DestroyContextEP12ImGuiContext(ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL19CleanupVulkanWindowv() local_unnamed_addr #7

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL13CleanupVulkanv() local_unnamed_addr #7

declare void @glfwDestroyWindow(ptr noundef) local_unnamed_addr #1

declare void @glfwTerminate() local_unnamed_addr #1

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = !{!12, !12, i64 0}
!12 = !{!"any pointer", !7, i64 0}
!13 = !{!14, !6, i64 0}
!14 = !{!"_ZTS7ImGuiIO", !6, i64 0, !6, i64 4, !15, i64 8, !16, i64 16, !16, i64 20, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !16, i64 56, !17, i64 60, !12, i64 64, !15, i64 72, !17, i64 80, !17, i64 81, !17, i64 82, !17, i64 83, !17, i64 84, !17, i64 85, !17, i64 86, !17, i64 87, !16, i64 88, !16, i64 92, !16, i64 96, !16, i64 100, !16, i64 104, !16, i64 108, !17, i64 112, !17, i64 113, !17, i64 114, !17, i64 115, !17, i64 116, !12, i64 120, !12, i64 128, !12, i64 136, !12, i64 144, !12, i64 152, !12, i64 160, !12, i64 168, !12, i64 176, !12, i64 184, !18, i64 192, !17, i64 194, !17, i64 195, !17, i64 196, !17, i64 197, !17, i64 198, !17, i64 199, !17, i64 200, !16, i64 204, !6, i64 208, !6, i64 212, !6, i64 216, !6, i64 220, !15, i64 224, !7, i64 232, !7, i64 2896, !7, i64 3564, !12, i64 3632, !15, i64 3640, !7, i64 3648, !16, i64 3656, !16, i64 3660, !19, i64 3664, !17, i64 3668, !17, i64 3669, !17, i64 3670, !17, i64 3671, !6, i64 3672, !7, i64 3676, !17, i64 14332, !15, i64 14336, !7, i64 14344, !7, i64 14384, !7, i64 14424, !7, i64 14429, !7, i64 14434, !7, i64 14444, !7, i64 14454, !7, i64 14459, !7, i64 14464, !17, i64 14469, !7, i64 14472, !7, i64 14492, !7, i64 14512, !16, i64 14532, !17, i64 14536, !17, i64 14537, !7, i64 14538, !17, i64 14539, !18, i64 14540, !20, i64 14544}
!15 = !{!"_ZTS6ImVec2", !16, i64 0, !16, i64 4}
!16 = !{!"float", !7, i64 0}
!17 = !{!"bool", !7, i64 0}
!18 = !{!"short", !7, i64 0}
!19 = !{!"_ZTS16ImGuiMouseSource", !7, i64 0}
!20 = !{!"_ZTS8ImVectorItE", !6, i64 0, !6, i64 4, !12, i64 8}
!21 = !{!22, !12, i64 0}
!22 = !{!"_ZTS25ImGui_ImplVulkan_InitInfo", !12, i64 0, !12, i64 8, !12, i64 16, !6, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !6, i64 56, !6, i64 60, !6, i64 64, !23, i64 68, !17, i64 72, !24, i64 76, !12, i64 80, !12, i64 88, !25, i64 96}
!23 = !{!"_ZTS21VkSampleCountFlagBits", !7, i64 0}
!24 = !{!"_ZTS8VkFormat", !7, i64 0}
!25 = !{!"long", !7, i64 0}
!26 = !{!22, !12, i64 8}
!27 = !{!22, !12, i64 16}
!28 = !{!22, !6, i64 24}
!29 = !{!22, !12, i64 32}
!30 = !{!22, !12, i64 40}
!31 = !{!22, !12, i64 48}
!32 = !{!22, !6, i64 60}
!33 = !{!34, !6, i64 80}
!34 = !{!"_ZTS24ImGui_ImplVulkanH_Window", !6, i64 0, !6, i64 4, !12, i64 8, !12, i64 16, !35, i64 24, !37, i64 32, !12, i64 40, !12, i64 48, !17, i64 56, !17, i64 57, !7, i64 60, !6, i64 76, !6, i64 80, !6, i64 84, !6, i64 88, !12, i64 96, !12, i64 104}
!35 = !{!"_ZTS18VkSurfaceFormatKHR", !24, i64 0, !36, i64 4}
!36 = !{!"_ZTS15VkColorSpaceKHR", !7, i64 0}
!37 = !{!"_ZTS16VkPresentModeKHR", !7, i64 0}
!38 = !{!22, !6, i64 64}
!39 = !{!22, !23, i64 68}
!40 = !{!22, !12, i64 80}
!41 = !{!22, !12, i64 88}
!42 = !{!34, !12, i64 40}
!43 = !{!17, !17, i64 0}
!44 = !{i8 0, i8 2}
!45 = !{}
!46 = !{!34, !6, i64 76}
!47 = !{!14, !16, i64 204}
!48 = !{!49, !16, i64 40}
!49 = !{!"_ZTS10ImDrawData", !17, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !50, i64 16, !15, i64 32, !15, i64 40, !15, i64 48, !12, i64 56}
!50 = !{!"_ZTS8ImVectorIP10ImDrawListE", !6, i64 0, !6, i64 4, !12, i64 8}
!51 = distinct !{!51, !10}
!52 = !{!49, !16, i64 44}
!53 = !{!54, !16, i64 12}
!54 = !{!"_ZTS6ImVec4", !16, i64 0, !16, i64 4, !16, i64 8, !16, i64 12}
!55 = !{!54, !16, i64 4}
!56 = !{!7, !7, i64 0}
!57 = !{!54, !16, i64 8}


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