; LLVM IR from PepcyCh/bisemutum-engine :: bisemutum/thirdparty/ImGuizmo/example/imgui.ll (ZN5ImGui17UpdateInputEventsEb)

; 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.ImBitArray.45 = type { [21 x i32] }
%struct.ImVec2 = type { float, float }
%struct.ImGuiContext = type { i8, i8, %struct.ImGuiIO, %struct.ImVector.0, %struct.ImVector.0, %struct.ImGuiStyle, ptr, float, float, %struct.ImDrawListSharedData, double, i32, i32, i32, i8, i8, i8, i8, i8, ptr, %struct.ImVector.1, %struct.ImVector.1, %struct.ImVector.1, %struct.ImVector.2, %struct.ImGuiStorage, i32, %struct.ImVec2, ptr, ptr, ptr, ptr, ptr, %struct.ImVec2, float, i32, i32, i32, i8, i8, i8, i8, float, float, i32, i32, float, i8, i8, i8, i8, i8, i8, %struct.ImVec2, ptr, i32, i32, i32, i8, i8, ptr, i32, float, i32, %struct.ImBitArray, i32, i32, %struct.ImGuiNextItemData, %struct.ImGuiLastItemData, %struct.ImGuiNextWindowData, %struct.ImVector.4, %struct.ImVector.5, %struct.ImVector.6, %struct.ImVector.7, %struct.ImVector.8, %struct.ImVector.9, %struct.ImVector.10, %struct.ImVector.10, i32, %struct.ImVector.11, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i8, i8, i8, i8, i8, i8, i32, %struct.ImRect, i8, i8, i8, i32, i32, i32, i32, i32, i32, %struct.ImRect, %struct.ImRect, i32, i32, i32, %struct.ImGuiNavItemData, %struct.ImGuiNavItemData, %struct.ImGuiNavItemData, %struct.ImGuiNavItemData, ptr, ptr, ptr, float, float, i8, %struct.ImVec2, %struct.ImVec2, float, i32, i8, i8, i8, i32, i32, i32, [4 x i8], %struct.ImGuiPayload, %struct.ImRect, i32, i32, float, i32, i32, i32, i32, %struct.ImVector.12, [16 x i8], i32, %struct.ImVector.13, ptr, i32, %struct.ImVector.14, %struct.ImPool, %struct.ImVector.16, %struct.ImVector.17, ptr, %struct.ImPool.18, %struct.ImVector.20, %struct.ImVector.21, i32, i32, float, float, %struct.ImVec2, %struct.ImGuiInputTextState, %struct.ImFont, i32, i32, float, float, i32, %struct.ImVec4, %struct.ImGuiComboPreviewData, float, float, i8, i8, float, float, float, float, i16, i16, %struct.ImVector.22, %struct.ImVector.7, %struct.ImGuiPlatformImeData, %struct.ImGuiPlatformImeData, i8, i8, float, %struct.ImGuiTextBuffer, %struct.ImVector.24, %struct.ImChunkStream, %struct.ImChunkStream.25, %struct.ImVector.26, i32, i8, i32, ptr, %struct.ImGuiTextBuffer, ptr, ptr, float, i8, i32, i32, i32, i32, %struct.ImGuiTextBuffer, i8, i8, i32, %struct.ImGuiMetricsConfig, %struct.ImGuiStackTool, [60 x float], i32, i32, float, i32, i32, i32, %struct.ImVector.22 }
%struct.ImGuiIO = type { i32, i32, %struct.ImVec2, float, float, ptr, ptr, float, float, float, float, float, float, float, ptr, ptr, float, i8, ptr, %struct.ImVec2, i8, i8, i8, i8, i8, i8, i8, i8, float, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i8, i8, i8, i8, i8, i8, i8, float, i32, i32, i32, i32, i32, %struct.ImVec2, [652 x i32], [652 x i8], [16 x float], %struct.ImVec2, [5 x i8], float, float, i8, i8, i8, i8, i32, [652 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], [5 x float], [5 x float], [5 x float], float, i8, i8, i8, i8, i16, %struct.ImVector }
%struct.ImGuiKeyData = type { i8, float, float, float }
%struct.ImVector = type { i32, i32, ptr }
%struct.ImVector.0 = type { i32, i32, ptr }
%struct.ImGuiStyle = type { float, float, %struct.ImVec2, float, float, %struct.ImVec2, %struct.ImVec2, i32, float, float, float, float, %struct.ImVec2, float, float, %struct.ImVec2, %struct.ImVec2, %struct.ImVec2, %struct.ImVec2, float, float, float, float, float, float, float, float, float, float, i32, %struct.ImVec2, %struct.ImVec2, %struct.ImVec2, %struct.ImVec2, float, i8, i8, i8, float, float, [53 x %struct.ImVec4] }
%struct.ImDrawListSharedData = type { %struct.ImVec2, ptr, float, float, float, %struct.ImVec4, i32, [48 x %struct.ImVec2], float, [64 x i8], ptr }
%struct.ImVector.1 = type { i32, i32, ptr }
%struct.ImVector.2 = type { i32, i32, ptr }
%struct.ImGuiStorage = type { %struct.ImVector.3 }
%struct.ImVector.3 = type { i32, i32, ptr }
%struct.ImBitArray = type { [5 x i32] }
%struct.ImGuiNextItemData = type <{ i32, float, i32, i32, i8, [3 x i8] }>
%struct.ImGuiLastItemData = type { i32, i32, i32, %struct.ImRect, %struct.ImRect, %struct.ImRect }
%struct.ImGuiNextWindowData = type <{ i32, i32, i32, i32, %struct.ImVec2, %struct.ImVec2, %struct.ImVec2, %struct.ImVec2, %struct.ImVec2, i8, [3 x i8], %struct.ImRect, [4 x i8], ptr, ptr, float, %struct.ImVec2, [4 x i8] }>
%struct.ImVector.4 = type { i32, i32, ptr }
%struct.ImVector.5 = type { i32, i32, ptr }
%struct.ImVector.6 = type { i32, i32, ptr }
%struct.ImVector.8 = type { i32, i32, ptr }
%struct.ImVector.9 = type { i32, i32, ptr }
%struct.ImVector.10 = type { i32, i32, ptr }
%struct.ImVector.11 = type { i32, i32, ptr }
%struct.ImGuiNavItemData = type { ptr, i32, i32, %struct.ImRect, i32, float, float, float }
%struct.ImGuiPayload = type <{ ptr, i32, i32, i32, i32, [33 x i8], i8, i8, [5 x i8] }>
%struct.ImRect = type { %struct.ImVec2, %struct.ImVec2 }
%struct.ImVector.12 = type { i32, i32, ptr }
%struct.ImVector.13 = type { i32, i32, ptr }
%struct.ImVector.14 = type { i32, i32, ptr }
%struct.ImPool = type { %struct.ImVector.15, %struct.ImGuiStorage, i32, i32 }
%struct.ImVector.15 = type { i32, i32, ptr }
%struct.ImVector.16 = type { i32, i32, ptr }
%struct.ImVector.17 = type { i32, i32, ptr }
%struct.ImPool.18 = type { %struct.ImVector.19, %struct.ImGuiStorage, i32, i32 }
%struct.ImVector.19 = type { i32, i32, ptr }
%struct.ImVector.20 = type { i32, i32, ptr }
%struct.ImVector.21 = type { i32, i32, ptr }
%struct.ImGuiInputTextState = type <{ i32, i32, i32, [4 x i8], %struct.ImVector, %struct.ImVector.22, %struct.ImVector.22, i8, [3 x i8], i32, float, %"struct.ImStb::STB_TexteditState", float, i8, i8, i8, i8, i32, [4 x i8] }>
%"struct.ImStb::STB_TexteditState" = type { i32, i32, i32, i8, i32, i8, i8, i8, i8, i8, i8, i8, float, %"struct.ImStb::StbUndoState" }
%"struct.ImStb::StbUndoState" = type { [99 x %"struct.ImStb::StbUndoRecord"], [999 x i16], i16, i16, i32, i32 }
%"struct.ImStb::StbUndoRecord" = type { i32, i32, i32, i32 }
%struct.ImFont = type <{ %struct.ImVector.16, float, float, %struct.ImVector, %struct.ImVector.23, ptr, ptr, ptr, i16, i16, i16, i16, i8, [3 x i8], float, float, float, i32, [2 x i8], [2 x i8] }>
%struct.ImVector.23 = type { i32, i32, ptr }
%struct.ImVec4 = type { float, float, float, float }
%struct.ImGuiComboPreviewData = type { %struct.ImRect, %struct.ImVec2, %struct.ImVec2, %struct.ImVec2, float, i32 }
%struct.ImVector.7 = type { i32, i32, ptr }
%struct.ImGuiPlatformImeData = type { i8, %struct.ImVec2, float }
%struct.ImVector.24 = type { i32, i32, ptr }
%struct.ImChunkStream = type { %struct.ImVector.22 }
%struct.ImChunkStream.25 = type { %struct.ImVector.22 }
%struct.ImVector.26 = type { i32, i32, ptr }
%struct.ImGuiTextBuffer = type { %struct.ImVector.22 }
%struct.ImGuiMetricsConfig = type { i8, i8, i8, i8, i8, i8, i8, i32, i32 }
%struct.ImGuiStackTool = type { i32, i32, i32, %struct.ImVector.27, i8, float }
%struct.ImVector.27 = type { i32, i32, ptr }
%struct.ImVector.22 = type { i32, i32, ptr }
%struct.ImGuiInputEvent = type <{ i32, i32, %union.anon, i8, i8, [2 x i8] }>
%union.anon = type { %struct.ImGuiInputEventKey }
%struct.ImGuiInputEventKey = type { i32, i8, float }
%struct.ImGuiInputEventMousePos = type { float, float }
%struct.ImGuiInputEventMouseButton = type { i32, i8 }
%struct.ImGuiInputEventMouseWheel = type { float, float }
%struct.ImGuiInputEventText = type { i32 }
%struct.ImGuiInputEventAppFocused = type { i8 }

@GImGui = external dso_local global ptr, align 8
@.str.4 = external hidden unnamed_addr constant [106 x i8], align 1
@.str.173 = external hidden unnamed_addr constant [47 x i8], align 1
@__PRETTY_FUNCTION__._ZN5ImGui17UpdateInputEventsEb = external hidden unnamed_addr constant [36 x i8], align 1
@.str.174 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.175 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.176 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.177 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.178 = external hidden unnamed_addr constant [10 x i8], align 1

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8), float noundef, float noundef) unnamed_addr #1 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) #2

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(22) ptr @_ZN8ImVectorI15ImGuiInputEventEixEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN5ImGui15IsMousePosValidEPK6ImVec2(ptr noundef) #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN5ImGui17GetMergedModFlagsEv() #1

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN5ImGui17UpdateInputEventsEb(i1 noundef zeroext %0) #6 {
  %2 = alloca i8, align 1
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i8, align 1
  %6 = alloca i8, align 1
  %7 = alloca i8, align 1
  %8 = alloca i8, align 1
  %9 = alloca i8, align 1
  %10 = alloca i32, align 4
  %11 = alloca %struct.ImBitArray.45, align 4
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca %struct.ImVec2, align 4
  %15 = alloca %struct.ImVec2, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca i32, align 4
  %22 = alloca i16, align 2
  %23 = alloca i8, align 1
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = zext i1 %0 to i8
  store i8 %26, ptr %2, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #7
  %27 = load ptr, ptr @GImGui, align 8, !tbaa !9
  store ptr %27, ptr %3, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #7
  %28 = load ptr, ptr %3, align 8, !tbaa !9
  %29 = getelementptr inbounds %struct.ImGuiContext, ptr %28, i32 0, i32 2
  store ptr %29, ptr %4, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %5) #7
  %30 = load i8, ptr %2, align 1, !tbaa !5, !range !11, !noundef !12
  %31 = trunc i8 %30 to i1
  br i1 %31, label %32, label %37

32:                                               ; preds = %1
  %33 = load ptr, ptr %3, align 8, !tbaa !9
  %34 = getelementptr inbounds %struct.ImGuiContext, ptr %33, i32 0, i32 222
  %35 = load i32, ptr %34, align 4, !tbaa !13
  %36 = icmp eq i32 %35, 1
  br label %37

37:                                               ; preds = %32, %1
  %38 = phi i1 [ false, %1 ], [ %36, %32 ]
  %39 = zext i1 %38 to i8
  store i8 %39, ptr %5, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %6) #7
  store i8 0, ptr %6, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %7) #7
  store i8 0, ptr %7, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %8) #7
  store i8 0, ptr %8, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %9) #7
  store i8 0, ptr %9, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #7
  store i32 0, ptr %10, align 4, !tbaa !75
  call void @llvm.lifetime.start.p0(i64 84, ptr %11) #7
  call void @_ZN10ImBitArrayILi652ELi0EEC2Ev(ptr noundef nonnull align 4 dereferenceable(84) %11)
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #7
  store i32 0, ptr %12, align 4, !tbaa !75
  br label %40

40:                                               ; preds = %535, %37
  %41 = load i32, ptr %12, align 4, !tbaa !75
  %42 = load ptr, ptr %3, align 8, !tbaa !9
  %43 = getelementptr inbounds %struct.ImGuiContext, ptr %42, i32 0, i32 3
  %44 = getelementptr inbounds %struct.ImVector.0, ptr %43, i32 0, i32 0
  %45 = load i32, ptr %44, align 8, !tbaa !76
  %46 = icmp slt i32 %41, %45
  br i1 %46, label %47, label %538

47:                                               ; preds = %40
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #7
  %48 = load ptr, ptr %3, align 8, !tbaa !9
  %49 = getelementptr inbounds %struct.ImGuiContext, ptr %48, i32 0, i32 3
  %50 = load i32, ptr %12, align 4, !tbaa !75
  %51 = call noundef nonnull align 4 dereferenceable(22) ptr @_ZN8ImVectorI15ImGuiInputEventEixEi(ptr noundef nonnull align 8 dereferenceable(16) %49, i32 noundef %50)
  store ptr %51, ptr %13, align 8, !tbaa !9
  %52 = load ptr, ptr %13, align 8, !tbaa !9
  %53 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %52, i32 0, i32 0
  %54 = load i32, ptr %53, align 4, !tbaa !77
  %55 = icmp eq i32 %54, 1
  br i1 %55, label %56, label %121

56:                                               ; preds = %47
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #7
  %57 = load ptr, ptr %13, align 8, !tbaa !9
  %58 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %57, i32 0, i32 2
  %59 = getelementptr inbounds %struct.ImGuiInputEventMousePos, ptr %58, i32 0, i32 0
  %60 = load float, ptr %59, align 4, !tbaa !80
  %61 = load ptr, ptr %13, align 8, !tbaa !9
  %62 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %61, i32 0, i32 2
  %63 = getelementptr inbounds %struct.ImGuiInputEventMousePos, ptr %62, i32 0, i32 1
  %64 = load float, ptr %63, align 4, !tbaa !80
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %14, float noundef %60, float noundef %64)
  %65 = call noundef zeroext i1 @_ZN5ImGui15IsMousePosValidEPK6ImVec2(ptr noundef %14)
  br i1 %65, label %66, label %73

