; LLVM IR from Eukky/TRender :: RenderCore/Gui/Imgui/ImguiGLFW.ll (Z23ImGui_ImplGlfw_NewFramev)

; 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.ImVec2 = type { float, float }
%struct.ImGuiIO = type { i32, i32, %struct.ImVec2, float, float, ptr, ptr, float, float, float, [21 x i32], float, float, ptr, ptr, float, i8, ptr, %struct.ImVec2, %struct.ImVec2, %struct.ImVec2, i8, i8, ptr, ptr, ptr, ptr, ptr, ptr, %struct.ImVec2, [5 x i8], float, float, i8, i8, i8, i8, i8, [512 x i8], [17 x i16], [21 x float], i8, i8, i8, i8, i8, i8, i8, float, i32, i32, i32, %struct.ImVec2, %struct.ImVec2, [5 x %struct.ImVec2], [5 x float], [5 x i8], [5 x i8], [5 x i8], [5 x i8], [5 x float], [5 x float], [5 x %struct.ImVec2], [5 x float], [512 x float], [512 x float], [21 x float], [21 x float] }

@.str = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [82 x i8], align 1
@__PRETTY_FUNCTION__._Z23ImGui_ImplGlfw_NewFramev = external hidden unnamed_addr constant [31 x i8], align 1
@_ZL8g_Window = external hidden global ptr, align 8
@_ZL6g_Time = external hidden global double, align 8

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_Z23ImGui_ImplGlfw_NewFramev() #2 {
  %1 = alloca ptr, align 8
  %2 = alloca i32, align 4
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca %struct.ImVec2, align 4
  %7 = alloca %struct.ImVec2, align 4
  %8 = alloca double, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca float, align 4
  %14 = alloca float, align 4
  %15 = alloca float, align 4
  %16 = alloca float, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %1) #7
  %17 = call noundef nonnull align 8 dereferenceable(5400) ptr @_ZN5ImGui5GetIOEv()
  store ptr %17, ptr %1, align 8, !tbaa !5
  %18 = load ptr, ptr %1, align 8, !tbaa !5
  %19 = getelementptr inbounds %struct.ImGuiIO, ptr %18, i32 0, i32 14
  %20 = load ptr, ptr %19, align 8, !tbaa !9
  %21 = call noundef zeroext i1 @_ZN11ImFontAtlas7IsBuiltEv(ptr noundef nonnull align 8 dereferenceable(116) %20)
  br i1 %21, label %22, label %23

22:                                               ; preds = %0
  br label %25

23:                                               ; preds = %0
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 242, ptr noundef @__PRETTY_FUNCTION__._Z23ImGui_ImplGlfw_NewFramev) #8
  unreachable

24:                                               ; No predecessors!
  br label %25

25:                                               ; preds = %24, %22
  call void @llvm.lifetime.start.p0(i64 4, ptr %2) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #7
  %26 = load ptr, ptr @_ZL8g_Window, align 8, !tbaa !5
  call void @glfwGetWindowSize(ptr noundef %26, ptr noundef %2, ptr noundef %3)
  %27 = load ptr, ptr @_ZL8g_Window, align 8, !tbaa !5
  call void @glfwGetFramebufferSize(ptr noundef %27, ptr noundef %4, ptr noundef %5)
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #7
  %28 = load i32, ptr %2, align 4, !tbaa !15
  %29 = sitofp i32 %28 to float
  %30 = load i32, ptr %3, align 4, !tbaa !15
  %31 = sitofp i32 %30 to float
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %6, float noundef %29, float noundef %31)
  %32 = load ptr, ptr %1, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.ImGuiIO, ptr %32, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %33, ptr align 4 %6, i64 8, i1 false), !tbaa.struct !16
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #7
  %34 = load i32, ptr %2, align 4, !tbaa !15
  %35 = icmp sgt i32 %34, 0
  br i1 %35, label %36, label %42

36:                                               ; preds = %25
  %37 = load i32, ptr %4, align 4, !tbaa !15
  %38 = sitofp i32 %37 to float
  %39 = load i32, ptr %2, align 4, !tbaa !15
  %40 = sitofp i32 %39 to float
  %41 = fdiv float %38, %40
  br label %43

42:                                               ; preds = %25
  br label %43

43:                                               ; preds = %42, %36
  %44 = phi float [ %41, %36 ], [ 0.000000e+00, %42 ]
  %45 = load i32, ptr %3, align 4, !tbaa !15
  %46 = icmp sgt i32 %45, 0
  br i1 %46, label %47, label %53

47:                                               ; preds = %43
  %48 = load i32, ptr %5, align 4, !tbaa !15
  %49 = sitofp i32 %48 to float
  %50 = load i32, ptr %3, align 4, !tbaa !15
  %51 = sitofp i32 %50 to float
  %52 = fdiv float %49, %51
  br label %54

53:                                               ; preds = %43
  br label %54

54:                                               ; preds = %53, %47
  %55 = phi float [ %52, %47 ], [ 0.000000e+00, %53 ]
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %7, float noundef %44, float noundef %55)
  %56 = load ptr, ptr %1, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.ImGuiIO, ptr %56, i32 0, i32 18
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %57, ptr align 4 %7, i64 8, i1 false), !tbaa.struct !16
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #7
  %58 = call double @glfwGetTime()
  store double %58, ptr %8, align 8, !tbaa !18
  %59 = load double, ptr @_ZL6g_Time, align 8, !tbaa !18
  %60 = fcmp ogt double %59, 0.000000e+00
  br i1 %60, label %61, label %66

61:                                               ; preds = %54
  %62 = load double, ptr %8, align 8, !tbaa !18
  %63 = load double, ptr @_ZL6g_Time, align 8, !tbaa !18
  %64 = fsub double %62, %63
  %65 = fptrunc double %64 to float
  br label %67

66:                                               ; preds = %54
  br label %67

