; LLVM IR from Samson-Mano/EM_Propogation_simulation :: EM_Propogation_simulation/src/ImGui (imgui)

; 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.ImVec4 = type { float, float, float, float }
%struct.ImVec2 = type { float, float }
%struct.ImGuiListClipper = type { ptr, i32, i32, i32, float, float, ptr }
%struct.ImGuiContext = type { i8, i8, %struct.ImGuiIO, %struct.ImGuiStyle, ptr, float, float, %struct.ImDrawListSharedData, double, i32, i32, i32, i8, i8, i8, i8, i8, ptr, %struct.ImVector.1, %struct.ImVector.1, i32, i32, %struct.ImVector.2, %struct.ImVector.2, %struct.ImVector.2, %struct.ImVector.3, %struct.ImGuiStorage, i32, %struct.ImVec2, ptr, ptr, ptr, ptr, ptr, %struct.ImVec2, i32, float, %struct.ImVec2, %struct.ImVec2, i32, i32, i32, i8, i8, float, float, i32, i32, float, i8, i8, i8, i8, i8, i8, %struct.ImVec2, ptr, i32, i32, i32, i8, i8, ptr, i32, float, [140 x %struct.ImGuiKeyOwnerData], %struct.ImGuiKeyRoutingTable, i32, i8, i32, i32, i32, i32, %struct.ImGuiNextItemData, %struct.ImGuiLastItemData, %struct.ImGuiNextWindowData, %struct.ImVector.6, %struct.ImVector.7, %struct.ImVector.8, %struct.ImVector.9, %struct.ImVector.10, %struct.ImVector.11, %struct.ImVector.12, %struct.ImVector.12, i32, %struct.ImVector.13, ptr, 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, i32, i32, 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.14, [16 x i8], i32, %struct.ImVector.15, ptr, i32, %struct.ImVector.16, %struct.ImPool, %struct.ImVector.18, %struct.ImVector.19, ptr, %struct.ImPool.20, %struct.ImVector.22, %struct.ImVector.23, i32, i32, float, float, %struct.ImVec2, %struct.ImGuiInputTextState, %struct.ImGuiInputTextDeactivatedState, %struct.ImFont, i32, i32, i32, i32, float, float, i32, %struct.ImVec4, %struct.ImGuiComboPreviewData, float, float, i8, i8, float, float, float, float, i16, i16, %struct.ImVector.24, %struct.ImVector.9, %struct.ImGuiPlatformImeData, %struct.ImGuiPlatformImeData, i8, i8, float, %struct.ImGuiTextBuffer, %struct.ImVector.26, %struct.ImChunkStream, %struct.ImChunkStream.27, %struct.ImVector.28, i32, [7 x ptr], i8, i32, ptr, %struct.ImGuiTextBuffer, ptr, ptr, float, i8, i32, i32, i32, i32, %struct.ImGuiTextBuffer, %struct.ImGuiTextIndex, i8, i8, i8, i8, i8, i32, %struct.ImGuiMetricsConfig, %struct.ImGuiStackTool, [60 x float], i32, i32, float, i32, i32, i32, %struct.ImVector.24 }
%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, i8, i8, 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], ptr, %struct.ImVec2, [5 x i8], float, float, i32, 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], 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.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, float, %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, %struct.ImVector.0, [48 x %struct.ImVec2], float, [64 x i8], ptr }
%struct.ImVector.0 = type { i32, i32, ptr }
%struct.ImVector.1 = type { i32, i32, ptr }
%struct.ImVector.2 = type { i32, i32, ptr }
%struct.ImVector.3 = type { i32, i32, ptr }
%struct.ImGuiStorage = type { %struct.ImVector.4 }
%struct.ImVector.4 = type { i32, i32, ptr }
%struct.ImGuiKeyOwnerData = type <{ i32, i32, i8, i8, [2 x i8] }>
%struct.ImGuiKeyRoutingTable = type { [140 x i16], %struct.ImVector.5, %struct.ImVector.5 }
%struct.ImVector.5 = type { i32, i32, ptr }
%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.6 = type { i32, i32, ptr }
%struct.ImVector.7 = type { i32, i32, ptr }
%struct.ImVector.8 = type { i32, i32, ptr }
%struct.ImVector.10 = type { i32, i32, ptr }
%struct.ImVector.11 = type { i32, i32, ptr }
%struct.ImVector.12 = type { i32, i32, ptr }
%struct.ImVector.13 = 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.14 = type { i32, i32, ptr }
%struct.ImVector.15 = type { i32, i32, ptr }
%struct.ImVector.16 = type { i32, i32, ptr }
%struct.ImPool = type { %struct.ImVector.17, %struct.ImGuiStorage, i32, i32 }
%struct.ImVector.17 = type { i32, i32, ptr }
%struct.ImVector.18 = type { i32, i32, ptr }
%struct.ImVector.19 = type { i32, i32, ptr }
%struct.ImPool.20 = type { %struct.ImVector.21, %struct.ImGuiStorage, i32, i32 }
%struct.ImVector.21 = type { i32, i32, ptr }
%struct.ImVector.22 = type { i32, i32, ptr }
%struct.ImVector.23 = type { i32, i32, ptr }
%struct.ImGuiInputTextState = type <{ ptr, i32, i32, i32, [4 x i8], %struct.ImVector, %struct.ImVector.24, %struct.ImVector.24, 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.ImGuiInputTextDeactivatedState = type { i32, %struct.ImVector.24 }
%struct.ImFont = type <{ %struct.ImVector.18, float, float, %struct.ImVector, %struct.ImVector.25, ptr, ptr, ptr, i16, i16, i16, i16, float, float, i8, [3 x i8], float, float, float, i32, [2 x i8], [2 x i8] }>
%struct.ImVector.25 = type { i32, i32, ptr }
%struct.ImGuiComboPreviewData = type { %struct.ImRect, %struct.ImVec2, %struct.ImVec2, %struct.ImVec2, float, i32 }
%struct.ImVector.9 = type { i32, i32, ptr }
%struct.ImGuiPlatformImeData = type { i8, %struct.ImVec2, float }
%struct.ImVector.26 = type { i32, i32, ptr }
%struct.ImChunkStream = type { %struct.ImVector.24 }
%struct.ImChunkStream.27 = type { %struct.ImVector.24 }
%struct.ImVector.28 = type { i32, i32, ptr }
%struct.ImGuiTextBuffer = type { %struct.ImVector.24 }
%struct.ImGuiTextIndex = type <{ %struct.ImVector.10, i32, [4 x i8] }>
%struct.ImGuiMetricsConfig = type { i8, i8, i8, i8, i8, i8, i8, i8, i32, i32 }
%struct.ImGuiStackTool = type { i32, i32, i32, %struct.ImVector.29, i8, float }
%struct.ImVector.29 = type { i32, i32, ptr }
%struct.ImVector.24 = type { i32, i32, ptr }
%struct.ImDrawList = type <{ %struct.ImVector.33, %struct.ImVector, %struct.ImVector.34, i32, i32, ptr, ptr, ptr, ptr, %struct.ImVector.35, %struct.ImVector.36, %struct.ImVector.0, %struct.ImDrawCmdHeader, %struct.ImDrawListSplitter, float, [4 x i8] }>
%struct.ImVector.33 = type { i32, i32, ptr }
%struct.ImVector.34 = type { i32, i32, ptr }
%struct.ImVector.35 = type { i32, i32, ptr }
%struct.ImVector.36 = type { i32, i32, ptr }
%struct.ImDrawCmdHeader = type <{ %struct.ImVec4, ptr, i32, [4 x i8] }>
%struct.ImDrawListSplitter = type { i32, i32, %struct.ImVector.19 }
%struct.ImDrawCmd = type { %struct.ImVec4, ptr, i32, i32, i32, ptr, ptr }
%struct.ImGuiWindow = type <{ ptr, ptr, i32, i32, ptr, %struct.ImVec2, %struct.ImVec2, %struct.ImVec2, %struct.ImVec2, %struct.ImVec2, %struct.ImVec2, %struct.ImVec2, float, float, float, float, float, float, float, float, i32, i32, i32, %struct.ImVec2, %struct.ImVec2, %struct.ImVec2, %struct.ImVec2, %struct.ImVec2, %struct.ImVec2, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i16, i16, i16, i16, i16, i32, i8, i8, i8, i8, i32, i8, i8, i8, i8, i32, %struct.ImVec2, %struct.ImVec2, %struct.ImVector.9, %struct.ImGuiWindowTempData, %struct.ImRect, %struct.ImRect, %struct.ImRect, %struct.ImRect, %struct.ImRect, %struct.ImRect, %struct.ImRect, %struct.ImVec2ih, %struct.ImVec2ih, i32, float, float, [4 x i8], %struct.ImGuiStorage, %struct.ImVector.32, float, i32, ptr, %struct.ImDrawList, ptr, ptr, ptr, ptr, ptr, ptr, ptr, [2 x i32], [2 x %struct.ImRect], i32, i32, i32, i8, [3 x i8] }>
%struct.ImGuiWindowTempData = type { %struct.ImVec2, %struct.ImVec2, %struct.ImVec2, %struct.ImVec2, %struct.ImVec2, %struct.ImVec2, %struct.ImVec2, float, float, i8, i8, %struct.ImVec1, %struct.ImVec1, %struct.ImVec1, %struct.ImVec2, i32, i16, i16, i8, i8, i8, i8, %struct.ImVec2, %struct.ImGuiMenuColumns, i32, i32, %struct.ImVector.2, ptr, ptr, i32, i32, i32, float, float, %struct.ImVector.18, %struct.ImVector.18 }
%struct.ImVec1 = type { float }
%struct.ImGuiMenuColumns = type <{ i32, i32, i16, i16, i16, i16, i16, [4 x i16], [2 x i8] }>
%struct.ImVec2ih = type { i16, i16 }
%struct.ImVector.32 = type { i32, i32, ptr }
%struct.ImDrawVert = type { %struct.ImVec2, %struct.ImVec2, i32 }

@GImGui = external dso_local global ptr, align 8
@.str.16 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.401 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.477 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.478 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.479 = external hidden unnamed_addr constant [73 x i8], align 1
@.str.480 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.481 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.482 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.483 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.484 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.485 = external hidden unnamed_addr constant [6 x i8], align 1

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

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

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

declare i32 @__gxx_personality_v0(...)

; Function Attrs: inlinehint mustprogress uwtable
declare hidden <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8)) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z14ImFormatStringPcmPKcz(ptr noundef, i64 noundef, ptr noundef, ...) #0

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN16ImGuiListClipper5BeginEif(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef, float noundef) #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN16ImGuiListClipper4StepEv(ptr noundef nonnull align 8 dereferenceable(40)) #4 align 2

declare void @_ZN10ImDrawList7AddRectERK6ImVec2S2_jfif(ptr noundef nonnull align 8 dereferenceable(196), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8), i32 noundef, float noundef, i32 noundef, float noundef) #5

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN5ImGui13IsItemHoveredEi(i32 noundef) #4

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN5ImGui17GetWindowDrawListEv() #4

declare void @_ZN5ImGui7TreePopEv() #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN5ImGui8SameLineEff(float noundef, float noundef) #0

declare void @_ZN5ImGui10BulletTextEPKcz(ptr noundef, ...) #5

declare noundef zeroext i1 @_ZN5ImGui10SelectableEPKcbiRK6ImVec2(ptr noundef, i1 noundef zeroext, i32 noundef, ptr noundef nonnull align 4 dereferenceable(8)) #5

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN5ImGui17DebugNodeDrawListEP11ImGuiWindowPK10ImDrawListPKc(ptr noundef %0, ptr noundef %1, ptr noundef %2) #6 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i8, align 1
  %11 = alloca %struct.ImVec4, align 4
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca %struct.ImVec2, align 4
  %15 = alloca ptr, align 8
  %16 = alloca [300 x i8], align 16
  %17 = alloca i8, align 1
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca float, align 4
  %21 = alloca i32, align 4
  %22 = alloca [3 x %struct.ImVec2], align 16
  %23 = alloca i32, align 4
  %24 = alloca %struct.ImVec2, align 4
  %25 = alloca %struct.ImGuiListClipper, align 8
  %26 = alloca ptr, align 8
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca [3 x %struct.ImVec2], align 16
  %33 = alloca i32, align 4
  %34 = alloca ptr, align 8
  %35 = alloca %struct.ImVec2, align 4
  %36 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #9
  %37 = load ptr, ptr @GImGui, align 8, !tbaa !5
  store ptr %37, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #9
  %38 = load ptr, ptr %7, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.ImGuiContext, ptr %38, i32 0, i32 230
  store ptr %39, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #9
  %40 = load ptr, ptr %5, align 8, !tbaa !5
  %41 = getelementptr inbounds %struct.ImDrawList, ptr %40, i32 0, i32 0
  %42 = getelementptr inbounds %struct.ImVector.33, ptr %41, i32 0, i32 0
  %43 = load i32, ptr %42, align 8, !tbaa !9
  store i32 %43, ptr %9, align 4, !tbaa !23
  %44 = load i32, ptr %9, align 4, !tbaa !23
  %45 = icmp sgt i32 %44, 0
  br i1 %45, label %46, label %63