66:                                               ; preds = %56
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  %67 = getelementptr inbounds %struct.ImVec2, ptr %14, i32 0, i32 0
  %68 = load float, ptr %67, align 4, !tbaa !81
  %69 = call noundef float @_ZL13ImFloorSignedf(float noundef %68)
  %70 = getelementptr inbounds %struct.ImVec2, ptr %14, i32 0, i32 1
  %71 = load float, ptr %70, align 4, !tbaa !82
  %72 = call noundef float @_ZL13ImFloorSignedf(float noundef %71)
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %15, float noundef %69, float noundef %72)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %14, ptr align 4 %15, i64 8, i1 false), !tbaa.struct !83
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  br label %73

73:                                               ; preds = %66, %56
  %74 = load ptr, ptr %4, align 8, !tbaa !9
  %75 = getelementptr inbounds %struct.ImGuiIO, ptr %74, i32 0, i32 56
  %76 = getelementptr inbounds %struct.ImVec2, ptr %75, i32 0, i32 0
  %77 = load float, ptr %76, align 4, !tbaa !85
  %78 = getelementptr inbounds %struct.ImVec2, ptr %14, i32 0, i32 0
  %79 = load float, ptr %78, align 4, !tbaa !81
  %80 = fcmp oeq float %77, %79
  br i1 %80, label %81, label %89

81:                                               ; preds = %73
  %82 = load ptr, ptr %4, align 8, !tbaa !9
  %83 = getelementptr inbounds %struct.ImGuiIO, ptr %82, i32 0, i32 56
  %84 = getelementptr inbounds %struct.ImVec2, ptr %83, i32 0, i32 1
  %85 = load float, ptr %84, align 4, !tbaa !86
  %86 = getelementptr inbounds %struct.ImVec2, ptr %14, i32 0, i32 1
  %87 = load float, ptr %86, align 4, !tbaa !82
  %88 = fcmp oeq float %85, %87
  br label %89

89:                                               ; preds = %81, %73
  %90 = phi i1 [ false, %73 ], [ %88, %81 ]
  %91 = load ptr, ptr %13, align 8, !tbaa !9
  %92 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %91, i32 0, i32 3
  %93 = zext i1 %90 to i8
  store i8 %93, ptr %92, align 4, !tbaa !87
  %94 = load ptr, ptr %13, align 8, !tbaa !9
  %95 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %94, i32 0, i32 3
  %96 = load i8, ptr %95, align 4, !tbaa !87, !range !11, !noundef !12
  %97 = trunc i8 %96 to i1
  br i1 %97, label %117, label %98

98:                                               ; preds = %89
  %99 = load i8, ptr %2, align 1, !tbaa !5, !range !11, !noundef !12
  %100 = trunc i8 %99 to i1
  br i1 %100, label %101, label %114

101:                                              ; preds = %98
  %102 = load i32, ptr %10, align 4, !tbaa !75
  %103 = icmp ne i32 %102, 0
  br i1 %103, label %113, label %104

104:                                              ; preds = %101
  %105 = load i8, ptr %7, align 1, !tbaa !5, !range !11, !noundef !12
  %106 = trunc i8 %105 to i1
  br i1 %106, label %113, label %107

107:                                              ; preds = %104
  %108 = load i8, ptr %8, align 1, !tbaa !5, !range !11, !noundef !12
  %109 = trunc i8 %108 to i1
  br i1 %109, label %113, label %110

110:                                              ; preds = %107
  %111 = load i8, ptr %9, align 1, !tbaa !5, !range !11, !noundef !12
  %112 = trunc i8 %111 to i1
  br i1 %112, label %113, label %114

113:                                              ; preds = %110, %107, %104, %101
  store i32 2, ptr %16, align 4
  br label %118

114:                                              ; preds = %110, %98
  %115 = load ptr, ptr %4, align 8, !tbaa !9
  %116 = getelementptr inbounds %struct.ImGuiIO, ptr %115, i32 0, i32 56
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %116, ptr align 4 %14, i64 8, i1 false), !tbaa.struct !83
  store i8 1, ptr %6, align 1, !tbaa !5
  br label %117

117:                                              ; preds = %114, %89
  store i32 0, ptr %16, align 4
  br label %118

118:                                              ; preds = %117, %113
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  %119 = load i32, ptr %16, align 4
  switch i32 %119, label %532 [
    i32 0, label %120
  ]

120:                                              ; preds = %118
  br label %531

121:                                              ; preds = %47
  %122 = load ptr, ptr %13, align 8, !tbaa !9
  %123 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %122, i32 0, i32 0
  %124 = load i32, ptr %123, align 4, !tbaa !77
  %125 = icmp eq i32 %124, 3
  br i1 %125, label %126, label %197

126:                                              ; preds = %121
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #7
  %127 = load ptr, ptr %13, align 8, !tbaa !9
  %128 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %127, i32 0, i32 2
  %129 = getelementptr inbounds %struct.ImGuiInputEventMouseButton, ptr %128, i32 0, i32 0
  %130 = load i32, ptr %129, align 4, !tbaa !80
  store i32 %130, ptr %17, align 4, !tbaa !75
  %131 = load i32, ptr %17, align 4, !tbaa !75
  %132 = icmp sge i32 %131, 0
  br i1 %132, label %133, label %136

133:                                              ; preds = %126
  %134 = load i32, ptr %17, align 4, !tbaa !75
  %135 = icmp slt i32 %134, 5
  br label %136

136:                                              ; preds = %133, %126
  %137 = phi i1 [ false, %126 ], [ %135, %133 ]
  br i1 %137, label %138, label %139

138:                                              ; preds = %136
  br label %141

139:                                              ; preds = %136
  call void @__assert_fail(ptr noundef @.str.173, ptr noundef @.str.4, i32 noundef 8121, ptr noundef @__PRETTY_FUNCTION__._ZN5ImGui17UpdateInputEventsEb) #8
  unreachable

140:                                              ; No predecessors!
  br label %141

141:                                              ; preds = %140, %138
  %142 = load ptr, ptr %4, align 8, !tbaa !9
  %143 = getelementptr inbounds %struct.ImGuiIO, ptr %142, i32 0, i32 57
  %144 = load i32, ptr %17, align 4, !tbaa !75
  %145 = sext i32 %144 to i64
  %146 = getelementptr inbounds [5 x i8], ptr %143, i64 0, i64 %145
  %147 = load i8, ptr %146, align 1, !tbaa !5, !range !11, !noundef !12
  %148 = trunc i8 %147 to i1
  %149 = zext i1 %148 to i32
  %150 = load ptr, ptr %13, align 8, !tbaa !9
  %151 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %150, i32 0, i32 2
  %152 = getelementptr inbounds %struct.ImGuiInputEventMouseButton, ptr %151, i32 0, i32 1
  %153 = load i8, ptr %152, align 4, !tbaa !80, !range !11, !noundef !12
  %154 = trunc i8 %153 to i1
  %155 = zext i1 %154 to i32
  %156 = icmp eq i32 %149, %155
  %157 = load ptr, ptr %13, align 8, !tbaa !9
  %158 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %157, i32 0, i32 3
  %159 = zext i1 %156 to i8
  store i8 %159, ptr %158, align 4, !tbaa !87
  %160 = load ptr, ptr %13, align 8, !tbaa !9
  %161 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %160, i32 0, i32 3
  %162 = load i8, ptr %161, align 4, !tbaa !87, !range !11, !noundef !12
  %163 = trunc i8 %162 to i1
  br i1 %163, label %193, label %164

164:                                              ; preds = %141
  %165 = load i8, ptr %2, align 1, !tbaa !5, !range !11, !noundef !12
  %166 = trunc i8 %165 to i1
  br i1 %166, label %167, label %177

167:                                              ; preds = %164
  %168 = load i32, ptr %10, align 4, !tbaa !75
  %169 = load i32, ptr %17, align 4, !tbaa !75
  %170 = shl i32 1, %169
  %171 = and i32 %168, %170
  %172 = icmp ne i32 %171, 0
  br i1 %172, label %176, label %173

173:                                              ; preds = %167
  %174 = load i8, ptr %7, align 1, !tbaa !5, !range !11, !noundef !12
  %175 = trunc i8 %174 to i1
  br i1 %175, label %176, label %177

176:                                              ; preds = %173, %167
  store i32 2, ptr %16, align 4
  br label %194

177:                                              ; preds = %173, %164
  %178 = load ptr, ptr %13, align 8, !tbaa !9
  %179 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %178, i32 0, i32 2
  %180 = getelementptr inbounds %struct.ImGuiInputEventMouseButton, ptr %179, i32 0, i32 1
  %181 = load i8, ptr %180, align 4, !tbaa !80, !range !11, !noundef !12
  %182 = trunc i8 %181 to i1
  %183 = load ptr, ptr %4, align 8, !tbaa !9
  %184 = getelementptr inbounds %struct.ImGuiIO, ptr %183, i32 0, i32 57
  %185 = load i32, ptr %17, align 4, !tbaa !75
  %186 = sext i32 %185 to i64
  %187 = getelementptr inbounds [5 x i8], ptr %184, i64 0, i64 %186
  %188 = zext i1 %182 to i8
  store i8 %188, ptr %187, align 1, !tbaa !5
  %189 = load i32, ptr %17, align 4, !tbaa !75
  %190 = shl i32 1, %189
  %191 = load i32, ptr %10, align 4, !tbaa !75
  %192 = or i32 %191, %190
  store i32 %192, ptr %10, align 4, !tbaa !75
  br label %193

193:                                              ; preds = %177, %141
  store i32 0, ptr %16, align 4
  br label %194

194:                                              ; preds = %193, %176
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  %195 = load i32, ptr %16, align 4
  switch i32 %195, label %532 [
    i32 0, label %196
  ]

196:                                              ; preds = %194
  br label %530

197:                                              ; preds = %121
  %198 = load ptr, ptr %13, align 8, !tbaa !9
  %199 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %198, i32 0, i32 0
  %200 = load i32, ptr %199, align 4, !tbaa !77
  %201 = icmp eq i32 %200, 2
  br i1 %201, label %202, label %251

202:                                              ; preds = %197
  %203 = load ptr, ptr %13, align 8, !tbaa !9
  %204 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %203, i32 0, i32 2
  %205 = getelementptr inbounds %struct.ImGuiInputEventMouseWheel, ptr %204, i32 0, i32 0
  %206 = load float, ptr %205, align 4, !tbaa !80
  %207 = fcmp oeq float %206, 0.000000e+00
  br i1 %207, label %208, label %214

208:                                              ; preds = %202
  %209 = load ptr, ptr %13, align 8, !tbaa !9
  %210 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %209, i32 0, i32 2
  %211 = getelementptr inbounds %struct.ImGuiInputEventMouseWheel, ptr %210, i32 0, i32 1
  %212 = load float, ptr %211, align 4, !tbaa !80
  %213 = fcmp oeq float %212, 0.000000e+00
  br label %214

214:                                              ; preds = %208, %202
  %215 = phi i1 [ false, %202 ], [ %213, %208 ]
  %216 = load ptr, ptr %13, align 8, !tbaa !9
  %217 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %216, i32 0, i32 3
  %218 = zext i1 %215 to i8
  store i8 %218, ptr %217, align 4, !tbaa !87
  %219 = load ptr, ptr %13, align 8, !tbaa !9
  %220 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %219, i32 0, i32 3
  %221 = load i8, ptr %220, align 4, !tbaa !87, !range !11, !noundef !12
  %222 = trunc i8 %221 to i1
  br i1 %222, label %250, label %223

223:                                              ; preds = %214
  %224 = load i8, ptr %2, align 1, !tbaa !5, !range !11, !noundef !12
  %225 = trunc i8 %224 to i1
  br i1 %225, label %226, label %233

226:                                              ; preds = %223
  %227 = load i8, ptr %6, align 1, !tbaa !5, !range !11, !noundef !12
  %228 = trunc i8 %227 to i1
  br i1 %228, label %232, label %229

229:                                              ; preds = %226
  %230 = load i32, ptr %10, align 4, !tbaa !75
  %231 = icmp ne i32 %230, 0
  br i1 %231, label %232, label %233

232:                                              ; preds = %229, %226
  store i32 2, ptr %16, align 4
  br label %532

233:                                              ; preds = %229, %223
  %234 = load ptr, ptr %13, align 8, !tbaa !9
  %235 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %234, i32 0, i32 2
  %236 = getelementptr inbounds %struct.ImGuiInputEventMouseWheel, ptr %235, i32 0, i32 0
  %237 = load float, ptr %236, align 4, !tbaa !80
  %238 = load ptr, ptr %4, align 8, !tbaa !9
  %239 = getelementptr inbounds %struct.ImGuiIO, ptr %238, i32 0, i32 59
  %240 = load float, ptr %239, align 8, !tbaa !88
  %241 = fadd float %240, %237
  store float %241, ptr %239, align 8, !tbaa !88
  %242 = load ptr, ptr %13, align 8, !tbaa !9
  %243 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %242, i32 0, i32 2
  %244 = getelementptr inbounds %struct.ImGuiInputEventMouseWheel, ptr %243, i32 0, i32 1
  %245 = load float, ptr %244, align 4, !tbaa !80
  %246 = load ptr, ptr %4, align 8, !tbaa !9
  %247 = getelementptr inbounds %struct.ImGuiIO, ptr %246, i32 0, i32 58
  %248 = load float, ptr %247, align 4, !tbaa !89
  %249 = fadd float %248, %245
  store float %249, ptr %247, align 4, !tbaa !89
  store i8 1, ptr %7, align 1, !tbaa !5
  br label %250

250:                                              ; preds = %233, %214
  br label %529

251:                                              ; preds = %197
  %252 = load ptr, ptr %13, align 8, !tbaa !9
  %253 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %252, i32 0, i32 0
  %254 = load i32, ptr %253, align 4, !tbaa !77
  %255 = icmp eq i32 %254, 4
  br i1 %255, label %256, label %444

256:                                              ; preds = %251
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #7
  %257 = load ptr, ptr %13, align 8, !tbaa !9
  %258 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %257, i32 0, i32 2
  %259 = getelementptr inbounds %struct.ImGuiInputEventKey, ptr %258, i32 0, i32 0
  %260 = load i32, ptr %259, align 4, !tbaa !80
  store i32 %260, ptr %18, align 4, !tbaa !90
  %261 = load i32, ptr %18, align 4, !tbaa !90
  %262 = icmp ne i32 %261, 0
  br i1 %262, label %263, label %264

263:                                              ; preds = %256
  br label %266

264:                                              ; preds = %256
  call void @__assert_fail(ptr noundef @.str.174, ptr noundef @.str.4, i32 noundef 8148, ptr noundef @__PRETTY_FUNCTION__._ZN5ImGui17UpdateInputEventsEb) #8
  unreachable

265:                                              ; No predecessors!
  br label %266

266:                                              ; preds = %265, %263
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #7
  %267 = load i32, ptr %18, align 4, !tbaa !90
  %268 = sub nsw i32 %267, 0
  store i32 %268, ptr %19, align 4, !tbaa !75
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #7
  %269 = load ptr, ptr %4, align 8, !tbaa !9
  %270 = getelementptr inbounds %struct.ImGuiIO, ptr %269, i32 0, i32 65
  %271 = load i32, ptr %19, align 4, !tbaa !75
  %272 = sext i32 %271 to i64
  %273 = getelementptr inbounds [652 x %struct.ImGuiKeyData], ptr %270, i64 0, i64 %272
  store ptr %273, ptr %20, align 8, !tbaa !9
  %274 = load ptr, ptr %20, align 8, !tbaa !9
  %275 = getelementptr inbounds %struct.ImGuiKeyData, ptr %274, i32 0, i32 0
  %276 = load i8, ptr %275, align 4, !tbaa !92, !range !11, !noundef !12
  %277 = trunc i8 %276 to i1
  %278 = zext i1 %277 to i32
  %279 = load ptr, ptr %13, align 8, !tbaa !9
  %280 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %279, i32 0, i32 2
  %281 = getelementptr inbounds %struct.ImGuiInputEventKey, ptr %280, i32 0, i32 1
  %282 = load i8, ptr %281, align 4, !tbaa !80, !range !11, !noundef !12
  %283 = trunc i8 %282 to i1
  %284 = zext i1 %283 to i32
  %285 = icmp eq i32 %278, %284
  br i1 %285, label %286, label %295