67:                                               ; preds = %66, %61
  %68 = phi float [ %65, %61 ], [ 0x3F91111120000000, %66 ]
  %69 = load ptr, ptr %1, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.ImGuiIO, ptr %69, i32 0, i32 3
  store float %68, ptr %70, align 8, !tbaa !20
  %71 = load double, ptr %8, align 8, !tbaa !18
  store double %71, ptr @_ZL6g_Time, align 8, !tbaa !18
  call void @_ZL39ImGui_ImplGlfw_UpdateMousePosAndButtonsv()
  call void @_ZL32ImGui_ImplGlfw_UpdateMouseCursorv()
  %72 = load ptr, ptr %1, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.ImGuiIO, ptr %72, i32 0, i32 40
  %74 = getelementptr inbounds [21 x float], ptr %73, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 8 %74, i8 0, i64 84, i1 false)
  %75 = load ptr, ptr %1, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.ImGuiIO, ptr %75, i32 0, i32 0
  %77 = load i32, ptr %76, align 8, !tbaa !21
  %78 = and i32 %77, 2
  %79 = icmp ne i32 %78, 0
  br i1 %79, label %80, label %367

80:                                               ; preds = %67
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #7
  store i32 0, ptr %9, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #7
  store i32 0, ptr %10, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  %81 = call ptr @glfwGetJoystickAxes(i32 noundef 0, ptr noundef %9)
  store ptr %81, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #7
  %82 = call ptr @glfwGetJoystickButtons(i32 noundef 0, ptr noundef %10)
  store ptr %82, ptr %12, align 8, !tbaa !5
  %83 = load i32, ptr %10, align 4, !tbaa !15
  %84 = icmp sgt i32 %83, 0
  br i1 %84, label %85, label %95

85:                                               ; preds = %80
  %86 = load ptr, ptr %12, align 8, !tbaa !5
  %87 = getelementptr inbounds i8, ptr %86, i64 0
  %88 = load i8, ptr %87, align 1, !tbaa !22
  %89 = zext i8 %88 to i32
  %90 = icmp eq i32 %89, 1
  br i1 %90, label %91, label %95

91:                                               ; preds = %85
  %92 = load ptr, ptr %1, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.ImGuiIO, ptr %92, i32 0, i32 40
  %94 = getelementptr inbounds [21 x float], ptr %93, i64 0, i64 0
  store float 1.000000e+00, ptr %94, align 8, !tbaa !17
  br label %95

95:                                               ; preds = %91, %85, %80
  %96 = load i32, ptr %10, align 4, !tbaa !15
  %97 = icmp sgt i32 %96, 1
  br i1 %97, label %98, label %108

98:                                               ; preds = %95
  %99 = load ptr, ptr %12, align 8, !tbaa !5
  %100 = getelementptr inbounds i8, ptr %99, i64 1
  %101 = load i8, ptr %100, align 1, !tbaa !22
  %102 = zext i8 %101 to i32
  %103 = icmp eq i32 %102, 1
  br i1 %103, label %104, label %108

104:                                              ; preds = %98
  %105 = load ptr, ptr %1, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.ImGuiIO, ptr %105, i32 0, i32 40
  %107 = getelementptr inbounds [21 x float], ptr %106, i64 0, i64 1
  store float 1.000000e+00, ptr %107, align 4, !tbaa !17
  br label %108

108:                                              ; preds = %104, %98, %95
  %109 = load i32, ptr %10, align 4, !tbaa !15
  %110 = icmp sgt i32 %109, 2
  br i1 %110, label %111, label %121

111:                                              ; preds = %108
  %112 = load ptr, ptr %12, align 8, !tbaa !5
  %113 = getelementptr inbounds i8, ptr %112, i64 2
  %114 = load i8, ptr %113, align 1, !tbaa !22
  %115 = zext i8 %114 to i32
  %116 = icmp eq i32 %115, 1
  br i1 %116, label %117, label %121

117:                                              ; preds = %111
  %118 = load ptr, ptr %1, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.ImGuiIO, ptr %118, i32 0, i32 40
  %120 = getelementptr inbounds [21 x float], ptr %119, i64 0, i64 3
  store float 1.000000e+00, ptr %120, align 4, !tbaa !17
  br label %121

121:                                              ; preds = %117, %111, %108
  %122 = load i32, ptr %10, align 4, !tbaa !15
  %123 = icmp sgt i32 %122, 3
  br i1 %123, label %124, label %134

124:                                              ; preds = %121
  %125 = load ptr, ptr %12, align 8, !tbaa !5
  %126 = getelementptr inbounds i8, ptr %125, i64 3
  %127 = load i8, ptr %126, align 1, !tbaa !22
  %128 = zext i8 %127 to i32
  %129 = icmp eq i32 %128, 1
  br i1 %129, label %130, label %134

130:                                              ; preds = %124
  %131 = load ptr, ptr %1, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.ImGuiIO, ptr %131, i32 0, i32 40
  %133 = getelementptr inbounds [21 x float], ptr %132, i64 0, i64 2
  store float 1.000000e+00, ptr %133, align 8, !tbaa !17
  br label %134

134:                                              ; preds = %130, %124, %121
  %135 = load i32, ptr %10, align 4, !tbaa !15
  %136 = icmp sgt i32 %135, 13
  br i1 %136, label %137, label %147

137:                                              ; preds = %134
  %138 = load ptr, ptr %12, align 8, !tbaa !5
  %139 = getelementptr inbounds i8, ptr %138, i64 13
  %140 = load i8, ptr %139, align 1, !tbaa !22
  %141 = zext i8 %140 to i32
  %142 = icmp eq i32 %141, 1
  br i1 %142, label %143, label %147

143:                                              ; preds = %137
  %144 = load ptr, ptr %1, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.ImGuiIO, ptr %144, i32 0, i32 40
  %146 = getelementptr inbounds [21 x float], ptr %145, i64 0, i64 4
  store float 1.000000e+00, ptr %146, align 8, !tbaa !17
  br label %147

147:                                              ; preds = %143, %137, %134
  %148 = load i32, ptr %10, align 4, !tbaa !15
  %149 = icmp sgt i32 %148, 11
  br i1 %149, label %150, label %160

150:                                              ; preds = %147
  %151 = load ptr, ptr %12, align 8, !tbaa !5
  %152 = getelementptr inbounds i8, ptr %151, i64 11
  %153 = load i8, ptr %152, align 1, !tbaa !22
  %154 = zext i8 %153 to i32
  %155 = icmp eq i32 %154, 1
  br i1 %155, label %156, label %160