46:                                               ; preds = %3
  %47 = load ptr, ptr %5, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.ImDrawList, ptr %47, i32 0, i32 0
  %49 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNK8ImVectorI9ImDrawCmdE4backEv(ptr noundef nonnull align 8 dereferenceable(16) %48)
  %50 = getelementptr inbounds %struct.ImDrawCmd, ptr %49, i32 0, i32 4
  %51 = load i32, ptr %50, align 8, !tbaa !24
  %52 = icmp eq i32 %51, 0
  br i1 %52, label %53, label %63

53:                                               ; preds = %46
  %54 = load ptr, ptr %5, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.ImDrawList, ptr %54, i32 0, i32 0
  %56 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNK8ImVectorI9ImDrawCmdE4backEv(ptr noundef nonnull align 8 dereferenceable(16) %55)
  %57 = getelementptr inbounds %struct.ImDrawCmd, ptr %56, i32 0, i32 5
  %58 = load ptr, ptr %57, align 8, !tbaa !26
  %59 = icmp eq ptr %58, null
  br i1 %59, label %60, label %63

60:                                               ; preds = %53
  %61 = load i32, ptr %9, align 4, !tbaa !23
  %62 = add nsw i32 %61, -1
  store i32 %62, ptr %9, align 4, !tbaa !23
  br label %63

63:                                               ; preds = %60, %53, %46, %3
  call void @llvm.lifetime.start.p0(i64 1, ptr %10) #9
  %64 = load ptr, ptr %5, align 8, !tbaa !5
  %65 = load ptr, ptr %6, align 8, !tbaa !5
  %66 = load ptr, ptr %5, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.ImDrawList, ptr %66, i32 0, i32 6
  %68 = load ptr, ptr %67, align 8, !tbaa !27
  %69 = icmp ne ptr %68, null
  br i1 %69, label %70, label %74

70:                                               ; preds = %63
  %71 = load ptr, ptr %5, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.ImDrawList, ptr %71, i32 0, i32 6
  %73 = load ptr, ptr %72, align 8, !tbaa !27
  br label %75

74:                                               ; preds = %63
  br label %75

75:                                               ; preds = %74, %70
  %76 = phi ptr [ %73, %70 ], [ @.str.16, %74 ]
  %77 = load ptr, ptr %5, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.ImDrawList, ptr %77, i32 0, i32 2
  %79 = getelementptr inbounds %struct.ImVector.34, ptr %78, i32 0, i32 0
  %80 = load i32, ptr %79, align 8, !tbaa !28
  %81 = load ptr, ptr %5, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct.ImDrawList, ptr %81, i32 0, i32 1
  %83 = getelementptr inbounds %struct.ImVector, ptr %82, i32 0, i32 0
  %84 = load i32, ptr %83, align 8, !tbaa !29
  %85 = load i32, ptr %9, align 4, !tbaa !23
  %86 = call noundef zeroext i1 (ptr, ptr, ...) @_ZN5ImGui8TreeNodeEPKvPKcz(ptr noundef %64, ptr noundef @.str.477, ptr noundef %65, ptr noundef %76, i32 noundef %80, i32 noundef %84, i32 noundef %85)
  %87 = zext i1 %86 to i8
  store i8 %87, ptr %10, align 1, !tbaa !30
  %88 = load ptr, ptr %5, align 8, !tbaa !5
  %89 = call noundef ptr @_ZN5ImGui17GetWindowDrawListEv()
  %90 = icmp eq ptr %88, %89
  br i1 %90, label %91, label %96

91:                                               ; preds = %75
  call void @_ZN5ImGui8SameLineEff(float noundef 0.000000e+00, float noundef -1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr %11) #9
  call void @_ZN6ImVec4C2Effff(ptr noundef nonnull align 4 dereferenceable(16) %11, float noundef 1.000000e+00, float noundef 0x3FD99999A0000000, float noundef 0x3FD99999A0000000, float noundef 1.000000e+00)
  call void (ptr, ptr, ...) @_ZN5ImGui11TextColoredERK6ImVec4PKcz(ptr noundef nonnull align 4 dereferenceable(16) %11, ptr noundef @.str.478)
  call void @llvm.lifetime.end.p0(i64 16, ptr %11) #9
  %92 = load i8, ptr %10, align 1, !tbaa !30, !range !32, !noundef !33
  %93 = trunc i8 %92 to i1
  br i1 %93, label %94, label %95

94:                                               ; preds = %91
  call void @_ZN5ImGui7TreePopEv()
  br label %95

95:                                               ; preds = %94, %91
  store i32 1, ptr %12, align 4
  br label %502

96:                                               ; preds = %75
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #9
  %97 = load ptr, ptr %4, align 8, !tbaa !5
  %98 = call noundef ptr @_ZN5ImGui21GetForegroundDrawListEP11ImGuiWindow(ptr noundef %97)
  store ptr %98, ptr %13, align 8, !tbaa !5
  %99 = load ptr, ptr %4, align 8, !tbaa !5
  %100 = icmp ne ptr %99, null
  br i1 %100, label %101, label %115

101:                                              ; preds = %96
  %102 = call noundef zeroext i1 @_ZN5ImGui13IsItemHoveredEi(i32 noundef 0)
  br i1 %102, label %103, label %115

103:                                              ; preds = %101
  %104 = load ptr, ptr %13, align 8, !tbaa !5
  %105 = icmp ne ptr %104, null
  br i1 %105, label %106, label %115

106:                                              ; preds = %103
  %107 = load ptr, ptr %13, align 8, !tbaa !5
  %108 = load ptr, ptr %4, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct.ImGuiWindow, ptr %108, i32 0, i32 5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #9
  %110 = load ptr, ptr %4, align 8, !tbaa !5
  %111 = getelementptr inbounds %struct.ImGuiWindow, ptr %110, i32 0, i32 5
  %112 = load ptr, ptr %4, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.ImGuiWindow, ptr %112, i32 0, i32 6
  %114 = call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %111, ptr noundef nonnull align 4 dereferenceable(8) %113)
  store <2 x float> %114, ptr %14, align 4
  call void @_ZN10ImDrawList7AddRectERK6ImVec2S2_jfif(ptr noundef nonnull align 8 dereferenceable(196) %107, ptr noundef nonnull align 4 dereferenceable(8) %109, ptr noundef nonnull align 4 dereferenceable(8) %14, i32 noundef -16711681, float noundef 0.000000e+00, i32 noundef 0, float noundef 1.000000e+00)
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #9
  br label %115

115:                                              ; preds = %106, %103, %101, %96
  %116 = load i8, ptr %10, align 1, !tbaa !30, !range !32, !noundef !33
  %117 = trunc i8 %116 to i1
  br i1 %117, label %119, label %118

118:                                              ; preds = %115
  store i32 1, ptr %12, align 4
  br label %501

119:                                              ; preds = %115
  %120 = load ptr, ptr %4, align 8, !tbaa !5
  %121 = icmp ne ptr %120, null
  br i1 %121, label %122, label %128

122:                                              ; preds = %119
  %123 = load ptr, ptr %4, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.ImGuiWindow, ptr %123, i32 0, i32 32
  %125 = load i8, ptr %124, align 1, !tbaa !34, !range !32, !noundef !33
  %126 = trunc i8 %125 to i1
  br i1 %126, label %128, label %127

127:                                              ; preds = %122
  call void (ptr, ...) @_ZN5ImGui12TextDisabledEPKcz(ptr noundef @.str.479)
  br label %128

128:                                              ; preds = %127, %122, %119
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #9
  %129 = load ptr, ptr %5, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.ImDrawList, ptr %129, i32 0, i32 0
  %131 = getelementptr inbounds %struct.ImVector.33, ptr %130, i32 0, i32 2
  %132 = load ptr, ptr %131, align 8, !tbaa !50
  store ptr %132, ptr %15, align 8, !tbaa !5
  br label %133

133:                                              ; preds = %496, %128
  %134 = load ptr, ptr %15, align 8, !tbaa !5
  %135 = load ptr, ptr %5, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.ImDrawList, ptr %135, i32 0, i32 0
  %137 = getelementptr inbounds %struct.ImVector.33, ptr %136, i32 0, i32 2
  %138 = load ptr, ptr %137, align 8, !tbaa !50
  %139 = load i32, ptr %9, align 4, !tbaa !23
  %140 = sext i32 %139 to i64
  %141 = getelementptr inbounds %struct.ImDrawCmd, ptr %138, i64 %140
  %142 = icmp ult ptr %134, %141
  br i1 %142, label %144, label %143

143:                                              ; preds = %133
  store i32 2, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #9
  br label %500

144:                                              ; preds = %133
  %145 = load ptr, ptr %15, align 8, !tbaa !5
  %146 = getelementptr inbounds %struct.ImDrawCmd, ptr %145, i32 0, i32 5
  %147 = load ptr, ptr %146, align 8, !tbaa !26
  %148 = icmp ne ptr %147, null
  br i1 %148, label %149, label %156

149:                                              ; preds = %144
  %150 = load ptr, ptr %15, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.ImDrawCmd, ptr %150, i32 0, i32 5
  %152 = load ptr, ptr %151, align 8, !tbaa !26
  %153 = load ptr, ptr %15, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.ImDrawCmd, ptr %153, i32 0, i32 6
  %155 = load ptr, ptr %154, align 8, !tbaa !51
  call void (ptr, ...) @_ZN5ImGui10BulletTextEPKcz(ptr noundef @.str.480, ptr noundef %152, ptr noundef %155)
  br label %496

156:                                              ; preds = %144
  call void @llvm.lifetime.start.p0(i64 300, ptr %16) #9
  %157 = getelementptr inbounds [300 x i8], ptr %16, i64 0, i64 0
  %158 = load ptr, ptr %15, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.ImDrawCmd, ptr %158, i32 0, i32 4
  %160 = load i32, ptr %159, align 8, !tbaa !24
  %161 = udiv i32 %160, 3
  %162 = load ptr, ptr %15, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.ImDrawCmd, ptr %162, i32 0, i32 1
  %164 = load ptr, ptr %163, align 8, !tbaa !52
  %165 = ptrtoint ptr %164 to i64
  %166 = inttoptr i64 %165 to ptr
  %167 = load ptr, ptr %15, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct.ImDrawCmd, ptr %167, i32 0, i32 0
  %169 = getelementptr inbounds %struct.ImVec4, ptr %168, i32 0, i32 0
  %170 = load float, ptr %169, align 8, !tbaa !53
  %171 = fpext float %170 to double
  %172 = load ptr, ptr %15, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct.ImDrawCmd, ptr %172, i32 0, i32 0
  %174 = getelementptr inbounds %struct.ImVec4, ptr %173, i32 0, i32 1
  %175 = load float, ptr %174, align 4, !tbaa !54
  %176 = fpext float %175 to double
  %177 = load ptr, ptr %15, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.ImDrawCmd, ptr %177, i32 0, i32 0
  %179 = getelementptr inbounds %struct.ImVec4, ptr %178, i32 0, i32 2
  %180 = load float, ptr %179, align 8, !tbaa !55
  %181 = fpext float %180 to double
  %182 = load ptr, ptr %15, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.ImDrawCmd, ptr %182, i32 0, i32 0
  %184 = getelementptr inbounds %struct.ImVec4, ptr %183, i32 0, i32 3
  %185 = load float, ptr %184, align 4, !tbaa !56
  %186 = fpext float %185 to double
  %187 = call noundef i32 (ptr, i64, ptr, ...) @_Z14ImFormatStringPcmPKcz(ptr noundef %157, i64 noundef 300, ptr noundef @.str.481, i32 noundef %161, ptr noundef %166, double noundef %171, double noundef %176, double noundef %181, double noundef %186)
  call void @llvm.lifetime.start.p0(i64 1, ptr %17) #9
  %188 = load ptr, ptr %15, align 8, !tbaa !5
  %189 = load ptr, ptr %5, align 8, !tbaa !5
  %190 = getelementptr inbounds %struct.ImDrawList, ptr %189, i32 0, i32 0
  %191 = call noundef ptr @_ZNK8ImVectorI9ImDrawCmdE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %190)
  %192 = ptrtoint ptr %188 to i64
  %193 = ptrtoint ptr %191 to i64
  %194 = sub i64 %192, %193
  %195 = sdiv exact i64 %194, 56
  %196 = inttoptr i64 %195 to ptr
  %197 = getelementptr inbounds [300 x i8], ptr %16, i64 0, i64 0
  %198 = call noundef zeroext i1 (ptr, ptr, ...) @_ZN5ImGui8TreeNodeEPKvPKcz(ptr noundef %196, ptr noundef @.str.401, ptr noundef %197)
  %199 = zext i1 %198 to i8
  store i8 %199, ptr %17, align 1, !tbaa !30
  %200 = call noundef zeroext i1 @_ZN5ImGui13IsItemHoveredEi(i32 noundef 0)
  br i1 %200, label %201, label %226