286:                                              ; preds = %266
  %287 = load ptr, ptr %20, align 8, !tbaa !9
  %288 = getelementptr inbounds %struct.ImGuiKeyData, ptr %287, i32 0, i32 3
  %289 = load float, ptr %288, align 4, !tbaa !94
  %290 = load ptr, ptr %13, align 8, !tbaa !9
  %291 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %290, i32 0, i32 2
  %292 = getelementptr inbounds %struct.ImGuiInputEventKey, ptr %291, i32 0, i32 2
  %293 = load float, ptr %292, align 4, !tbaa !80
  %294 = fcmp oeq float %289, %293
  br label %295

295:                                              ; preds = %286, %266
  %296 = phi i1 [ false, %266 ], [ %294, %286 ]
  %297 = load ptr, ptr %13, align 8, !tbaa !9
  %298 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %297, i32 0, i32 3
  %299 = zext i1 %296 to i8
  store i8 %299, ptr %298, align 4, !tbaa !87
  %300 = load ptr, ptr %13, align 8, !tbaa !9
  %301 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %300, i32 0, i32 3
  %302 = load i8, ptr %301, align 4, !tbaa !87, !range !11, !noundef !12
  %303 = trunc i8 %302 to i1
  br i1 %303, label %440, label %304

304:                                              ; preds = %295
  %305 = load i8, ptr %2, align 1, !tbaa !5, !range !11, !noundef !12
  %306 = trunc i8 %305 to i1
  br i1 %306, label %307, label %330

307:                                              ; preds = %304
  %308 = load ptr, ptr %20, align 8, !tbaa !9
  %309 = getelementptr inbounds %struct.ImGuiKeyData, ptr %308, i32 0, i32 0
  %310 = load i8, ptr %309, align 4, !tbaa !92, !range !11, !noundef !12
  %311 = trunc i8 %310 to i1
  %312 = zext i1 %311 to i32
  %313 = load ptr, ptr %13, align 8, !tbaa !9
  %314 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %313, i32 0, i32 2
  %315 = getelementptr inbounds %struct.ImGuiInputEventKey, ptr %314, i32 0, i32 1
  %316 = load i8, ptr %315, align 4, !tbaa !80, !range !11, !noundef !12
  %317 = trunc i8 %316 to i1
  %318 = zext i1 %317 to i32
  %319 = icmp ne i32 %312, %318
  br i1 %319, label %320, label %330

320:                                              ; preds = %307
  %321 = load i32, ptr %19, align 4, !tbaa !75
  %322 = call noundef zeroext i1 @_ZNK10ImBitArrayILi652ELi0EE7TestBitEi(ptr noundef nonnull align 4 dereferenceable(84) %11, i32 noundef %321)
  br i1 %322, label %329, label %323

323:                                              ; preds = %320
  %324 = load i8, ptr %9, align 1, !tbaa !5, !range !11, !noundef !12
  %325 = trunc i8 %324 to i1
  br i1 %325, label %329, label %326

326:                                              ; preds = %323
  %327 = load i32, ptr %10, align 4, !tbaa !75
  %328 = icmp ne i32 %327, 0
  br i1 %328, label %329, label %330

329:                                              ; preds = %326, %323, %320
  store i32 2, ptr %16, align 4
  br label %441

330:                                              ; preds = %326, %307, %304
  %331 = load ptr, ptr %13, align 8, !tbaa !9
  %332 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %331, i32 0, i32 2
  %333 = getelementptr inbounds %struct.ImGuiInputEventKey, ptr %332, i32 0, i32 1
  %334 = load i8, ptr %333, align 4, !tbaa !80, !range !11, !noundef !12
  %335 = trunc i8 %334 to i1
  %336 = load ptr, ptr %20, align 8, !tbaa !9
  %337 = getelementptr inbounds %struct.ImGuiKeyData, ptr %336, i32 0, i32 0
  %338 = zext i1 %335 to i8
  store i8 %338, ptr %337, align 4, !tbaa !92
  %339 = load ptr, ptr %13, align 8, !tbaa !9
  %340 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %339, i32 0, i32 2
  %341 = getelementptr inbounds %struct.ImGuiInputEventKey, ptr %340, i32 0, i32 2
  %342 = load float, ptr %341, align 4, !tbaa !80
  %343 = load ptr, ptr %20, align 8, !tbaa !9
  %344 = getelementptr inbounds %struct.ImGuiKeyData, ptr %343, i32 0, i32 3
  store float %342, ptr %344, align 4, !tbaa !94
  store i8 1, ptr %8, align 1, !tbaa !5
  %345 = load i32, ptr %19, align 4, !tbaa !75
  call void @_ZN10ImBitArrayILi652ELi0EE6SetBitEi(ptr noundef nonnull align 4 dereferenceable(84) %11, i32 noundef %345)
  %346 = load i32, ptr %18, align 4, !tbaa !90
  %347 = icmp eq i32 %346, 641
  br i1 %347, label %357, label %348

348:                                              ; preds = %330
  %349 = load i32, ptr %18, align 4, !tbaa !90
  %350 = icmp eq i32 %349, 642
  br i1 %350, label %357, label %351

351:                                              ; preds = %348
  %352 = load i32, ptr %18, align 4, !tbaa !90
  %353 = icmp eq i32 %352, 643
  br i1 %353, label %357, label %354

354:                                              ; preds = %351
  %355 = load i32, ptr %18, align 4, !tbaa !90
  %356 = icmp eq i32 %355, 644
  br i1 %356, label %357, label %405

357:                                              ; preds = %354, %351, %348, %330
  %358 = load i32, ptr %18, align 4, !tbaa !90
  %359 = icmp eq i32 %358, 641
  br i1 %359, label %360, label %368

360:                                              ; preds = %357
  %361 = load ptr, ptr %20, align 8, !tbaa !9
  %362 = getelementptr inbounds %struct.ImGuiKeyData, ptr %361, i32 0, i32 0
  %363 = load i8, ptr %362, align 4, !tbaa !92, !range !11, !noundef !12
  %364 = trunc i8 %363 to i1
  %365 = load ptr, ptr %4, align 8, !tbaa !9
  %366 = getelementptr inbounds %struct.ImGuiIO, ptr %365, i32 0, i32 60
  %367 = zext i1 %364 to i8
  store i8 %367, ptr %366, align 4, !tbaa !95
  br label %368

368:                                              ; preds = %360, %357
  %369 = load i32, ptr %18, align 4, !tbaa !90
  %370 = icmp eq i32 %369, 642
  br i1 %370, label %371, label %379

371:                                              ; preds = %368
  %372 = load ptr, ptr %20, align 8, !tbaa !9
  %373 = getelementptr inbounds %struct.ImGuiKeyData, ptr %372, i32 0, i32 0
  %374 = load i8, ptr %373, align 4, !tbaa !92, !range !11, !noundef !12
  %375 = trunc i8 %374 to i1
  %376 = load ptr, ptr %4, align 8, !tbaa !9
  %377 = getelementptr inbounds %struct.ImGuiIO, ptr %376, i32 0, i32 61
  %378 = zext i1 %375 to i8
  store i8 %378, ptr %377, align 1, !tbaa !96
  br label %379

379:                                              ; preds = %371, %368
  %380 = load i32, ptr %18, align 4, !tbaa !90
  %381 = icmp eq i32 %380, 643
  br i1 %381, label %382, label %390

382:                                              ; preds = %379
  %383 = load ptr, ptr %20, align 8, !tbaa !9
  %384 = getelementptr inbounds %struct.ImGuiKeyData, ptr %383, i32 0, i32 0
  %385 = load i8, ptr %384, align 4, !tbaa !92, !range !11, !noundef !12
  %386 = trunc i8 %385 to i1
  %387 = load ptr, ptr %4, align 8, !tbaa !9
  %388 = getelementptr inbounds %struct.ImGuiIO, ptr %387, i32 0, i32 62
  %389 = zext i1 %386 to i8
  store i8 %389, ptr %388, align 2, !tbaa !97
  br label %390

390:                                              ; preds = %382, %379
  %391 = load i32, ptr %18, align 4, !tbaa !90
  %392 = icmp eq i32 %391, 644
  br i1 %392, label %393, label %401

393:                                              ; preds = %390
  %394 = load ptr, ptr %20, align 8, !tbaa !9
  %395 = getelementptr inbounds %struct.ImGuiKeyData, ptr %394, i32 0, i32 0
  %396 = load i8, ptr %395, align 4, !tbaa !92, !range !11, !noundef !12
  %397 = trunc i8 %396 to i1
  %398 = load ptr, ptr %4, align 8, !tbaa !9
  %399 = getelementptr inbounds %struct.ImGuiIO, ptr %398, i32 0, i32 63
  %400 = zext i1 %397 to i8
  store i8 %400, ptr %399, align 1, !tbaa !98
  br label %401

401:                                              ; preds = %393, %390
  %402 = call noundef i32 @_ZN5ImGui17GetMergedModFlagsEv()
  %403 = load ptr, ptr %4, align 8, !tbaa !9
  %404 = getelementptr inbounds %struct.ImGuiIO, ptr %403, i32 0, i32 64
  store i32 %402, ptr %404, align 8, !tbaa !99
  br label %405

405:                                              ; preds = %401, %354
  %406 = load ptr, ptr %20, align 8, !tbaa !9
  %407 = getelementptr inbounds %struct.ImGuiKeyData, ptr %406, i32 0, i32 0
  %408 = load i8, ptr %407, align 4, !tbaa !92, !range !11, !noundef !12
  %409 = trunc i8 %408 to i1
  %410 = load ptr, ptr %4, align 8, !tbaa !9
  %411 = getelementptr inbounds %struct.ImGuiIO, ptr %410, i32 0, i32 54
  %412 = load i32, ptr %18, align 4, !tbaa !90
  %413 = sext i32 %412 to i64
  %414 = getelementptr inbounds [652 x i8], ptr %411, i64 0, i64 %413
  %415 = zext i1 %409 to i8
  store i8 %415, ptr %414, align 1, !tbaa !5
  %416 = load ptr, ptr %4, align 8, !tbaa !9
  %417 = getelementptr inbounds %struct.ImGuiIO, ptr %416, i32 0, i32 53
  %418 = load i32, ptr %18, align 4, !tbaa !90
  %419 = sext i32 %418 to i64
  %420 = getelementptr inbounds [652 x i32], ptr %417, i64 0, i64 %419
  %421 = load i32, ptr %420, align 4, !tbaa !75
  %422 = icmp ne i32 %421, -1
  br i1 %422, label %423, label %439

423:                                              ; preds = %405
  %424 = load ptr, ptr %20, align 8, !tbaa !9
  %425 = getelementptr inbounds %struct.ImGuiKeyData, ptr %424, i32 0, i32 0
  %426 = load i8, ptr %425, align 4, !tbaa !92, !range !11, !noundef !12
  %427 = trunc i8 %426 to i1
  %428 = load ptr, ptr %4, align 8, !tbaa !9
  %429 = getelementptr inbounds %struct.ImGuiIO, ptr %428, i32 0, i32 54
  %430 = load ptr, ptr %4, align 8, !tbaa !9
  %431 = getelementptr inbounds %struct.ImGuiIO, ptr %430, i32 0, i32 53
  %432 = load i32, ptr %18, align 4, !tbaa !90
  %433 = sext i32 %432 to i64
  %434 = getelementptr inbounds [652 x i32], ptr %431, i64 0, i64 %433
  %435 = load i32, ptr %434, align 4, !tbaa !75
  %436 = sext i32 %435 to i64
  %437 = getelementptr inbounds [652 x i8], ptr %429, i64 0, i64 %436
  %438 = zext i1 %427 to i8
  store i8 %438, ptr %437, align 1, !tbaa !5
  br label %439

439:                                              ; preds = %423, %405
  br label %440

440:                                              ; preds = %439, %295
  store i32 0, ptr %16, align 4
  br label %441

441:                                              ; preds = %440, %329
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  %442 = load i32, ptr %16, align 4
  switch i32 %442, label %532 [
    i32 0, label %443
  ]

443:                                              ; preds = %441
  br label %528

444:                                              ; preds = %251
  %445 = load ptr, ptr %13, align 8, !tbaa !9
  %446 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %445, i32 0, i32 0
  %447 = load i32, ptr %446, align 4, !tbaa !77
  %448 = icmp eq i32 %447, 5
  br i1 %448, label %449, label %489

449:                                              ; preds = %444
  %450 = load i8, ptr %2, align 1, !tbaa !5, !range !11, !noundef !12
  %451 = trunc i8 %450 to i1
  br i1 %451, label %452, label %468

452:                                              ; preds = %449
  %453 = load i8, ptr %8, align 1, !tbaa !5, !range !11, !noundef !12
  %454 = trunc i8 %453 to i1
  br i1 %454, label %455, label %458

455:                                              ; preds = %452
  %456 = load i8, ptr %5, align 1, !tbaa !5, !range !11, !noundef !12
  %457 = trunc i8 %456 to i1
  br i1 %457, label %467, label %458

458:                                              ; preds = %455, %452
  %459 = load i32, ptr %10, align 4, !tbaa !75
  %460 = icmp ne i32 %459, 0
  br i1 %460, label %467, label %461

461:                                              ; preds = %458
  %462 = load i8, ptr %6, align 1, !tbaa !5, !range !11, !noundef !12
  %463 = trunc i8 %462 to i1
  br i1 %463, label %467, label %464

464:                                              ; preds = %461
  %465 = load i8, ptr %7, align 1, !tbaa !5, !range !11, !noundef !12
  %466 = trunc i8 %465 to i1
  br i1 %466, label %467, label %468

467:                                              ; preds = %464, %461, %458, %455
  store i32 2, ptr %16, align 4
  br label %532

468:                                              ; preds = %464, %449
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  %469 = load ptr, ptr %13, align 8, !tbaa !9
  %470 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %469, i32 0, i32 2
  %471 = getelementptr inbounds %struct.ImGuiInputEventText, ptr %470, i32 0, i32 0
  %472 = load i32, ptr %471, align 4, !tbaa !80
  store i32 %472, ptr %21, align 4, !tbaa !75
  %473 = load ptr, ptr %4, align 8, !tbaa !9
  %474 = getelementptr inbounds %struct.ImGuiIO, ptr %473, i32 0, i32 86
  call void @llvm.lifetime.start.p0(i64 2, ptr %22) #7
  %475 = load i32, ptr %21, align 4, !tbaa !75
  %476 = icmp ule i32 %475, 65535
  br i1 %476, label %477, label %481

477:                                              ; preds = %468
  %478 = load i32, ptr %21, align 4, !tbaa !75
  %479 = trunc i32 %478 to i16
  %480 = zext i16 %479 to i32
  br label %482

481:                                              ; preds = %468
  br label %482