156:                                              ; preds = %150
  %157 = load ptr, ptr %1, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.ImGuiIO, ptr %157, i32 0, i32 40
  %159 = getelementptr inbounds [21 x float], ptr %158, i64 0, i64 5
  store float 1.000000e+00, ptr %159, align 4, !tbaa !17
  br label %160

160:                                              ; preds = %156, %150, %147
  %161 = load i32, ptr %10, align 4, !tbaa !15
  %162 = icmp sgt i32 %161, 10
  br i1 %162, label %163, label %173

163:                                              ; preds = %160
  %164 = load ptr, ptr %12, align 8, !tbaa !5
  %165 = getelementptr inbounds i8, ptr %164, i64 10
  %166 = load i8, ptr %165, align 1, !tbaa !22
  %167 = zext i8 %166 to i32
  %168 = icmp eq i32 %167, 1
  br i1 %168, label %169, label %173

169:                                              ; preds = %163
  %170 = load ptr, ptr %1, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.ImGuiIO, ptr %170, i32 0, i32 40
  %172 = getelementptr inbounds [21 x float], ptr %171, i64 0, i64 6
  store float 1.000000e+00, ptr %172, align 8, !tbaa !17
  br label %173

173:                                              ; preds = %169, %163, %160
  %174 = load i32, ptr %10, align 4, !tbaa !15
  %175 = icmp sgt i32 %174, 12
  br i1 %175, label %176, label %186

176:                                              ; preds = %173
  %177 = load ptr, ptr %12, align 8, !tbaa !5
  %178 = getelementptr inbounds i8, ptr %177, i64 12
  %179 = load i8, ptr %178, align 1, !tbaa !22
  %180 = zext i8 %179 to i32
  %181 = icmp eq i32 %180, 1
  br i1 %181, label %182, label %186

182:                                              ; preds = %176
  %183 = load ptr, ptr %1, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.ImGuiIO, ptr %183, i32 0, i32 40
  %185 = getelementptr inbounds [21 x float], ptr %184, i64 0, i64 7
  store float 1.000000e+00, ptr %185, align 4, !tbaa !17
  br label %186

186:                                              ; preds = %182, %176, %173
  %187 = load i32, ptr %10, align 4, !tbaa !15
  %188 = icmp sgt i32 %187, 4
  br i1 %188, label %189, label %199

189:                                              ; preds = %186
  %190 = load ptr, ptr %12, align 8, !tbaa !5
  %191 = getelementptr inbounds i8, ptr %190, i64 4
  %192 = load i8, ptr %191, align 1, !tbaa !22
  %193 = zext i8 %192 to i32
  %194 = icmp eq i32 %193, 1
  br i1 %194, label %195, label %199

195:                                              ; preds = %189
  %196 = load ptr, ptr %1, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.ImGuiIO, ptr %196, i32 0, i32 40
  %198 = getelementptr inbounds [21 x float], ptr %197, i64 0, i64 12
  store float 1.000000e+00, ptr %198, align 8, !tbaa !17
  br label %199

199:                                              ; preds = %195, %189, %186
  %200 = load i32, ptr %10, align 4, !tbaa !15
  %201 = icmp sgt i32 %200, 5
  br i1 %201, label %202, label %212

202:                                              ; preds = %199
  %203 = load ptr, ptr %12, align 8, !tbaa !5
  %204 = getelementptr inbounds i8, ptr %203, i64 5
  %205 = load i8, ptr %204, align 1, !tbaa !22
  %206 = zext i8 %205 to i32
  %207 = icmp eq i32 %206, 1
  br i1 %207, label %208, label %212

208:                                              ; preds = %202
  %209 = load ptr, ptr %1, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.ImGuiIO, ptr %209, i32 0, i32 40
  %211 = getelementptr inbounds [21 x float], ptr %210, i64 0, i64 13
  store float 1.000000e+00, ptr %211, align 4, !tbaa !17
  br label %212

212:                                              ; preds = %208, %202, %199
  %213 = load i32, ptr %10, align 4, !tbaa !15
  %214 = icmp sgt i32 %213, 4
  br i1 %214, label %215, label %225

215:                                              ; preds = %212
  %216 = load ptr, ptr %12, align 8, !tbaa !5
  %217 = getelementptr inbounds i8, ptr %216, i64 4
  %218 = load i8, ptr %217, align 1, !tbaa !22
  %219 = zext i8 %218 to i32
  %220 = icmp eq i32 %219, 1
  br i1 %220, label %221, label %225

221:                                              ; preds = %215
  %222 = load ptr, ptr %1, align 8, !tbaa !5
  %223 = getelementptr inbounds %struct.ImGuiIO, ptr %222, i32 0, i32 40
  %224 = getelementptr inbounds [21 x float], ptr %223, i64 0, i64 14
  store float 1.000000e+00, ptr %224, align 8, !tbaa !17
  br label %225

225:                                              ; preds = %221, %215, %212
  %226 = load i32, ptr %10, align 4, !tbaa !15
  %227 = icmp sgt i32 %226, 5
  br i1 %227, label %228, label %238

228:                                              ; preds = %225
  %229 = load ptr, ptr %12, align 8, !tbaa !5
  %230 = getelementptr inbounds i8, ptr %229, i64 5
  %231 = load i8, ptr %230, align 1, !tbaa !22
  %232 = zext i8 %231 to i32
  %233 = icmp eq i32 %232, 1
  br i1 %233, label %234, label %238

234:                                              ; preds = %228
  %235 = load ptr, ptr %1, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.ImGuiIO, ptr %235, i32 0, i32 40
  %237 = getelementptr inbounds [21 x float], ptr %236, i64 0, i64 15
  store float 1.000000e+00, ptr %237, align 4, !tbaa !17
  br label %238

238:                                              ; preds = %234, %228, %225
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #7
  %239 = load i32, ptr %9, align 4, !tbaa !15
  %240 = icmp sgt i32 %239, 0
  br i1 %240, label %241, label %245

241:                                              ; preds = %238
  %242 = load ptr, ptr %11, align 8, !tbaa !5
  %243 = getelementptr inbounds float, ptr %242, i64 0
  %244 = load float, ptr %243, align 4, !tbaa !17
  br label %246