201:                                              ; preds = %156
  %202 = load ptr, ptr %8, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.ImGuiMetricsConfig, ptr %202, i32 0, i32 5
  %204 = load i8, ptr %203, align 1, !tbaa !57, !range !32, !noundef !33
  %205 = trunc i8 %204 to i1
  br i1 %205, label %211, label %206

206:                                              ; preds = %201
  %207 = load ptr, ptr %8, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.ImGuiMetricsConfig, ptr %207, i32 0, i32 6
  %209 = load i8, ptr %208, align 2, !tbaa !59, !range !32, !noundef !33
  %210 = trunc i8 %209 to i1
  br i1 %210, label %211, label %226

211:                                              ; preds = %206, %201
  %212 = load ptr, ptr %13, align 8, !tbaa !5
  %213 = icmp ne ptr %212, null
  br i1 %213, label %214, label %226

214:                                              ; preds = %211
  %215 = load ptr, ptr %13, align 8, !tbaa !5
  %216 = load ptr, ptr %5, align 8, !tbaa !5
  %217 = load ptr, ptr %15, align 8, !tbaa !5
  %218 = load ptr, ptr %8, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.ImGuiMetricsConfig, ptr %218, i32 0, i32 5
  %220 = load i8, ptr %219, align 1, !tbaa !57, !range !32, !noundef !33
  %221 = trunc i8 %220 to i1
  %222 = load ptr, ptr %8, align 8, !tbaa !5
  %223 = getelementptr inbounds %struct.ImGuiMetricsConfig, ptr %222, i32 0, i32 6
  %224 = load i8, ptr %223, align 2, !tbaa !59, !range !32, !noundef !33
  %225 = trunc i8 %224 to i1
  call void @_ZN5ImGui38DebugNodeDrawCmdShowMeshAndBoundingBoxEP10ImDrawListPKS0_PK9ImDrawCmdbb(ptr noundef %215, ptr noundef %216, ptr noundef %217, i1 noundef zeroext %221, i1 noundef zeroext %225)
  br label %226

226:                                              ; preds = %214, %211, %206, %156
  %227 = load i8, ptr %17, align 1, !tbaa !30, !range !32, !noundef !33
  %228 = trunc i8 %227 to i1
  br i1 %228, label %230, label %229

229:                                              ; preds = %226
  store i32 4, ptr %12, align 4
  br label %493

230:                                              ; preds = %226
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #9
  %231 = load ptr, ptr %5, align 8, !tbaa !5
  %232 = getelementptr inbounds %struct.ImDrawList, ptr %231, i32 0, i32 1
  %233 = getelementptr inbounds %struct.ImVector, ptr %232, i32 0, i32 0
  %234 = load i32, ptr %233, align 8, !tbaa !29
  %235 = icmp sgt i32 %234, 0
  br i1 %235, label %236, label %241

236:                                              ; preds = %230
  %237 = load ptr, ptr %5, align 8, !tbaa !5
  %238 = getelementptr inbounds %struct.ImDrawList, ptr %237, i32 0, i32 1
  %239 = getelementptr inbounds %struct.ImVector, ptr %238, i32 0, i32 2
  %240 = load ptr, ptr %239, align 8, !tbaa !60
  br label %242

241:                                              ; preds = %230
  br label %242

242:                                              ; preds = %241, %236
  %243 = phi ptr [ %240, %236 ], [ null, %241 ]
  store ptr %243, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #9
  %244 = load ptr, ptr %5, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct.ImDrawList, ptr %244, i32 0, i32 2
  %246 = getelementptr inbounds %struct.ImVector.34, ptr %245, i32 0, i32 2
  %247 = load ptr, ptr %246, align 8, !tbaa !61
  %248 = load ptr, ptr %15, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct.ImDrawCmd, ptr %248, i32 0, i32 2
  %250 = load i32, ptr %249, align 8, !tbaa !62
  %251 = zext i32 %250 to i64
  %252 = getelementptr inbounds %struct.ImDrawVert, ptr %247, i64 %251
  store ptr %252, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #9
  store float 0.000000e+00, ptr %20, align 4, !tbaa !63
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #9
  %253 = load ptr, ptr %15, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.ImDrawCmd, ptr %253, i32 0, i32 3
  %255 = load i32, ptr %254, align 4, !tbaa !64
  store i32 %255, ptr %21, align 4, !tbaa !23
  br label %256

256:                                              ; preds = %305, %242
  %257 = load i32, ptr %21, align 4, !tbaa !23
  %258 = load ptr, ptr %15, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.ImDrawCmd, ptr %258, i32 0, i32 3
  %260 = load i32, ptr %259, align 4, !tbaa !64
  %261 = load ptr, ptr %15, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct.ImDrawCmd, ptr %261, i32 0, i32 4
  %263 = load i32, ptr %262, align 8, !tbaa !24
  %264 = add i32 %260, %263
  %265 = icmp ult i32 %257, %264
  br i1 %265, label %267, label %266

266:                                              ; preds = %256
  store i32 5, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #9
  br label %312

267:                                              ; preds = %256
  call void @llvm.lifetime.start.p0(i64 24, ptr %22) #9
  %268 = getelementptr inbounds [3 x %struct.ImVec2], ptr %22, i32 0, i32 0
  %269 = getelementptr inbounds %struct.ImVec2, ptr %268, i64 3
  br label %270

270:                                              ; preds = %270, %267
  %271 = phi ptr [ %268, %267 ], [ %272, %270 ]
  call void @_ZN6ImVec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %271)
  %272 = getelementptr inbounds %struct.ImVec2, ptr %271, i64 1
  %273 = icmp eq ptr %272, %269
  br i1 %273, label %274, label %270

274:                                              ; preds = %270
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #9
  store i32 0, ptr %23, align 4, !tbaa !23
  br label %275

275:                                              ; preds = %300, %274
  %276 = load i32, ptr %23, align 4, !tbaa !23
  %277 = icmp slt i32 %276, 3
  br i1 %277, label %279, label %278

278:                                              ; preds = %275
  store i32 7, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #9
  br label %305

279:                                              ; preds = %275
  %280 = load ptr, ptr %19, align 8, !tbaa !5
  %281 = load ptr, ptr %18, align 8, !tbaa !5
  %282 = icmp ne ptr %281, null
  br i1 %282, label %283, label %290

283:                                              ; preds = %279
  %284 = load ptr, ptr %18, align 8, !tbaa !5
  %285 = load i32, ptr %21, align 4, !tbaa !23
  %286 = zext i32 %285 to i64
  %287 = getelementptr inbounds i16, ptr %284, i64 %286
  %288 = load i16, ptr %287, align 2, !tbaa !65
  %289 = zext i16 %288 to i32
  br label %292

290:                                              ; preds = %279
  %291 = load i32, ptr %21, align 4, !tbaa !23
  br label %292

292:                                              ; preds = %290, %283
  %293 = phi i32 [ %289, %283 ], [ %291, %290 ]
  %294 = zext i32 %293 to i64
  %295 = getelementptr inbounds %struct.ImDrawVert, ptr %280, i64 %294
  %296 = getelementptr inbounds %struct.ImDrawVert, ptr %295, i32 0, i32 0
  %297 = load i32, ptr %23, align 4, !tbaa !23
  %298 = sext i32 %297 to i64
  %299 = getelementptr inbounds [3 x %struct.ImVec2], ptr %22, i64 0, i64 %298
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %299, ptr align 4 %296, i64 8, i1 false), !tbaa.struct !66
  br label %300

300:                                              ; preds = %292
  %301 = load i32, ptr %23, align 4, !tbaa !23
  %302 = add nsw i32 %301, 1
  store i32 %302, ptr %23, align 4, !tbaa !23
  %303 = load i32, ptr %21, align 4, !tbaa !23
  %304 = add i32 %303, 1
  store i32 %304, ptr %21, align 4, !tbaa !23
  br label %275, !llvm.loop !67

305:                                              ; preds = %278
  %306 = getelementptr inbounds [3 x %struct.ImVec2], ptr %22, i64 0, i64 0
  %307 = getelementptr inbounds [3 x %struct.ImVec2], ptr %22, i64 0, i64 1
  %308 = getelementptr inbounds [3 x %struct.ImVec2], ptr %22, i64 0, i64 2
  %309 = call noundef float @_Z14ImTriangleAreaRK6ImVec2S1_S1_(ptr noundef nonnull align 4 dereferenceable(8) %306, ptr noundef nonnull align 4 dereferenceable(8) %307, ptr noundef nonnull align 4 dereferenceable(8) %308)
  %310 = load float, ptr %20, align 4, !tbaa !63
  %311 = fadd float %310, %309
  store float %311, ptr %20, align 4, !tbaa !63
  call void @llvm.lifetime.end.p0(i64 24, ptr %22) #9
  br label %256, !llvm.loop !69

312:                                              ; preds = %266
  %313 = getelementptr inbounds [300 x i8], ptr %16, i64 0, i64 0
  %314 = load ptr, ptr %15, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.ImDrawCmd, ptr %314, i32 0, i32 4
  %316 = load i32, ptr %315, align 8, !tbaa !24
  %317 = load ptr, ptr %15, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.ImDrawCmd, ptr %317, i32 0, i32 2
  %319 = load i32, ptr %318, align 8, !tbaa !62
  %320 = load ptr, ptr %15, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct.ImDrawCmd, ptr %320, i32 0, i32 3
  %322 = load i32, ptr %321, align 4, !tbaa !64
  %323 = load float, ptr %20, align 4, !tbaa !63
  %324 = fpext float %323 to double
  %325 = call noundef i32 (ptr, i64, ptr, ...) @_Z14ImFormatStringPcmPKcz(ptr noundef %313, i64 noundef 300, ptr noundef @.str.482, i32 noundef %316, i32 noundef %319, i32 noundef %322, double noundef %324)
  %326 = getelementptr inbounds [300 x i8], ptr %16, i64 0, i64 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #9
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %24, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %327 = call noundef zeroext i1 @_ZN5ImGui10SelectableEPKcbiRK6ImVec2(ptr noundef %326, i1 noundef zeroext false, i32 noundef 0, ptr noundef nonnull align 4 dereferenceable(8) %24)
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  %328 = call noundef zeroext i1 @_ZN5ImGui13IsItemHoveredEi(i32 noundef 0)
  br i1 %328, label %329, label %336

329:                                              ; preds = %312
  %330 = load ptr, ptr %13, align 8, !tbaa !5
  %331 = icmp ne ptr %330, null
  br i1 %331, label %332, label %336

332:                                              ; preds = %329
  %333 = load ptr, ptr %13, align 8, !tbaa !5
  %334 = load ptr, ptr %5, align 8, !tbaa !5
  %335 = load ptr, ptr %15, align 8, !tbaa !5
  call void @_ZN5ImGui38DebugNodeDrawCmdShowMeshAndBoundingBoxEP10ImDrawListPKS0_PK9ImDrawCmdbb(ptr noundef %333, ptr noundef %334, ptr noundef %335, i1 noundef zeroext true, i1 noundef zeroext false)
  br label %336

336:                                              ; preds = %332, %329, %312
  call void @llvm.lifetime.start.p0(i64 40, ptr %25) #9
  call void @_ZN16ImGuiListClipperC1Ev(ptr noundef nonnull align 8 dereferenceable(40) %25)
  %337 = load ptr, ptr %15, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.ImDrawCmd, ptr %337, i32 0, i32 4
  %339 = load i32, ptr %338, align 8, !tbaa !24
  %340 = udiv i32 %339, 3
  invoke void @_ZN16ImGuiListClipper5BeginEif(ptr noundef nonnull align 8 dereferenceable(40) %25, i32 noundef %340, float noundef -1.000000e+00)
          to label %341 unwind label %361

341:                                              ; preds = %336
  br label %342

342:                                              ; preds = %490, %341
  %343 = invoke noundef zeroext i1 @_ZN16ImGuiListClipper4StepEv(ptr noundef nonnull align 8 dereferenceable(40) %25)
          to label %344 unwind label %361

344:                                              ; preds = %342
  br i1 %343, label %345, label %491

345:                                              ; preds = %344
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #9
  %346 = getelementptr inbounds %struct.ImGuiListClipper, ptr %25, i32 0, i32 1
  %347 = load i32, ptr %346, align 8, !tbaa !70
  store i32 %347, ptr %28, align 4, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #9
  %348 = load ptr, ptr %15, align 8, !tbaa !5
  %349 = getelementptr inbounds %struct.ImDrawCmd, ptr %348, i32 0, i32 3
  %350 = load i32, ptr %349, align 4, !tbaa !64
  %351 = getelementptr inbounds %struct.ImGuiListClipper, ptr %25, i32 0, i32 1
  %352 = load i32, ptr %351, align 8, !tbaa !70
  %353 = mul nsw i32 %352, 3
  %354 = add i32 %350, %353
  store i32 %354, ptr %29, align 4, !tbaa !23
  br label %355