482:                                              ; preds = %481, %477
  %483 = phi i32 [ %480, %477 ], [ 65533, %481 ]
  %484 = trunc i32 %483 to i16
  store i16 %484, ptr %22, align 2, !tbaa !100
  call void @_ZN8ImVectorItE9push_backERKt(ptr noundef nonnull align 8 dereferenceable(16) %474, ptr noundef nonnull align 2 dereferenceable(2) %22)
  call void @llvm.lifetime.end.p0(i64 2, ptr %22) #7
  %485 = load i8, ptr %5, align 1, !tbaa !5, !range !11, !noundef !12
  %486 = trunc i8 %485 to i1
  br i1 %486, label %487, label %488

487:                                              ; preds = %482
  store i8 1, ptr %9, align 1, !tbaa !5
  br label %488

488:                                              ; preds = %487, %482
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  br label %527

489:                                              ; preds = %444
  %490 = load ptr, ptr %13, align 8, !tbaa !9
  %491 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %490, i32 0, i32 0
  %492 = load i32, ptr %491, align 4, !tbaa !77
  %493 = icmp eq i32 %492, 6
  br i1 %493, label %494, label %525

494:                                              ; preds = %489
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #7
  %495 = load ptr, ptr %13, align 8, !tbaa !9
  %496 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %495, i32 0, i32 2
  %497 = getelementptr inbounds %struct.ImGuiInputEventAppFocused, ptr %496, i32 0, i32 0
  %498 = load i8, ptr %497, align 4, !tbaa !80, !range !11, !noundef !12
  %499 = trunc i8 %498 to i1
  %500 = xor i1 %499, true
  %501 = zext i1 %500 to i8
  store i8 %501, ptr %23, align 1, !tbaa !5
  %502 = load ptr, ptr %4, align 8, !tbaa !9
  %503 = getelementptr inbounds %struct.ImGuiIO, ptr %502, i32 0, i32 81
  %504 = load i8, ptr %503, align 8, !tbaa !101, !range !11, !noundef !12
  %505 = trunc i8 %504 to i1
  %506 = zext i1 %505 to i32
  %507 = load i8, ptr %23, align 1, !tbaa !5, !range !11, !noundef !12
  %508 = trunc i8 %507 to i1
  %509 = zext i1 %508 to i32
  %510 = icmp eq i32 %506, %509
  %511 = load ptr, ptr %13, align 8, !tbaa !9
  %512 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %511, i32 0, i32 3
  %513 = zext i1 %510 to i8
  store i8 %513, ptr %512, align 4, !tbaa !87
  %514 = load ptr, ptr %13, align 8, !tbaa !9
  %515 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %514, i32 0, i32 3
  %516 = load i8, ptr %515, align 4, !tbaa !87, !range !11, !noundef !12
  %517 = trunc i8 %516 to i1
  br i1 %517, label %524, label %518

518:                                              ; preds = %494
  %519 = load i8, ptr %23, align 1, !tbaa !5, !range !11, !noundef !12
  %520 = trunc i8 %519 to i1
  %521 = load ptr, ptr %4, align 8, !tbaa !9
  %522 = getelementptr inbounds %struct.ImGuiIO, ptr %521, i32 0, i32 81
  %523 = zext i1 %520 to i8
  store i8 %523, ptr %522, align 8, !tbaa !101
  br label %524

524:                                              ; preds = %518, %494
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #7
  br label %526

525:                                              ; preds = %489
  call void @__assert_fail(ptr noundef @.str.175, ptr noundef @.str.4, i32 noundef 8200, ptr noundef @__PRETTY_FUNCTION__._ZN5ImGui17UpdateInputEventsEb) #8
  unreachable

526:                                              ; preds = %524
  br label %527

527:                                              ; preds = %526, %488
  br label %528

528:                                              ; preds = %527, %443
  br label %529

529:                                              ; preds = %528, %250
  br label %530

530:                                              ; preds = %529, %196
  br label %531

531:                                              ; preds = %530, %120
  store i32 0, ptr %16, align 4
  br label %532

532:                                              ; preds = %531, %467, %441, %232, %194, %118
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  %533 = load i32, ptr %16, align 4
  switch i32 %533, label %635 [
    i32 0, label %534
    i32 2, label %538
  ]

534:                                              ; preds = %532
  br label %535

535:                                              ; preds = %534
  %536 = load i32, ptr %12, align 4, !tbaa !75
  %537 = add nsw i32 %536, 1
  store i32 %537, ptr %12, align 4, !tbaa !75
  br label %40, !llvm.loop !102

538:                                              ; preds = %532, %40
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #7
  store i32 0, ptr %24, align 4, !tbaa !75
  br label %539

539:                                              ; preds = %551, %538
  %540 = load i32, ptr %24, align 4, !tbaa !75
  %541 = load i32, ptr %12, align 4, !tbaa !75
  %542 = icmp slt i32 %540, %541
  br i1 %542, label %544, label %543

543:                                              ; preds = %539
  store i32 5, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  br label %554

544:                                              ; preds = %539
  %545 = load ptr, ptr %3, align 8, !tbaa !9
  %546 = getelementptr inbounds %struct.ImGuiContext, ptr %545, i32 0, i32 4
  %547 = load ptr, ptr %3, align 8, !tbaa !9
  %548 = getelementptr inbounds %struct.ImGuiContext, ptr %547, i32 0, i32 3
  %549 = load i32, ptr %24, align 4, !tbaa !75
  %550 = call noundef nonnull align 4 dereferenceable(22) ptr @_ZN8ImVectorI15ImGuiInputEventEixEi(ptr noundef nonnull align 8 dereferenceable(16) %548, i32 noundef %549)
  call void @_ZN8ImVectorI15ImGuiInputEventE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(16) %546, ptr noundef nonnull align 4 dereferenceable(22) %550)
  br label %551

551:                                              ; preds = %544
  %552 = load i32, ptr %24, align 4, !tbaa !75
  %553 = add nsw i32 %552, 1
  store i32 %553, ptr %24, align 4, !tbaa !75
  br label %539, !llvm.loop !104

554:                                              ; preds = %543
  %555 = load i32, ptr %12, align 4, !tbaa !75
  %556 = icmp ne i32 %555, 0
  br i1 %556, label %557, label %597

557:                                              ; preds = %554
  %558 = load ptr, ptr %3, align 8, !tbaa !9
  %559 = getelementptr inbounds %struct.ImGuiContext, ptr %558, i32 0, i32 209
  %560 = load i32, ptr %559, align 4, !tbaa !105
  %561 = and i32 %560, 32
  %562 = icmp ne i32 %561, 0
  br i1 %562, label %563, label %597

563:                                              ; preds = %557
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #7
  store i32 0, ptr %25, align 4, !tbaa !75
  br label %564

564:                                              ; preds = %593, %563
  %565 = load i32, ptr %25, align 4, !tbaa !75
  %566 = load ptr, ptr %3, align 8, !tbaa !9
  %567 = getelementptr inbounds %struct.ImGuiContext, ptr %566, i32 0, i32 3
  %568 = getelementptr inbounds %struct.ImVector.0, ptr %567, i32 0, i32 0
  %569 = load i32, ptr %568, align 8, !tbaa !76
  %570 = icmp slt i32 %565, %569
  br i1 %570, label %572, label %571

571:                                              ; preds = %564
  store i32 8, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  br label %596

572:                                              ; preds = %564
  %573 = load i32, ptr %25, align 4, !tbaa !75
  %574 = load i32, ptr %12, align 4, !tbaa !75
  %575 = icmp slt i32 %573, %574
  br i1 %575, label %576, label %586

576:                                              ; preds = %572
  %577 = load ptr, ptr %3, align 8, !tbaa !9
  %578 = getelementptr inbounds %struct.ImGuiContext, ptr %577, i32 0, i32 3
  %579 = load i32, ptr %25, align 4, !tbaa !75
  %580 = call noundef nonnull align 4 dereferenceable(22) ptr @_ZN8ImVectorI15ImGuiInputEventEixEi(ptr noundef nonnull align 8 dereferenceable(16) %578, i32 noundef %579)
  %581 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %580, i32 0, i32 3
  %582 = load i8, ptr %581, align 4, !tbaa !87, !range !11, !noundef !12
  %583 = trunc i8 %582 to i1
  %584 = zext i1 %583 to i64
  %585 = select i1 %583, ptr @.str.176, ptr @.str.177
  br label %587

586:                                              ; preds = %572
  br label %587

587:                                              ; preds = %586, %576
  %588 = phi ptr [ %585, %576 ], [ @.str.178, %586 ]
  %589 = load ptr, ptr %3, align 8, !tbaa !9
  %590 = getelementptr inbounds %struct.ImGuiContext, ptr %589, i32 0, i32 3
  %591 = load i32, ptr %25, align 4, !tbaa !75
  %592 = call noundef nonnull align 4 dereferenceable(22) ptr @_ZN8ImVectorI15ImGuiInputEventEixEi(ptr noundef nonnull align 8 dereferenceable(16) %590, i32 noundef %591)
  call void @_ZL20DebugPrintInputEventPKcPK15ImGuiInputEvent(ptr noundef %588, ptr noundef %592)
  br label %593

593:                                              ; preds = %587
  %594 = load i32, ptr %25, align 4, !tbaa !75
  %595 = add nsw i32 %594, 1
  store i32 %595, ptr %25, align 4, !tbaa !75
  br label %564, !llvm.loop !106

596:                                              ; preds = %571
  br label %597

597:                                              ; preds = %596, %557, %554
  %598 = load i32, ptr %12, align 4, !tbaa !75
  %599 = load ptr, ptr %3, align 8, !tbaa !9
  %600 = getelementptr inbounds %struct.ImGuiContext, ptr %599, i32 0, i32 3
  %601 = getelementptr inbounds %struct.ImVector.0, ptr %600, i32 0, i32 0
  %602 = load i32, ptr %601, align 8, !tbaa !76
  %603 = icmp eq i32 %598, %602
  br i1 %603, label %604, label %607

604:                                              ; preds = %597
  %605 = load ptr, ptr %3, align 8, !tbaa !9
  %606 = getelementptr inbounds %struct.ImGuiContext, ptr %605, i32 0, i32 3
  call void @_ZN8ImVectorI15ImGuiInputEventE6resizeEi(ptr noundef nonnull align 8 dereferenceable(16) %606, i32 noundef 0)
  br label %622

607:                                              ; preds = %597
  %608 = load ptr, ptr %3, align 8, !tbaa !9
  %609 = getelementptr inbounds %struct.ImGuiContext, ptr %608, i32 0, i32 3
  %610 = load ptr, ptr %3, align 8, !tbaa !9
  %611 = getelementptr inbounds %struct.ImGuiContext, ptr %610, i32 0, i32 3
  %612 = getelementptr inbounds %struct.ImVector.0, ptr %611, i32 0, i32 2
  %613 = load ptr, ptr %612, align 8, !tbaa !107
  %614 = load ptr, ptr %3, align 8, !tbaa !9
  %615 = getelementptr inbounds %struct.ImGuiContext, ptr %614, i32 0, i32 3
  %616 = getelementptr inbounds %struct.ImVector.0, ptr %615, i32 0, i32 2
  %617 = load ptr, ptr %616, align 8, !tbaa !107
  %618 = load i32, ptr %12, align 4, !tbaa !75
  %619 = sext i32 %618 to i64
  %620 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %617, i64 %619
  %621 = call noundef ptr @_ZN8ImVectorI15ImGuiInputEventE5eraseEPKS0_S3_(ptr noundef nonnull align 8 dereferenceable(16) %609, ptr noundef %613, ptr noundef %620)
  br label %622

622:                                              ; preds = %607, %604
  %623 = load ptr, ptr %3, align 8, !tbaa !9
  %624 = getelementptr inbounds %struct.ImGuiContext, ptr %623, i32 0, i32 2
  %625 = getelementptr inbounds %struct.ImGuiIO, ptr %624, i32 0, i32 81
  %626 = load i8, ptr %625, align 8, !tbaa !108, !range !11, !noundef !12
  %627 = trunc i8 %626 to i1
  br i1 %627, label %628, label %634

628:                                              ; preds = %622
  %629 = load ptr, ptr %3, align 8, !tbaa !9
  %630 = getelementptr inbounds %struct.ImGuiContext, ptr %629, i32 0, i32 2
  call void @_ZN7ImGuiIO14ClearInputKeysEv(ptr noundef nonnull align 8 dereferenceable(14264) %630)
  %631 = load ptr, ptr %3, align 8, !tbaa !9
  %632 = getelementptr inbounds %struct.ImGuiContext, ptr %631, i32 0, i32 2
  %633 = getelementptr inbounds %struct.ImGuiIO, ptr %632, i32 0, i32 81
  store i8 0, ptr %633, align 8, !tbaa !108
  br label %634

634:                                              ; preds = %628, %622
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 84, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %6) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %5) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #7
  ret void