245:                                              ; preds = %238
  br label %246

246:                                              ; preds = %245, %241
  %247 = phi float [ %244, %241 ], [ 0xBFD3333340000000, %245 ]
  store float %247, ptr %13, align 4, !tbaa !17
  %248 = load float, ptr %13, align 4, !tbaa !17
  %249 = fsub float %248, 0xBFD3333340000000
  %250 = fdiv float %249, 0xBFE3333320000000
  store float %250, ptr %13, align 4, !tbaa !17
  %251 = load float, ptr %13, align 4, !tbaa !17
  %252 = fcmp ogt float %251, 1.000000e+00
  br i1 %252, label %253, label %254

253:                                              ; preds = %246
  store float 1.000000e+00, ptr %13, align 4, !tbaa !17
  br label %254

254:                                              ; preds = %253, %246
  %255 = load ptr, ptr %1, align 8, !tbaa !5
  %256 = getelementptr inbounds %struct.ImGuiIO, ptr %255, i32 0, i32 40
  %257 = getelementptr inbounds [21 x float], ptr %256, i64 0, i64 8
  %258 = load float, ptr %257, align 8, !tbaa !17
  %259 = load float, ptr %13, align 4, !tbaa !17
  %260 = fcmp olt float %258, %259
  br i1 %260, label %261, label %266

261:                                              ; preds = %254
  %262 = load float, ptr %13, align 4, !tbaa !17
  %263 = load ptr, ptr %1, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.ImGuiIO, ptr %263, i32 0, i32 40
  %265 = getelementptr inbounds [21 x float], ptr %264, i64 0, i64 8
  store float %262, ptr %265, align 8, !tbaa !17
  br label %266

266:                                              ; preds = %261, %254
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #7
  %267 = load i32, ptr %9, align 4, !tbaa !15
  %268 = icmp sgt i32 %267, 0
  br i1 %268, label %269, label %273

269:                                              ; preds = %266
  %270 = load ptr, ptr %11, align 8, !tbaa !5
  %271 = getelementptr inbounds float, ptr %270, i64 0
  %272 = load float, ptr %271, align 4, !tbaa !17
  br label %274

273:                                              ; preds = %266
  br label %274

274:                                              ; preds = %273, %269
  %275 = phi float [ %272, %269 ], [ 0x3FD3333340000000, %273 ]
  store float %275, ptr %14, align 4, !tbaa !17
  %276 = load float, ptr %14, align 4, !tbaa !17
  %277 = fsub float %276, 0x3FD3333340000000
  %278 = fdiv float %277, 0x3FE3333320000000
  store float %278, ptr %14, align 4, !tbaa !17
  %279 = load float, ptr %14, align 4, !tbaa !17
  %280 = fcmp ogt float %279, 1.000000e+00
  br i1 %280, label %281, label %282

281:                                              ; preds = %274
  store float 1.000000e+00, ptr %14, align 4, !tbaa !17
  br label %282

282:                                              ; preds = %281, %274
  %283 = load ptr, ptr %1, align 8, !tbaa !5
  %284 = getelementptr inbounds %struct.ImGuiIO, ptr %283, i32 0, i32 40
  %285 = getelementptr inbounds [21 x float], ptr %284, i64 0, i64 9
  %286 = load float, ptr %285, align 4, !tbaa !17
  %287 = load float, ptr %14, align 4, !tbaa !17
  %288 = fcmp olt float %286, %287
  br i1 %288, label %289, label %294

289:                                              ; preds = %282
  %290 = load float, ptr %14, align 4, !tbaa !17
  %291 = load ptr, ptr %1, align 8, !tbaa !5
  %292 = getelementptr inbounds %struct.ImGuiIO, ptr %291, i32 0, i32 40
  %293 = getelementptr inbounds [21 x float], ptr %292, i64 0, i64 9
  store float %290, ptr %293, align 4, !tbaa !17
  br label %294

294:                                              ; preds = %289, %282
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #7
  %295 = load i32, ptr %9, align 4, !tbaa !15
  %296 = icmp sgt i32 %295, 1
  br i1 %296, label %297, label %301

297:                                              ; preds = %294
  %298 = load ptr, ptr %11, align 8, !tbaa !5
  %299 = getelementptr inbounds float, ptr %298, i64 1
  %300 = load float, ptr %299, align 4, !tbaa !17
  br label %302

301:                                              ; preds = %294
  br label %302

302:                                              ; preds = %301, %297
  %303 = phi float [ %300, %297 ], [ 0x3FD3333340000000, %301 ]
  store float %303, ptr %15, align 4, !tbaa !17
  %304 = load float, ptr %15, align 4, !tbaa !17
  %305 = fsub float %304, 0x3FD3333340000000
  %306 = fdiv float %305, 0x3FE3333320000000
  store float %306, ptr %15, align 4, !tbaa !17
  %307 = load float, ptr %15, align 4, !tbaa !17
  %308 = fcmp ogt float %307, 1.000000e+00
  br i1 %308, label %309, label %310

309:                                              ; preds = %302
  store float 1.000000e+00, ptr %15, align 4, !tbaa !17
  br label %310

310:                                              ; preds = %309, %302
  %311 = load ptr, ptr %1, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.ImGuiIO, ptr %311, i32 0, i32 40
  %313 = getelementptr inbounds [21 x float], ptr %312, i64 0, i64 10
  %314 = load float, ptr %313, align 8, !tbaa !17
  %315 = load float, ptr %15, align 4, !tbaa !17
  %316 = fcmp olt float %314, %315
  br i1 %316, label %317, label %322

317:                                              ; preds = %310
  %318 = load float, ptr %15, align 4, !tbaa !17
  %319 = load ptr, ptr %1, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct.ImGuiIO, ptr %319, i32 0, i32 40
  %321 = getelementptr inbounds [21 x float], ptr %320, i64 0, i64 10
  store float %318, ptr %321, align 8, !tbaa !17
  br label %322

322:                                              ; preds = %317, %310
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #7
  %323 = load i32, ptr %9, align 4, !tbaa !15
  %324 = icmp sgt i32 %323, 1
  br i1 %324, label %325, label %329