355:                                              ; preds = %486, %345
  %356 = load i32, ptr %28, align 4, !tbaa !23
  %357 = getelementptr inbounds %struct.ImGuiListClipper, ptr %25, i32 0, i32 2
  %358 = load i32, ptr %357, align 4, !tbaa !72
  %359 = icmp slt i32 %356, %358
  br i1 %359, label %365, label %360

360:                                              ; preds = %355
  store i32 12, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #9
  br label %490

361:                                              ; preds = %491, %342, %336
  %362 = landingpad { ptr, i32 }
          cleanup
  %363 = extractvalue { ptr, i32 } %362, 0
  store ptr %363, ptr %26, align 8
  %364 = extractvalue { ptr, i32 } %362, 1
  store i32 %364, ptr %27, align 4
  br label %499

365:                                              ; preds = %355
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #9
  %366 = getelementptr inbounds [300 x i8], ptr %16, i64 0, i64 0
  store ptr %366, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #9
  %367 = getelementptr inbounds [300 x i8], ptr %16, i64 0, i64 0
  %368 = getelementptr inbounds i8, ptr %367, i64 300
  store ptr %368, ptr %31, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %32) #9
  %369 = getelementptr inbounds [3 x %struct.ImVec2], ptr %32, i32 0, i32 0
  %370 = getelementptr inbounds %struct.ImVec2, ptr %369, i64 3
  br label %371

371:                                              ; preds = %373, %365
  %372 = phi ptr [ %369, %365 ], [ %374, %373 ]
  invoke void @_ZN6ImVec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %372)
          to label %373 unwind label %381

373:                                              ; preds = %371
  %374 = getelementptr inbounds %struct.ImVec2, ptr %372, i64 1
  %375 = icmp eq ptr %374, %370
  br i1 %375, label %376, label %371

376:                                              ; preds = %373
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #9
  store i32 0, ptr %33, align 4, !tbaa !23
  br label %377

377:                                              ; preds = %448, %376
  %378 = load i32, ptr %33, align 4, !tbaa !23
  %379 = icmp slt i32 %378, 3
  br i1 %379, label %385, label %380

380:                                              ; preds = %377
  store i32 15, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  br label %453

381:                                              ; preds = %460, %371
  %382 = landingpad { ptr, i32 }
          cleanup
  %383 = extractvalue { ptr, i32 } %382, 0
  store ptr %383, ptr %26, align 8
  %384 = extractvalue { ptr, i32 } %382, 1
  store i32 %384, ptr %27, align 4
  br label %489

385:                                              ; preds = %377
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #9
  %386 = load ptr, ptr %19, align 8, !tbaa !5
  %387 = load ptr, ptr %18, align 8, !tbaa !5
  %388 = icmp ne ptr %387, null
  br i1 %388, label %389, label %396

389:                                              ; preds = %385
  %390 = load ptr, ptr %18, align 8, !tbaa !5
  %391 = load i32, ptr %29, align 4, !tbaa !23
  %392 = sext i32 %391 to i64
  %393 = getelementptr inbounds i16, ptr %390, i64 %392
  %394 = load i16, ptr %393, align 2, !tbaa !65
  %395 = zext i16 %394 to i32
  br label %398

396:                                              ; preds = %385
  %397 = load i32, ptr %29, align 4, !tbaa !23
  br label %398

398:                                              ; preds = %396, %389
  %399 = phi i32 [ %395, %389 ], [ %397, %396 ]
  %400 = sext i32 %399 to i64
  %401 = getelementptr inbounds %struct.ImDrawVert, ptr %386, i64 %400
  store ptr %401, ptr %34, align 8, !tbaa !5
  %402 = load ptr, ptr %34, align 8, !tbaa !5
  %403 = getelementptr inbounds %struct.ImDrawVert, ptr %402, i32 0, i32 0
  %404 = load i32, ptr %33, align 4, !tbaa !23
  %405 = sext i32 %404 to i64
  %406 = getelementptr inbounds [3 x %struct.ImVec2], ptr %32, i64 0, i64 %405
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %406, ptr align 4 %403, i64 8, i1 false), !tbaa.struct !66
  %407 = load ptr, ptr %30, align 8, !tbaa !5
  %408 = load ptr, ptr %31, align 8, !tbaa !5
  %409 = load ptr, ptr %30, align 8, !tbaa !5
  %410 = ptrtoint ptr %408 to i64
  %411 = ptrtoint ptr %409 to i64
  %412 = sub i64 %410, %411
  %413 = load i32, ptr %33, align 4, !tbaa !23
  %414 = icmp eq i32 %413, 0
  br i1 %414, label %415, label %416

415:                                              ; preds = %398
  br label %417

416:                                              ; preds = %398
  br label %417

417:                                              ; preds = %416, %415
  %418 = phi ptr [ @.str.484, %415 ], [ @.str.485, %416 ]
  %419 = getelementptr inbounds [6 x i8], ptr %418, i64 0, i64 0
  %420 = load i32, ptr %29, align 4, !tbaa !23
  %421 = load ptr, ptr %34, align 8, !tbaa !5
  %422 = getelementptr inbounds %struct.ImDrawVert, ptr %421, i32 0, i32 0
  %423 = getelementptr inbounds %struct.ImVec2, ptr %422, i32 0, i32 0
  %424 = load float, ptr %423, align 4, !tbaa !73
  %425 = fpext float %424 to double
  %426 = load ptr, ptr %34, align 8, !tbaa !5
  %427 = getelementptr inbounds %struct.ImDrawVert, ptr %426, i32 0, i32 0
  %428 = getelementptr inbounds %struct.ImVec2, ptr %427, i32 0, i32 1
  %429 = load float, ptr %428, align 4, !tbaa !75
  %430 = fpext float %429 to double
  %431 = load ptr, ptr %34, align 8, !tbaa !5
  %432 = getelementptr inbounds %struct.ImDrawVert, ptr %431, i32 0, i32 1
  %433 = getelementptr inbounds %struct.ImVec2, ptr %432, i32 0, i32 0
  %434 = load float, ptr %433, align 4, !tbaa !76
  %435 = fpext float %434 to double
  %436 = load ptr, ptr %34, align 8, !tbaa !5
  %437 = getelementptr inbounds %struct.ImDrawVert, ptr %436, i32 0, i32 1
  %438 = getelementptr inbounds %struct.ImVec2, ptr %437, i32 0, i32 1
  %439 = load float, ptr %438, align 4, !tbaa !77
  %440 = fpext float %439 to double
  %441 = load ptr, ptr %34, align 8, !tbaa !5
  %442 = getelementptr inbounds %struct.ImDrawVert, ptr %441, i32 0, i32 2
  %443 = load i32, ptr %442, align 4, !tbaa !78
  %444 = call noundef i32 (ptr, i64, ptr, ...) @_Z14ImFormatStringPcmPKcz(ptr noundef %407, i64 noundef %412, ptr noundef @.str.483, ptr noundef %419, i32 noundef %420, double noundef %425, double noundef %430, double noundef %435, double noundef %440, i32 noundef %443)
  %445 = load ptr, ptr %30, align 8, !tbaa !5
  %446 = sext i32 %444 to i64
  %447 = getelementptr inbounds i8, ptr %445, i64 %446
  store ptr %447, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  br label %448

448:                                              ; preds = %417
  %449 = load i32, ptr %33, align 4, !tbaa !23
  %450 = add nsw i32 %449, 1
  store i32 %450, ptr %33, align 4, !tbaa !23
  %451 = load i32, ptr %29, align 4, !tbaa !23
  %452 = add nsw i32 %451, 1
  store i32 %452, ptr %29, align 4, !tbaa !23
  br label %377, !llvm.loop !79

453:                                              ; preds = %380
  %454 = getelementptr inbounds [300 x i8], ptr %16, i64 0, i64 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #9
  invoke void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %35, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %455 unwind label %477

455:                                              ; preds = %453
  %456 = invoke noundef zeroext i1 @_ZN5ImGui10SelectableEPKcbiRK6ImVec2(ptr noundef %454, i1 noundef zeroext false, i32 noundef 0, ptr noundef nonnull align 4 dereferenceable(8) %35)
          to label %457 unwind label %477

457:                                              ; preds = %455
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  %458 = load ptr, ptr %13, align 8, !tbaa !5
  %459 = icmp ne ptr %458, null
  br i1 %459, label %460, label %485

460:                                              ; preds = %457
  %461 = invoke noundef zeroext i1 @_ZN5ImGui13IsItemHoveredEi(i32 noundef 0)
          to label %462 unwind label %381

462:                                              ; preds = %460
  br i1 %461, label %463, label %485

463:                                              ; preds = %462
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #9
  %464 = load ptr, ptr %13, align 8, !tbaa !5
  %465 = getelementptr inbounds %struct.ImDrawList, ptr %464, i32 0, i32 3
  %466 = load i32, ptr %465, align 8, !tbaa !80
  store i32 %466, ptr %36, align 4, !tbaa !23
  %467 = load ptr, ptr %13, align 8, !tbaa !5
  %468 = getelementptr inbounds %struct.ImDrawList, ptr %467, i32 0, i32 3
  %469 = load i32, ptr %468, align 8, !tbaa !80
  %470 = and i32 %469, -2
  store i32 %470, ptr %468, align 8, !tbaa !80
  %471 = load ptr, ptr %13, align 8, !tbaa !5
  %472 = getelementptr inbounds [3 x %struct.ImVec2], ptr %32, i64 0, i64 0
  invoke void @_ZN10ImDrawList11AddPolylineEPK6ImVec2ijif(ptr noundef nonnull align 8 dereferenceable(196) %471, ptr noundef %472, i32 noundef 3, i32 noundef -16711681, i32 noundef 1, float noundef 1.000000e+00)
          to label %473 unwind label %481

473:                                              ; preds = %463
  %474 = load i32, ptr %36, align 4, !tbaa !23
  %475 = load ptr, ptr %13, align 8, !tbaa !5
  %476 = getelementptr inbounds %struct.ImDrawList, ptr %475, i32 0, i32 3
  store i32 %474, ptr %476, align 8, !tbaa !80
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #9
  br label %485

477:                                              ; preds = %455, %453
  %478 = landingpad { ptr, i32 }
          cleanup
  %479 = extractvalue { ptr, i32 } %478, 0
  store ptr %479, ptr %26, align 8
  %480 = extractvalue { ptr, i32 } %478, 1
  store i32 %480, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  br label %489

481:                                              ; preds = %463
  %482 = landingpad { ptr, i32 }
          cleanup
  %483 = extractvalue { ptr, i32 } %482, 0
  store ptr %483, ptr %26, align 8
  %484 = extractvalue { ptr, i32 } %482, 1
  store i32 %484, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #9
  br label %489

485:                                              ; preds = %473, %462, %457
  call void @llvm.lifetime.end.p0(i64 24, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  br label %486

486:                                              ; preds = %485
  %487 = load i32, ptr %28, align 4, !tbaa !23
  %488 = add nsw i32 %487, 1
  store i32 %488, ptr %28, align 4, !tbaa !23
  br label %355, !llvm.loop !81

489:                                              ; preds = %481, %477, %381
  call void @llvm.lifetime.end.p0(i64 24, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #9
  br label %499

490:                                              ; preds = %360
  br label %342, !llvm.loop !82

491:                                              ; preds = %344
  invoke void @_ZN5ImGui7TreePopEv()
          to label %492 unwind label %361

492:                                              ; preds = %491
  call void @_ZN16ImGuiListClipperD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %25) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  store i32 0, ptr %12, align 4
  br label %493

493:                                              ; preds = %492, %229
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 300, ptr %16) #9
  %494 = load i32, ptr %12, align 4
  switch i32 %494, label %510 [
    i32 0, label %495
    i32 4, label %496
  ]

495:                                              ; preds = %493
  br label %496

496:                                              ; preds = %495, %493, %149
  %497 = load ptr, ptr %15, align 8, !tbaa !5
  %498 = getelementptr inbounds %struct.ImDrawCmd, ptr %497, i32 1
  store ptr %498, ptr %15, align 8, !tbaa !5
  br label %133, !llvm.loop !83

499:                                              ; preds = %489, %361
  call void @_ZN16ImGuiListClipperD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %25) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 300, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #9
  br label %505

500:                                              ; preds = %143
  call void @_ZN5ImGui7TreePopEv()
  store i32 0, ptr %12, align 4
  br label %501

501:                                              ; preds = %500, %118
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #9
  br label %502

502:                                              ; preds = %501, %95
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #9
  %503 = load i32, ptr %12, align 4
  switch i32 %503, label %510 [
    i32 0, label %504
    i32 1, label %504
  ]

504:                                              ; preds = %502, %502
  ret void

505:                                              ; preds = %499
  %506 = load ptr, ptr %26, align 8
  %507 = load i32, ptr %27, align 4
  %508 = insertvalue { ptr, i32 } poison, ptr %506, 0
  %509 = insertvalue { ptr, i32 } %508, i32 %507, 1
  resume { ptr, i32 } %509

510:                                              ; preds = %502, %493
  unreachable
}

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_ZN5ImGui21GetForegroundDrawListEP11ImGuiWindow(ptr noundef) #7