635:                                              ; preds = %532
  unreachable
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN10ImBitArrayILi652ELi0EEC2Ev(ptr noundef nonnull align 4 dereferenceable(84)) unnamed_addr #6 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef float @_ZL13ImFloorSignedf(float noundef) #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK10ImBitArrayILi652ELi0EE7TestBitEi(ptr noundef nonnull align 4 dereferenceable(84), i32 noundef) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN10ImBitArrayILi652ELi0EE6SetBitEi(ptr noundef nonnull align 4 dereferenceable(84), i32 noundef) #1 align 2

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { 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 #4 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 = { 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 = { 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 = !{!"bool", !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 = !{i8 0, i8 2}
!12 = !{}
!13 = !{!14, !16, i64 21876}
!14 = !{!"_ZTS12ImGuiContext", !6, i64 0, !6, i64 1, !15, i64 8, !21, i64 14272, !21, i64 14288, !22, i64 14304, !10, i64 15352, !18, i64 15360, !18, i64 15364, !23, i64 15368, !25, i64 15880, !16, i64 15888, !16, i64 15892, !16, i64 15896, !6, i64 15900, !6, i64 15901, !6, i64 15902, !6, i64 15903, !6, i64 15904, !10, i64 15912, !26, i64 15920, !26, i64 15936, !26, i64 15952, !27, i64 15968, !28, i64 15984, !16, i64 16000, !17, i64 16004, !10, i64 16016, !10, i64 16024, !10, i64 16032, !10, i64 16040, !10, i64 16048, !17, i64 16056, !18, i64 16064, !16, i64 16068, !16, i64 16072, !16, i64 16076, !6, i64 16080, !6, i64 16081, !6, i64 16082, !6, i64 16083, !18, i64 16084, !18, i64 16088, !16, i64 16092, !16, i64 16096, !18, i64 16100, !6, i64 16104, !6, i64 16105, !6, i64 16106, !6, i64 16107, !6, i64 16108, !6, i64 16109, !17, i64 16112, !10, i64 16120, !30, i64 16128, !16, i64 16132, !16, i64 16136, !6, i64 16140, !6, i64 16141, !10, i64 16144, !16, i64 16152, !18, i64 16156, !16, i64 16160, !31, i64 16164, !16, i64 16184, !16, i64 16188, !32, i64 16192, !33, i64 16212, !35, i64 16272, !36, i64 16384, !37, i64 16400, !38, i64 16416, !39, i64 16432, !40, i64 16448, !41, i64 16464, !42, i64 16480, !42, i64 16496, !16, i64 16512, !43, i64 16520, !10, i64 16536, !16, i64 16544, !16, i64 16548, !16, i64 16552, !16, i64 16556, !16, i64 16560, !16, i64 16564, !16, i64 16568, !16, i64 16572, !16, i64 16576, !16, i64 16580, !16, i64 16584, !16, i64 16588, !30, i64 16592, !44, i64 16596, !6, i64 16600, !6, i64 16601, !6, i64 16602, !6, i64 16603, !6, i64 16604, !6, i64 16605, !6, i64 16606, !16, i64 16608, !34, i64 16612, !6, i64 16628, !6, i64 16629, !6, i64 16630, !16, i64 16632, !16, i64 16636, !16, i64 16640, !16, i64 16644, !16, i64 16648, !16, i64 16652, !34, i64 16656, !34, i64 16672, !16, i64 16688, !16, i64 16692, !16, i64 16696, !45, i64 16704, !45, i64 16752, !45, i64 16800, !45, i64 16848, !10, i64 16896, !10, i64 16904, !10, i64 16912, !18, i64 16920, !18, i64 16924, !6, i64 16928, !17, i64 16932, !17, i64 16940, !18, i64 16948, !16, i64 16952, !6, i64 16956, !6, i64 16957, !6, i64 16958, !16, i64 16960, !16, i64 16964, !16, i64 16968, !46, i64 16976, !34, i64 17040, !16, i64 17056, !16, i64 17060, !18, i64 17064, !16, i64 17068, !16, i64 17072, !16, i64 17076, !16, i64 17080, !47, i64 17088, !7, i64 17104, !16, i64 17120, !48, i64 17128, !10, i64 17144, !16, i64 17152, !49, i64 17160, !50, i64 17176, !52, i64 17216, !53, i64 17232, !10, i64 17248, !54, i64 17256, !56, i64 17296, !57, i64 17312, !16, i64 17328, !16, i64 17332, !18, i64 17336, !18, i64 17340, !17, i64 17344, !58, i64 17352, !62, i64 21072, !16, i64 21184, !16, i64 21188, !18, i64 21192, !18, i64 21196, !16, i64 21200, !24, i64 21204, !64, i64 21220, !18, i64 21268, !18, i64 21272, !6, i64 21276, !6, i64 21277, !18, i64 21280, !18, i64 21284, !18, i64 21288, !18, i64 21292, !19, i64 21296, !19, i64 21298, !59, i64 21304, !39, i64 21320, !65, i64 21336, !65, i64 21352, !7, i64 21368, !6, i64 21369, !18, i64 21372, !66, i64 21376, !67, i64 21392, !68, i64 21408, !69, i64 21424, !70, i64 21440, !16, i64 21456, !6, i64 21460, !71, i64 21464, !10, i64 21472, !66, i64 21480, !10, i64 21496, !10, i64 21504, !18, i64 21512, !6, i64 21516, !16, i64 21520, !16, i64 21524, !16, i64 21528, !16, i64 21532, !66, i64 21536, !6, i64 21552, !7, i64 21553, !16, i64 21556, !72, i64 21560, !73, i64 21576, !7, i64 21616, !16, i64 21856, !16, i64 21860, !18, i64 21864, !16, i64 21868, !16, i64 21872, !16, i64 21876, !59, i64 21880}
!15 = !{!"_ZTS7ImGuiIO", !16, i64 0, !16, i64 4, !17, i64 8, !18, i64 16, !18, i64 20, !10, i64 24, !10, i64 32, !18, i64 40, !18, i64 44, !18, i64 48, !18, i64 52, !18, i64 56, !18, i64 60, !18, i64 64, !10, i64 72, !10, i64 80, !18, i64 88, !6, i64 92, !10, i64 96, !17, i64 104, !6, i64 112, !6, i64 113, !6, i64 114, !6, i64 115, !6, i64 116, !6, i64 117, !6, i64 118, !6, i64 119, !18, 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, !10, i64 192, !10, i64 200, !6, i64 208, !6, i64 209, !6, i64 210, !6, i64 211, !6, i64 212, !6, i64 213, !6, i64 214, !18, i64 216, !16, i64 220, !16, i64 224, !16, i64 228, !16, i64 232, !16, i64 236, !17, i64 240, !7, i64 248, !7, i64 2856, !7, i64 3508, !17, i64 3572, !7, i64 3580, !18, i64 3588, !18, i64 3592, !6, i64 3596, !6, i64 3597, !6, i64 3598, !6, i64 3599, !16, i64 3600, !7, i64 3604, !6, i64 14036, !17, i64 14040, !7, i64 14048, !7, i64 14088, !7, i64 14128, !7, i64 14133, !7, i64 14138, !7, i64 14148, !7, i64 14158, !7, i64 14163, !7, i64 14168, !7, i64 14176, !7, i64 14196, !7, i64 14216, !18, i64 14236, !6, i64 14240, !6, i64 14241, !7, i64 14242, !6, i64 14243, !19, i64 14244, !20, i64 14248}
!16 = !{!"int", !7, i64 0}
!17 = !{!"_ZTS6ImVec2", !18, i64 0, !18, i64 4}
!18 = !{!"float", !7, i64 0}
!19 = !{!"short", !7, i64 0}
!20 = !{!"_ZTS8ImVectorItE", !16, i64 0, !16, i64 4, !10, i64 8}
!21 = !{!"_ZTS8ImVectorI15ImGuiInputEventE", !16, i64 0, !16, i64 4, !10, i64 8}
!22 = !{!"_ZTS10ImGuiStyle", !18, i64 0, !18, i64 4, !17, i64 8, !18, i64 16, !18, i64 20, !17, i64 24, !17, i64 32, !16, i64 40, !18, i64 44, !18, i64 48, !18, i64 52, !18, i64 56, !17, i64 60, !18, i64 68, !18, i64 72, !17, i64 76, !17, i64 84, !17, i64 92, !17, i64 100, !18, i64 108, !18, i64 112, !18, i64 116, !18, i64 120, !18, i64 124, !18, i64 128, !18, i64 132, !18, i64 136, !18, i64 140, !18, i64 144, !16, i64 148, !17, i64 152, !17, i64 160, !17, i64 168, !17, i64 176, !18, i64 184, !6, i64 188, !6, i64 189, !6, i64 190, !18, i64 192, !18, i64 196, !7, i64 200}
!23 = !{!"_ZTS20ImDrawListSharedData", !17, i64 0, !10, i64 8, !18, i64 16, !18, i64 20, !18, i64 24, !24, i64 28, !16, i64 44, !7, i64 48, !18, i64 432, !7, i64 436, !10, i64 504}
!24 = !{!"_ZTS6ImVec4", !18, i64 0, !18, i64 4, !18, i64 8, !18, i64 12}
!25 = !{!"double", !7, i64 0}
!26 = !{!"_ZTS8ImVectorIP11ImGuiWindowE", !16, i64 0, !16, i64 4, !10, i64 8}
!27 = !{!"_ZTS8ImVectorI20ImGuiWindowStackDataE", !16, i64 0, !16, i64 4, !10, i64 8}
!28 = !{!"_ZTS12ImGuiStorage", !29, i64 0}
!29 = !{!"_ZTS8ImVectorIN12ImGuiStorage16ImGuiStoragePairEE", !16, i64 0, !16, i64 4, !10, i64 8}
!30 = !{!"_ZTS16ImGuiInputSource", !7, i64 0}
!31 = !{!"_ZTS10ImBitArrayILi140ELin512EE", !7, i64 0}
!32 = !{!"_ZTS17ImGuiNextItemData", !16, i64 0, !18, i64 4, !16, i64 8, !16, i64 12, !6, i64 16}
!33 = !{!"_ZTS17ImGuiLastItemData", !16, i64 0, !16, i64 4, !16, i64 8, !34, i64 12, !34, i64 28, !34, i64 44}
!34 = !{!"_ZTS6ImRect", !17, i64 0, !17, i64 8}
!35 = !{!"_ZTS19ImGuiNextWindowData", !16, i64 0, !16, i64 4, !16, i64 8, !16, i64 12, !17, i64 16, !17, i64 24, !17, i64 32, !17, i64 40, !17, i64 48, !6, i64 56, !34, i64 60, !10, i64 80, !10, i64 88, !18, i64 96, !17, i64 100}
!36 = !{!"_ZTS8ImVectorI13ImGuiColorModE", !16, i64 0, !16, i64 4, !10, i64 8}
!37 = !{!"_ZTS8ImVectorI13ImGuiStyleModE", !16, i64 0, !16, i64 4, !10, i64 8}
!38 = !{!"_ZTS8ImVectorIP6ImFontE", !16, i64 0, !16, i64 4, !10, i64 8}
!39 = !{!"_ZTS8ImVectorIjE", !16, i64 0, !16, i64 4, !10, i64 8}
!40 = !{!"_ZTS8ImVectorIiE", !16, i64 0, !16, i64 4, !10, i64 8}
!41 = !{!"_ZTS8ImVectorI14ImGuiGroupDataE", !16, i64 0, !16, i64 4, !10, i64 8}
!42 = !{!"_ZTS8ImVectorI14ImGuiPopupDataE", !16, i64 0, !16, i64 4, !10, i64 8}
!43 = !{!"_ZTS8ImVectorIP14ImGuiViewportPE", !16, i64 0, !16, i64 4, !10, i64 8}
!44 = !{!"_ZTS13ImGuiNavLayer", !7, i64 0}
!45 = !{!"_ZTS16ImGuiNavItemData", !10, i64 0, !16, i64 8, !16, i64 12, !34, i64 16, !16, i64 32, !18, i64 36, !18, i64 40, !18, i64 44}
!46 = !{!"_ZTS12ImGuiPayload", !10, i64 0, !16, i64 8, !16, i64 12, !16, i64 16, !16, i64 20, !7, i64 24, !6, i64 57, !6, i64 58}
!47 = !{!"_ZTS8ImVectorIhE", !16, i64 0, !16, i64 4, !10, i64 8}
!48 = !{!"_ZTS8ImVectorI20ImGuiListClipperDataE", !16, i64 0, !16, i64 4, !10, i64 8}
!49 = !{!"_ZTS8ImVectorI18ImGuiTableTempDataE", !16, i64 0, !16, i64 4, !10, i64 8}
!50 = !{!"_ZTS6ImPoolI10ImGuiTableE", !51, i64 0, !28, i64 16, !16, i64 32, !16, i64 36}
!51 = !{!"_ZTS8ImVectorI10ImGuiTableE", !16, i64 0, !16, i64 4, !10, i64 8}
!52 = !{!"_ZTS8ImVectorIfE", !16, i64 0, !16, i64 4, !10, i64 8}
!53 = !{!"_ZTS8ImVectorI13ImDrawChannelE", !16, i64 0, !16, i64 4, !10, i64 8}
!54 = !{!"_ZTS6ImPoolI11ImGuiTabBarE", !55, i64 0, !28, i64 16, !16, i64 32, !16, i64 36}
!55 = !{!"_ZTS8ImVectorI11ImGuiTabBarE", !16, i64 0, !16, i64 4, !10, i64 8}
!56 = !{!"_ZTS8ImVectorI15ImGuiPtrOrIndexE", !16, i64 0, !16, i64 4, !10, i64 8}
!57 = !{!"_ZTS8ImVectorI20ImGuiShrinkWidthItemE", !16, i64 0, !16, i64 4, !10, i64 8}
!58 = !{!"_ZTS19ImGuiInputTextState", !16, i64 0, !16, i64 4, !16, i64 8, !20, i64 16, !59, i64 32, !59, i64 48, !6, i64 64, !16, i64 68, !18, i64 72, !60, i64 76, !18, i64 3704, !6, i64 3708, !6, i64 3709, !6, i64 3710, !16, i64 3712}
!59 = !{!"_ZTS8ImVectorIcE", !16, i64 0, !16, i64 4, !10, i64 8}
!60 = !{!"_ZTSN5ImStb17STB_TexteditStateE", !16, i64 0, !16, i64 4, !16, i64 8, !7, i64 12, !16, i64 16, !7, i64 20, !7, i64 21, !7, i64 22, !7, i64 23, !7, i64 24, !7, i64 25, !7, i64 26, !18, i64 28, !61, i64 32}
!61 = !{!"_ZTSN5ImStb12StbUndoStateE", !7, i64 0, !7, i64 1584, !19, i64 3582, !19, i64 3584, !16, i64 3588, !16, i64 3592}
!62 = !{!"_ZTS6ImFont", !52, i64 0, !18, i64 16, !18, i64 20, !20, i64 24, !63, i64 40, !10, i64 56, !10, i64 64, !10, i64 72, !19, i64 80, !19, i64 82, !19, i64 84, !19, i64 86, !6, i64 88, !18, i64 92, !18, i64 96, !18, i64 100, !16, i64 104, !7, i64 108}
!63 = !{!"_ZTS8ImVectorI11ImFontGlyphE", !16, i64 0, !16, i64 4, !10, i64 8}
!64 = !{!"_ZTS21ImGuiComboPreviewData", !34, i64 0, !17, i64 16, !17, i64 24, !17, i64 32, !18, i64 40, !16, i64 44}
!65 = !{!"_ZTS20ImGuiPlatformImeData", !6, i64 0, !17, i64 4, !18, i64 12}
!66 = !{!"_ZTS15ImGuiTextBuffer", !59, i64 0}
!67 = !{!"_ZTS8ImVectorI20ImGuiSettingsHandlerE", !16, i64 0, !16, i64 4, !10, i64 8}
!68 = !{!"_ZTS13ImChunkStreamI19ImGuiWindowSettingsE", !59, i64 0}
!69 = !{!"_ZTS13ImChunkStreamI18ImGuiTableSettingsE", !59, i64 0}
!70 = !{!"_ZTS8ImVectorI16ImGuiContextHookE", !16, i64 0, !16, i64 4, !10, i64 8}
!71 = !{!"_ZTS12ImGuiLogType", !7, i64 0}
!72 = !{!"_ZTS18ImGuiMetricsConfig", !6, i64 0, !6, i64 1, !6, i64 2, !6, i64 3, !6, i64 4, !6, i64 5, !6, i64 6, !16, i64 8, !16, i64 12}
!73 = !{!"_ZTS14ImGuiStackTool", !16, i64 0, !16, i64 4, !16, i64 8, !74, i64 16, !6, i64 32, !18, i64 36}
!74 = !{!"_ZTS8ImVectorI19ImGuiStackLevelInfoE", !16, i64 0, !16, i64 4, !10, i64 8}
!75 = !{!16, !16, i64 0}
!76 = !{!14, !16, i64 14272}
!77 = !{!78, !79, i64 0}
!78 = !{!"_ZTS15ImGuiInputEvent", !79, i64 0, !30, i64 4, !7, i64 8, !6, i64 20, !6, i64 21}
!79 = !{!"_ZTS19ImGuiInputEventType", !7, i64 0}
!80 = !{!7, !7, i64 0}
!81 = !{!17, !18, i64 0}
!82 = !{!17, !18, i64 4}
!83 = !{i64 0, i64 4, !84, i64 4, i64 4, !84}
!84 = !{!18, !18, i64 0}
!85 = !{!15, !18, i64 3572}
!86 = !{!15, !18, i64 3576}
!87 = !{!78, !6, i64 20}
!88 = !{!15, !18, i64 3592}
!89 = !{!15, !18, i64 3588}
!90 = !{!91, !91, i64 0}
!91 = !{!"_ZTS8ImGuiKey", !7, i64 0}
!92 = !{!93, !6, i64 0}
!93 = !{!"_ZTS12ImGuiKeyData", !6, i64 0, !18, i64 4, !18, i64 8, !18, i64 12}
!94 = !{!93, !18, i64 12}
!95 = !{!15, !6, i64 3596}
!96 = !{!15, !6, i64 3597}
!97 = !{!15, !6, i64 3598}
!98 = !{!15, !6, i64 3599}
!99 = !{!15, !16, i64 3600}
!100 = !{!19, !19, i64 0}
!101 = !{!15, !6, i64 14240}
!102 = distinct !{!102, !103}
!103 = !{!"llvm.loop.mustprogress"}
!104 = distinct !{!104, !103}
!105 = !{!14, !16, i64 21532}
!106 = distinct !{!106, !103}
!107 = !{!14, !10, i64 14280}
!108 = !{!14, !6, i64 14248}


; 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.ImBitArray.45 = type { [21 x i32] }
%struct.ImVec2 = type { float, float }
%struct.ImGuiKeyData = type { i8, float, float, float }
%struct.ImGuiInputEvent = type <{ i32, i32, %union.anon, i8, i8, [2 x i8] }>
%union.anon = type { %struct.ImGuiInputEventKey }
%struct.ImGuiInputEventKey = type { i32, i8, float }

@GImGui = external dso_local local_unnamed_addr global ptr, align 8
@.str.4 = external hidden unnamed_addr constant [106 x i8], align 1
@.str.173 = external hidden unnamed_addr constant [47 x i8], align 1
@__PRETTY_FUNCTION__._ZN5ImGui17UpdateInputEventsEb = external hidden unnamed_addr constant [36 x i8], align 1
@.str.174 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.175 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.176 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.177 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.178 = external hidden unnamed_addr constant [10 x i8], align 1

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(22) ptr @_ZN8ImVectorI15ImGuiInputEventEixEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN5ImGui15IsMousePosValidEPK6ImVec2(ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN5ImGui17GetMergedModFlagsEv() local_unnamed_addr #1

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN5ImGui17UpdateInputEventsEb(i1 noundef zeroext %0) local_unnamed_addr #5 {
  %2 = alloca %struct.ImBitArray.45, align 4
  %3 = alloca %struct.ImVec2, align 8
  %4 = alloca %struct.ImVec2, align 8
  %5 = alloca i16, align 2
  %6 = load ptr, ptr @GImGui, align 8, !tbaa !5
  %7 = getelementptr inbounds i8, ptr %6, i64 8
  br i1 %0, label %8, label %12

8:                                                ; preds = %1
  %9 = getelementptr inbounds i8, ptr %6, i64 21876
  %10 = load i32, ptr %9, align 4, !tbaa !9
  %11 = icmp eq i32 %10, 1
  br label %12

12:                                               ; preds = %8, %1
  %13 = phi i1 [ false, %1 ], [ %11, %8 ]
  call void @llvm.lifetime.start.p0(i64 84, ptr nonnull %2) #6
  call void @_ZN10ImBitArrayILi652ELi0EEC2Ev(ptr noundef nonnull align 4 dereferenceable(84) %2)
  %14 = getelementptr inbounds i8, ptr %6, i64 14272
  %15 = load i32, ptr %14, align 8, !tbaa !72
  %16 = icmp sgt i32 %15, 0
  br i1 %16, label %.lr.ph, label %._crit_edge..loopexit_crit_edge

.lr.ph:                                           ; preds = %12
  %17 = getelementptr inbounds i8, ptr %6, i64 14248
  %18 = getelementptr inbounds i8, ptr %6, i64 14256
  %19 = getelementptr inbounds i8, ptr %6, i64 3612
  %20 = getelementptr inbounds i8, ptr %6, i64 3607
  %21 = getelementptr inbounds i8, ptr %6, i64 3606
  %22 = getelementptr inbounds i8, ptr %6, i64 3605
  %23 = getelementptr inbounds i8, ptr %6, i64 3604
  %24 = getelementptr inbounds i8, ptr %6, i64 3608
  %25 = getelementptr inbounds i8, ptr %6, i64 2864
  %26 = getelementptr inbounds i8, ptr %6, i64 256
  %27 = getelementptr inbounds i8, ptr %6, i64 3600
  %28 = getelementptr inbounds i8, ptr %6, i64 3596
  %29 = getelementptr inbounds i8, ptr %6, i64 3588
  %30 = getelementptr inbounds i8, ptr %3, i64 4
  %31 = getelementptr inbounds i8, ptr %6, i64 3580
  %32 = getelementptr inbounds i8, ptr %6, i64 3584
  br label %33

33:                                               ; preds = %.lr.ph, %.thread208
  %.0165246 = phi i8 [ 0, %.lr.ph ], [ %.4, %.thread208 ]
  %.0166245 = phi i8 [ 0, %.lr.ph ], [ %.2168, %.thread208 ]
  %.0169244 = phi i8 [ 0, %.lr.ph ], [ %.4173, %.thread208 ]
  %.0174243 = phi i8 [ 0, %.lr.ph ], [ %.3177, %.thread208 ]
  %.0178242 = phi i32 [ 0, %.lr.ph ], [ %.4182, %.thread208 ]
  %.0183239 = phi i32 [ 0, %.lr.ph ], [ %185, %.thread208 ]
  %34 = call noundef nonnull align 4 dereferenceable(22) ptr @_ZN8ImVectorI15ImGuiInputEventEixEi(ptr noundef nonnull align 8 dereferenceable(16) %14, i32 noundef %.0183239)
  %35 = load i32, ptr %34, align 4, !tbaa !73
  switch i32 %35, label %184 [
    i32 1, label %36
    i32 3, label %71
    i32 2, label %92
    i32 4, label %111
    i32 5, label %159
    i32 6, label %175
  ]

36:                                               ; preds = %33
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #6
  %37 = getelementptr inbounds i8, ptr %34, i64 8
  %38 = load float, ptr %37, align 4, !tbaa !76
  %39 = getelementptr inbounds i8, ptr %34, i64 12
  %40 = load float, ptr %39, align 4, !tbaa !76
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %3, float noundef %38, float noundef %40)
  %41 = call noundef zeroext i1 @_ZN5ImGui15IsMousePosValidEPK6ImVec2(ptr noundef nonnull %3)
  %.pre283 = load float, ptr %3, align 8, !tbaa !77
  br i1 %41, label %42, label %49

42:                                               ; preds = %36
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #6
  %43 = call noundef float @_ZL13ImFloorSignedf(float noundef %.pre283)
  %44 = load float, ptr %30, align 4, !tbaa !78
  %45 = call noundef float @_ZL13ImFloorSignedf(float noundef %44)
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %4, float noundef %43, float noundef %45)
  %46 = load i64, ptr %4, align 8
  store i64 %46, ptr %3, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #6
  %47 = trunc i64 %46 to i32
  %48 = bitcast i32 %47 to float
  br label %49