325:                                              ; preds = %322
  %326 = load ptr, ptr %11, align 8, !tbaa !5
  %327 = getelementptr inbounds float, ptr %326, i64 1
  %328 = load float, ptr %327, align 4, !tbaa !17
  br label %330

329:                                              ; preds = %322
  br label %330

330:                                              ; preds = %329, %325
  %331 = phi float [ %328, %325 ], [ 0xBFD3333340000000, %329 ]
  store float %331, ptr %16, align 4, !tbaa !17
  %332 = load float, ptr %16, align 4, !tbaa !17
  %333 = fsub float %332, 0xBFD3333340000000
  %334 = fdiv float %333, 0xBFE3333320000000
  store float %334, ptr %16, align 4, !tbaa !17
  %335 = load float, ptr %16, align 4, !tbaa !17
  %336 = fcmp ogt float %335, 1.000000e+00
  br i1 %336, label %337, label %338

337:                                              ; preds = %330
  store float 1.000000e+00, ptr %16, align 4, !tbaa !17
  br label %338

338:                                              ; preds = %337, %330
  %339 = load ptr, ptr %1, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.ImGuiIO, ptr %339, i32 0, i32 40
  %341 = getelementptr inbounds [21 x float], ptr %340, i64 0, i64 11
  %342 = load float, ptr %341, align 4, !tbaa !17
  %343 = load float, ptr %16, align 4, !tbaa !17
  %344 = fcmp olt float %342, %343
  br i1 %344, label %345, label %350

345:                                              ; preds = %338
  %346 = load float, ptr %16, align 4, !tbaa !17
  %347 = load ptr, ptr %1, align 8, !tbaa !5
  %348 = getelementptr inbounds %struct.ImGuiIO, ptr %347, i32 0, i32 40
  %349 = getelementptr inbounds [21 x float], ptr %348, i64 0, i64 11
  store float %346, ptr %349, align 4, !tbaa !17
  br label %350

350:                                              ; preds = %345, %338
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  %351 = load i32, ptr %9, align 4, !tbaa !15
  %352 = icmp sgt i32 %351, 0
  br i1 %352, label %353, label %361

353:                                              ; preds = %350
  %354 = load i32, ptr %10, align 4, !tbaa !15
  %355 = icmp sgt i32 %354, 0
  br i1 %355, label %356, label %361

356:                                              ; preds = %353
  %357 = load ptr, ptr %1, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.ImGuiIO, ptr %357, i32 0, i32 1
  %359 = load i32, ptr %358, align 4, !tbaa !23
  %360 = or i32 %359, 1
  store i32 %360, ptr %358, align 4, !tbaa !23
  br label %366

361:                                              ; preds = %353, %350
  %362 = load ptr, ptr %1, align 8, !tbaa !5
  %363 = getelementptr inbounds %struct.ImGuiIO, ptr %362, i32 0, i32 1
  %364 = load i32, ptr %363, align 4, !tbaa !23
  %365 = and i32 %364, -2
  store i32 %365, ptr %363, align 4, !tbaa !23
  br label %366

366:                                              ; preds = %361, %356
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #7
  br label %367

367:                                              ; preds = %366, %67
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %2) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1) #7
  ret void
}

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #4

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

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

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

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

declare double @glfwGetTime() #1

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL39ImGui_ImplGlfw_UpdateMousePosAndButtonsv() #2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL32ImGui_ImplGlfw_UpdateMouseCursorv() #2

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 152}
!10 = !{!"_ZTS7ImGuiIO", !11, i64 0, !11, i64 4, !12, i64 8, !13, i64 16, !13, i64 20, !6, i64 24, !6, i64 32, !13, i64 40, !13, i64 44, !13, i64 48, !7, i64 52, !13, i64 136, !13, i64 140, !6, i64 144, !6, i64 152, !13, i64 160, !14, i64 164, !6, i64 168, !12, i64 176, !12, i64 184, !12, i64 192, !14, i64 200, !14, i64 201, !6, i64 208, !6, i64 216, !6, i64 224, !6, i64 232, !6, i64 240, !6, i64 248, !12, i64 256, !7, i64 264, !13, i64 272, !13, i64 276, !14, i64 280, !14, i64 281, !14, i64 282, !14, i64 283, !14, i64 284, !7, i64 285, !7, i64 798, !7, i64 832, !14, i64 916, !14, i64 917, !14, i64 918, !14, i64 919, !14, i64 920, !14, i64 921, !14, i64 922, !13, i64 924, !11, i64 928, !11, i64 932, !11, i64 936, !12, i64 940, !12, i64 948, !7, i64 956, !7, i64 996, !7, i64 1016, !7, i64 1021, !7, i64 1026, !7, i64 1031, !7, i64 1036, !7, i64 1056, !7, i64 1076, !7, i64 1116, !7, i64 1136, !7, i64 3184, !7, i64 5232, !7, i64 5316}
!11 = !{!"int", !7, i64 0}
!12 = !{!"_ZTS6ImVec2", !13, i64 0, !13, i64 4}
!13 = !{!"float", !7, i64 0}
!14 = !{!"bool", !7, i64 0}
!15 = !{!11, !11, i64 0}
!16 = !{i64 0, i64 4, !17, i64 4, i64 4, !17}
!17 = !{!13, !13, i64 0}
!18 = !{!19, !19, i64 0}
!19 = !{!"double", !7, i64 0}
!20 = !{!10, !13, i64 16}
!21 = !{!10, !11, i64 0}
!22 = !{!7, !7, i64 0}
!23 = !{!10, !11, i64 4}


; 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.ImVec2 = type { float, float }