declare noundef zeroext i1 @_ZN5ImGui8TreeNodeEPKvPKcz(ptr noundef, ptr noundef, ...) #5

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

declare void @_ZN5ImGui11TextColoredERK6ImVec4PKcz(ptr noundef nonnull align 4 dereferenceable(16), ptr noundef, ...) #5

declare void @_ZN5ImGui12TextDisabledEPKcz(ptr noundef, ...) #5

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN5ImGui38DebugNodeDrawCmdShowMeshAndBoundingBoxEP10ImDrawListPKS0_PK9ImDrawCmdbb(ptr noundef, ptr noundef, ptr noundef, i1 noundef zeroext, i1 noundef zeroext) #6

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

declare void @_ZN10ImDrawList11AddPolylineEPK6ImVec2ijif(ptr noundef nonnull align 8 dereferenceable(196), ptr noundef, i32 noundef, i32 noundef, i32 noundef, float noundef) #5

declare void @_ZN16ImGuiListClipperC1Ev(ptr)

declare void @_ZN16ImGuiListClipperD1Ev(ptr)

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { inlinehint mustprogress uwtable "min-legal-vector-width"="64" "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 = { 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 = { "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"="64" "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 = { 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 #8 = { 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 #9 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !12, i64 0}
!10 = !{!"_ZTS10ImDrawList", !11, i64 0, !13, i64 16, !14, i64 32, !12, i64 48, !12, i64 52, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !15, i64 88, !16, i64 104, !17, i64 120, !18, i64 136, !21, i64 168, !20, i64 192}
!11 = !{!"_ZTS8ImVectorI9ImDrawCmdE", !12, i64 0, !12, i64 4, !6, i64 8}
!12 = !{!"int", !7, i64 0}
!13 = !{!"_ZTS8ImVectorItE", !12, i64 0, !12, i64 4, !6, i64 8}
!14 = !{!"_ZTS8ImVectorI10ImDrawVertE", !12, i64 0, !12, i64 4, !6, i64 8}
!15 = !{!"_ZTS8ImVectorI6ImVec4E", !12, i64 0, !12, i64 4, !6, i64 8}
!16 = !{!"_ZTS8ImVectorIPvE", !12, i64 0, !12, i64 4, !6, i64 8}
!17 = !{!"_ZTS8ImVectorI6ImVec2E", !12, i64 0, !12, i64 4, !6, i64 8}
!18 = !{!"_ZTS15ImDrawCmdHeader", !19, i64 0, !6, i64 16, !12, i64 24}
!19 = !{!"_ZTS6ImVec4", !20, i64 0, !20, i64 4, !20, i64 8, !20, i64 12}
!20 = !{!"float", !7, i64 0}
!21 = !{!"_ZTS18ImDrawListSplitter", !12, i64 0, !12, i64 4, !22, i64 8}
!22 = !{!"_ZTS8ImVectorI13ImDrawChannelE", !12, i64 0, !12, i64 4, !6, i64 8}
!23 = !{!12, !12, i64 0}
!24 = !{!25, !12, i64 32}
!25 = !{!"_ZTS9ImDrawCmd", !19, i64 0, !6, i64 16, !12, i64 24, !12, i64 28, !12, i64 32, !6, i64 40, !6, i64 48}
!26 = !{!25, !6, i64 40}
!27 = !{!10, !6, i64 64}
!28 = !{!10, !12, i64 32}
!29 = !{!10, !12, i64 16}
!30 = !{!31, !31, i64 0}
!31 = !{!"bool", !7, i64 0}
!32 = !{i8 0, i8 2}
!33 = !{}
!34 = !{!35, !31, i64 183}
!35 = !{!"_ZTS11ImGuiWindow", !6, i64 0, !6, i64 8, !12, i64 16, !12, i64 20, !6, i64 24, !36, i64 32, !36, i64 40, !36, i64 48, !36, i64 56, !36, i64 64, !36, i64 72, !36, i64 80, !20, i64 88, !20, i64 92, !20, i64 96, !20, i64 100, !20, i64 104, !20, i64 108, !20, i64 112, !20, i64 116, !12, i64 120, !12, i64 124, !12, i64 128, !36, i64 132, !36, i64 140, !36, i64 148, !36, i64 156, !36, i64 164, !36, i64 172, !31, i64 180, !31, i64 181, !31, i64 182, !31, i64 183, !31, i64 184, !31, i64 185, !31, i64 186, !31, i64 187, !31, i64 188, !31, i64 189, !31, i64 190, !31, i64 191, !31, i64 192, !7, i64 193, !37, i64 194, !37, i64 196, !37, i64 198, !37, i64 200, !37, i64 202, !12, i64 204, !7, i64 208, !7, i64 209, !7, i64 210, !31, i64 211, !12, i64 212, !7, i64 216, !7, i64 217, !7, i64 218, !7, i64 219, !12, i64 220, !12, i64 221, !12, i64 222, !36, i64 224, !36, i64 232, !38, i64 240, !39, i64 256, !45, i64 488, !45, i64 504, !45, i64 520, !45, i64 536, !45, i64 552, !45, i64 568, !45, i64 584, !46, i64 600, !46, i64 604, !12, i64 608, !20, i64 612, !20, i64 616, !47, i64 624, !49, i64 640, !20, i64 656, !12, i64 660, !6, i64 664, !10, i64 672, !6, i64 872, !6, i64 880, !6, i64 888, !6, i64 896, !6, i64 904, !6, i64 912, !6, i64 920, !7, i64 928, !7, i64 936, !12, i64 968, !12, i64 972, !12, i64 976, !31, i64 980}
!36 = !{!"_ZTS6ImVec2", !20, i64 0, !20, i64 4}
!37 = !{!"short", !7, i64 0}
!38 = !{!"_ZTS8ImVectorIjE", !12, i64 0, !12, i64 4, !6, i64 8}
!39 = !{!"_ZTS19ImGuiWindowTempData", !36, i64 0, !36, i64 8, !36, i64 16, !36, i64 24, !36, i64 32, !36, i64 40, !36, i64 48, !20, i64 56, !20, i64 60, !31, i64 64, !31, i64 65, !40, i64 68, !40, i64 72, !40, i64 76, !36, i64 80, !41, i64 88, !37, i64 92, !37, i64 94, !31, i64 96, !31, i64 97, !31, i64 98, !31, i64 99, !36, i64 100, !42, i64 108, !12, i64 136, !12, i64 140, !43, i64 144, !6, i64 160, !6, i64 168, !12, i64 176, !12, i64 180, !12, i64 184, !20, i64 188, !20, i64 192, !44, i64 200, !44, i64 216}
!40 = !{!"_ZTS6ImVec1", !20, i64 0}
!41 = !{!"_ZTS13ImGuiNavLayer", !7, i64 0}
!42 = !{!"_ZTS16ImGuiMenuColumns", !12, i64 0, !12, i64 4, !37, i64 8, !37, i64 10, !37, i64 12, !37, i64 14, !37, i64 16, !7, i64 18}
!43 = !{!"_ZTS8ImVectorIP11ImGuiWindowE", !12, i64 0, !12, i64 4, !6, i64 8}
!44 = !{!"_ZTS8ImVectorIfE", !12, i64 0, !12, i64 4, !6, i64 8}
!45 = !{!"_ZTS6ImRect", !36, i64 0, !36, i64 8}
!46 = !{!"_ZTS8ImVec2ih", !37, i64 0, !37, i64 2}
!47 = !{!"_ZTS12ImGuiStorage", !48, i64 0}
!48 = !{!"_ZTS8ImVectorIN12ImGuiStorage16ImGuiStoragePairEE", !12, i64 0, !12, i64 4, !6, i64 8}
!49 = !{!"_ZTS8ImVectorI15ImGuiOldColumnsE", !12, i64 0, !12, i64 4, !6, i64 8}
!50 = !{!10, !6, i64 8}
!51 = !{!25, !6, i64 48}
!52 = !{!25, !6, i64 16}
!53 = !{!25, !20, i64 0}
!54 = !{!25, !20, i64 4}
!55 = !{!25, !20, i64 8}
!56 = !{!25, !20, i64 12}
!57 = !{!58, !31, i64 5}
!58 = !{!"_ZTS18ImGuiMetricsConfig", !31, i64 0, !31, i64 1, !31, i64 2, !31, i64 3, !31, i64 4, !31, i64 5, !31, i64 6, !31, i64 7, !12, i64 8, !12, i64 12}
!59 = !{!58, !31, i64 6}
!60 = !{!10, !6, i64 24}
!61 = !{!10, !6, i64 40}
!62 = !{!25, !12, i64 24}
!63 = !{!20, !20, i64 0}
!64 = !{!25, !12, i64 28}
!65 = !{!37, !37, i64 0}
!66 = !{i64 0, i64 4, !63, i64 4, i64 4, !63}
!67 = distinct !{!67, !68}
!68 = !{!"llvm.loop.mustprogress"}
!69 = distinct !{!69, !68}
!70 = !{!71, !12, i64 8}
!71 = !{!"_ZTS16ImGuiListClipper", !6, i64 0, !12, i64 8, !12, i64 12, !12, i64 16, !20, i64 20, !20, i64 24, !6, i64 32}
!72 = !{!71, !12, i64 12}
!73 = !{!74, !20, i64 0}
!74 = !{!"_ZTS10ImDrawVert", !36, i64 0, !36, i64 8, !12, i64 16}
!75 = !{!74, !20, i64 4}
!76 = !{!74, !20, i64 8}
!77 = !{!74, !20, i64 12}
!78 = !{!74, !12, i64 16}
!79 = distinct !{!79, !68}
!80 = !{!10, !12, i64 48}
!81 = distinct !{!81, !68}
!82 = distinct !{!82, !68}
!83 = distinct !{!83, !68}


; 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.ImVec4 = type { float, float, float, float }
%struct.ImVec2 = type { float, float }
%struct.ImGuiListClipper = type { ptr, i32, i32, i32, float, float, ptr }
%struct.ImDrawVert = type { %struct.ImVec2, %struct.ImVec2, i32 }
%struct.ImDrawCmd = type { %struct.ImVec4, ptr, i32, i32, i32, ptr, ptr }

@GImGui = external dso_local local_unnamed_addr global ptr, align 8
@.str.16 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.401 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.477 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.478 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.479 = external hidden unnamed_addr constant [73 x i8], align 1
@.str.480 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.481 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.482 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.483 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.484 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.485 = external hidden unnamed_addr constant [6 x i8], align 1

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

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

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

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

declare i32 @__gxx_personality_v0(...)

; Function Attrs: inlinehint mustprogress uwtable
declare hidden <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8)) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z14ImFormatStringPcmPKcz(ptr noundef, i64 noundef, ptr noundef, ...) local_unnamed_addr #0

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

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

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