49:                                               ; preds = %42, %36
  %50 = phi float [ %48, %42 ], [ %.pre283, %36 ]
  %51 = load float, ptr %31, align 4, !tbaa !79
  %52 = fcmp oeq float %51, %50
  br i1 %52, label %53, label %.critedge

53:                                               ; preds = %49
  %54 = load float, ptr %32, align 4, !tbaa !80
  %55 = load float, ptr %30, align 4, !tbaa !78
  %56 = fcmp oeq float %54, %55
  %57 = getelementptr inbounds i8, ptr %34, i64 20
  %58 = zext i1 %56 to i8
  store i8 %58, ptr %57, align 4, !tbaa !81
  br i1 %56, label %70, label %60

.critedge:                                        ; preds = %49
  %59 = getelementptr inbounds i8, ptr %34, i64 20
  store i8 0, ptr %59, align 4, !tbaa !81
  br label %60

60:                                               ; preds = %.critedge, %53
  br i1 %0, label %61, label %68

61:                                               ; preds = %60
  %.not195 = icmp eq i32 %.0178242, 0
  br i1 %.not195, label %62, label %.thread

62:                                               ; preds = %61
  %63 = trunc nuw i8 %.0166245 to i1
  br i1 %63, label %.thread, label %64

64:                                               ; preds = %62
  %65 = trunc nuw i8 %.0169244 to i1
  br i1 %65, label %.thread, label %66

66:                                               ; preds = %64
  %67 = trunc nuw i8 %.0174243 to i1
  br i1 %67, label %.thread, label %68

68:                                               ; preds = %66, %60
  %69 = load i64, ptr %3, align 8
  store i64 %69, ptr %31, align 4
  br label %70

.thread:                                          ; preds = %66, %64, %62, %61
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #6
  br label %.thread218

70:                                               ; preds = %53, %68
  %.2 = phi i8 [ %.0165246, %53 ], [ 1, %68 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #6
  br label %.thread208

71:                                               ; preds = %33
  %72 = getelementptr inbounds i8, ptr %34, i64 8
  %73 = load i32, ptr %72, align 4, !tbaa !76
  %74 = icmp ult i32 %73, 5
  br i1 %74, label %76, label %75

75:                                               ; preds = %71
  call void @__assert_fail(ptr noundef nonnull @.str.173, ptr noundef nonnull @.str.4, i32 noundef 8121, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN5ImGui17UpdateInputEventsEb) #7
  unreachable

76:                                               ; preds = %71
  %77 = zext nneg i32 %73 to i64
  %78 = getelementptr inbounds [5 x i8], ptr %29, i64 0, i64 %77
  %79 = load i8, ptr %78, align 1, !tbaa !82, !range !83, !noundef !84
  %80 = getelementptr inbounds i8, ptr %34, i64 12
  %81 = load i8, ptr %80, align 4, !tbaa !76, !range !83, !noundef !84
  %82 = icmp eq i8 %79, %81
  %83 = getelementptr inbounds i8, ptr %34, i64 20
  %84 = zext i1 %82 to i8
  store i8 %84, ptr %83, align 4, !tbaa !81
  br i1 %82, label %.thread208, label %85

85:                                               ; preds = %76
  %86 = shl nuw nsw i32 1, %73
  br i1 %0, label %87, label %._crit_edge286

87:                                               ; preds = %85
  %88 = and i32 %86, %.0178242
  %.not194 = icmp eq i32 %88, 0
  br i1 %.not194, label %89, label %.thread218

89:                                               ; preds = %87
  %90 = trunc nuw i8 %.0166245 to i1
  br i1 %90, label %.thread218, label %._crit_edge286

._crit_edge286:                                   ; preds = %85, %89
  store i8 %81, ptr %78, align 1, !tbaa !82
  %91 = or i32 %86, %.0178242
  br label %.thread208

92:                                               ; preds = %33
  %93 = getelementptr inbounds i8, ptr %34, i64 8
  %94 = load float, ptr %93, align 4, !tbaa !76
  %95 = fcmp oeq float %94, 0.000000e+00
  %96 = getelementptr inbounds i8, ptr %34, i64 12
  %97 = load float, ptr %96, align 4
  %98 = fcmp oeq float %97, 0.000000e+00
  %99 = select i1 %95, i1 %98, i1 false
  %100 = getelementptr inbounds i8, ptr %34, i64 20
  %101 = zext i1 %99 to i8
  store i8 %101, ptr %100, align 4, !tbaa !81
  br i1 %99, label %.thread208, label %102

102:                                              ; preds = %92
  %103 = trunc nuw i8 %.0165246 to i1
  %104 = icmp ne i32 %.0178242, 0
  %or.cond = select i1 %103, i1 true, i1 %104
  %or.cond199 = select i1 %0, i1 %or.cond, i1 false
  br i1 %or.cond199, label %.thread218, label %105

105:                                              ; preds = %102
  %106 = load float, ptr %27, align 8, !tbaa !85
  %107 = fadd float %94, %106
  store float %107, ptr %27, align 8, !tbaa !85
  %108 = load float, ptr %96, align 4, !tbaa !76
  %109 = load float, ptr %28, align 4, !tbaa !86
  %110 = fadd float %108, %109
  store float %110, ptr %28, align 4, !tbaa !86
  br label %.thread208

111:                                              ; preds = %33
  %112 = getelementptr inbounds i8, ptr %34, i64 8
  %113 = load i32, ptr %112, align 4, !tbaa !76
  %.not = icmp eq i32 %113, 0
  br i1 %.not, label %114, label %115

114:                                              ; preds = %111
  call void @__assert_fail(ptr noundef nonnull @.str.174, ptr noundef nonnull @.str.4, i32 noundef 8148, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN5ImGui17UpdateInputEventsEb) #7
  unreachable

115:                                              ; preds = %111
  %116 = sext i32 %113 to i64
  %117 = getelementptr inbounds [652 x %struct.ImGuiKeyData], ptr %19, i64 0, i64 %116
  %118 = load i8, ptr %117, align 4, !tbaa !87, !range !83, !noundef !84
  %119 = getelementptr inbounds i8, ptr %34, i64 12
  %120 = load i8, ptr %119, align 4, !range !83, !noundef !84
  %121 = icmp eq i8 %118, %120
  br i1 %121, label %122, label %.critedge201

122:                                              ; preds = %115
  %123 = getelementptr inbounds i8, ptr %117, i64 12
  %124 = load float, ptr %123, align 4, !tbaa !89
  %125 = getelementptr inbounds i8, ptr %34, i64 16
  %126 = load float, ptr %125, align 4, !tbaa !76
  %127 = fcmp oeq float %124, %126
  %128 = getelementptr inbounds i8, ptr %34, i64 20
  %129 = zext i1 %127 to i8
  store i8 %129, ptr %128, align 4, !tbaa !81
  br i1 %127, label %.thread208, label %131

.critedge201:                                     ; preds = %115
  %130 = getelementptr inbounds i8, ptr %34, i64 20
  store i8 0, ptr %130, align 4, !tbaa !81
  br label %131

131:                                              ; preds = %.critedge201, %122
  %.not192 = icmp ne i8 %118, %120
  %or.cond227.not = and i1 %.not192, %0
  br i1 %or.cond227.not, label %132, label %137

132:                                              ; preds = %131
  %133 = call noundef zeroext i1 @_ZNK10ImBitArrayILi652ELi0EE7TestBitEi(ptr noundef nonnull align 4 dereferenceable(84) %2, i32 noundef %113)
  %134 = trunc nuw i8 %.0174243 to i1
  %135 = icmp ne i32 %.0178242, 0
  %136 = select i1 %133, i1 true, i1 %134
  %or.cond203 = select i1 %136, i1 true, i1 %135
  br i1 %or.cond203, label %.thread218, label %._crit_edge282

._crit_edge282:                                   ; preds = %132
  %.pre = load i8, ptr %119, align 4, !tbaa !76, !range !83
  br label %137

137:                                              ; preds = %._crit_edge282, %131
  %138 = phi i8 [ %.pre, %._crit_edge282 ], [ %120, %131 ]
  store i8 %138, ptr %117, align 4, !tbaa !87
  %139 = getelementptr inbounds i8, ptr %34, i64 16
  %140 = load float, ptr %139, align 4, !tbaa !76
  %141 = getelementptr inbounds i8, ptr %117, i64 12
  store float %140, ptr %141, align 4, !tbaa !89
  call void @_ZN10ImBitArrayILi652ELi0EE6SetBitEi(ptr noundef nonnull align 4 dereferenceable(84) %2, i32 noundef %113)
  %142 = add i32 %113, -641
  %or.cond11 = icmp ult i32 %142, 4
  br i1 %or.cond11, label %143, label %151

143:                                              ; preds = %137
  %144 = load i8, ptr %117, align 4, !tbaa !87, !range !83, !noundef !84
  switch i32 %113, label %default.unreachable [
    i32 641, label %145
    i32 642, label %146
    i32 643, label %147
    i32 644, label %148
  ]

145:                                              ; preds = %143
  store i8 %144, ptr %23, align 4, !tbaa !90
  br label %149

146:                                              ; preds = %143
  store i8 %144, ptr %22, align 1, !tbaa !91
  br label %149

147:                                              ; preds = %143
  store i8 %144, ptr %21, align 2, !tbaa !92
  br label %149

148:                                              ; preds = %143
  store i8 %144, ptr %20, align 1, !tbaa !93
  br label %149

default.unreachable:                              ; preds = %143
  unreachable

149:                                              ; preds = %147, %146, %145, %148
  %150 = call noundef i32 @_ZN5ImGui17GetMergedModFlagsEv()
  store i32 %150, ptr %24, align 8, !tbaa !94
  br label %151

151:                                              ; preds = %137, %149
  %152 = load i8, ptr %117, align 4, !tbaa !87, !range !83, !noundef !84
  %153 = getelementptr inbounds [652 x i8], ptr %25, i64 0, i64 %116
  store i8 %152, ptr %153, align 1, !tbaa !82
  %154 = getelementptr inbounds [652 x i32], ptr %26, i64 0, i64 %116
  %155 = load i32, ptr %154, align 4, !tbaa !95
  %.not193 = icmp eq i32 %155, -1
  br i1 %.not193, label %.thread208, label %156

156:                                              ; preds = %151
  %157 = sext i32 %155 to i64
  %158 = getelementptr inbounds [652 x i8], ptr %25, i64 0, i64 %157
  store i8 %152, ptr %158, align 1, !tbaa !82
  br label %.thread208

159:                                              ; preds = %33
  br i1 %0, label %160, label %169

160:                                              ; preds = %159
  %161 = trunc nuw i8 %.0169244 to i1
  br i1 %161, label %162, label %164

162:                                              ; preds = %160
  %163 = icmp ne i32 %.0178242, 0
  %or.cond13 = select i1 %13, i1 true, i1 %163
  br i1 %or.cond13, label %.thread218, label %165

164:                                              ; preds = %160
  %.old12.not = icmp eq i32 %.0178242, 0
  br i1 %.old12.not, label %165, label %.thread218

165:                                              ; preds = %162, %164
  %166 = trunc nuw i8 %.0165246 to i1
  br i1 %166, label %.thread218, label %167

167:                                              ; preds = %165
  %168 = trunc nuw i8 %.0166245 to i1
  br i1 %168, label %.thread218, label %169

169:                                              ; preds = %167, %159
  %170 = getelementptr inbounds i8, ptr %34, i64 8
  %171 = load i32, ptr %170, align 4, !tbaa !76
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %5) #6
  %172 = icmp ult i32 %171, 65536
  %173 = trunc i32 %171 to i16
  %174 = select i1 %172, i16 %173, i16 -3
  store i16 %174, ptr %5, align 2, !tbaa !96
  call void @_ZN8ImVectorItE9push_backERKt(ptr noundef nonnull align 8 dereferenceable(16) %18, ptr noundef nonnull align 2 dereferenceable(2) %5)
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %5) #6
  %spec.select = select i1 %13, i8 1, i8 %.0174243
  br label %.thread208