@.str = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [82 x i8], align 1
@__PRETTY_FUNCTION__._Z23ImGui_ImplGlfw_NewFramev = external hidden unnamed_addr constant [31 x i8], align 1
@_ZL8g_Window = external hidden local_unnamed_addr global ptr, align 8
@_ZL6g_Time = external hidden local_unnamed_addr global double, align 8

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_Z23ImGui_ImplGlfw_NewFramev() local_unnamed_addr #2 {
  %1 = alloca i32, align 4
  %2 = alloca i32, align 4
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca %struct.ImVec2, align 8
  %6 = alloca %struct.ImVec2, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = tail call noundef nonnull align 8 dereferenceable(5400) ptr @_ZN5ImGui5GetIOEv()
  %10 = getelementptr inbounds i8, ptr %9, i64 152
  %11 = load ptr, ptr %10, align 8, !tbaa !5
  %12 = tail call noundef zeroext i1 @_ZN11ImFontAtlas7IsBuiltEv(ptr noundef nonnull align 8 dereferenceable(116) %11)
  br i1 %12, label %14, label %13

13:                                               ; preds = %0
  tail call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 242, ptr noundef nonnull @__PRETTY_FUNCTION__._Z23ImGui_ImplGlfw_NewFramev) #6
  unreachable

14:                                               ; preds = %0
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %1) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %2) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #7
  %15 = load ptr, ptr @_ZL8g_Window, align 8, !tbaa !14
  call void @glfwGetWindowSize(ptr noundef %15, ptr noundef nonnull %1, ptr noundef nonnull %2)
  %16 = load ptr, ptr @_ZL8g_Window, align 8, !tbaa !14
  call void @glfwGetFramebufferSize(ptr noundef %16, ptr noundef nonnull %3, ptr noundef nonnull %4)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #7
  %17 = load i32, ptr %1, align 4, !tbaa !15
  %18 = sitofp i32 %17 to float
  %19 = load i32, ptr %2, align 4, !tbaa !15
  %20 = sitofp i32 %19 to float
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %5, float noundef %18, float noundef %20)
  %21 = getelementptr inbounds i8, ptr %9, i64 8
  %22 = load i64, ptr %5, align 8
  store i64 %22, ptr %21, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #7
  %23 = load i32, ptr %1, align 4, !tbaa !15
  %24 = icmp sgt i32 %23, 0
  %25 = load i32, ptr %3, align 4
  %26 = sitofp i32 %25 to float
  %27 = uitofp nneg i32 %23 to float
  %28 = fdiv float %26, %27
  %29 = select i1 %24, float %28, float 0.000000e+00
  %30 = load i32, ptr %2, align 4, !tbaa !15
  %31 = icmp sgt i32 %30, 0
  %32 = load i32, ptr %4, align 4
  %33 = sitofp i32 %32 to float
  %34 = uitofp nneg i32 %30 to float
  %35 = fdiv float %33, %34
  %36 = select i1 %31, float %35, float 0.000000e+00
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %6, float noundef %29, float noundef %36)
  %37 = getelementptr inbounds i8, ptr %9, i64 176
  %38 = load i64, ptr %6, align 8
  store i64 %38, ptr %37, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #7
  %39 = call double @glfwGetTime()
  %40 = load double, ptr @_ZL6g_Time, align 8
  %41 = fcmp ogt double %40, 0.000000e+00
  %42 = fsub double %39, %40
  %43 = fptrunc double %42 to float
  %44 = select i1 %41, float %43, float 0x3F91111120000000
  %45 = getelementptr inbounds i8, ptr %9, i64 16
  store float %44, ptr %45, align 8, !tbaa !16
  store double %39, ptr @_ZL6g_Time, align 8, !tbaa !17
  call void @_ZL39ImGui_ImplGlfw_UpdateMousePosAndButtonsv()
  call void @_ZL32ImGui_ImplGlfw_UpdateMouseCursorv()
  %46 = getelementptr inbounds i8, ptr %9, i64 832
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(84) %46, i8 0, i64 84, i1 false)
  %47 = load i32, ptr %9, align 8, !tbaa !19
  %48 = and i32 %47, 2
  %.not = icmp eq i32 %48, 0
  br i1 %.not, label %195, label %49

49:                                               ; preds = %14
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #7
  store i32 0, ptr %7, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #7
  store i32 0, ptr %8, align 4, !tbaa !15
  %50 = call ptr @glfwGetJoystickAxes(i32 noundef 0, ptr noundef nonnull %7)
  %51 = call ptr @glfwGetJoystickButtons(i32 noundef 0, ptr noundef nonnull %8)
  %52 = load i32, ptr %8, align 4
  %53 = icmp sgt i32 %52, 0
  br i1 %53, label %54, label %.thread92

54:                                               ; preds = %49
  %55 = load i8, ptr %51, align 1, !tbaa !20
  %56 = icmp eq i8 %55, 1
  br i1 %56, label %57, label %58

57:                                               ; preds = %54
  store float 1.000000e+00, ptr %46, align 8, !tbaa !21
  br label %58

58:                                               ; preds = %57, %54
  %.not93 = icmp eq i32 %52, 1
  br i1 %.not93, label %.thread92, label %59

59:                                               ; preds = %58
  %60 = getelementptr inbounds i8, ptr %51, i64 1
  %61 = load i8, ptr %60, align 1, !tbaa !20
  %62 = icmp eq i8 %61, 1
  br i1 %62, label %63, label %65

63:                                               ; preds = %59
  %64 = getelementptr inbounds i8, ptr %9, i64 836
  store float 1.000000e+00, ptr %64, align 4, !tbaa !21
  br label %65

65:                                               ; preds = %63, %59
  %66 = icmp ugt i32 %52, 2
  br i1 %66, label %67, label %.thread92

67:                                               ; preds = %65
  %68 = getelementptr inbounds i8, ptr %51, i64 2
  %69 = load i8, ptr %68, align 1, !tbaa !20
  %70 = icmp eq i8 %69, 1
  br i1 %70, label %71, label %73

71:                                               ; preds = %67
  %72 = getelementptr inbounds i8, ptr %9, i64 844
  store float 1.000000e+00, ptr %72, align 4, !tbaa !21
  br label %73

73:                                               ; preds = %71, %67
  %.not94 = icmp eq i32 %52, 3
  br i1 %.not94, label %.thread92, label %74

74:                                               ; preds = %73
  %75 = getelementptr inbounds i8, ptr %51, i64 3
  %76 = load i8, ptr %75, align 1, !tbaa !20
  %77 = icmp eq i8 %76, 1
  br i1 %77, label %78, label %80