declare void @_ZN10ImDrawList7AddRectERK6ImVec2S2_jfif(ptr noundef nonnull align 8 dereferenceable(196), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8), i32 noundef, float noundef, i32 noundef, float noundef) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN5ImGui13IsItemHoveredEi(i32 noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN5ImGui17GetWindowDrawListEv() local_unnamed_addr #3

declare void @_ZN5ImGui7TreePopEv() local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN5ImGui8SameLineEff(float noundef, float noundef) local_unnamed_addr #0

declare void @_ZN5ImGui10BulletTextEPKcz(ptr noundef, ...) local_unnamed_addr #4

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN5ImGui17DebugNodeDrawListEP11ImGuiWindowPK10ImDrawListPKc(ptr noundef %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #5 personality ptr @__gxx_personality_v0 {
  %4 = alloca %struct.ImVec4, align 4
  %5 = alloca %struct.ImVec2, align 8
  %6 = alloca [300 x i8], align 16
  %7 = alloca [3 x %struct.ImVec2], align 16
  %8 = alloca %struct.ImVec2, align 4
  %9 = alloca %struct.ImGuiListClipper, align 8
  %10 = alloca [3 x %struct.ImVec2], align 16
  %11 = alloca %struct.ImVec2, align 4
  %12 = load ptr, ptr @GImGui, align 8, !tbaa !5
  %13 = load i32, ptr %1, align 8, !tbaa !9
  %14 = icmp sgt i32 %13, 0
  br i1 %14, label %15, label %26

15:                                               ; preds = %3
  %16 = tail call noundef nonnull align 8 dereferenceable(56) ptr @_ZNK8ImVectorI9ImDrawCmdE4backEv(ptr noundef nonnull align 8 dereferenceable(16) %1)
  %17 = getelementptr inbounds i8, ptr %16, i64 32
  %18 = load i32, ptr %17, align 8, !tbaa !23
  %19 = icmp eq i32 %18, 0
  br i1 %19, label %20, label %26

20:                                               ; preds = %15
  %21 = tail call noundef nonnull align 8 dereferenceable(56) ptr @_ZNK8ImVectorI9ImDrawCmdE4backEv(ptr noundef nonnull align 8 dereferenceable(16) %1)
  %22 = getelementptr inbounds i8, ptr %21, i64 40
  %23 = load ptr, ptr %22, align 8, !tbaa !25
  %24 = icmp eq ptr %23, null
  %25 = sext i1 %24 to i32
  %spec.select = add nsw i32 %13, %25
  br label %26

26:                                               ; preds = %20, %15, %3
  %.0 = phi i32 [ %13, %15 ], [ %13, %3 ], [ %spec.select, %20 ]
  %27 = getelementptr inbounds i8, ptr %1, i64 64
  %28 = load ptr, ptr %27, align 8, !tbaa !26
  %.not = icmp eq ptr %28, null
  %spec.select149 = select i1 %.not, ptr @.str.16, ptr %28
  %29 = getelementptr inbounds i8, ptr %1, i64 32
  %30 = load i32, ptr %29, align 8, !tbaa !27
  %31 = getelementptr inbounds i8, ptr %1, i64 16
  %32 = load i32, ptr %31, align 8, !tbaa !28
  %33 = tail call noundef zeroext i1 (ptr, ptr, ...) @_ZN5ImGui8TreeNodeEPKvPKcz(ptr noundef nonnull %1, ptr noundef nonnull @.str.477, ptr noundef %2, ptr noundef nonnull %spec.select149, i32 noundef %30, i32 noundef %32, i32 noundef %.0)
  %34 = tail call noundef ptr @_ZN5ImGui17GetWindowDrawListEv()
  %35 = icmp eq ptr %34, %1
  br i1 %35, label %36, label %37

36:                                               ; preds = %26
  tail call void @_ZN5ImGui8SameLineEff(float noundef 0.000000e+00, float noundef -1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #8
  call void @_ZN6ImVec4C2Effff(ptr noundef nonnull align 4 dereferenceable(16) %4, float noundef 1.000000e+00, float noundef 0x3FD99999A0000000, float noundef 0x3FD99999A0000000, float noundef 1.000000e+00)
  call void (ptr, ptr, ...) @_ZN5ImGui11TextColoredERK6ImVec4PKcz(ptr noundef nonnull align 4 dereferenceable(16) %4, ptr noundef nonnull @.str.478)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #8
  br i1 %33, label %.sink.split, label %292

37:                                               ; preds = %26
  %38 = tail call noundef ptr @_ZN5ImGui21GetForegroundDrawListEP11ImGuiWindow(ptr noundef %0)
  %.not138 = icmp eq ptr %0, null
  br i1 %.not138, label %.thread, label %39

39:                                               ; preds = %37
  %40 = tail call noundef zeroext i1 @_ZN5ImGui13IsItemHoveredEi(i32 noundef 0)
  %41 = icmp ne ptr %38, null
  %or.cond = and i1 %41, %40
  br i1 %or.cond, label %42, label %46

42:                                               ; preds = %39
  %43 = getelementptr inbounds i8, ptr %0, i64 32
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #8
  %44 = getelementptr inbounds i8, ptr %0, i64 40
  %45 = tail call <2 x float> @_ZplRK6ImVec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %43, ptr noundef nonnull align 4 dereferenceable(8) %44)
  store <2 x float> %45, ptr %5, align 8
  call void @_ZN10ImDrawList7AddRectERK6ImVec2S2_jfif(ptr noundef nonnull align 8 dereferenceable(196) %38, ptr noundef nonnull align 4 dereferenceable(8) %43, ptr noundef nonnull align 4 dereferenceable(8) %5, i32 noundef -16711681, float noundef 0.000000e+00, i32 noundef 0, float noundef 1.000000e+00)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #8
  br label %46

46:                                               ; preds = %42, %39
  br i1 %33, label %47, label %292

.thread:                                          ; preds = %37
  br i1 %33, label %.thread150, label %292

47:                                               ; preds = %46
  %48 = getelementptr inbounds i8, ptr %0, i64 183
  %49 = load i8, ptr %48, align 1, !tbaa !29, !range !46, !noundef !47
  %50 = trunc nuw i8 %49 to i1
  br i1 %50, label %.thread150, label %51

51:                                               ; preds = %47
  call void (ptr, ...) @_ZN5ImGui12TextDisabledEPKcz(ptr noundef nonnull @.str.479)
  br label %.thread150

.thread150:                                       ; preds = %.thread, %51, %47
  %52 = getelementptr inbounds i8, ptr %1, i64 8
  %53 = sext i32 %.0 to i64
  %54 = icmp sgt i32 %.0, 0
  br i1 %54, label %.lr.ph172, label %.sink.split

.lr.ph172:                                        ; preds = %.thread150
  %55 = load ptr, ptr %52, align 8, !tbaa !48
  %56 = getelementptr inbounds i8, ptr %12, i64 23769
  %57 = getelementptr inbounds i8, ptr %12, i64 23770
  %58 = icmp ne ptr %38, null
  %.old2.not = icmp eq ptr %38, null
  %59 = getelementptr inbounds i8, ptr %1, i64 24
  %60 = getelementptr inbounds i8, ptr %1, i64 40
  %61 = getelementptr inbounds i8, ptr %7, i64 8
  %62 = getelementptr inbounds i8, ptr %7, i64 16
  %63 = getelementptr inbounds i8, ptr %9, i64 8
  %64 = getelementptr inbounds i8, ptr %9, i64 12
  %65 = getelementptr inbounds i8, ptr %6, i64 300
  %66 = ptrtoint ptr %65 to i64
  %67 = getelementptr inbounds i8, ptr %38, i64 48
  %.ptr.1 = getelementptr inbounds i8, ptr %10, i64 8
  %.ptr.2 = getelementptr inbounds i8, ptr %10, i64 16
  br label %68

68:                                               ; preds = %.lr.ph172, %286
  %.0115171 = phi ptr [ %55, %.lr.ph172 ], [ %287, %286 ]
  %69 = getelementptr inbounds i8, ptr %.0115171, i64 40
  %70 = load ptr, ptr %69, align 8, !tbaa !25
  %.not139 = icmp eq ptr %70, null
  br i1 %.not139, label %74, label %71

71:                                               ; preds = %68
  %72 = getelementptr inbounds i8, ptr %.0115171, i64 48
  %73 = load ptr, ptr %72, align 8, !tbaa !49
  call void (ptr, ...) @_ZN5ImGui10BulletTextEPKcz(ptr noundef nonnull @.str.480, ptr noundef nonnull %70, ptr noundef %73)
  br label %286

74:                                               ; preds = %68
  call void @llvm.lifetime.start.p0(i64 300, ptr nonnull %6) #8
  %75 = getelementptr inbounds i8, ptr %.0115171, i64 32
  %76 = load i32, ptr %75, align 8, !tbaa !23
  %77 = udiv i32 %76, 3
  %78 = getelementptr inbounds i8, ptr %.0115171, i64 16
  %79 = load ptr, ptr %78, align 8, !tbaa !50
  %80 = load float, ptr %.0115171, align 8, !tbaa !51
  %81 = fpext float %80 to double
  %82 = getelementptr inbounds i8, ptr %.0115171, i64 4
  %83 = load float, ptr %82, align 4, !tbaa !52
  %84 = fpext float %83 to double
  %85 = getelementptr inbounds i8, ptr %.0115171, i64 8
  %86 = load float, ptr %85, align 8, !tbaa !53
  %87 = fpext float %86 to double
  %88 = getelementptr inbounds i8, ptr %.0115171, i64 12
  %89 = load float, ptr %88, align 4, !tbaa !54
  %90 = fpext float %89 to double
  %91 = call noundef i32 (ptr, i64, ptr, ...) @_Z14ImFormatStringPcmPKcz(ptr noundef nonnull %6, i64 noundef 300, ptr noundef nonnull @.str.481, i32 noundef %77, ptr noundef %79, double noundef %81, double noundef %84, double noundef %87, double noundef %90)
  %92 = call noundef ptr @_ZNK8ImVectorI9ImDrawCmdE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %1)
  %93 = ptrtoint ptr %.0115171 to i64
  %94 = ptrtoint ptr %92 to i64
  %95 = sub i64 %93, %94
  %96 = sdiv exact i64 %95, 56
  %97 = inttoptr i64 %96 to ptr
  %98 = call noundef zeroext i1 (ptr, ptr, ...) @_ZN5ImGui8TreeNodeEPKvPKcz(ptr noundef %97, ptr noundef nonnull @.str.401, ptr noundef nonnull %6)
  %99 = call noundef zeroext i1 @_ZN5ImGui13IsItemHoveredEi(i32 noundef 0)
  br i1 %99, label %100, label %108

100:                                              ; preds = %74
  %101 = load i8, ptr %56, align 1, !tbaa !55, !range !46, !noundef !47
  %102 = trunc nuw i8 %101 to i1
  br i1 %102, label %106, label %103

103:                                              ; preds = %100
  %104 = load i8, ptr %57, align 2, !tbaa !57, !range !46, !noundef !47
  %105 = trunc nuw i8 %104 to i1
  %or.cond3 = and i1 %58, %105
  br i1 %or.cond3, label %107, label %108

106:                                              ; preds = %100
  br i1 %.old2.not, label %108, label %._crit_edge192

._crit_edge192:                                   ; preds = %106
  %.pre = load i8, ptr %57, align 2, !tbaa !57, !range !46
  %.pre194 = trunc nuw i8 %.pre to i1
  br label %107

107:                                              ; preds = %._crit_edge192, %103
  %.pre-phi195 = phi i1 [ %.pre194, %._crit_edge192 ], [ %105, %103 ]
  call void @_ZN5ImGui38DebugNodeDrawCmdShowMeshAndBoundingBoxEP10ImDrawListPKS0_PK9ImDrawCmdbb(ptr noundef nonnull %38, ptr noundef nonnull %1, ptr noundef nonnull %.0115171, i1 noundef zeroext %102, i1 noundef zeroext %.pre-phi195)
  br label %108

108:                                              ; preds = %107, %106, %103, %74
  br i1 %98, label %109, label %285

109:                                              ; preds = %108
  %110 = load i32, ptr %31, align 8, !tbaa !28
  %111 = icmp sgt i32 %110, 0
  br i1 %111, label %112, label %114

112:                                              ; preds = %109
  %113 = load ptr, ptr %59, align 8, !tbaa !58
  br label %114

114:                                              ; preds = %109, %112
  %115 = phi ptr [ %113, %112 ], [ null, %109 ]
  %.fr = freeze ptr %115
  %116 = load ptr, ptr %60, align 8, !tbaa !59
  %117 = getelementptr inbounds i8, ptr %.0115171, i64 24
  %118 = load i32, ptr %117, align 8, !tbaa !60
  %119 = zext i32 %118 to i64
  %120 = getelementptr inbounds %struct.ImDrawVert, ptr %116, i64 %119
  %121 = getelementptr inbounds i8, ptr %.0115171, i64 28
  %122 = load i32, ptr %121, align 4, !tbaa !61
  %123 = load i32, ptr %75, align 8, !tbaa !23
  %124 = add i32 %123, %122
  %125 = icmp ult i32 %122, %124
  br i1 %125, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %114
  %.not148 = icmp eq ptr %.fr, null
  br i1 %.not148, label %.lr.ph.split.us, label %.lr.ph.split

.lr.ph.split.us:                                  ; preds = %.lr.ph, %.lr.ph.split.us
  %.0124158.us = phi i32 [ %137, %.lr.ph.split.us ], [ %122, %.lr.ph ]
  %.0126157.us = phi float [ %139, %.lr.ph.split.us ], [ 0.000000e+00, %.lr.ph ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #8
  call void @_ZN6ImVec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %7)
  call void @_ZN6ImVec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %61)
  call void @_ZN6ImVec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %62)
  %126 = zext i32 %.0124158.us to i64
  %127 = getelementptr inbounds %struct.ImDrawVert, ptr %120, i64 %126
  %128 = load i64, ptr %127, align 4
  store i64 %128, ptr %7, align 16
  %129 = add nuw i32 %.0124158.us, 1
  %130 = zext i32 %129 to i64
  %131 = getelementptr inbounds %struct.ImDrawVert, ptr %120, i64 %130
  %132 = load i64, ptr %131, align 4
  store i64 %132, ptr %61, align 8
  %133 = add i32 %.0124158.us, 2
  %134 = zext i32 %133 to i64
  %135 = getelementptr inbounds %struct.ImDrawVert, ptr %120, i64 %134
  %136 = load i64, ptr %135, align 4
  store i64 %136, ptr %62, align 16
  %137 = add i32 %.0124158.us, 3
  %138 = call noundef float @_Z14ImTriangleAreaRK6ImVec2S1_S1_(ptr noundef nonnull align 4 dereferenceable(8) %7, ptr noundef nonnull align 4 dereferenceable(8) %61, ptr noundef nonnull align 4 dereferenceable(8) %62)
  %139 = fadd float %.0126157.us, %138
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #8
  %140 = load i32, ptr %121, align 4, !tbaa !61
  %141 = load i32, ptr %75, align 8, !tbaa !23
  %142 = add i32 %141, %140
  %143 = icmp ult i32 %137, %142
  br i1 %143, label %.lr.ph.split.us, label %._crit_edge, !llvm.loop !62