175:                                              ; preds = %33
  %176 = getelementptr inbounds i8, ptr %34, i64 8
  %177 = load i8, ptr %176, align 4, !tbaa !76, !range !83, !noundef !84
  %178 = xor i8 %177, 1
  %179 = load i8, ptr %17, align 8, !tbaa !97, !range !83, !noundef !84
  %180 = icmp eq i8 %179, %178
  %181 = getelementptr inbounds i8, ptr %34, i64 20
  %182 = zext i1 %180 to i8
  store i8 %182, ptr %181, align 4, !tbaa !81
  br i1 %180, label %.thread208, label %183

183:                                              ; preds = %175
  store i8 %178, ptr %17, align 8, !tbaa !97
  br label %.thread208

184:                                              ; preds = %33
  call void @__assert_fail(ptr noundef nonnull @.str.175, ptr noundef nonnull @.str.4, i32 noundef 8200, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN5ImGui17UpdateInputEventsEb) #7
  unreachable

.thread208:                                       ; preds = %122, %156, %151, %76, %._crit_edge286, %70, %175, %183, %169, %92, %105
  %.4182 = phi i32 [ %.0178242, %70 ], [ %.0178242, %92 ], [ %.0178242, %105 ], [ %.0178242, %169 ], [ %.0178242, %183 ], [ %.0178242, %175 ], [ %91, %._crit_edge286 ], [ %.0178242, %76 ], [ %.0178242, %151 ], [ %.0178242, %156 ], [ %.0178242, %122 ]
  %.3177 = phi i8 [ %.0174243, %70 ], [ %.0174243, %92 ], [ %.0174243, %105 ], [ %spec.select, %169 ], [ %.0174243, %183 ], [ %.0174243, %175 ], [ %.0174243, %._crit_edge286 ], [ %.0174243, %76 ], [ %.0174243, %151 ], [ %.0174243, %156 ], [ %.0174243, %122 ]
  %.4173 = phi i8 [ %.0169244, %70 ], [ %.0169244, %92 ], [ %.0169244, %105 ], [ %.0169244, %169 ], [ %.0169244, %183 ], [ %.0169244, %175 ], [ %.0169244, %._crit_edge286 ], [ %.0169244, %76 ], [ 1, %151 ], [ 1, %156 ], [ %.0169244, %122 ]
  %.2168 = phi i8 [ %.0166245, %70 ], [ %.0166245, %92 ], [ 1, %105 ], [ %.0166245, %169 ], [ %.0166245, %183 ], [ %.0166245, %175 ], [ %.0166245, %._crit_edge286 ], [ %.0166245, %76 ], [ %.0166245, %151 ], [ %.0166245, %156 ], [ %.0166245, %122 ]
  %.4 = phi i8 [ %.2, %70 ], [ %.0165246, %92 ], [ %.0165246, %105 ], [ %.0165246, %169 ], [ %.0165246, %183 ], [ %.0165246, %175 ], [ %.0165246, %._crit_edge286 ], [ %.0165246, %76 ], [ %.0165246, %151 ], [ %.0165246, %156 ], [ %.0165246, %122 ]
  %185 = add nuw nsw i32 %.0183239, 1
  %186 = load i32, ptr %14, align 8, !tbaa !72
  %187 = icmp slt i32 %185, %186
  br i1 %187, label %33, label %.lr.ph273, !llvm.loop !98

.thread218:                                       ; preds = %102, %167, %165, %164, %162, %89, %87, %132, %.thread
  %.not276 = icmp eq i32 %.0183239, 0
  br i1 %.not276, label %._crit_edge..loopexit_crit_edge, label %.lr.ph273

.lr.ph273:                                        ; preds = %.thread208, %.thread218
  %.0183238295 = phi i32 [ %.0183239, %.thread218 ], [ %185, %.thread208 ]
  %188 = getelementptr inbounds i8, ptr %6, i64 14288
  br label %189

._crit_edge..loopexit_crit_edge:                  ; preds = %12, %.thread218
  %.pre284 = load i32, ptr %14, align 8, !tbaa !72
  br label %.loopexit

189:                                              ; preds = %.lr.ph273, %189
  %.0164272 = phi i32 [ 0, %.lr.ph273 ], [ %191, %189 ]
  %190 = call noundef nonnull align 4 dereferenceable(22) ptr @_ZN8ImVectorI15ImGuiInputEventEixEi(ptr noundef nonnull align 8 dereferenceable(16) %14, i32 noundef %.0164272)
  call void @_ZN8ImVectorI15ImGuiInputEventE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(16) %188, ptr noundef nonnull align 4 dereferenceable(22) %190)
  %191 = add nuw nsw i32 %.0164272, 1
  %exitcond.not = icmp eq i32 %191, %.0183238295
  br i1 %exitcond.not, label %._crit_edge, label %189, !llvm.loop !100

._crit_edge:                                      ; preds = %189
  %192 = getelementptr inbounds i8, ptr %6, i64 21532
  %193 = load i32, ptr %192, align 4, !tbaa !101
  %194 = and i32 %193, 32
  %.not197 = icmp ne i32 %194, 0
  %.pre285 = load i32, ptr %14, align 8, !tbaa !72
  %195 = icmp sgt i32 %.pre285, 0
  %or.cond309 = select i1 %.not197, i1 %195, i1 false
  br i1 %or.cond309, label %.lr.ph275, label %.loopexit

.lr.ph275:                                        ; preds = %._crit_edge, %203
  %.0274 = phi i32 [ %206, %203 ], [ 0, %._crit_edge ]
  %196 = icmp ult i32 %.0274, %.0183238295
  br i1 %196, label %197, label %203

197:                                              ; preds = %.lr.ph275
  %198 = call noundef nonnull align 4 dereferenceable(22) ptr @_ZN8ImVectorI15ImGuiInputEventEixEi(ptr noundef nonnull align 8 dereferenceable(16) %14, i32 noundef %.0274)
  %199 = getelementptr inbounds i8, ptr %198, i64 20
  %200 = load i8, ptr %199, align 4, !tbaa !81, !range !83, !noundef !84
  %201 = trunc nuw i8 %200 to i1
  %202 = select i1 %201, ptr @.str.176, ptr @.str.177
  br label %203

203:                                              ; preds = %.lr.ph275, %197
  %204 = phi ptr [ %202, %197 ], [ @.str.178, %.lr.ph275 ]
  %205 = call noundef nonnull align 4 dereferenceable(22) ptr @_ZN8ImVectorI15ImGuiInputEventEixEi(ptr noundef nonnull align 8 dereferenceable(16) %14, i32 noundef %.0274)
  call void @_ZL20DebugPrintInputEventPKcPK15ImGuiInputEvent(ptr noundef nonnull %204, ptr noundef nonnull %205)
  %206 = add nuw nsw i32 %.0274, 1
  %207 = load i32, ptr %14, align 8, !tbaa !72
  %208 = icmp slt i32 %206, %207
  br i1 %208, label %.lr.ph275, label %.loopexit, !llvm.loop !102

.loopexit:                                        ; preds = %203, %._crit_edge..loopexit_crit_edge, %._crit_edge
  %.0183238290299 = phi i32 [ 0, %._crit_edge..loopexit_crit_edge ], [ %.0183238295, %._crit_edge ], [ %.0183238295, %203 ]
  %209 = phi i32 [ %.pre284, %._crit_edge..loopexit_crit_edge ], [ %.pre285, %._crit_edge ], [ %207, %203 ]
  %210 = icmp eq i32 %.0183238290299, %209
  br i1 %210, label %211, label %212

211:                                              ; preds = %.loopexit
  call void @_ZN8ImVectorI15ImGuiInputEventE6resizeEi(ptr noundef nonnull align 8 dereferenceable(16) %14, i32 noundef 0)
  br label %218

212:                                              ; preds = %.loopexit
  %213 = getelementptr inbounds i8, ptr %6, i64 14280
  %214 = load ptr, ptr %213, align 8, !tbaa !103
  %215 = zext nneg i32 %.0183238290299 to i64
  %216 = getelementptr inbounds %struct.ImGuiInputEvent, ptr %214, i64 %215
  %217 = call noundef ptr @_ZN8ImVectorI15ImGuiInputEventE5eraseEPKS0_S3_(ptr noundef nonnull align 8 dereferenceable(16) %14, ptr noundef %214, ptr noundef %216)
  br label %218

218:                                              ; preds = %212, %211
  %219 = getelementptr inbounds i8, ptr %6, i64 14248
  %220 = load i8, ptr %219, align 8, !tbaa !104, !range !83, !noundef !84
  %221 = trunc nuw i8 %220 to i1
  br i1 %221, label %222, label %223

222:                                              ; preds = %218
  call void @_ZN7ImGuiIO14ClearInputKeysEv(ptr noundef nonnull align 8 dereferenceable(14264) %7)
  store i8 0, ptr %219, align 8, !tbaa !104
  br label %223