78:                                               ; preds = %74
  %79 = getelementptr inbounds i8, ptr %9, i64 840
  store float 1.000000e+00, ptr %79, align 8, !tbaa !21
  br label %80

80:                                               ; preds = %78, %74
  %81 = icmp ugt i32 %52, 13
  br i1 %81, label %82, label %88

82:                                               ; preds = %80
  %83 = getelementptr inbounds i8, ptr %51, i64 13
  %84 = load i8, ptr %83, align 1, !tbaa !20
  %85 = icmp eq i8 %84, 1
  br i1 %85, label %86, label %.thread78

86:                                               ; preds = %82
  %87 = getelementptr inbounds i8, ptr %9, i64 848
  store float 1.000000e+00, ptr %87, align 8, !tbaa !21
  br label %.thread78

88:                                               ; preds = %80
  %89 = icmp ugt i32 %52, 11
  br i1 %89, label %.thread78, label %95

.thread78:                                        ; preds = %82, %86, %88
  %90 = getelementptr inbounds i8, ptr %51, i64 11
  %91 = load i8, ptr %90, align 1, !tbaa !20
  %92 = icmp eq i8 %91, 1
  br i1 %92, label %93, label %.thread81

93:                                               ; preds = %.thread78
  %94 = getelementptr inbounds i8, ptr %9, i64 852
  store float 1.000000e+00, ptr %94, align 4, !tbaa !21
  br label %.thread81

95:                                               ; preds = %88
  %96 = icmp eq i32 %52, 11
  br i1 %96, label %.thread81, label %110

.thread81:                                        ; preds = %.thread78, %93, %95
  %97 = getelementptr inbounds i8, ptr %51, i64 10
  %98 = load i8, ptr %97, align 1, !tbaa !20
  %99 = icmp eq i8 %98, 1
  br i1 %99, label %100, label %102

100:                                              ; preds = %.thread81
  %101 = getelementptr inbounds i8, ptr %9, i64 856
  store float 1.000000e+00, ptr %101, align 8, !tbaa !21
  br label %102

102:                                              ; preds = %100, %.thread81
  %103 = icmp ugt i32 %52, 12
  br i1 %103, label %104, label %.thread86

104:                                              ; preds = %102
  %105 = getelementptr inbounds i8, ptr %51, i64 12
  %106 = load i8, ptr %105, align 1, !tbaa !20
  %107 = icmp eq i8 %106, 1
  br i1 %107, label %108, label %.thread86

108:                                              ; preds = %104
  %109 = getelementptr inbounds i8, ptr %9, i64 860
  store float 1.000000e+00, ptr %109, align 4, !tbaa !21
  br label %.thread86

110:                                              ; preds = %95
  %111 = icmp ugt i32 %52, 4
  br i1 %111, label %.thread86, label %.thread92

.thread86:                                        ; preds = %102, %104, %108, %110
  %112 = getelementptr inbounds i8, ptr %51, i64 4
  %113 = load i8, ptr %112, align 1, !tbaa !20
  %114 = icmp eq i8 %113, 1
  br i1 %114, label %115, label %117

115:                                              ; preds = %.thread86
  %116 = getelementptr inbounds i8, ptr %9, i64 880
  store float 1.000000e+00, ptr %116, align 8, !tbaa !21
  br label %117

117:                                              ; preds = %115, %.thread86
  %118 = icmp ugt i32 %52, 5
  br i1 %118, label %119, label %.thread

119:                                              ; preds = %117
  %120 = getelementptr inbounds i8, ptr %51, i64 5
  %121 = load i8, ptr %120, align 1, !tbaa !20
  %122 = icmp eq i8 %121, 1
  br i1 %122, label %123, label %125

123:                                              ; preds = %119
  %124 = getelementptr inbounds i8, ptr %9, i64 884
  store float 1.000000e+00, ptr %124, align 4, !tbaa !21
  br label %125

125:                                              ; preds = %119, %123
  %126 = load i8, ptr %112, align 1, !tbaa !20
  %127 = icmp eq i8 %126, 1
  br i1 %127, label %131, label %133

.thread:                                          ; preds = %117
  %128 = load i8, ptr %112, align 1, !tbaa !20
  %129 = icmp eq i8 %128, 1
  br i1 %129, label %.thread95, label %.thread92

.thread95:                                        ; preds = %.thread
  %130 = getelementptr inbounds i8, ptr %9, i64 888
  store float 1.000000e+00, ptr %130, align 8, !tbaa !21
  br label %.thread92

131:                                              ; preds = %125
  %132 = getelementptr inbounds i8, ptr %9, i64 888
  store float 1.000000e+00, ptr %132, align 8, !tbaa !21
  br i1 %118, label %.thread90, label %.thread92

133:                                              ; preds = %125
  br i1 %118, label %.thread90, label %.thread92

.thread90:                                        ; preds = %131, %133
  %134 = getelementptr inbounds i8, ptr %51, i64 5
  %135 = load i8, ptr %134, align 1, !tbaa !20
  %136 = icmp eq i8 %135, 1
  br i1 %136, label %137, label %.thread92

137:                                              ; preds = %.thread90
  %138 = getelementptr inbounds i8, ptr %9, i64 892
  store float 1.000000e+00, ptr %138, align 4, !tbaa !21
  br label %.thread92

.thread92:                                        ; preds = %.thread, %.thread95, %49, %58, %65, %73, %110, %131, %137, %.thread90, %133
  %139 = load i32, ptr %7, align 4, !tbaa !15
  %140 = icmp sgt i32 %139, 0
  br i1 %140, label %141, label %144

141:                                              ; preds = %.thread92
  %142 = load float, ptr %50, align 4, !tbaa !21
  %143 = fadd float %142, 0x3FD3333340000000
  br label %144

144:                                              ; preds = %.thread92, %141
  %145 = phi float [ %143, %141 ], [ 0.000000e+00, %.thread92 ]
  %146 = fdiv float %145, 0xBFE3333320000000
  %147 = fcmp ogt float %146, 1.000000e+00
  %.065 = select i1 %147, float 1.000000e+00, float %146
  %148 = getelementptr inbounds i8, ptr %9, i64 864
  %149 = load float, ptr %148, align 8, !tbaa !21
  %150 = fcmp olt float %149, %.065
  br i1 %150, label %151, label %152