._crit_edge:                                      ; preds = %.lr.ph.split, %.lr.ph.split.us, %114
  %.0126.lcssa = phi float [ 0.000000e+00, %114 ], [ %139, %.lr.ph.split.us ], [ %171, %.lr.ph.split ]
  %.lcssa154 = phi i32 [ %122, %114 ], [ %140, %.lr.ph.split.us ], [ %172, %.lr.ph.split ]
  %.lcssa = phi i32 [ %123, %114 ], [ %141, %.lr.ph.split.us ], [ %173, %.lr.ph.split ]
  %144 = load i32, ptr %117, align 8, !tbaa !60
  %145 = fpext float %.0126.lcssa to double
  %146 = call noundef i32 (ptr, i64, ptr, ...) @_Z14ImFormatStringPcmPKcz(ptr noundef nonnull %6, i64 noundef 300, ptr noundef nonnull @.str.482, i32 noundef %.lcssa, i32 noundef %144, i32 noundef %.lcssa154, double noundef %145)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #8
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %8, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %147 = call noundef zeroext i1 @_ZN5ImGui10SelectableEPKcbiRK6ImVec2(ptr noundef nonnull %6, i1 noundef zeroext false, i32 noundef 0, ptr noundef nonnull align 4 dereferenceable(8) %8)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #8
  %148 = call noundef zeroext i1 @_ZN5ImGui13IsItemHoveredEi(i32 noundef 0)
  %or.cond6 = and i1 %58, %148
  br i1 %or.cond6, label %176, label %177

.lr.ph.split:                                     ; preds = %.lr.ph, %.lr.ph.split
  %.0124158 = phi i32 [ %169, %.lr.ph.split ], [ %122, %.lr.ph ]
  %.0126157 = phi float [ %171, %.lr.ph.split ], [ 0.000000e+00, %.lr.ph ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #8
  call void @_ZN6ImVec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %7)
  call void @_ZN6ImVec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %61)
  call void @_ZN6ImVec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %62)
  %149 = zext i32 %.0124158 to i64
  %150 = getelementptr inbounds i16, ptr %.fr, i64 %149
  %151 = load i16, ptr %150, align 2, !tbaa !64
  %152 = zext i16 %151 to i64
  %153 = getelementptr inbounds %struct.ImDrawVert, ptr %120, i64 %152
  %154 = load i64, ptr %153, align 4
  store i64 %154, ptr %7, align 16
  %155 = add nuw i32 %.0124158, 1
  %156 = zext i32 %155 to i64
  %157 = getelementptr inbounds i16, ptr %.fr, i64 %156
  %158 = load i16, ptr %157, align 2, !tbaa !64
  %159 = zext i16 %158 to i64
  %160 = getelementptr inbounds %struct.ImDrawVert, ptr %120, i64 %159
  %161 = load i64, ptr %160, align 4
  store i64 %161, ptr %61, align 8
  %162 = add i32 %.0124158, 2
  %163 = zext i32 %162 to i64
  %164 = getelementptr inbounds i16, ptr %.fr, i64 %163
  %165 = load i16, ptr %164, align 2, !tbaa !64
  %166 = zext i16 %165 to i64
  %167 = getelementptr inbounds %struct.ImDrawVert, ptr %120, i64 %166
  %168 = load i64, ptr %167, align 4
  store i64 %168, ptr %62, align 16
  %169 = add i32 %.0124158, 3
  %170 = call noundef float @_Z14ImTriangleAreaRK6ImVec2S1_S1_(ptr noundef nonnull align 4 dereferenceable(8) %7, ptr noundef nonnull align 4 dereferenceable(8) %61, ptr noundef nonnull align 4 dereferenceable(8) %62)
  %171 = fadd float %.0126157, %170
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #8
  %172 = load i32, ptr %121, align 4, !tbaa !61
  %173 = load i32, ptr %75, align 8, !tbaa !23
  %174 = add i32 %173, %172
  %175 = icmp ult i32 %169, %174
  br i1 %175, label %.lr.ph.split, label %._crit_edge, !llvm.loop !62

176:                                              ; preds = %._crit_edge
  call void @_ZN5ImGui38DebugNodeDrawCmdShowMeshAndBoundingBoxEP10ImDrawListPKS0_PK9ImDrawCmdbb(ptr noundef nonnull %38, ptr noundef nonnull %1, ptr noundef nonnull %.0115171, i1 noundef zeroext true, i1 noundef zeroext false)
  br label %177

177:                                              ; preds = %176, %._crit_edge
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %9) #8
  call void @_ZN16ImGuiListClipperC1Ev(ptr noundef nonnull align 8 dereferenceable(40) %9)
  %178 = load i32, ptr %75, align 8, !tbaa !23
  %179 = udiv i32 %178, 3
  invoke void @_ZN16ImGuiListClipper5BeginEif(ptr noundef nonnull align 8 dereferenceable(40) %9, i32 noundef %179, float noundef -1.000000e+00)
          to label %.preheader152 unwind label %.loopexit.split-lp

.preheader152:                                    ; preds = %177
  %.not143 = icmp eq ptr %.fr, null
  br label %180

.loopexit:                                        ; preds = %278, %183
  br label %180, !llvm.loop !65

180:                                              ; preds = %.preheader152, %.loopexit
  %181 = invoke noundef zeroext i1 @_ZN16ImGuiListClipper4StepEv(ptr noundef nonnull align 8 dereferenceable(40) %9)
          to label %182 unwind label %.loopexit153

182:                                              ; preds = %180
  br i1 %181, label %183, label %283

183:                                              ; preds = %182
  %184 = load i32, ptr %63, align 8, !tbaa !66
  %185 = load i32, ptr %64, align 4, !tbaa !68
  %186 = icmp slt i32 %184, %185
  br i1 %186, label %.lr.ph170.preheader, label %.loopexit

.lr.ph170.preheader:                              ; preds = %183
  %187 = load i32, ptr %121, align 4, !tbaa !61
  %188 = mul nsw i32 %184, 3
  %189 = add i32 %187, %188
  br label %.lr.ph170

.loopexit153:                                     ; preds = %180
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %291

.loopexit.split-lp:                               ; preds = %177, %283
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %291

.lr.ph170:                                        ; preds = %.lr.ph170.preheader, %278
  %.0117168 = phi i32 [ %indvars.iv.next188.2, %278 ], [ %189, %.lr.ph170.preheader ]
  %.0118167 = phi i32 [ %279, %278 ], [ %184, %.lr.ph170.preheader ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %10) #8
  call void @_ZN6ImVec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %10)
  call void @_ZN6ImVec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.ptr.1)
  call void @_ZN6ImVec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.ptr.2)
  %190 = sext i32 %.0117168 to i64
  br i1 %.not143, label %.preheader.1, label %193

191:                                              ; preds = %267
  %192 = landingpad { ptr, i32 }
          cleanup
  br label %282

193:                                              ; preds = %.lr.ph170
  %194 = getelementptr inbounds i16, ptr %.fr, i64 %190
  %195 = load i16, ptr %194, align 2, !tbaa !64
  %.pre193 = zext i16 %195 to i64
  br label %.preheader.1

.preheader.1:                                     ; preds = %.lr.ph170, %193
  %.pre-phi = phi i64 [ %190, %.lr.ph170 ], [ %.pre193, %193 ]
  %196 = getelementptr inbounds %struct.ImDrawVert, ptr %120, i64 %.pre-phi
  %197 = load i64, ptr %196, align 4
  store i64 %197, ptr %10, align 16
  %198 = load float, ptr %196, align 4, !tbaa !69
  %199 = fpext float %198 to double
  %200 = getelementptr inbounds i8, ptr %196, i64 4
  %201 = load float, ptr %200, align 4, !tbaa !71
  %202 = fpext float %201 to double
  %203 = getelementptr inbounds i8, ptr %196, i64 8
  %204 = load float, ptr %203, align 4, !tbaa !72
  %205 = fpext float %204 to double
  %206 = getelementptr inbounds i8, ptr %196, i64 12
  %207 = load float, ptr %206, align 4, !tbaa !73
  %208 = fpext float %207 to double
  %209 = getelementptr inbounds i8, ptr %196, i64 16
  %210 = load i32, ptr %209, align 4, !tbaa !74
  %211 = call noundef i32 (ptr, i64, ptr, ...) @_Z14ImFormatStringPcmPKcz(ptr noundef nonnull %6, i64 noundef 300, ptr noundef nonnull @.str.483, ptr noundef nonnull @.str.484, i32 noundef %.0117168, double noundef %199, double noundef %202, double noundef %205, double noundef %208, i32 noundef %210)
  %212 = sext i32 %211 to i64
  %213 = getelementptr inbounds i8, ptr %6, i64 %212
  %indvars.iv.next188 = add nsw i64 %190, 1
  %214 = trunc nsw i64 %indvars.iv.next188 to i32
  br i1 %.not143, label %.preheader.2, label %215

215:                                              ; preds = %.preheader.1
  %216 = getelementptr inbounds i16, ptr %.fr, i64 %indvars.iv.next188
  %217 = load i16, ptr %216, align 2, !tbaa !64
  %218 = zext i16 %217 to i64
  br label %.preheader.2

.preheader.2:                                     ; preds = %215, %.preheader.1
  %219 = phi i64 [ %218, %215 ], [ %indvars.iv.next188, %.preheader.1 ]
  %sext = shl i64 %219, 32
  %220 = ashr exact i64 %sext, 32
  %221 = getelementptr inbounds %struct.ImDrawVert, ptr %120, i64 %220
  %222 = load i64, ptr %221, align 4
  store i64 %222, ptr %.ptr.1, align 8
  %gepdiff = sub nsw i64 300, %212
  %223 = load float, ptr %221, align 4, !tbaa !69
  %224 = fpext float %223 to double
  %225 = getelementptr inbounds i8, ptr %221, i64 4
  %226 = load float, ptr %225, align 4, !tbaa !71
  %227 = fpext float %226 to double
  %228 = getelementptr inbounds i8, ptr %221, i64 8
  %229 = load float, ptr %228, align 4, !tbaa !72
  %230 = fpext float %229 to double
  %231 = getelementptr inbounds i8, ptr %221, i64 12
  %232 = load float, ptr %231, align 4, !tbaa !73
  %233 = fpext float %232 to double
  %234 = getelementptr inbounds i8, ptr %221, i64 16
  %235 = load i32, ptr %234, align 4, !tbaa !74
  %236 = call noundef i32 (ptr, i64, ptr, ...) @_Z14ImFormatStringPcmPKcz(ptr noundef nonnull %213, i64 noundef %gepdiff, ptr noundef nonnull @.str.483, ptr noundef nonnull @.str.485, i32 noundef %214, double noundef %224, double noundef %227, double noundef %230, double noundef %233, i32 noundef %235)
  %237 = sext i32 %236 to i64
  %238 = getelementptr inbounds i8, ptr %213, i64 %237
  %indvars.iv.next188.1 = add nsw i64 %190, 2
  %239 = trunc nsw i64 %indvars.iv.next188.1 to i32
  br i1 %.not143, label %244, label %240

240:                                              ; preds = %.preheader.2
  %241 = getelementptr inbounds i16, ptr %.fr, i64 %indvars.iv.next188.1
  %242 = load i16, ptr %241, align 2, !tbaa !64
  %243 = zext i16 %242 to i64
  br label %244

244:                                              ; preds = %240, %.preheader.2
  %245 = phi i64 [ %243, %240 ], [ %indvars.iv.next188.1, %.preheader.2 ]
  %sext196 = shl i64 %245, 32
  %246 = ashr exact i64 %sext196, 32
  %247 = getelementptr inbounds %struct.ImDrawVert, ptr %120, i64 %246
  %248 = load i64, ptr %247, align 4
  store i64 %248, ptr %.ptr.2, align 16
  %249 = ptrtoint ptr %238 to i64
  %250 = sub i64 %66, %249
  %251 = load float, ptr %247, align 4, !tbaa !69
  %252 = fpext float %251 to double
  %253 = getelementptr inbounds i8, ptr %247, i64 4
  %254 = load float, ptr %253, align 4, !tbaa !71
  %255 = fpext float %254 to double
  %256 = getelementptr inbounds i8, ptr %247, i64 8
  %257 = load float, ptr %256, align 4, !tbaa !72
  %258 = fpext float %257 to double
  %259 = getelementptr inbounds i8, ptr %247, i64 12
  %260 = load float, ptr %259, align 4, !tbaa !73
  %261 = fpext float %260 to double
  %262 = getelementptr inbounds i8, ptr %247, i64 16
  %263 = load i32, ptr %262, align 4, !tbaa !74
  %264 = call noundef i32 (ptr, i64, ptr, ...) @_Z14ImFormatStringPcmPKcz(ptr noundef nonnull %238, i64 noundef %250, ptr noundef nonnull @.str.483, ptr noundef nonnull @.str.485, i32 noundef %239, double noundef %252, double noundef %255, double noundef %258, double noundef %261, i32 noundef %263)
  %indvars.iv.next188.2 = add i32 %.0117168, 3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #8
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %11, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %265 = invoke noundef zeroext i1 @_ZN5ImGui10SelectableEPKcbiRK6ImVec2(ptr noundef nonnull %6, i1 noundef zeroext false, i32 noundef 0, ptr noundef nonnull align 4 dereferenceable(8) %11)
          to label %266 unwind label %274

266:                                              ; preds = %244
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #8
  br i1 %58, label %267, label %278

267:                                              ; preds = %266
  %268 = invoke noundef zeroext i1 @_ZN5ImGui13IsItemHoveredEi(i32 noundef 0)
          to label %269 unwind label %191

269:                                              ; preds = %267
  br i1 %268, label %270, label %278

270:                                              ; preds = %269
  %271 = load i32, ptr %67, align 8, !tbaa !75
  %272 = and i32 %271, -2
  store i32 %272, ptr %67, align 8, !tbaa !75
  invoke void @_ZN10ImDrawList11AddPolylineEPK6ImVec2ijif(ptr noundef nonnull align 8 dereferenceable(196) %38, ptr noundef nonnull %10, i32 noundef 3, i32 noundef -16711681, i32 noundef 1, float noundef 1.000000e+00)
          to label %273 unwind label %276

273:                                              ; preds = %270
  store i32 %271, ptr %67, align 8, !tbaa !75
  br label %278

274:                                              ; preds = %244
  %275 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #8
  br label %282

276:                                              ; preds = %270
  %277 = landingpad { ptr, i32 }
          cleanup
  br label %282

278:                                              ; preds = %273, %269, %266
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #8
  %279 = add nsw i32 %.0118167, 1
  %280 = load i32, ptr %64, align 4, !tbaa !68
  %281 = icmp slt i32 %279, %280
  br i1 %281, label %.lr.ph170, label %.loopexit, !llvm.loop !76

282:                                              ; preds = %276, %274, %191
  %.pn = phi { ptr, i32 } [ %277, %276 ], [ %192, %191 ], [ %275, %274 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #8
  br label %291

283:                                              ; preds = %182
  invoke void @_ZN5ImGui7TreePopEv()
          to label %284 unwind label %.loopexit.split-lp

284:                                              ; preds = %283
  call void @_ZN16ImGuiListClipperD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %9) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %9) #8
  br label %285

285:                                              ; preds = %108, %284
  call void @llvm.lifetime.end.p0(i64 300, ptr nonnull %6) #8
  br label %286

286:                                              ; preds = %285, %71
  %287 = getelementptr inbounds i8, ptr %.0115171, i64 56
  %288 = load ptr, ptr %52, align 8, !tbaa !48
  %289 = getelementptr inbounds %struct.ImDrawCmd, ptr %288, i64 %53
  %290 = icmp ult ptr %287, %289
  br i1 %290, label %68, label %.sink.split, !llvm.loop !77

291:                                              ; preds = %.loopexit153, %.loopexit.split-lp, %282
  %.pn.pn = phi { ptr, i32 } [ %.pn, %282 ], [ %lpad.loopexit, %.loopexit153 ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @_ZN16ImGuiListClipperD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %9) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %9) #8
  call void @llvm.lifetime.end.p0(i64 300, ptr nonnull %6) #8
  resume { ptr, i32 } %.pn.pn

.sink.split:                                      ; preds = %286, %.thread150, %36
  call void @_ZN5ImGui7TreePopEv()
  br label %292

292:                                              ; preds = %.sink.split, %.thread, %46, %36
  ret void
}

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_ZN5ImGui21GetForegroundDrawListEP11ImGuiWindow(ptr noundef) local_unnamed_addr #6

declare noundef zeroext i1 @_ZN5ImGui8TreeNodeEPKvPKcz(ptr noundef, ptr noundef, ...) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(56) ptr @_ZNK8ImVectorI9ImDrawCmdE4backEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #7 align 2

declare void @_ZN5ImGui11TextColoredERK6ImVec4PKcz(ptr noundef nonnull align 4 dereferenceable(16), ptr noundef, ...) local_unnamed_addr #4

declare void @_ZN5ImGui12TextDisabledEPKcz(ptr noundef, ...) local_unnamed_addr #4

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN5ImGui38DebugNodeDrawCmdShowMeshAndBoundingBoxEP10ImDrawListPKS0_PK9ImDrawCmdbb(ptr noundef, ptr noundef, ptr noundef, i1 noundef zeroext, i1 noundef zeroext) local_unnamed_addr #5

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_Z14ImTriangleAreaRK6ImVec2S1_S1_(ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8)) local_unnamed_addr #7

declare void @_ZN10ImDrawList11AddPolylineEPK6ImVec2ijif(ptr noundef nonnull align 8 dereferenceable(196), ptr noundef, i32 noundef, i32 noundef, i32 noundef, float noundef) local_unnamed_addr #4

declare void @_ZN16ImGuiListClipperC1Ev(ptr) local_unnamed_addr

declare void @_ZN16ImGuiListClipperD1Ev(ptr) local_unnamed_addr

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !12, i64 0}
!10 = !{!"_ZTS10ImDrawList", !11, i64 0, !13, i64 16, !14, i64 32, !12, i64 48, !12, i64 52, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !15, i64 88, !16, i64 104, !17, i64 120, !18, i64 136, !21, i64 168, !20, i64 192}
!11 = !{!"_ZTS8ImVectorI9ImDrawCmdE", !12, i64 0, !12, i64 4, !6, i64 8}
!12 = !{!"int", !7, i64 0}
!13 = !{!"_ZTS8ImVectorItE", !12, i64 0, !12, i64 4, !6, i64 8}
!14 = !{!"_ZTS8ImVectorI10ImDrawVertE", !12, i64 0, !12, i64 4, !6, i64 8}
!15 = !{!"_ZTS8ImVectorI6ImVec4E", !12, i64 0, !12, i64 4, !6, i64 8}
!16 = !{!"_ZTS8ImVectorIPvE", !12, i64 0, !12, i64 4, !6, i64 8}
!17 = !{!"_ZTS8ImVectorI6ImVec2E", !12, i64 0, !12, i64 4, !6, i64 8}
!18 = !{!"_ZTS15ImDrawCmdHeader", !19, i64 0, !6, i64 16, !12, i64 24}
!19 = !{!"_ZTS6ImVec4", !20, i64 0, !20, i64 4, !20, i64 8, !20, i64 12}
!20 = !{!"float", !7, i64 0}
!21 = !{!"_ZTS18ImDrawListSplitter", !12, i64 0, !12, i64 4, !22, i64 8}
!22 = !{!"_ZTS8ImVectorI13ImDrawChannelE", !12, i64 0, !12, i64 4, !6, i64 8}
!23 = !{!24, !12, i64 32}
!24 = !{!"_ZTS9ImDrawCmd", !19, i64 0, !6, i64 16, !12, i64 24, !12, i64 28, !12, i64 32, !6, i64 40, !6, i64 48}
!25 = !{!24, !6, i64 40}
!26 = !{!10, !6, i64 64}
!27 = !{!10, !12, i64 32}
!28 = !{!10, !12, i64 16}
!29 = !{!30, !32, i64 183}
!30 = !{!"_ZTS11ImGuiWindow", !6, i64 0, !6, i64 8, !12, i64 16, !12, i64 20, !6, i64 24, !31, i64 32, !31, i64 40, !31, i64 48, !31, i64 56, !31, i64 64, !31, i64 72, !31, i64 80, !20, i64 88, !20, i64 92, !20, i64 96, !20, i64 100, !20, i64 104, !20, i64 108, !20, i64 112, !20, i64 116, !12, i64 120, !12, i64 124, !12, i64 128, !31, i64 132, !31, i64 140, !31, i64 148, !31, i64 156, !31, i64 164, !31, i64 172, !32, i64 180, !32, i64 181, !32, i64 182, !32, i64 183, !32, i64 184, !32, i64 185, !32, i64 186, !32, i64 187, !32, i64 188, !32, i64 189, !32, i64 190, !32, i64 191, !32, i64 192, !7, i64 193, !33, i64 194, !33, i64 196, !33, i64 198, !33, i64 200, !33, i64 202, !12, i64 204, !7, i64 208, !7, i64 209, !7, i64 210, !32, i64 211, !12, i64 212, !7, i64 216, !7, i64 217, !7, i64 218, !7, i64 219, !12, i64 220, !12, i64 221, !12, i64 222, !31, i64 224, !31, i64 232, !34, i64 240, !35, i64 256, !41, i64 488, !41, i64 504, !41, i64 520, !41, i64 536, !41, i64 552, !41, i64 568, !41, i64 584, !42, i64 600, !42, i64 604, !12, i64 608, !20, i64 612, !20, i64 616, !43, i64 624, !45, i64 640, !20, i64 656, !12, i64 660, !6, i64 664, !10, i64 672, !6, i64 872, !6, i64 880, !6, i64 888, !6, i64 896, !6, i64 904, !6, i64 912, !6, i64 920, !7, i64 928, !7, i64 936, !12, i64 968, !12, i64 972, !12, i64 976, !32, i64 980}
!31 = !{!"_ZTS6ImVec2", !20, i64 0, !20, i64 4}
!32 = !{!"bool", !7, i64 0}
!33 = !{!"short", !7, i64 0}
!34 = !{!"_ZTS8ImVectorIjE", !12, i64 0, !12, i64 4, !6, i64 8}
!35 = !{!"_ZTS19ImGuiWindowTempData", !31, i64 0, !31, i64 8, !31, i64 16, !31, i64 24, !31, i64 32, !31, i64 40, !31, i64 48, !20, i64 56, !20, i64 60, !32, i64 64, !32, i64 65, !36, i64 68, !36, i64 72, !36, i64 76, !31, i64 80, !37, i64 88, !33, i64 92, !33, i64 94, !32, i64 96, !32, i64 97, !32, i64 98, !32, i64 99, !31, i64 100, !38, i64 108, !12, i64 136, !12, i64 140, !39, i64 144, !6, i64 160, !6, i64 168, !12, i64 176, !12, i64 180, !12, i64 184, !20, i64 188, !20, i64 192, !40, i64 200, !40, i64 216}
!36 = !{!"_ZTS6ImVec1", !20, i64 0}
!37 = !{!"_ZTS13ImGuiNavLayer", !7, i64 0}
!38 = !{!"_ZTS16ImGuiMenuColumns", !12, i64 0, !12, i64 4, !33, i64 8, !33, i64 10, !33, i64 12, !33, i64 14, !33, i64 16, !7, i64 18}
!39 = !{!"_ZTS8ImVectorIP11ImGuiWindowE", !12, i64 0, !12, i64 4, !6, i64 8}
!40 = !{!"_ZTS8ImVectorIfE", !12, i64 0, !12, i64 4, !6, i64 8}
!41 = !{!"_ZTS6ImRect", !31, i64 0, !31, i64 8}
!42 = !{!"_ZTS8ImVec2ih", !33, i64 0, !33, i64 2}
!43 = !{!"_ZTS12ImGuiStorage", !44, i64 0}
!44 = !{!"_ZTS8ImVectorIN12ImGuiStorage16ImGuiStoragePairEE", !12, i64 0, !12, i64 4, !6, i64 8}
!45 = !{!"_ZTS8ImVectorI15ImGuiOldColumnsE", !12, i64 0, !12, i64 4, !6, i64 8}
!46 = !{i8 0, i8 2}
!47 = !{}
!48 = !{!10, !6, i64 8}
!49 = !{!24, !6, i64 48}
!50 = !{!24, !6, i64 16}
!51 = !{!24, !20, i64 0}
!52 = !{!24, !20, i64 4}
!53 = !{!24, !20, i64 8}
!54 = !{!24, !20, i64 12}
!55 = !{!56, !32, i64 5}
!56 = !{!"_ZTS18ImGuiMetricsConfig", !32, i64 0, !32, i64 1, !32, i64 2, !32, i64 3, !32, i64 4, !32, i64 5, !32, i64 6, !32, i64 7, !12, i64 8, !12, i64 12}
!57 = !{!56, !32, i64 6}
!58 = !{!10, !6, i64 24}
!59 = !{!10, !6, i64 40}
!60 = !{!24, !12, i64 24}
!61 = !{!24, !12, i64 28}
!62 = distinct !{!62, !63}
!63 = !{!"llvm.loop.mustprogress"}
!64 = !{!33, !33, i64 0}
!65 = distinct !{!65, !63}
!66 = !{!67, !12, i64 8}
!67 = !{!"_ZTS16ImGuiListClipper", !6, i64 0, !12, i64 8, !12, i64 12, !12, i64 16, !20, i64 20, !20, i64 24, !6, i64 32}
!68 = !{!67, !12, i64 12}
!69 = !{!70, !20, i64 0}
!70 = !{!"_ZTS10ImDrawVert", !31, i64 0, !31, i64 8, !12, i64 16}
!71 = !{!70, !20, i64 4}
!72 = !{!70, !20, i64 8}
!73 = !{!70, !20, i64 12}
!74 = !{!70, !12, i64 16}
!75 = !{!10, !12, i64 48}
!76 = distinct !{!76, !63}
!77 = distinct !{!77, !63}


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