223:                                              ; preds = %222, %218
  call void @llvm.lifetime.end.p0(i64 84, ptr nonnull %2) #6
  ret void
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN10ImBitArrayILi652ELi0EEC2Ev(ptr noundef nonnull align 4 dereferenceable(84)) unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef float @_ZL13ImFloorSignedf(float noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK10ImBitArrayILi652ELi0EE7TestBitEi(ptr noundef nonnull align 4 dereferenceable(84), i32 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN10ImBitArrayILi652ELi0EE6SetBitEi(ptr noundef nonnull align 4 dereferenceable(84), i32 noundef) local_unnamed_addr #1 align 2

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 #3 = { 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 #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 = { 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 = { nounwind }
attributes #7 = { 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, !13, i64 21876}
!10 = !{!"_ZTS12ImGuiContext", !11, i64 0, !11, i64 1, !12, i64 8, !18, i64 14272, !18, i64 14288, !19, i64 14304, !6, i64 15352, !15, i64 15360, !15, i64 15364, !20, i64 15368, !22, i64 15880, !13, i64 15888, !13, i64 15892, !13, i64 15896, !11, i64 15900, !11, i64 15901, !11, i64 15902, !11, i64 15903, !11, i64 15904, !6, i64 15912, !23, i64 15920, !23, i64 15936, !23, i64 15952, !24, i64 15968, !25, i64 15984, !13, i64 16000, !14, i64 16004, !6, i64 16016, !6, i64 16024, !6, i64 16032, !6, i64 16040, !6, i64 16048, !14, i64 16056, !15, i64 16064, !13, i64 16068, !13, i64 16072, !13, i64 16076, !11, i64 16080, !11, i64 16081, !11, i64 16082, !11, i64 16083, !15, i64 16084, !15, i64 16088, !13, i64 16092, !13, i64 16096, !15, i64 16100, !11, i64 16104, !11, i64 16105, !11, i64 16106, !11, i64 16107, !11, i64 16108, !11, i64 16109, !14, i64 16112, !6, i64 16120, !27, i64 16128, !13, i64 16132, !13, i64 16136, !11, i64 16140, !11, i64 16141, !6, i64 16144, !13, i64 16152, !15, i64 16156, !13, i64 16160, !28, i64 16164, !13, i64 16184, !13, i64 16188, !29, i64 16192, !30, i64 16212, !32, i64 16272, !33, i64 16384, !34, i64 16400, !35, i64 16416, !36, i64 16432, !37, i64 16448, !38, i64 16464, !39, i64 16480, !39, i64 16496, !13, i64 16512, !40, i64 16520, !6, i64 16536, !13, i64 16544, !13, i64 16548, !13, i64 16552, !13, i64 16556, !13, i64 16560, !13, i64 16564, !13, i64 16568, !13, i64 16572, !13, i64 16576, !13, i64 16580, !13, i64 16584, !13, i64 16588, !27, i64 16592, !41, i64 16596, !11, i64 16600, !11, i64 16601, !11, i64 16602, !11, i64 16603, !11, i64 16604, !11, i64 16605, !11, i64 16606, !13, i64 16608, !31, i64 16612, !11, i64 16628, !11, i64 16629, !11, i64 16630, !13, i64 16632, !13, i64 16636, !13, i64 16640, !13, i64 16644, !13, i64 16648, !13, i64 16652, !31, i64 16656, !31, i64 16672, !13, i64 16688, !13, i64 16692, !13, i64 16696, !42, i64 16704, !42, i64 16752, !42, i64 16800, !42, i64 16848, !6, i64 16896, !6, i64 16904, !6, i64 16912, !15, i64 16920, !15, i64 16924, !11, i64 16928, !14, i64 16932, !14, i64 16940, !15, i64 16948, !13, i64 16952, !11, i64 16956, !11, i64 16957, !11, i64 16958, !13, i64 16960, !13, i64 16964, !13, i64 16968, !43, i64 16976, !31, i64 17040, !13, i64 17056, !13, i64 17060, !15, i64 17064, !13, i64 17068, !13, i64 17072, !13, i64 17076, !13, i64 17080, !44, i64 17088, !7, i64 17104, !13, i64 17120, !45, i64 17128, !6, i64 17144, !13, i64 17152, !46, i64 17160, !47, i64 17176, !49, i64 17216, !50, i64 17232, !6, i64 17248, !51, i64 17256, !53, i64 17296, !54, i64 17312, !13, i64 17328, !13, i64 17332, !15, i64 17336, !15, i64 17340, !14, i64 17344, !55, i64 17352, !59, i64 21072, !13, i64 21184, !13, i64 21188, !15, i64 21192, !15, i64 21196, !13, i64 21200, !21, i64 21204, !61, i64 21220, !15, i64 21268, !15, i64 21272, !11, i64 21276, !11, i64 21277, !15, i64 21280, !15, i64 21284, !15, i64 21288, !15, i64 21292, !16, i64 21296, !16, i64 21298, !56, i64 21304, !36, i64 21320, !62, i64 21336, !62, i64 21352, !7, i64 21368, !11, i64 21369, !15, i64 21372, !63, i64 21376, !64, i64 21392, !65, i64 21408, !66, i64 21424, !67, i64 21440, !13, i64 21456, !11, i64 21460, !68, i64 21464, !6, i64 21472, !63, i64 21480, !6, i64 21496, !6, i64 21504, !15, i64 21512, !11, i64 21516, !13, i64 21520, !13, i64 21524, !13, i64 21528, !13, i64 21532, !63, i64 21536, !11, i64 21552, !7, i64 21553, !13, i64 21556, !69, i64 21560, !70, i64 21576, !7, i64 21616, !13, i64 21856, !13, i64 21860, !15, i64 21864, !13, i64 21868, !13, i64 21872, !13, i64 21876, !56, i64 21880}
!11 = !{!"bool", !7, i64 0}
!12 = !{!"_ZTS7ImGuiIO", !13, i64 0, !13, i64 4, !14, i64 8, !15, i64 16, !15, i64 20, !6, i64 24, !6, i64 32, !15, i64 40, !15, i64 44, !15, i64 48, !15, i64 52, !15, i64 56, !15, i64 60, !15, i64 64, !6, i64 72, !6, i64 80, !15, i64 88, !11, i64 92, !6, i64 96, !14, i64 104, !11, i64 112, !11, i64 113, !11, i64 114, !11, i64 115, !11, i64 116, !11, i64 117, !11, i64 118, !11, i64 119, !15, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !11, i64 208, !11, i64 209, !11, i64 210, !11, i64 211, !11, i64 212, !11, i64 213, !11, i64 214, !15, i64 216, !13, i64 220, !13, i64 224, !13, i64 228, !13, i64 232, !13, i64 236, !14, i64 240, !7, i64 248, !7, i64 2856, !7, i64 3508, !14, i64 3572, !7, i64 3580, !15, i64 3588, !15, i64 3592, !11, i64 3596, !11, i64 3597, !11, i64 3598, !11, i64 3599, !13, i64 3600, !7, i64 3604, !11, i64 14036, !14, i64 14040, !7, i64 14048, !7, i64 14088, !7, i64 14128, !7, i64 14133, !7, i64 14138, !7, i64 14148, !7, i64 14158, !7, i64 14163, !7, i64 14168, !7, i64 14176, !7, i64 14196, !7, i64 14216, !15, i64 14236, !11, i64 14240, !11, i64 14241, !7, i64 14242, !11, i64 14243, !16, i64 14244, !17, i64 14248}
!13 = !{!"int", !7, i64 0}
!14 = !{!"_ZTS6ImVec2", !15, i64 0, !15, i64 4}
!15 = !{!"float", !7, i64 0}
!16 = !{!"short", !7, i64 0}
!17 = !{!"_ZTS8ImVectorItE", !13, i64 0, !13, i64 4, !6, i64 8}
!18 = !{!"_ZTS8ImVectorI15ImGuiInputEventE", !13, i64 0, !13, i64 4, !6, i64 8}
!19 = !{!"_ZTS10ImGuiStyle", !15, i64 0, !15, i64 4, !14, i64 8, !15, i64 16, !15, i64 20, !14, i64 24, !14, i64 32, !13, i64 40, !15, i64 44, !15, i64 48, !15, i64 52, !15, i64 56, !14, i64 60, !15, i64 68, !15, i64 72, !14, i64 76, !14, i64 84, !14, i64 92, !14, i64 100, !15, i64 108, !15, i64 112, !15, i64 116, !15, i64 120, !15, i64 124, !15, i64 128, !15, i64 132, !15, i64 136, !15, i64 140, !15, i64 144, !13, i64 148, !14, i64 152, !14, i64 160, !14, i64 168, !14, i64 176, !15, i64 184, !11, i64 188, !11, i64 189, !11, i64 190, !15, i64 192, !15, i64 196, !7, i64 200}
!20 = !{!"_ZTS20ImDrawListSharedData", !14, i64 0, !6, i64 8, !15, i64 16, !15, i64 20, !15, i64 24, !21, i64 28, !13, i64 44, !7, i64 48, !15, i64 432, !7, i64 436, !6, i64 504}
!21 = !{!"_ZTS6ImVec4", !15, i64 0, !15, i64 4, !15, i64 8, !15, i64 12}
!22 = !{!"double", !7, i64 0}
!23 = !{!"_ZTS8ImVectorIP11ImGuiWindowE", !13, i64 0, !13, i64 4, !6, i64 8}
!24 = !{!"_ZTS8ImVectorI20ImGuiWindowStackDataE", !13, i64 0, !13, i64 4, !6, i64 8}
!25 = !{!"_ZTS12ImGuiStorage", !26, i64 0}
!26 = !{!"_ZTS8ImVectorIN12ImGuiStorage16ImGuiStoragePairEE", !13, i64 0, !13, i64 4, !6, i64 8}
!27 = !{!"_ZTS16ImGuiInputSource", !7, i64 0}
!28 = !{!"_ZTS10ImBitArrayILi140ELin512EE", !7, i64 0}
!29 = !{!"_ZTS17ImGuiNextItemData", !13, i64 0, !15, i64 4, !13, i64 8, !13, i64 12, !11, i64 16}
!30 = !{!"_ZTS17ImGuiLastItemData", !13, i64 0, !13, i64 4, !13, i64 8, !31, i64 12, !31, i64 28, !31, i64 44}
!31 = !{!"_ZTS6ImRect", !14, i64 0, !14, i64 8}
!32 = !{!"_ZTS19ImGuiNextWindowData", !13, i64 0, !13, i64 4, !13, i64 8, !13, i64 12, !14, i64 16, !14, i64 24, !14, i64 32, !14, i64 40, !14, i64 48, !11, i64 56, !31, i64 60, !6, i64 80, !6, i64 88, !15, i64 96, !14, i64 100}
!33 = !{!"_ZTS8ImVectorI13ImGuiColorModE", !13, i64 0, !13, i64 4, !6, i64 8}
!34 = !{!"_ZTS8ImVectorI13ImGuiStyleModE", !13, i64 0, !13, i64 4, !6, i64 8}
!35 = !{!"_ZTS8ImVectorIP6ImFontE", !13, i64 0, !13, i64 4, !6, i64 8}
!36 = !{!"_ZTS8ImVectorIjE", !13, i64 0, !13, i64 4, !6, i64 8}
!37 = !{!"_ZTS8ImVectorIiE", !13, i64 0, !13, i64 4, !6, i64 8}
!38 = !{!"_ZTS8ImVectorI14ImGuiGroupDataE", !13, i64 0, !13, i64 4, !6, i64 8}
!39 = !{!"_ZTS8ImVectorI14ImGuiPopupDataE", !13, i64 0, !13, i64 4, !6, i64 8}
!40 = !{!"_ZTS8ImVectorIP14ImGuiViewportPE", !13, i64 0, !13, i64 4, !6, i64 8}
!41 = !{!"_ZTS13ImGuiNavLayer", !7, i64 0}
!42 = !{!"_ZTS16ImGuiNavItemData", !6, i64 0, !13, i64 8, !13, i64 12, !31, i64 16, !13, i64 32, !15, i64 36, !15, i64 40, !15, i64 44}
!43 = !{!"_ZTS12ImGuiPayload", !6, i64 0, !13, i64 8, !13, i64 12, !13, i64 16, !13, i64 20, !7, i64 24, !11, i64 57, !11, i64 58}
!44 = !{!"_ZTS8ImVectorIhE", !13, i64 0, !13, i64 4, !6, i64 8}
!45 = !{!"_ZTS8ImVectorI20ImGuiListClipperDataE", !13, i64 0, !13, i64 4, !6, i64 8}
!46 = !{!"_ZTS8ImVectorI18ImGuiTableTempDataE", !13, i64 0, !13, i64 4, !6, i64 8}
!47 = !{!"_ZTS6ImPoolI10ImGuiTableE", !48, i64 0, !25, i64 16, !13, i64 32, !13, i64 36}
!48 = !{!"_ZTS8ImVectorI10ImGuiTableE", !13, i64 0, !13, i64 4, !6, i64 8}
!49 = !{!"_ZTS8ImVectorIfE", !13, i64 0, !13, i64 4, !6, i64 8}
!50 = !{!"_ZTS8ImVectorI13ImDrawChannelE", !13, i64 0, !13, i64 4, !6, i64 8}
!51 = !{!"_ZTS6ImPoolI11ImGuiTabBarE", !52, i64 0, !25, i64 16, !13, i64 32, !13, i64 36}
!52 = !{!"_ZTS8ImVectorI11ImGuiTabBarE", !13, i64 0, !13, i64 4, !6, i64 8}
!53 = !{!"_ZTS8ImVectorI15ImGuiPtrOrIndexE", !13, i64 0, !13, i64 4, !6, i64 8}
!54 = !{!"_ZTS8ImVectorI20ImGuiShrinkWidthItemE", !13, i64 0, !13, i64 4, !6, i64 8}
!55 = !{!"_ZTS19ImGuiInputTextState", !13, i64 0, !13, i64 4, !13, i64 8, !17, i64 16, !56, i64 32, !56, i64 48, !11, i64 64, !13, i64 68, !15, i64 72, !57, i64 76, !15, i64 3704, !11, i64 3708, !11, i64 3709, !11, i64 3710, !13, i64 3712}
!56 = !{!"_ZTS8ImVectorIcE", !13, i64 0, !13, i64 4, !6, i64 8}
!57 = !{!"_ZTSN5ImStb17STB_TexteditStateE", !13, i64 0, !13, i64 4, !13, i64 8, !7, i64 12, !13, i64 16, !7, i64 20, !7, i64 21, !7, i64 22, !7, i64 23, !7, i64 24, !7, i64 25, !7, i64 26, !15, i64 28, !58, i64 32}
!58 = !{!"_ZTSN5ImStb12StbUndoStateE", !7, i64 0, !7, i64 1584, !16, i64 3582, !16, i64 3584, !13, i64 3588, !13, i64 3592}
!59 = !{!"_ZTS6ImFont", !49, i64 0, !15, i64 16, !15, i64 20, !17, i64 24, !60, i64 40, !6, i64 56, !6, i64 64, !6, i64 72, !16, i64 80, !16, i64 82, !16, i64 84, !16, i64 86, !11, i64 88, !15, i64 92, !15, i64 96, !15, i64 100, !13, i64 104, !7, i64 108}
!60 = !{!"_ZTS8ImVectorI11ImFontGlyphE", !13, i64 0, !13, i64 4, !6, i64 8}
!61 = !{!"_ZTS21ImGuiComboPreviewData", !31, i64 0, !14, i64 16, !14, i64 24, !14, i64 32, !15, i64 40, !13, i64 44}
!62 = !{!"_ZTS20ImGuiPlatformImeData", !11, i64 0, !14, i64 4, !15, i64 12}
!63 = !{!"_ZTS15ImGuiTextBuffer", !56, i64 0}
!64 = !{!"_ZTS8ImVectorI20ImGuiSettingsHandlerE", !13, i64 0, !13, i64 4, !6, i64 8}
!65 = !{!"_ZTS13ImChunkStreamI19ImGuiWindowSettingsE", !56, i64 0}
!66 = !{!"_ZTS13ImChunkStreamI18ImGuiTableSettingsE", !56, i64 0}
!67 = !{!"_ZTS8ImVectorI16ImGuiContextHookE", !13, i64 0, !13, i64 4, !6, i64 8}
!68 = !{!"_ZTS12ImGuiLogType", !7, i64 0}
!69 = !{!"_ZTS18ImGuiMetricsConfig", !11, i64 0, !11, i64 1, !11, i64 2, !11, i64 3, !11, i64 4, !11, i64 5, !11, i64 6, !13, i64 8, !13, i64 12}
!70 = !{!"_ZTS14ImGuiStackTool", !13, i64 0, !13, i64 4, !13, i64 8, !71, i64 16, !11, i64 32, !15, i64 36}
!71 = !{!"_ZTS8ImVectorI19ImGuiStackLevelInfoE", !13, i64 0, !13, i64 4, !6, i64 8}
!72 = !{!10, !13, i64 14272}
!73 = !{!74, !75, i64 0}
!74 = !{!"_ZTS15ImGuiInputEvent", !75, i64 0, !27, i64 4, !7, i64 8, !11, i64 20, !11, i64 21}
!75 = !{!"_ZTS19ImGuiInputEventType", !7, i64 0}
!76 = !{!7, !7, i64 0}
!77 = !{!14, !15, i64 0}
!78 = !{!14, !15, i64 4}
!79 = !{!12, !15, i64 3572}
!80 = !{!12, !15, i64 3576}
!81 = !{!74, !11, i64 20}
!82 = !{!11, !11, i64 0}
!83 = !{i8 0, i8 2}
!84 = !{}
!85 = !{!12, !15, i64 3592}
!86 = !{!12, !15, i64 3588}
!87 = !{!88, !11, i64 0}
!88 = !{!"_ZTS12ImGuiKeyData", !11, i64 0, !15, i64 4, !15, i64 8, !15, i64 12}
!89 = !{!88, !15, i64 12}
!90 = !{!12, !11, i64 3596}
!91 = !{!12, !11, i64 3597}
!92 = !{!12, !11, i64 3598}
!93 = !{!12, !11, i64 3599}
!94 = !{!12, !13, i64 3600}
!95 = !{!13, !13, i64 0}
!96 = !{!16, !16, i64 0}
!97 = !{!12, !11, i64 14240}
!98 = distinct !{!98, !99}
!99 = !{!"llvm.loop.mustprogress"}
!100 = distinct !{!100, !99}
!101 = !{!10, !13, i64 21532}
!102 = distinct !{!102, !99}
!103 = !{!10, !6, i64 14280}
!104 = !{!10, !11, i64 14248}


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