151:                                              ; preds = %144
  store float %.065, ptr %148, align 8, !tbaa !21
  br label %152

152:                                              ; preds = %151, %144
  br i1 %140, label %153, label %156

153:                                              ; preds = %152
  %154 = load float, ptr %50, align 4, !tbaa !21
  %155 = fadd float %154, 0xBFD3333340000000
  br label %156

156:                                              ; preds = %152, %153
  %157 = phi float [ %155, %153 ], [ 0.000000e+00, %152 ]
  %158 = fdiv float %157, 0x3FE3333320000000
  %159 = fcmp ogt float %158, 1.000000e+00
  %.064 = select i1 %159, float 1.000000e+00, float %158
  %160 = getelementptr inbounds i8, ptr %9, i64 868
  %161 = load float, ptr %160, align 4, !tbaa !21
  %162 = fcmp olt float %161, %.064
  br i1 %162, label %163, label %164

163:                                              ; preds = %156
  store float %.064, ptr %160, align 4, !tbaa !21
  br label %164

164:                                              ; preds = %163, %156
  %165 = icmp sgt i32 %139, 1
  br i1 %165, label %166, label %170

166:                                              ; preds = %164
  %167 = getelementptr inbounds i8, ptr %50, i64 4
  %168 = load float, ptr %167, align 4, !tbaa !21
  %169 = fadd float %168, 0xBFD3333340000000
  br label %170

170:                                              ; preds = %164, %166
  %171 = phi float [ %169, %166 ], [ 0.000000e+00, %164 ]
  %172 = fdiv float %171, 0x3FE3333320000000
  %173 = fcmp ogt float %172, 1.000000e+00
  %.063 = select i1 %173, float 1.000000e+00, float %172
  %174 = getelementptr inbounds i8, ptr %9, i64 872
  %175 = load float, ptr %174, align 8, !tbaa !21
  %176 = fcmp olt float %175, %.063
  br i1 %176, label %177, label %178

177:                                              ; preds = %170
  store float %.063, ptr %174, align 8, !tbaa !21
  br label %178

178:                                              ; preds = %177, %170
  br i1 %165, label %179, label %183

179:                                              ; preds = %178
  %180 = getelementptr inbounds i8, ptr %50, i64 4
  %181 = load float, ptr %180, align 4, !tbaa !21
  %182 = fadd float %181, 0x3FD3333340000000
  br label %183

183:                                              ; preds = %178, %179
  %184 = phi float [ %182, %179 ], [ 0.000000e+00, %178 ]
  %185 = fdiv float %184, 0xBFE3333320000000
  %186 = fcmp ogt float %185, 1.000000e+00
  %.0 = select i1 %186, float 1.000000e+00, float %185
  %187 = getelementptr inbounds i8, ptr %9, i64 876
  %188 = load float, ptr %187, align 4, !tbaa !21
  %189 = fcmp olt float %188, %.0
  br i1 %189, label %190, label %191

190:                                              ; preds = %183
  store float %.0, ptr %187, align 4, !tbaa !21
  br label %191

191:                                              ; preds = %190, %183
  %or.cond = and i1 %53, %140
  %192 = getelementptr inbounds i8, ptr %9, i64 4
  %193 = load i32, ptr %192, align 4, !tbaa !22
  %194 = and i32 %193, -2
  %masksel = zext i1 %or.cond to i32
  %.sink = or disjoint i32 %194, %masksel
  store i32 %.sink, ptr %192, align 4, !tbaa !22
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #7
  br label %195

195:                                              ; preds = %191, %14
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %2) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %1) #7
  ret void
}

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #4

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

declare void @glfwGetFramebufferSize(ptr noundef, ptr noundef, ptr noundef) 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 #3 align 2

declare double @glfwGetTime() local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL39ImGui_ImplGlfw_UpdateMousePosAndButtonsv() local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL32ImGui_ImplGlfw_UpdateMouseCursorv() local_unnamed_addr #2

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { noreturn 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 nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { noreturn nounwind }
attributes #7 = { 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, !12, i64 152}
!6 = !{!"_ZTS7ImGuiIO", !7, i64 0, !7, i64 4, !10, i64 8, !11, i64 16, !11, i64 20, !12, i64 24, !12, i64 32, !11, i64 40, !11, i64 44, !11, i64 48, !8, i64 52, !11, i64 136, !11, i64 140, !12, i64 144, !12, i64 152, !11, i64 160, !13, i64 164, !12, i64 168, !10, i64 176, !10, i64 184, !10, i64 192, !13, i64 200, !13, i64 201, !12, i64 208, !12, i64 216, !12, i64 224, !12, i64 232, !12, i64 240, !12, i64 248, !10, i64 256, !8, i64 264, !11, i64 272, !11, i64 276, !13, i64 280, !13, i64 281, !13, i64 282, !13, i64 283, !13, i64 284, !8, i64 285, !8, i64 798, !8, i64 832, !13, i64 916, !13, i64 917, !13, i64 918, !13, i64 919, !13, i64 920, !13, i64 921, !13, i64 922, !11, i64 924, !7, i64 928, !7, i64 932, !7, i64 936, !10, i64 940, !10, i64 948, !8, i64 956, !8, i64 996, !8, i64 1016, !8, i64 1021, !8, i64 1026, !8, i64 1031, !8, i64 1036, !8, i64 1056, !8, i64 1076, !8, i64 1116, !8, i64 1136, !8, i64 3184, !8, i64 5232, !8, i64 5316}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTS6ImVec2", !11, i64 0, !11, i64 4}
!11 = !{!"float", !8, i64 0}
!12 = !{!"any pointer", !8, i64 0}
!13 = !{!"bool", !8, i64 0}
!14 = !{!12, !12, i64 0}
!15 = !{!7, !7, i64 0}
!16 = !{!6, !11, i64 16}
!17 = !{!18, !18, i64 0}
!18 = !{!"double", !8, i64 0}
!19 = !{!6, !7, i64 0}
!20 = !{!8, !8, i64 0}
!21 = !{!11, !11, i64 0}
!22 = !{!6, !7, i64 4}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass