; LLVM IR from NotManyIdeasDev/double-pendulum-sim :: double-pendulum-sim/Libraries/raygui-2.8/examples/text_box_selection (GuiTextBoxEx)

; 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.Font = type { i32, i32, i32, %struct.Texture, ptr, ptr }
%struct.Texture = type { i32, i32, i32, i32, i32 }
%struct.GuiTextBoxState = type { i32, i32, i32, i32 }
%struct.Rectangle = type { float, float, float, float }
%struct.Vector2 = type { float, float }
%struct.Color = type { i8, i8, i8, i8 }

@guiState = external hidden global i32, align 4
@guiLocked = external hidden global i8, align 1
@guiAlpha = external hidden global float, align 4
@guiFont = external hidden global %struct.Font, align 8
@guiTextBoxState = external hidden global %struct.GuiTextBoxState, align 4
@GuiTextBoxEx.framesCounter = external hidden global i32, align 4

; 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) #0

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

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @GuiGetStyle(i32 noundef, i32 noundef) #2

declare i32 @Fade(i32, float noundef) #3

declare i32 @GetColor(i32 noundef) #3

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

declare <2 x float> @GetMousePosition() #3

declare zeroext i1 @CheckCollisionPointRec(<2 x float>, <2 x float>, <2 x float>) #3

declare zeroext i1 @IsMouseButtonDown(i32 noundef) #3

declare zeroext i1 @IsKeyDown(i32 noundef) #3

declare zeroext i1 @IsMouseButtonPressed(i32 noundef) #3

; Function Attrs: nounwind willreturn memory(read)
declare i64 @strlen(ptr noundef) #5

declare zeroext i1 @IsKeyPressed(i32 noundef) #3

; Function Attrs: nounwind uwtable
declare dso_local void @GuiTextBoxSetActive(<2 x float>, <2 x float>) #6

; Function Attrs: nounwind uwtable
declare dso_local zeroext i1 @GuiTextBoxIsActive(<2 x float>, <2 x float>) #6

; Function Attrs: nounwind uwtable
declare dso_local i32 @GuiTextBoxGetByteIndex(ptr noundef, i32 noundef, i32 noundef, i32 noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @GuiTextBoxDelete(ptr noundef, i32 noundef, i1 noundef zeroext) #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @GuiCountCodepointsUntilNewline(ptr noundef) #7

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

; Function Attrs: nounwind uwtable
declare dso_local void @GuiTextBoxSelectAll(ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @GuiTextBoxCopy(ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @GuiTextBoxPaste(ptr noundef, i32 noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @GuiTextBoxCut(ptr noundef) #2

; Function Attrs: nounwind uwtable
define dso_local zeroext i1 @GuiTextBoxEx(<2 x float> %0, <2 x float> %1, ptr noundef %2, i32 noundef %3, i1 noundef zeroext %4) #6 {
  %6 = alloca %struct.Rectangle, align 4
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i8, align 1
  %10 = alloca i32, align 4
  %11 = alloca i8, align 1
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca %struct.Rectangle, align 4
  %15 = alloca %struct.Vector2, align 4
  %16 = alloca i8, align 1
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca %struct.Vector2, align 4
  %21 = alloca %struct.Rectangle, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca [5 x i8], align 1
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i8, align 1
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca %struct.Color, align 1
  %39 = alloca %struct.Color, align 1
  %40 = alloca %struct.Color, align 1
  %41 = alloca %struct.Color, align 1
  %42 = alloca %struct.Color, align 1
  %43 = alloca %struct.Color, align 1
  %44 = alloca %struct.Color, align 1
  %45 = alloca %struct.Color, align 1
  %46 = alloca %struct.Color, align 1
  %47 = alloca %struct.Color, align 1
  %48 = alloca %struct.Color, align 1
  %49 = alloca %struct.Color, align 1
  %50 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %6, i32 0, i32 0
  store <2 x float> %0, ptr %50, align 4
  %51 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %6, i32 0, i32 1
  store <2 x float> %1, ptr %51, align 4
  store ptr %2, ptr %7, align 8, !tbaa !5
  store i32 %3, ptr %8, align 4, !tbaa !9
  %52 = zext i1 %4 to i8
  store i8 %52, ptr %9, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #9
  %53 = load i32, ptr @guiState, align 4, !tbaa !9
  store i32 %53, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %11) #9
  store i8 0, ptr %11, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #9
  %54 = load ptr, ptr %7, align 8, !tbaa !5
  %55 = call i64 @strlen(ptr noundef %54) #10
  %56 = trunc i64 %55 to i32
  store i32 %56, ptr %12, align 4, !tbaa !9
  %57 = load i32, ptr %12, align 4, !tbaa !9
  %58 = load i32, ptr %8, align 4, !tbaa !9
  %59 = icmp sgt i32 %57, %58
  br i1 %59, label %60, label %66

60:                                               ; preds = %5
  %61 = load ptr, ptr %7, align 8, !tbaa !5
  %62 = load i32, ptr %8, align 4, !tbaa !9
  %63 = sext i32 %62 to i64
  %64 = getelementptr inbounds i8, ptr %61, i64 %63
  store i8 0, ptr %64, align 1, !tbaa !13
  %65 = load i32, ptr %8, align 4, !tbaa !9
  store i32 %65, ptr %12, align 4, !tbaa !9
  br label %66

66:                                               ; preds = %60, %5
  %67 = getelementptr inbounds %struct.Rectangle, ptr %6, i32 0, i32 2
  %68 = load float, ptr %67, align 4, !tbaa !14
  %69 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 16)
  %70 = mul nsw i32 2, %69
  %71 = sitofp i32 %70 to float
  %72 = fsub float %68, %71
  %73 = call i32 @GuiGetStyle(i32 noundef 0, i32 noundef 16)
  %74 = sitofp i32 %73 to float
  %75 = fcmp olt float %72, %74
  br i1 %75, label %76, label %83

76:                                               ; preds = %66
  %77 = call i32 @GuiGetStyle(i32 noundef 0, i32 noundef 16)
  %78 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 16)
  %79 = mul nsw i32 2, %78
  %80 = add nsw i32 %77, %79
  %81 = sitofp i32 %80 to float
  %82 = getelementptr inbounds %struct.Rectangle, ptr %6, i32 0, i32 2
  store float %81, ptr %82, align 4, !tbaa !14
  br label %83

83:                                               ; preds = %76, %66
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #9
  %84 = getelementptr inbounds %struct.Rectangle, ptr %6, i32 0, i32 3
  %85 = load float, ptr %84, align 4, !tbaa !17
  %86 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %87 = mul nsw i32 2, %86
  %88 = sitofp i32 %87 to float
  %89 = fsub float %85, %88
  %90 = call i32 @GuiGetStyle(i32 noundef 0, i32 noundef 16)
  %91 = sitofp i32 %90 to float
  %92 = fsub float %89, %91
  %93 = fdiv float %92, 2.000000e+00
  %94 = fptosi float %93 to i32
  store i32 %94, ptr %13, align 4, !tbaa !9
  %95 = load i32, ptr %13, align 4, !tbaa !9
  %96 = icmp slt i32 %95, 0
  br i1 %96, label %97, label %104

97:                                               ; preds = %83
  %98 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %99 = mul nsw i32 2, %98
  %100 = call i32 @GuiGetStyle(i32 noundef 0, i32 noundef 16)
  %101 = add nsw i32 %99, %100
  %102 = sitofp i32 %101 to float
  %103 = getelementptr inbounds %struct.Rectangle, ptr %6, i32 0, i32 3
  store float %102, ptr %103, align 4, !tbaa !17
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %104

104:                                              ; preds = %97, %83
  call void @llvm.lifetime.start.p0(i64 16, ptr %14) #9
  %105 = getelementptr inbounds %struct.Rectangle, ptr %14, i32 0, i32 0
  %106 = getelementptr inbounds %struct.Rectangle, ptr %6, i32 0, i32 0
  %107 = load float, ptr %106, align 4, !tbaa !18
  %108 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %109 = sitofp i32 %108 to float
  %110 = fadd float %107, %109
  %111 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 16)
  %112 = sitofp i32 %111 to float
  %113 = fadd float %110, %112
  store float %113, ptr %105, align 4, !tbaa !18
  %114 = getelementptr inbounds %struct.Rectangle, ptr %14, i32 0, i32 1
  %115 = getelementptr inbounds %struct.Rectangle, ptr %6, i32 0, i32 1
  %116 = load float, ptr %115, align 4, !tbaa !19
  %117 = load i32, ptr %13, align 4, !tbaa !9
  %118 = sitofp i32 %117 to float
  %119 = fadd float %116, %118
  %120 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %121 = sitofp i32 %120 to float
  %122 = fadd float %119, %121
  store float %122, ptr %114, align 4, !tbaa !19
  %123 = getelementptr inbounds %struct.Rectangle, ptr %14, i32 0, i32 2
  %124 = getelementptr inbounds %struct.Rectangle, ptr %6, i32 0, i32 2
  %125 = load float, ptr %124, align 4, !tbaa !14
  %126 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 16)
  %127 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %128 = add nsw i32 %126, %127
  %129 = mul nsw i32 2, %128
  %130 = sitofp i32 %129 to float
  %131 = fsub float %125, %130
  store float %131, ptr %123, align 4, !tbaa !14
  %132 = getelementptr inbounds %struct.Rectangle, ptr %14, i32 0, i32 3
  %133 = call i32 @GuiGetStyle(i32 noundef 0, i32 noundef 16)
  %134 = sitofp i32 %133 to float
  store float %134, ptr %132, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #9
  %135 = getelementptr inbounds %struct.Vector2, ptr %15, i32 0, i32 0
  %136 = getelementptr inbounds %struct.Rectangle, ptr %14, i32 0, i32 0
  %137 = load float, ptr %136, align 4, !tbaa !18
  store float %137, ptr %135, align 4, !tbaa !20
  %138 = getelementptr inbounds %struct.Vector2, ptr %15, i32 0, i32 1
  %139 = getelementptr inbounds %struct.Rectangle, ptr %14, i32 0, i32 1
  %140 = load float, ptr %139, align 4, !tbaa !19
  store float %140, ptr %138, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #9
  %141 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %6, i32 0, i32 0
  %142 = load <2 x float>, ptr %141, align 4
  %143 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %6, i32 0, i32 1
  %144 = load <2 x float>, ptr %143, align 4
  %145 = call zeroext i1 @GuiTextBoxIsActive(<2 x float> %142, <2 x float> %144)
  %146 = zext i1 %145 to i8
  store i8 %146, ptr %16, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #9
  store i32 0, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #9
  store i32 0, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #9
  store i32 0, ptr %19, align 4, !tbaa !9
  %147 = load i32, ptr %10, align 4, !tbaa !9
  %148 = icmp ne i32 %147, 3
  br i1 %148, label %149, label %821

149:                                              ; preds = %104
  %150 = load i8, ptr @guiLocked, align 1, !tbaa !11, !range !23, !noundef !24
  %151 = trunc i8 %150 to i1
  br i1 %151, label %821, label %152

152:                                              ; preds = %149
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #9
  %153 = call <2 x float> @GetMousePosition()
  store <2 x float> %153, ptr %20, align 4
  %154 = load i8, ptr %9, align 1, !tbaa !11, !range !23, !noundef !24
  %155 = trunc i8 %154 to i1
  br i1 %155, label %156, label %780

156:                                              ; preds = %152
  %157 = load i8, ptr %16, align 1, !tbaa !11, !range !23, !noundef !24
  %158 = trunc i8 %157 to i1
  br i1 %158, label %176, label %159

159:                                              ; preds = %156
  %160 = load <2 x float>, ptr %20, align 4
  %161 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %6, i32 0, i32 0
  %162 = load <2 x float>, ptr %161, align 4
  %163 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %6, i32 0, i32 1
  %164 = load <2 x float>, ptr %163, align 4
  %165 = call zeroext i1 @CheckCollisionPointRec(<2 x float> %160, <2 x float> %162, <2 x float> %164)
  br i1 %165, label %166, label %175

166:                                              ; preds = %159
  %167 = call zeroext i1 @IsMouseButtonPressed(i32 noundef 0)
  br i1 %167, label %170, label %168

168:                                              ; preds = %166
  %169 = call zeroext i1 @IsMouseButtonPressed(i32 noundef 1)
  br i1 %169, label %170, label %175

170:                                              ; preds = %168, %166
  store i8 1, ptr %16, align 1, !tbaa !11
  %171 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %6, i32 0, i32 0
  %172 = load <2 x float>, ptr %171, align 4
  %173 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %6, i32 0, i32 1
  %174 = load <2 x float>, ptr %173, align 4
  call void @GuiTextBoxSetActive(<2 x float> %172, <2 x float> %174)
  br label %175

175:                                              ; preds = %170, %168, %159
  br label %195

176:                                              ; preds = %156
  %177 = load <2 x float>, ptr %20, align 4
  %178 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %6, i32 0, i32 0
  %179 = load <2 x float>, ptr %178, align 4
  %180 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %6, i32 0, i32 1
  %181 = load <2 x float>, ptr %180, align 4
  %182 = call zeroext i1 @CheckCollisionPointRec(<2 x float> %177, <2 x float> %179, <2 x float> %181)
  br i1 %182, label %194, label %183

183:                                              ; preds = %176
  %184 = call zeroext i1 @IsMouseButtonPressed(i32 noundef 1)
  br i1 %184, label %185, label %194

185:                                              ; preds = %183
  %186 = getelementptr inbounds %struct.Rectangle, ptr %21, i32 0, i32 0
  store float 0.000000e+00, ptr %186, align 4, !tbaa !18
  %187 = getelementptr inbounds %struct.Rectangle, ptr %21, i32 0, i32 1
  store float 0.000000e+00, ptr %187, align 4, !tbaa !19
  %188 = getelementptr inbounds %struct.Rectangle, ptr %21, i32 0, i32 2
  store float -1.000000e+00, ptr %188, align 4, !tbaa !14
  %189 = getelementptr inbounds %struct.Rectangle, ptr %21, i32 0, i32 3
  store float -1.000000e+00, ptr %189, align 4, !tbaa !17
  %190 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %21, i32 0, i32 0
  %191 = load <2 x float>, ptr %190, align 4
  %192 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %21, i32 0, i32 1
  %193 = load <2 x float>, ptr %192, align 4
  call void @GuiTextBoxSetActive(<2 x float> %191, <2 x float> %193)
  store i8 0, ptr %16, align 1, !tbaa !11
  br label %194

194:                                              ; preds = %185, %183, %176
  br label %195

195:                                              ; preds = %194, %175
  %196 = load i8, ptr %16, align 1, !tbaa !11, !range !23, !noundef !24
  %197 = trunc i8 %196 to i1
  br i1 %197, label %198, label %766

198:                                              ; preds = %195
  store i32 2, ptr %10, align 4, !tbaa !9
  %199 = load i32, ptr @GuiTextBoxEx.framesCounter, align 4, !tbaa !9
  %200 = add nsw i32 %199, 1
  store i32 %200, ptr @GuiTextBoxEx.framesCounter, align 4, !tbaa !9
  %201 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  %202 = load i32, ptr %12, align 4, !tbaa !9
  %203 = icmp sgt i32 %201, %202
  br i1 %203, label %204, label %205

204:                                              ; preds = %198
  store i32 -1, ptr @guiTextBoxState, align 4, !tbaa !25
  br label %205

205:                                              ; preds = %204, %198
  %206 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  %207 = load i32, ptr %12, align 4, !tbaa !9
  %208 = icmp sgt i32 %206, %207
  br i1 %208, label %209, label %210

209:                                              ; preds = %205
  store i32 -1, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  br label %210

210:                                              ; preds = %209, %205
  %211 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 1), align 4, !tbaa !28
  %212 = load i32, ptr %12, align 4, !tbaa !9
  %213 = icmp sgt i32 %211, %212
  br i1 %213, label %214, label %215

214:                                              ; preds = %210
  store i32 -1, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 1), align 4, !tbaa !28
  br label %215

215:                                              ; preds = %214, %210
  %216 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  %217 = icmp eq i32 %216, -1
  br i1 %217, label %218, label %226

218:                                              ; preds = %215
  %219 = load ptr, ptr %7, align 8, !tbaa !5
  %220 = load i32, ptr %12, align 4, !tbaa !9
  %221 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 0
  %222 = load <2 x float>, ptr %221, align 4
  %223 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 1
  %224 = load <2 x float>, ptr %223, align 4
  %225 = call i32 @GuiTextBoxMaxCharacters(ptr noundef %219, i32 noundef %220, <2 x float> %222, <2 x float> %224)
  store i32 %225, ptr @guiTextBoxState, align 4, !tbaa !25
  br label %226

226:                                              ; preds = %218, %215
  %227 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 1), align 4, !tbaa !28
  %228 = icmp eq i32 %227, -1
  br i1 %228, label %229, label %249

229:                                              ; preds = %226
  %230 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  %231 = icmp eq i32 %230, 0
  br i1 %231, label %232, label %233

232:                                              ; preds = %229
  store i32 0, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 2), align 4, !tbaa !29
  store i32 0, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 1), align 4, !tbaa !28
  br label %248

233:                                              ; preds = %229
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #9
  store i32 0, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #9
  %234 = load ptr, ptr %7, align 8, !tbaa !5
  %235 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  %236 = call i32 @GuiTextBoxGetByteIndex(ptr noundef %234, i32 noundef 0, i32 noundef 0, i32 noundef %235)
  store i32 %236, ptr %23, align 4, !tbaa !9
  %237 = load ptr, ptr %7, align 8, !tbaa !5
  %238 = load i32, ptr %23, align 4, !tbaa !9
  %239 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 0
  %240 = load <2 x float>, ptr %239, align 4
  %241 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 1
  %242 = load <2 x float>, ptr %241, align 4
  %243 = call i32 @GuiMeasureTextBoxRev(ptr noundef %237, i32 noundef %238, <2 x float> %240, <2 x float> %242, ptr noundef %22)
  store i32 %243, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 2), align 4, !tbaa !29
  %244 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  %245 = load i32, ptr %22, align 4, !tbaa !9
  %246 = sub nsw i32 %244, %245
  %247 = add nsw i32 %246, 1
  store i32 %247, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 1), align 4, !tbaa !28
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #9
  br label %248

248:                                              ; preds = %233, %232
  br label %249

249:                                              ; preds = %248, %226
  %250 = call zeroext i1 @IsKeyPressed(i32 noundef 262)
  br i1 %250, label %257, label %251

251:                                              ; preds = %249
  %252 = call zeroext i1 @IsKeyDown(i32 noundef 262)
  br i1 %252, label %253, label %301

253:                                              ; preds = %251
  %254 = load i32, ptr @GuiTextBoxEx.framesCounter, align 4, !tbaa !9
  %255 = srem i32 %254, 5
  %256 = icmp eq i32 %255, 0
  br i1 %256, label %257, label %301

257:                                              ; preds = %253, %249
  %258 = call zeroext i1 @IsKeyDown(i32 noundef 340)
  br i1 %258, label %259, label %271

259:                                              ; preds = %257
  %260 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  %261 = icmp eq i32 %260, -1
  br i1 %261, label %262, label %264

262:                                              ; preds = %259
  %263 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  store i32 %263, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  br label %264

264:                                              ; preds = %262, %259
  %265 = load ptr, ptr %7, align 8, !tbaa !5
  %266 = load i32, ptr %12, align 4, !tbaa !9
  %267 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 0
  %268 = load <2 x float>, ptr %267, align 4
  %269 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 1
  %270 = load <2 x float>, ptr %269, align 4
  call void @MoveTextBoxCursorRight(ptr noundef %265, i32 noundef %266, <2 x float> %268, <2 x float> %270)
  br label %300

271:                                              ; preds = %257
  %272 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  %273 = icmp ne i32 %272, -1
  br i1 %273, label %274, label %292

274:                                              ; preds = %271
  %275 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  %276 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  %277 = icmp ne i32 %275, %276
  br i1 %277, label %278, label %292

278:                                              ; preds = %274
  %279 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  %280 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  %281 = icmp slt i32 %279, %280
  br i1 %281, label %282, label %291

282:                                              ; preds = %278
  %283 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  %284 = sub nsw i32 %283, 1
  store i32 %284, ptr @guiTextBoxState, align 4, !tbaa !25
  %285 = load ptr, ptr %7, align 8, !tbaa !5
  %286 = load i32, ptr %12, align 4, !tbaa !9
  %287 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 0
  %288 = load <2 x float>, ptr %287, align 4
  %289 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 1
  %290 = load <2 x float>, ptr %289, align 4
  call void @MoveTextBoxCursorRight(ptr noundef %285, i32 noundef %286, <2 x float> %288, <2 x float> %290)
  br label %291

291:                                              ; preds = %282, %278
  br label %299

292:                                              ; preds = %274, %271
  %293 = load ptr, ptr %7, align 8, !tbaa !5
  %294 = load i32, ptr %12, align 4, !tbaa !9
  %295 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 0
  %296 = load <2 x float>, ptr %295, align 4
  %297 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 1
  %298 = load <2 x float>, ptr %297, align 4
  call void @MoveTextBoxCursorRight(ptr noundef %293, i32 noundef %294, <2 x float> %296, <2 x float> %298)
  br label %299

299:                                              ; preds = %292, %291
  store i32 -1, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  br label %300

300:                                              ; preds = %299, %264
  store i32 0, ptr @GuiTextBoxEx.framesCounter, align 4, !tbaa !9
  br label %555

301:                                              ; preds = %253, %251
  %302 = call zeroext i1 @IsKeyPressed(i32 noundef 263)
  br i1 %302, label %309, label %303

303:                                              ; preds = %301
  %304 = call zeroext i1 @IsKeyDown(i32 noundef 263)
  br i1 %304, label %305, label %345

305:                                              ; preds = %303
  %306 = load i32, ptr @GuiTextBoxEx.framesCounter, align 4, !tbaa !9
  %307 = srem i32 %306, 5
  %308 = icmp eq i32 %307, 0
  br i1 %308, label %309, label %345

309:                                              ; preds = %305, %301
  %310 = call zeroext i1 @IsKeyDown(i32 noundef 340)
  br i1 %310, label %311, label %318

311:                                              ; preds = %309
  %312 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  %313 = icmp eq i32 %312, -1
  br i1 %313, label %314, label %316

314:                                              ; preds = %311
  %315 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  store i32 %315, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  br label %316

316:                                              ; preds = %314, %311
  %317 = load ptr, ptr %7, align 8, !tbaa !5
  call void @MoveTextBoxCursorLeft(ptr noundef %317)
  br label %344

318:                                              ; preds = %309
  %319 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  %320 = icmp ne i32 %319, -1
  br i1 %320, label %321, label %341

321:                                              ; preds = %318
  %322 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  %323 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  %324 = icmp ne i32 %322, %323
  br i1 %324, label %325, label %341

325:                                              ; preds = %321
  %326 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  %327 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  %328 = icmp sgt i32 %326, %327
  br i1 %328, label %329, label %340

329:                                              ; preds = %325
  %330 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  store i32 %330, ptr @guiTextBoxState, align 4, !tbaa !25
  %331 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 1), align 4, !tbaa !28
  %332 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  %333 = icmp sgt i32 %331, %332
  br i1 %333, label %334, label %339

334:                                              ; preds = %329
  %335 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  store i32 %335, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 1), align 4, !tbaa !28
  %336 = load ptr, ptr %7, align 8, !tbaa !5
  %337 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 1), align 4, !tbaa !28
  %338 = call i32 @GuiTextBoxGetByteIndex(ptr noundef %336, i32 noundef 0, i32 noundef 0, i32 noundef %337)
  store i32 %338, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 2), align 4, !tbaa !29
  br label %339

339:                                              ; preds = %334, %329
  br label %340

340:                                              ; preds = %339, %325
  br label %343

341:                                              ; preds = %321, %318
  %342 = load ptr, ptr %7, align 8, !tbaa !5
  call void @MoveTextBoxCursorLeft(ptr noundef %342)
  br label %343

343:                                              ; preds = %341, %340
  store i32 -1, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  br label %344

344:                                              ; preds = %343, %316
  store i32 0, ptr @GuiTextBoxEx.framesCounter, align 4, !tbaa !9
  br label %554

345:                                              ; preds = %305, %303
  %346 = call zeroext i1 @IsKeyPressed(i32 noundef 259)
  br i1 %346, label %353, label %347

347:                                              ; preds = %345
  %348 = call zeroext i1 @IsKeyDown(i32 noundef 259)
  br i1 %348, label %349, label %357

349:                                              ; preds = %347
  %350 = load i32, ptr @GuiTextBoxEx.framesCounter, align 4, !tbaa !9
  %351 = srem i32 %350, 5
  %352 = icmp eq i32 %351, 0
  br i1 %352, label %353, label %357

353:                                              ; preds = %349, %345
  %354 = load ptr, ptr %7, align 8, !tbaa !5
  %355 = load i32, ptr %12, align 4, !tbaa !9
  %356 = call i32 @GuiTextBoxDelete(ptr noundef %354, i32 noundef %355, i1 noundef zeroext true)
  br label %553

357:                                              ; preds = %349, %347
  %358 = call zeroext i1 @IsKeyPressed(i32 noundef 261)
  br i1 %358, label %365, label %359

359:                                              ; preds = %357
  %360 = call zeroext i1 @IsKeyDown(i32 noundef 261)
  br i1 %360, label %361, label %369

361:                                              ; preds = %359
  %362 = load i32, ptr @GuiTextBoxEx.framesCounter, align 4, !tbaa !9
  %363 = srem i32 %362, 5
  %364 = icmp eq i32 %363, 0
  br i1 %364, label %365, label %369

365:                                              ; preds = %361, %357
  %366 = load ptr, ptr %7, align 8, !tbaa !5
  %367 = load i32, ptr %12, align 4, !tbaa !9
  %368 = call i32 @GuiTextBoxDelete(ptr noundef %366, i32 noundef %367, i1 noundef zeroext false)
  br label %552

369:                                              ; preds = %361, %359
  %370 = call zeroext i1 @IsKeyPressed(i32 noundef 268)
  br i1 %370, label %371, label %388

371:                                              ; preds = %369
  %372 = call zeroext i1 @IsKeyDown(i32 noundef 340)
  br i1 %372, label %373, label %386

373:                                              ; preds = %371
  %374 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  %375 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  %376 = icmp sgt i32 %374, %375
  br i1 %376, label %383, label %377

377:                                              ; preds = %373
  %378 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  %379 = icmp eq i32 %378, -1
  br i1 %379, label %380, label %385

380:                                              ; preds = %377
  %381 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  %382 = icmp ne i32 %381, 0
  br i1 %382, label %383, label %385

383:                                              ; preds = %380, %373
  %384 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  store i32 %384, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  br label %385

385:                                              ; preds = %383, %380, %377
  br label %387

386:                                              ; preds = %371
  store i32 -1, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  br label %387

387:                                              ; preds = %386, %385
  store i32 0, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 2), align 4, !tbaa !29
  store i32 0, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 1), align 4, !tbaa !28
  store i32 0, ptr @guiTextBoxState, align 4, !tbaa !25
  store i32 0, ptr @GuiTextBoxEx.framesCounter, align 4, !tbaa !9
  br label %551

388:                                              ; preds = %369
  %389 = call zeroext i1 @IsKeyPressed(i32 noundef 269)
  br i1 %389, label %390, label %421

390:                                              ; preds = %388
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #9
  %391 = load ptr, ptr %7, align 8, !tbaa !5
  %392 = call i32 @GuiCountCodepointsUntilNewline(ptr noundef %391)
  store i32 %392, ptr %24, align 4, !tbaa !9
  %393 = call zeroext i1 @IsKeyDown(i32 noundef 340)
  br i1 %393, label %394, label %404

394:                                              ; preds = %390
  %395 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  %396 = icmp eq i32 %395, -1
  br i1 %396, label %397, label %403

397:                                              ; preds = %394
  %398 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  %399 = load i32, ptr %24, align 4, !tbaa !9
  %400 = icmp ne i32 %398, %399
  br i1 %400, label %401, label %403

401:                                              ; preds = %397
  %402 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  store i32 %402, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  br label %403

403:                                              ; preds = %401, %397, %394
  br label %405

404:                                              ; preds = %390
  store i32 -1, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  br label %405

405:                                              ; preds = %404, %403
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #9
  store i32 0, ptr %25, align 4, !tbaa !9
  %406 = load i32, ptr %24, align 4, !tbaa !9
  store i32 %406, ptr @guiTextBoxState, align 4, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #9
  %407 = load ptr, ptr %7, align 8, !tbaa !5
  %408 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  %409 = call i32 @GuiTextBoxGetByteIndex(ptr noundef %407, i32 noundef 0, i32 noundef 0, i32 noundef %408)
  store i32 %409, ptr %26, align 4, !tbaa !9
  %410 = load ptr, ptr %7, align 8, !tbaa !5
  %411 = load i32, ptr %26, align 4, !tbaa !9
  %412 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 0
  %413 = load <2 x float>, ptr %412, align 4
  %414 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 1
  %415 = load <2 x float>, ptr %414, align 4
  %416 = call i32 @GuiMeasureTextBoxRev(ptr noundef %410, i32 noundef %411, <2 x float> %413, <2 x float> %415, ptr noundef %25)
  store i32 %416, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 2), align 4, !tbaa !29
  %417 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  %418 = load i32, ptr %25, align 4, !tbaa !9
  %419 = sub nsw i32 %417, %418
  %420 = add nsw i32 %419, 1
  store i32 %420, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 1), align 4, !tbaa !28
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #9
  br label %550

421:                                              ; preds = %388
  %422 = call zeroext i1 @IsKeyDown(i32 noundef 341)
  br i1 %422, label %423, label %427

423:                                              ; preds = %421
  %424 = call zeroext i1 @IsKeyPressed(i32 noundef 65)
  br i1 %424, label %425, label %427

425:                                              ; preds = %423
  %426 = load ptr, ptr %7, align 8, !tbaa !5
  call void @GuiTextBoxSelectAll(ptr noundef %426)
  br label %549

427:                                              ; preds = %423, %421
  %428 = call zeroext i1 @IsKeyDown(i32 noundef 341)
  br i1 %428, label %429, label %433

429:                                              ; preds = %427
  %430 = call zeroext i1 @IsKeyPressed(i32 noundef 67)
  br i1 %430, label %431, label %433

431:                                              ; preds = %429
  %432 = load ptr, ptr %7, align 8, !tbaa !5
  call void @GuiTextBoxCopy(ptr noundef %432)
  br label %548

433:                                              ; preds = %429, %427
  %434 = call zeroext i1 @IsKeyDown(i32 noundef 341)
  br i1 %434, label %435, label %439

435:                                              ; preds = %433
  %436 = call zeroext i1 @IsKeyPressed(i32 noundef 88)
  br i1 %436, label %437, label %439

437:                                              ; preds = %435
  %438 = load ptr, ptr %7, align 8, !tbaa !5
  call void @GuiTextBoxCut(ptr noundef %438)
  br label %547

439:                                              ; preds = %435, %433
  %440 = call zeroext i1 @IsKeyDown(i32 noundef 341)
  br i1 %440, label %441, label %446

441:                                              ; preds = %439
  %442 = call zeroext i1 @IsKeyPressed(i32 noundef 86)
  br i1 %442, label %443, label %446

443:                                              ; preds = %441
  %444 = load ptr, ptr %7, align 8, !tbaa !5
  %445 = load i32, ptr %8, align 4, !tbaa !9
  call void @GuiTextBoxPaste(ptr noundef %444, i32 noundef %445)
  br label %546

446:                                              ; preds = %441, %439
  %447 = call zeroext i1 @IsKeyPressed(i32 noundef 257)
  br i1 %447, label %448, label %449

448:                                              ; preds = %446
  store i8 1, ptr %11, align 1, !tbaa !11
  br label %545

449:                                              ; preds = %446
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #9
  %450 = call i32 @GetKeyPressed()
  store i32 %450, ptr %27, align 4, !tbaa !9
  %451 = load i32, ptr %27, align 4, !tbaa !9
  %452 = icmp sge i32 %451, 32
  br i1 %452, label %453, label %544

453:                                              ; preds = %449
  %454 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  %455 = add nsw i32 %454, 1
  %456 = load i32, ptr %8, align 4, !tbaa !9
  %457 = icmp slt i32 %455, %456
  br i1 %457, label %458, label %544

458:                                              ; preds = %453
  %459 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  %460 = icmp ne i32 %459, -1
  br i1 %460, label %461, label %469

461:                                              ; preds = %458
  %462 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  %463 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  %464 = icmp ne i32 %462, %463
  br i1 %464, label %465, label %469

465:                                              ; preds = %461
  %466 = load ptr, ptr %7, align 8, !tbaa !5
  %467 = load i32, ptr %12, align 4, !tbaa !9
  %468 = call i32 @GuiTextBoxDelete(ptr noundef %466, i32 noundef %467, i1 noundef zeroext true)
  br label %469

469:                                              ; preds = %465, %461, %458
  call void @llvm.lifetime.start.p0(i64 5, ptr %28) #9
  call void @llvm.memset.p0.i64(ptr align 1 %28, i8 0, i64 5, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #9
  %470 = load i32, ptr %27, align 4, !tbaa !9
  %471 = getelementptr inbounds [5 x i8], ptr %28, i64 0, i64 0
  %472 = call i32 @EncodeCodepoint(i32 noundef %470, ptr noundef %471)
  store i32 %472, ptr %29, align 4, !tbaa !9
  %473 = load i32, ptr %29, align 4, !tbaa !9
  %474 = icmp ne i32 %473, 0
  br i1 %474, label %475, label %543

475:                                              ; preds = %469
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #9
  %476 = load ptr, ptr %7, align 8, !tbaa !5
  %477 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  %478 = call i32 @GuiTextBoxGetByteIndex(ptr noundef %476, i32 noundef 0, i32 noundef 0, i32 noundef %477)
  store i32 %478, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #9
  %479 = load i32, ptr %30, align 4, !tbaa !9
  %480 = load i32, ptr %29, align 4, !tbaa !9
  %481 = add nsw i32 %479, %480
  store i32 %481, ptr %31, align 4, !tbaa !9
  %482 = load i32, ptr %31, align 4, !tbaa !9
  %483 = load i32, ptr %8, align 4, !tbaa !9
  %484 = icmp sle i32 %482, %483
  br i1 %484, label %485, label %542

485:                                              ; preds = %475
  %486 = load i32, ptr %12, align 4, !tbaa !9
  %487 = load i32, ptr %8, align 4, !tbaa !9
  %488 = sub nsw i32 %487, 1
  %489 = icmp slt i32 %486, %488
  br i1 %489, label %490, label %542

490:                                              ; preds = %485
  %491 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  %492 = add nsw i32 %491, 1
  store i32 %492, ptr @guiTextBoxState, align 4, !tbaa !25
  store i32 -1, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  %493 = load ptr, ptr %7, align 8, !tbaa !5
  %494 = load i32, ptr %31, align 4, !tbaa !9
  %495 = sext i32 %494 to i64
  %496 = getelementptr inbounds i8, ptr %493, i64 %495
  %497 = load ptr, ptr %7, align 8, !tbaa !5
  %498 = load i32, ptr %30, align 4, !tbaa !9
  %499 = sext i32 %498 to i64
  %500 = getelementptr inbounds i8, ptr %497, i64 %499
  %501 = load i32, ptr %12, align 4, !tbaa !9
  %502 = load i32, ptr %30, align 4, !tbaa !9
  %503 = sub nsw i32 %501, %502
  %504 = sext i32 %503 to i64
  call void @llvm.memmove.p0.p0.i64(ptr align 1 %496, ptr align 1 %500, i64 %504, i1 false)
  %505 = load ptr, ptr %7, align 8, !tbaa !5
  %506 = load i32, ptr %30, align 4, !tbaa !9
  %507 = sext i32 %506 to i64
  %508 = getelementptr inbounds i8, ptr %505, i64 %507
  %509 = getelementptr inbounds [5 x i8], ptr %28, i64 0, i64 0
  %510 = load i32, ptr %29, align 4, !tbaa !9
  %511 = sext i32 %510 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %508, ptr align 1 %509, i64 %511, i1 false)
  %512 = load i32, ptr %29, align 4, !tbaa !9
  %513 = load i32, ptr %12, align 4, !tbaa !9
  %514 = add nsw i32 %513, %512
  store i32 %514, ptr %12, align 4, !tbaa !9
  %515 = load ptr, ptr %7, align 8, !tbaa !5
  %516 = load i32, ptr %12, align 4, !tbaa !9
  %517 = sext i32 %516 to i64
  %518 = getelementptr inbounds i8, ptr %515, i64 %517
  store i8 0, ptr %518, align 1, !tbaa !13
  %519 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 1), align 4, !tbaa !28
  %520 = icmp ne i32 %519, -1
  br i1 %520, label %521, label %541

521:                                              ; preds = %490
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #9
  %522 = load ptr, ptr %7, align 8, !tbaa !5
  %523 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 2), align 4, !tbaa !29
  %524 = sext i32 %523 to i64
  %525 = getelementptr inbounds i8, ptr %522, i64 %524
  %526 = load i32, ptr %12, align 4, !tbaa !9
  %527 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 2), align 4, !tbaa !29
  %528 = sub nsw i32 %526, %527
  %529 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 0
  %530 = load <2 x float>, ptr %529, align 4
  %531 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 1
  %532 = load <2 x float>, ptr %531, align 4
  %533 = call i32 @GuiTextBoxMaxCharacters(ptr noundef %525, i32 noundef %528, <2 x float> %530, <2 x float> %532)
  store i32 %533, ptr %32, align 4, !tbaa !9
  %534 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  %535 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 1), align 4, !tbaa !28
  %536 = sub nsw i32 %534, %535
  %537 = load i32, ptr %32, align 4, !tbaa !9
  %538 = icmp sgt i32 %536, %537
  br i1 %538, label %539, label %540

539:                                              ; preds = %521
  store i32 -1, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 1), align 4, !tbaa !28
  br label %540

540:                                              ; preds = %539, %521
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #9
  br label %541

541:                                              ; preds = %540, %490
  br label %542

542:                                              ; preds = %541, %485, %475
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #9
  br label %543

543:                                              ; preds = %542, %469
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 5, ptr %28) #9
  br label %544

544:                                              ; preds = %543, %453, %449
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #9
  br label %545

545:                                              ; preds = %544, %448
  br label %546

546:                                              ; preds = %545, %443
  br label %547

547:                                              ; preds = %546, %437
  br label %548

548:                                              ; preds = %547, %431
  br label %549

549:                                              ; preds = %548, %425
  br label %550

550:                                              ; preds = %549, %405
  br label %551

551:                                              ; preds = %550, %387
  br label %552

552:                                              ; preds = %551, %365
  br label %553

553:                                              ; preds = %552, %353
  br label %554

554:                                              ; preds = %553, %344
  br label %555

555:                                              ; preds = %554, %300
  %556 = load <2 x float>, ptr %20, align 4
  %557 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %6, i32 0, i32 0
  %558 = load <2 x float>, ptr %557, align 4
  %559 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %6, i32 0, i32 1
  %560 = load <2 x float>, ptr %559, align 4
  %561 = call zeroext i1 @CheckCollisionPointRec(<2 x float> %556, <2 x float> %558, <2 x float> %560)
  br i1 %561, label %562, label %713

562:                                              ; preds = %555
  %563 = call zeroext i1 @IsMouseButtonPressed(i32 noundef 0)
  br i1 %563, label %564, label %617

564:                                              ; preds = %562
  %565 = load <2 x float>, ptr %20, align 4
  %566 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 0
  %567 = load <2 x float>, ptr %566, align 4
  %568 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 1
  %569 = load <2 x float>, ptr %568, align 4
  %570 = call zeroext i1 @CheckCollisionPointRec(<2 x float> %565, <2 x float> %567, <2 x float> %569)
  br i1 %570, label %571, label %587

571:                                              ; preds = %564
  %572 = load ptr, ptr %7, align 8, !tbaa !5
  %573 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 2), align 4, !tbaa !29
  %574 = sext i32 %573 to i64
  %575 = getelementptr inbounds i8, ptr %572, i64 %574
  %576 = load i32, ptr %12, align 4, !tbaa !9
  %577 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 2), align 4, !tbaa !29
  %578 = sub nsw i32 %576, %577
  %579 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 0
  %580 = load <2 x float>, ptr %579, align 4
  %581 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 1
  %582 = load <2 x float>, ptr %581, align 4
  %583 = call i32 @GuiTextBoxGetCursorFromMouse(ptr noundef %575, i32 noundef %578, <2 x float> %580, <2 x float> %582, ptr noundef @guiTextBoxState)
  %584 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 1), align 4, !tbaa !28
  %585 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  %586 = add nsw i32 %585, %584
  store i32 %586, ptr @guiTextBoxState, align 4, !tbaa !25
  store i32 -1, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  br label %616

587:                                              ; preds = %564
  %588 = getelementptr inbounds %struct.Vector2, ptr %20, i32 0, i32 0
  %589 = load float, ptr %588, align 4, !tbaa !20
  %590 = getelementptr inbounds %struct.Rectangle, ptr %6, i32 0, i32 0
  %591 = load float, ptr %590, align 4, !tbaa !18
  %592 = getelementptr inbounds %struct.Rectangle, ptr %6, i32 0, i32 2
  %593 = load float, ptr %592, align 4, !tbaa !14
  %594 = fdiv float %593, 2.000000e+00
  %595 = fadd float %591, %594
  %596 = fcmp ole float %589, %595
  br i1 %596, label %597, label %600

597:                                              ; preds = %587
  %598 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 1), align 4, !tbaa !28
  %599 = add nsw i32 0, %598
  store i32 %599, ptr @guiTextBoxState, align 4, !tbaa !25
  br label %615

600:                                              ; preds = %587
  %601 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 1), align 4, !tbaa !28
  %602 = load ptr, ptr %7, align 8, !tbaa !5
  %603 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 2), align 4, !tbaa !29
  %604 = sext i32 %603 to i64
  %605 = getelementptr inbounds i8, ptr %602, i64 %604
  %606 = load i32, ptr %12, align 4, !tbaa !9
  %607 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 2), align 4, !tbaa !29
  %608 = sub nsw i32 %606, %607
  %609 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 0
  %610 = load <2 x float>, ptr %609, align 4
  %611 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 1
  %612 = load <2 x float>, ptr %611, align 4
  %613 = call i32 @GuiTextBoxMaxCharacters(ptr noundef %605, i32 noundef %608, <2 x float> %610, <2 x float> %612)
  %614 = add nsw i32 %601, %613
  store i32 %614, ptr @guiTextBoxState, align 4, !tbaa !25
  br label %615

615:                                              ; preds = %600, %597
  store i32 -1, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  br label %616

616:                                              ; preds = %615, %571
  br label %712

617:                                              ; preds = %562
  %618 = call zeroext i1 @IsMouseButtonDown(i32 noundef 0)
  br i1 %618, label %619, label %711

619:                                              ; preds = %617
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #9
  %620 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  %621 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 1), align 4, !tbaa !28
  %622 = sub nsw i32 %620, %621
  store i32 %622, ptr %33, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %34) #9
  store i8 0, ptr %34, align 1, !tbaa !11
  %623 = load <2 x float>, ptr %20, align 4
  %624 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 0
  %625 = load <2 x float>, ptr %624, align 4
  %626 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 1
  %627 = load <2 x float>, ptr %626, align 4
  %628 = call zeroext i1 @CheckCollisionPointRec(<2 x float> %623, <2 x float> %625, <2 x float> %627)
  br i1 %628, label %629, label %642

629:                                              ; preds = %619
  %630 = load ptr, ptr %7, align 8, !tbaa !5
  %631 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 2), align 4, !tbaa !29
  %632 = sext i32 %631 to i64
  %633 = getelementptr inbounds i8, ptr %630, i64 %632
  %634 = load i32, ptr %12, align 4, !tbaa !9
  %635 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 2), align 4, !tbaa !29
  %636 = sub nsw i32 %634, %635
  %637 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 0
  %638 = load <2 x float>, ptr %637, align 4
  %639 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 1
  %640 = load <2 x float>, ptr %639, align 4
  %641 = call i32 @GuiTextBoxGetCursorFromMouse(ptr noundef %633, i32 noundef %636, <2 x float> %638, <2 x float> %640, ptr noundef %33)
  br label %666

642:                                              ; preds = %619
  store i8 1, ptr %34, align 1, !tbaa !11
  %643 = getelementptr inbounds %struct.Vector2, ptr %20, i32 0, i32 0
  %644 = load float, ptr %643, align 4, !tbaa !20
  %645 = getelementptr inbounds %struct.Rectangle, ptr %6, i32 0, i32 0
  %646 = load float, ptr %645, align 4, !tbaa !18
  %647 = getelementptr inbounds %struct.Rectangle, ptr %6, i32 0, i32 2
  %648 = load float, ptr %647, align 4, !tbaa !14
  %649 = fdiv float %648, 2.000000e+00
  %650 = fadd float %646, %649
  %651 = fcmp ogt float %644, %650
  br i1 %651, label %652, label %665

652:                                              ; preds = %642
  %653 = load ptr, ptr %7, align 8, !tbaa !5
  %654 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 2), align 4, !tbaa !29
  %655 = sext i32 %654 to i64
  %656 = getelementptr inbounds i8, ptr %653, i64 %655
  %657 = load i32, ptr %12, align 4, !tbaa !9
  %658 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 2), align 4, !tbaa !29
  %659 = sub nsw i32 %657, %658
  %660 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 0
  %661 = load <2 x float>, ptr %660, align 4
  %662 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 1
  %663 = load <2 x float>, ptr %662, align 4
  %664 = call i32 @GuiTextBoxMaxCharacters(ptr noundef %656, i32 noundef %659, <2 x float> %661, <2 x float> %663)
  store i32 %664, ptr %33, align 4, !tbaa !9
  br label %665

665:                                              ; preds = %652, %642
  br label %666

666:                                              ; preds = %665, %629
  %667 = load i32, ptr %33, align 4, !tbaa !9
  %668 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 1), align 4, !tbaa !28
  %669 = add nsw i32 %667, %668
  store i32 %669, ptr @guiTextBoxState, align 4, !tbaa !25
  %670 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  %671 = icmp eq i32 %670, -1
  br i1 %671, label %672, label %674

672:                                              ; preds = %666
  %673 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  store i32 %673, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  br label %674

674:                                              ; preds = %672, %666
  %675 = load i32, ptr @GuiTextBoxEx.framesCounter, align 4, !tbaa !9
  %676 = srem i32 %675, 5
  %677 = icmp eq i32 %676, 0
  br i1 %677, label %678, label %710

678:                                              ; preds = %674
  %679 = load i8, ptr %34, align 1, !tbaa !11, !range !23, !noundef !24
  %680 = trunc i8 %679 to i1
  br i1 %680, label %681, label %710

681:                                              ; preds = %678
  %682 = load i32, ptr %33, align 4, !tbaa !9
  %683 = icmp eq i32 %682, 0
  br i1 %683, label %684, label %686

684:                                              ; preds = %681
  %685 = load ptr, ptr %7, align 8, !tbaa !5
  call void @MoveTextBoxCursorLeft(ptr noundef %685)
  br label %709

686:                                              ; preds = %681
  %687 = load i32, ptr %33, align 4, !tbaa !9
  %688 = load ptr, ptr %7, align 8, !tbaa !5
  %689 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 2), align 4, !tbaa !29
  %690 = sext i32 %689 to i64
  %691 = getelementptr inbounds i8, ptr %688, i64 %690
  %692 = load i32, ptr %12, align 4, !tbaa !9
  %693 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 2), align 4, !tbaa !29
  %694 = sub nsw i32 %692, %693
  %695 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 0
  %696 = load <2 x float>, ptr %695, align 4
  %697 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 1
  %698 = load <2 x float>, ptr %697, align 4
  %699 = call i32 @GuiTextBoxMaxCharacters(ptr noundef %691, i32 noundef %694, <2 x float> %696, <2 x float> %698)
  %700 = icmp eq i32 %687, %699
  br i1 %700, label %701, label %708

701:                                              ; preds = %686
  %702 = load ptr, ptr %7, align 8, !tbaa !5
  %703 = load i32, ptr %12, align 4, !tbaa !9
  %704 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 0
  %705 = load <2 x float>, ptr %704, align 4
  %706 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 1
  %707 = load <2 x float>, ptr %706, align 4
  call void @MoveTextBoxCursorRight(ptr noundef %702, i32 noundef %703, <2 x float> %705, <2 x float> %707)
  br label %708

708:                                              ; preds = %701, %686
  br label %709

709:                                              ; preds = %708, %684
  br label %710

710:                                              ; preds = %709, %678, %674
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  br label %711

711:                                              ; preds = %710, %617
  br label %712

712:                                              ; preds = %711, %616
  br label %713

713:                                              ; preds = %712, %555
  %714 = load ptr, ptr %7, align 8, !tbaa !5
  %715 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 2), align 4, !tbaa !29
  %716 = sext i32 %715 to i64
  %717 = getelementptr inbounds i8, ptr %714, i64 %716
  %718 = load i32, ptr %12, align 4, !tbaa !9
  %719 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 2), align 4, !tbaa !29
  %720 = sub nsw i32 %718, %719
  %721 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  %722 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 1), align 4, !tbaa !28
  %723 = sub nsw i32 %721, %722
  %724 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 0
  %725 = load <2 x float>, ptr %724, align 4
  %726 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 1
  %727 = load <2 x float>, ptr %726, align 4
  %728 = call i32 @GuiTextBoxGetCursorCoordinates(ptr noundef %717, i32 noundef %720, <2 x float> %725, <2 x float> %727, i32 noundef %723)
  %729 = sitofp i32 %728 to float
  %730 = getelementptr inbounds %struct.Vector2, ptr %15, i32 0, i32 0
  store float %729, ptr %730, align 4, !tbaa !20
  %731 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 2), align 4, !tbaa !29
  store i32 %731, ptr %19, align 4, !tbaa !9
  %732 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  %733 = icmp eq i32 %732, -1
  br i1 %733, label %734, label %736

734:                                              ; preds = %713
  %735 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  store i32 %735, ptr %17, align 4, !tbaa !9
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %751

736:                                              ; preds = %713
  %737 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  %738 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  %739 = icmp sgt i32 %737, %738
  br i1 %739, label %740, label %745

740:                                              ; preds = %736
  %741 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  store i32 %741, ptr %17, align 4, !tbaa !9
  %742 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  %743 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  %744 = sub nsw i32 %742, %743
  store i32 %744, ptr %18, align 4, !tbaa !9
  br label %750

745:                                              ; preds = %736
  %746 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  store i32 %746, ptr %17, align 4, !tbaa !9
  %747 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  %748 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  %749 = sub nsw i32 %747, %748
  store i32 %749, ptr %18, align 4, !tbaa !9
  br label %750

750:                                              ; preds = %745, %740
  br label %751

751:                                              ; preds = %750, %734
  %752 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 1), align 4, !tbaa !28
  %753 = load i32, ptr %17, align 4, !tbaa !9
  %754 = icmp sgt i32 %752, %753
  br i1 %754, label %755, label %761

755:                                              ; preds = %751
  %756 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 1), align 4, !tbaa !28
  %757 = load i32, ptr %17, align 4, !tbaa !9
  %758 = sub nsw i32 %756, %757
  %759 = load i32, ptr %18, align 4, !tbaa !9
  %760 = sub nsw i32 %759, %758
  store i32 %760, ptr %18, align 4, !tbaa !9
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %765

761:                                              ; preds = %751
  %762 = load i32, ptr %17, align 4, !tbaa !9
  %763 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 1), align 4, !tbaa !28
  %764 = sub nsw i32 %762, %763
  store i32 %764, ptr %17, align 4, !tbaa !9
  br label %765

765:                                              ; preds = %761, %755
  br label %767

766:                                              ; preds = %195
  store i32 1, ptr %10, align 4, !tbaa !9
  br label %767

767:                                              ; preds = %766, %765
  %768 = call zeroext i1 @IsKeyPressed(i32 noundef 257)
  br i1 %768, label %778, label %769

769:                                              ; preds = %767
  %770 = load <2 x float>, ptr %20, align 4
  %771 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %6, i32 0, i32 0
  %772 = load <2 x float>, ptr %771, align 4
  %773 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %6, i32 0, i32 1
  %774 = load <2 x float>, ptr %773, align 4
  %775 = call zeroext i1 @CheckCollisionPointRec(<2 x float> %770, <2 x float> %772, <2 x float> %774)
  br i1 %775, label %779, label %776

776:                                              ; preds = %769
  %777 = call zeroext i1 @IsMouseButtonPressed(i32 noundef 0)
  br i1 %777, label %778, label %779

778:                                              ; preds = %776, %767
  store i8 1, ptr %11, align 1, !tbaa !11
  br label %779

779:                                              ; preds = %778, %776, %769
  br label %816

780:                                              ; preds = %152
  %781 = load i8, ptr %16, align 1, !tbaa !11, !range !23, !noundef !24
  %782 = trunc i8 %781 to i1
  br i1 %782, label %783, label %804

783:                                              ; preds = %780
  %784 = call zeroext i1 @IsKeyDown(i32 noundef 341)
  br i1 %784, label %785, label %804

785:                                              ; preds = %783
  %786 = call zeroext i1 @IsKeyPressed(i32 noundef 67)
  br i1 %786, label %787, label %804

787:                                              ; preds = %785
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #9
  %788 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  store i32 %788, ptr %35, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #9
  %789 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  store i32 %789, ptr %36, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #9
  %790 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 1), align 4, !tbaa !28
  store i32 %790, ptr %37, align 4, !tbaa !9
  %791 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  %792 = icmp eq i32 %791, -1
  br i1 %792, label %797, label %793

793:                                              ; preds = %787
  %794 = load i32, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  %795 = load i32, ptr @guiTextBoxState, align 4, !tbaa !25
  %796 = icmp eq i32 %794, %795
  br i1 %796, label %797, label %799

797:                                              ; preds = %793, %787
  %798 = load ptr, ptr %7, align 8, !tbaa !5
  call void @GuiTextBoxSelectAll(ptr noundef %798)
  br label %799

799:                                              ; preds = %797, %793
  %800 = load ptr, ptr %7, align 8, !tbaa !5
  call void @GuiTextBoxCopy(ptr noundef %800)
  %801 = load i32, ptr %35, align 4, !tbaa !9
  store i32 %801, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 3), align 4, !tbaa !27
  %802 = load i32, ptr %36, align 4, !tbaa !9
  store i32 %802, ptr @guiTextBoxState, align 4, !tbaa !25
  %803 = load i32, ptr %37, align 4, !tbaa !9
  store i32 %803, ptr getelementptr inbounds (%struct.GuiTextBoxState, ptr @guiTextBoxState, i32 0, i32 1), align 4, !tbaa !28
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #9
  br label %804

804:                                              ; preds = %799, %785, %783, %780
  %805 = load <2 x float>, ptr %20, align 4
  %806 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %6, i32 0, i32 0
  %807 = load <2 x float>, ptr %806, align 4
  %808 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %6, i32 0, i32 1
  %809 = load <2 x float>, ptr %808, align 4
  %810 = call zeroext i1 @CheckCollisionPointRec(<2 x float> %805, <2 x float> %807, <2 x float> %809)
  br i1 %810, label %811, label %815

811:                                              ; preds = %804
  store i32 1, ptr %10, align 4, !tbaa !9
  %812 = call zeroext i1 @IsMouseButtonPressed(i32 noundef 0)
  br i1 %812, label %813, label %814

813:                                              ; preds = %811
  store i8 1, ptr %11, align 1, !tbaa !11
  br label %814

814:                                              ; preds = %813, %811
  br label %815

815:                                              ; preds = %814, %804
  br label %816

816:                                              ; preds = %815, %779
  %817 = load i8, ptr %11, align 1, !tbaa !11, !range !23, !noundef !24
  %818 = trunc i8 %817 to i1
  br i1 %818, label %819, label %820

819:                                              ; preds = %816
  store i32 0, ptr @GuiTextBoxEx.framesCounter, align 4, !tbaa !9
  br label %820

820:                                              ; preds = %819, %816
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #9
  br label %821

821:                                              ; preds = %820, %149, %104
  %822 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %823 = load i32, ptr %10, align 4, !tbaa !9
  %824 = mul i32 %823, 3
  %825 = add i32 0, %824
  %826 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef %825)
  %827 = call i32 @GetColor(i32 noundef %826)
  store i32 %827, ptr %39, align 1
  %828 = load float, ptr @guiAlpha, align 4, !tbaa !30
  %829 = load i32, ptr %39, align 1
  %830 = call i32 @Fade(i32 %829, float noundef %828)
  store i32 %830, ptr %38, align 1
  %831 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %6, i32 0, i32 0
  %832 = load <2 x float>, ptr %831, align 4
  %833 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %6, i32 0, i32 1
  %834 = load <2 x float>, ptr %833, align 4
  %835 = load i32, ptr %38, align 1
  call void @DrawRectangleLinesEx(<2 x float> %832, <2 x float> %834, i32 noundef %822, i32 %835)
  %836 = load i32, ptr %10, align 4, !tbaa !9
  %837 = icmp eq i32 %836, 2
  br i1 %837, label %838, label %900

838:                                              ; preds = %821
  %839 = getelementptr inbounds %struct.Rectangle, ptr %6, i32 0, i32 0
  %840 = load float, ptr %839, align 4, !tbaa !18
  %841 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %842 = sitofp i32 %841 to float
  %843 = fadd float %840, %842
  %844 = fptosi float %843 to i32
  %845 = getelementptr inbounds %struct.Rectangle, ptr %6, i32 0, i32 1
  %846 = load float, ptr %845, align 4, !tbaa !19
  %847 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %848 = sitofp i32 %847 to float
  %849 = fadd float %846, %848
  %850 = fptosi float %849 to i32
  %851 = getelementptr inbounds %struct.Rectangle, ptr %6, i32 0, i32 2
  %852 = load float, ptr %851, align 4, !tbaa !14
  %853 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %854 = mul nsw i32 2, %853
  %855 = sitofp i32 %854 to float
  %856 = fsub float %852, %855
  %857 = fptosi float %856 to i32
  %858 = getelementptr inbounds %struct.Rectangle, ptr %6, i32 0, i32 3
  %859 = load float, ptr %858, align 4, !tbaa !17
  %860 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %861 = mul nsw i32 2, %860
  %862 = sitofp i32 %861 to float
  %863 = fsub float %859, %862
  %864 = fptosi float %863 to i32
  %865 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 4)
  %866 = call i32 @GetColor(i32 noundef %865)
  store i32 %866, ptr %41, align 1
  %867 = load float, ptr @guiAlpha, align 4, !tbaa !30
  %868 = load i32, ptr %41, align 1
  %869 = call i32 @Fade(i32 %868, float noundef %867)
  store i32 %869, ptr %40, align 1
  %870 = load i32, ptr %40, align 1
  call void @DrawRectangle(i32 noundef %844, i32 noundef %850, i32 noundef %857, i32 noundef %864, i32 %870)
  %871 = load i8, ptr %9, align 1, !tbaa !11, !range !23, !noundef !24
  %872 = trunc i8 %871 to i1
  br i1 %872, label %873, label %899

873:                                              ; preds = %838
  %874 = load i8, ptr %16, align 1, !tbaa !11, !range !23, !noundef !24
  %875 = trunc i8 %874 to i1
  br i1 %875, label %876, label %899

876:                                              ; preds = %873
  %877 = load i32, ptr @GuiTextBoxEx.framesCounter, align 4, !tbaa !9
  %878 = sdiv i32 %877, 20
  %879 = srem i32 %878, 2
  %880 = icmp eq i32 %879, 0
  br i1 %880, label %881, label %899

881:                                              ; preds = %876
  %882 = load i32, ptr %18, align 4, !tbaa !9
  %883 = icmp eq i32 %882, 0
  br i1 %883, label %884, label %899

884:                                              ; preds = %881
  %885 = getelementptr inbounds %struct.Vector2, ptr %15, i32 0, i32 0
  %886 = load float, ptr %885, align 4, !tbaa !20
  %887 = fptosi float %886 to i32
  %888 = getelementptr inbounds %struct.Vector2, ptr %15, i32 0, i32 1
  %889 = load float, ptr %888, align 4, !tbaa !22
  %890 = fptosi float %889 to i32
  %891 = call i32 @GuiGetStyle(i32 noundef 0, i32 noundef 16)
  %892 = mul nsw i32 %891, 2
  %893 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 6)
  %894 = call i32 @GetColor(i32 noundef %893)
  store i32 %894, ptr %43, align 1
  %895 = load float, ptr @guiAlpha, align 4, !tbaa !30
  %896 = load i32, ptr %43, align 1
  %897 = call i32 @Fade(i32 %896, float noundef %895)
  store i32 %897, ptr %42, align 1
  %898 = load i32, ptr %42, align 1
  call void @DrawRectangle(i32 noundef %887, i32 noundef %890, i32 noundef 1, i32 noundef %892, i32 %898)
  br label %899

899:                                              ; preds = %884, %881, %876, %873, %838
  br label %937

900:                                              ; preds = %821
  %901 = load i32, ptr %10, align 4, !tbaa !9
  %902 = icmp eq i32 %901, 3
  br i1 %902, label %903, label %936

903:                                              ; preds = %900
  %904 = getelementptr inbounds %struct.Rectangle, ptr %6, i32 0, i32 0
  %905 = load float, ptr %904, align 4, !tbaa !18
  %906 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %907 = sitofp i32 %906 to float
  %908 = fadd float %905, %907
  %909 = fptosi float %908 to i32
  %910 = getelementptr inbounds %struct.Rectangle, ptr %6, i32 0, i32 1
  %911 = load float, ptr %910, align 4, !tbaa !19
  %912 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %913 = sitofp i32 %912 to float
  %914 = fadd float %911, %913
  %915 = fptosi float %914 to i32
  %916 = getelementptr inbounds %struct.Rectangle, ptr %6, i32 0, i32 2
  %917 = load float, ptr %916, align 4, !tbaa !14
  %918 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %919 = mul nsw i32 2, %918
  %920 = sitofp i32 %919 to float
  %921 = fsub float %917, %920
  %922 = fptosi float %921 to i32
  %923 = getelementptr inbounds %struct.Rectangle, ptr %6, i32 0, i32 3
  %924 = load float, ptr %923, align 4, !tbaa !17
  %925 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %926 = mul nsw i32 2, %925
  %927 = sitofp i32 %926 to float
  %928 = fsub float %924, %927
  %929 = fptosi float %928 to i32
  %930 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 10)
  %931 = call i32 @GetColor(i32 noundef %930)
  store i32 %931, ptr %45, align 1
  %932 = load float, ptr @guiAlpha, align 4, !tbaa !30
  %933 = load i32, ptr %45, align 1
  %934 = call i32 @Fade(i32 %933, float noundef %932)
  store i32 %934, ptr %44, align 1
  %935 = load i32, ptr %44, align 1
  call void @DrawRectangle(i32 noundef %909, i32 noundef %915, i32 noundef %922, i32 noundef %929, i32 %935)
  br label %936

936:                                              ; preds = %903, %900
  br label %937

937:                                              ; preds = %936, %899
  %938 = load ptr, ptr %7, align 8, !tbaa !5
  %939 = load i32, ptr %19, align 4, !tbaa !9
  %940 = sext i32 %939 to i64
  %941 = getelementptr inbounds i8, ptr %938, i64 %940
  %942 = call i32 @GuiGetStyle(i32 noundef 0, i32 noundef 16)
  %943 = sitofp i32 %942 to float
  %944 = call i32 @GuiGetStyle(i32 noundef 0, i32 noundef 17)
  %945 = sitofp i32 %944 to float
  %946 = load i32, ptr %10, align 4, !tbaa !9
  %947 = mul i32 %946, 3
  %948 = add i32 2, %947
  %949 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef %948)
  %950 = call i32 @GetColor(i32 noundef %949)
  store i32 %950, ptr %47, align 1
  %951 = load float, ptr @guiAlpha, align 4, !tbaa !30
  %952 = load i32, ptr %47, align 1
  %953 = call i32 @Fade(i32 %952, float noundef %951)
  store i32 %953, ptr %46, align 1
  %954 = load i32, ptr %17, align 4, !tbaa !9
  %955 = load i32, ptr %18, align 4, !tbaa !9
  %956 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 18)
  %957 = call i32 @GetColor(i32 noundef %956)
  store i32 %957, ptr %48, align 1
  %958 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 19)
  %959 = call i32 @GetColor(i32 noundef %958)
  store i32 %959, ptr %49, align 1
  %960 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 0
  %961 = load <2 x float>, ptr %960, align 4
  %962 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %14, i32 0, i32 1
  %963 = load <2 x float>, ptr %962, align 4
  %964 = load i32, ptr %46, align 1
  %965 = load i32, ptr %48, align 1
  %966 = load i32, ptr %49, align 1
  call void @DrawTextRecEx(ptr noundef byval(%struct.Font) align 8 @guiFont, ptr noundef %941, <2 x float> %961, <2 x float> %963, float noundef %943, float noundef %945, i1 noundef zeroext false, i32 %964, i32 noundef %954, i32 noundef %955, i32 %965, i32 %966)
  %967 = load i8, ptr %11, align 1, !tbaa !11, !range !23, !noundef !24
  %968 = trunc i8 %967 to i1
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #9
  ret i1 %968
}

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @GuiTextBoxMaxCharacters(ptr noundef, i32 noundef, <2 x float>, <2 x float>) #8

; Function Attrs: nounwind uwtable
declare hidden i32 @GuiMeasureTextBoxRev(ptr noundef, i32 noundef, <2 x float>, <2 x float>, ptr noundef) #6

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @MoveTextBoxCursorRight(ptr noundef, i32 noundef, <2 x float>, <2 x float>) #8

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @MoveTextBoxCursorLeft(ptr noundef) #7

declare i32 @GetKeyPressed() #3

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @GuiTextBoxGetCursorFromMouse(ptr noundef, i32 noundef, <2 x float>, <2 x float>, ptr noundef) #8

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @GuiTextBoxGetCursorCoordinates(ptr noundef, i32 noundef, <2 x float>, <2 x float>, i32 noundef) #8

declare void @DrawRectangleLinesEx(<2 x float>, <2 x float>, i32 noundef, i32) #3

declare void @DrawRectangle(i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32) #3

declare void @DrawTextRecEx(ptr noundef byval(%struct.Font) align 8, ptr noundef, <2 x float>, <2 x float>, float noundef, float noundef, i1 noundef zeroext, i32, i32 noundef, i32 noundef, i32, i32) #3

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

!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/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"_Bool", !7, i64 0}
!13 = !{!7, !7, i64 0}
!14 = !{!15, !16, i64 8}
!15 = !{!"Rectangle", !16, i64 0, !16, i64 4, !16, i64 8, !16, i64 12}
!16 = !{!"float", !7, i64 0}
!17 = !{!15, !16, i64 12}
!18 = !{!15, !16, i64 0}
!19 = !{!15, !16, i64 4}
!20 = !{!21, !16, i64 0}
!21 = !{!"Vector2", !16, i64 0, !16, i64 4}
!22 = !{!21, !16, i64 4}
!23 = !{i8 0, i8 2}
!24 = !{}
!25 = !{!26, !10, i64 0}
!26 = !{!"GuiTextBoxState", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12}
!27 = !{!26, !10, i64 12}
!28 = !{!26, !10, i64 4}
!29 = !{!26, !10, i64 8}
!30 = !{!16, !16, i64 0}


; 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.Font = type { i32, i32, i32, %struct.Texture, ptr, ptr }
%struct.Texture = type { i32, i32, i32, i32, i32 }
%struct.GuiTextBoxState = type { i32, i32, i32, i32 }

@guiState = external hidden local_unnamed_addr global i32, align 4
@guiLocked = external hidden local_unnamed_addr global i8, align 1
@guiAlpha = external hidden local_unnamed_addr global float, align 4
@guiFont = external hidden global %struct.Font, align 8
@guiTextBoxState = external hidden global %struct.GuiTextBoxState, align 4
@GuiTextBoxEx.framesCounter = external hidden local_unnamed_addr global i32, align 4

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

; 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 nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @GuiGetStyle(i32 noundef, i32 noundef) local_unnamed_addr #2

declare i32 @Fade(i32, float noundef) local_unnamed_addr #3

declare i32 @GetColor(i32 noundef) local_unnamed_addr #3

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

declare <2 x float> @GetMousePosition() local_unnamed_addr #3

declare zeroext i1 @CheckCollisionPointRec(<2 x float>, <2 x float>, <2 x float>) local_unnamed_addr #3

declare zeroext i1 @IsMouseButtonDown(i32 noundef) local_unnamed_addr #3

declare zeroext i1 @IsKeyDown(i32 noundef) local_unnamed_addr #3

declare zeroext i1 @IsMouseButtonPressed(i32 noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i64 @strlen(ptr nocapture noundef) local_unnamed_addr #5

declare zeroext i1 @IsKeyPressed(i32 noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare dso_local void @GuiTextBoxSetActive(<2 x float>, <2 x float>) local_unnamed_addr #6

; Function Attrs: nounwind uwtable
declare dso_local zeroext i1 @GuiTextBoxIsActive(<2 x float>, <2 x float>) local_unnamed_addr #6

; Function Attrs: nounwind uwtable
declare dso_local i32 @GuiTextBoxGetByteIndex(ptr noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @GuiTextBoxDelete(ptr noundef, i32 noundef, i1 noundef zeroext) local_unnamed_addr #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @GuiCountCodepointsUntilNewline(ptr noundef) local_unnamed_addr #7

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

; Function Attrs: nounwind uwtable
declare dso_local void @GuiTextBoxSelectAll(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @GuiTextBoxCopy(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @GuiTextBoxPaste(ptr noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @GuiTextBoxCut(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local noundef zeroext i1 @GuiTextBoxEx(<2 x float> %0, <2 x float> %1, ptr noundef %2, i32 noundef %3, i1 noundef zeroext %4) local_unnamed_addr #6 {
  %6 = extractelement <2 x float> %0, i64 1
  %7 = extractelement <2 x float> %0, i64 0
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca [5 x i8], align 1
  %11 = alloca i32, align 4
  %12 = load i32, ptr @guiState, align 4, !tbaa !5
  %13 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %2) #9
  %14 = trunc i64 %13 to i32
  %15 = icmp sgt i32 %14, %3
  br i1 %15, label %16, label %19

16:                                               ; preds = %5
  %17 = sext i32 %3 to i64
  %18 = getelementptr inbounds i8, ptr %2, i64 %17
  store i8 0, ptr %18, align 1, !tbaa !9
  br label %19

19:                                               ; preds = %16, %5
  %.0224 = phi i32 [ %3, %16 ], [ %14, %5 ]
  %.sroa.17.8.vec.extract = extractelement <2 x float> %1, i64 0
  %20 = tail call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 16)
  %21 = shl nsw i32 %20, 1
  %22 = sitofp i32 %21 to float
  %23 = fsub float %.sroa.17.8.vec.extract, %22
  %24 = tail call i32 @GuiGetStyle(i32 noundef 0, i32 noundef 16)
  %25 = sitofp i32 %24 to float
  %26 = fcmp olt float %23, %25
  br i1 %26, label %27, label %33

27:                                               ; preds = %19
  %28 = tail call i32 @GuiGetStyle(i32 noundef 0, i32 noundef 16)
  %29 = tail call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 16)
  %30 = shl nsw i32 %29, 1
  %31 = add nsw i32 %30, %28
  %32 = sitofp i32 %31 to float
  %.sroa.17.8.vec.insert = insertelement <2 x float> %1, float %32, i64 0
  br label %33

33:                                               ; preds = %27, %19
  %.sroa.17.0 = phi <2 x float> [ %.sroa.17.8.vec.insert, %27 ], [ %1, %19 ]
  %.sroa.17.12.vec.extract = extractelement <2 x float> %.sroa.17.0, i64 1
  %34 = tail call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %35 = shl nsw i32 %34, 1
  %36 = sitofp i32 %35 to float
  %37 = fsub float %.sroa.17.12.vec.extract, %36
  %38 = tail call i32 @GuiGetStyle(i32 noundef 0, i32 noundef 16)
  %39 = sitofp i32 %38 to float
  %40 = fsub float %37, %39
  %41 = fmul float %40, 5.000000e-01
  %42 = fptosi float %41 to i32
  %43 = icmp slt i32 %42, 0
  br i1 %43, label %44, label %50

44:                                               ; preds = %33
  %45 = tail call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %46 = shl nsw i32 %45, 1
  %47 = tail call i32 @GuiGetStyle(i32 noundef 0, i32 noundef 16)
  %48 = add nsw i32 %46, %47
  %49 = sitofp i32 %48 to float
  %.sroa.17.12.vec.insert = insertelement <2 x float> %.sroa.17.0, float %49, i64 1
  br label %50

50:                                               ; preds = %44, %33
  %.0228 = phi i32 [ 0, %44 ], [ %42, %33 ]
  %.sroa.17.1 = phi <2 x float> [ %.sroa.17.12.vec.insert, %44 ], [ %.sroa.17.0, %33 ]
  %51 = tail call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %52 = sitofp i32 %51 to float
  %53 = tail call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 16)
  %54 = uitofp nneg i32 %.0228 to float
  %55 = tail call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %56 = insertelement <2 x float> poison, float %52, i64 0
  %57 = insertelement <2 x float> %56, float %54, i64 1
  %58 = fadd <2 x float> %57, %0
  %59 = insertelement <2 x i32> poison, i32 %53, i64 0
  %60 = insertelement <2 x i32> %59, i32 %55, i64 1
  %61 = sitofp <2 x i32> %60 to <2 x float>
  %62 = fadd <2 x float> %58, %61
  %.sroa.17.8.vec.extract207 = extractelement <2 x float> %.sroa.17.1, i64 0
  %63 = tail call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 16)
  %64 = tail call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %65 = add nsw i32 %64, %63
  %66 = shl nsw i32 %65, 1
  %67 = sitofp i32 %66 to float
  %68 = fsub float %.sroa.17.8.vec.extract207, %67
  %.sroa.23.8.vec.insert = insertelement <2 x float> poison, float %68, i64 0
  %69 = tail call i32 @GuiGetStyle(i32 noundef 0, i32 noundef 16)
  %70 = sitofp i32 %69 to float
  %.sroa.23.12.vec.insert = insertelement <2 x float> %.sroa.23.8.vec.insert, float %70, i64 1
  %71 = tail call zeroext i1 @GuiTextBoxIsActive(<2 x float> %0, <2 x float> %.sroa.17.1)
  %.not = icmp eq i32 %12, 3
  %72 = extractelement <2 x float> %62, i64 0
  br i1 %.not, label %419, label %73

73:                                               ; preds = %50
  %74 = load i8, ptr @guiLocked, align 1, !tbaa !10, !range !12, !noundef !13
  %75 = trunc nuw i8 %74 to i1
  br i1 %75, label %419, label %76

76:                                               ; preds = %73
  %77 = tail call <2 x float> @GetMousePosition() #10
  br i1 %4, label %78, label %399

78:                                               ; preds = %76
  %79 = tail call zeroext i1 @CheckCollisionPointRec(<2 x float> %77, <2 x float> %0, <2 x float> %.sroa.17.1) #10
  br i1 %71, label %86, label %80

80:                                               ; preds = %78
  br i1 %79, label %81, label %393

81:                                               ; preds = %80
  %82 = tail call zeroext i1 @IsMouseButtonPressed(i32 noundef 0) #10
  br i1 %82, label %85, label %83

83:                                               ; preds = %81
  %84 = tail call zeroext i1 @IsMouseButtonPressed(i32 noundef 1) #10
  br i1 %84, label %85, label %393

85:                                               ; preds = %83, %81
  tail call void @GuiTextBoxSetActive(<2 x float> %0, <2 x float> %.sroa.17.1)
  br label %90

86:                                               ; preds = %78
  br i1 %79, label %90, label %87

87:                                               ; preds = %86
  %88 = tail call zeroext i1 @IsMouseButtonPressed(i32 noundef 1) #10
  br i1 %88, label %89, label %90

89:                                               ; preds = %87
  tail call void @GuiTextBoxSetActive(<2 x float> zeroinitializer, <2 x float> <float -1.000000e+00, float -1.000000e+00>)
  br label %393

90:                                               ; preds = %86, %87, %85
  %91 = load i32, ptr @GuiTextBoxEx.framesCounter, align 4, !tbaa !5
  %92 = add nsw i32 %91, 1
  store i32 %92, ptr @GuiTextBoxEx.framesCounter, align 4, !tbaa !5
  %93 = load i32, ptr @guiTextBoxState, align 4, !tbaa !14
  %94 = icmp sgt i32 %93, %.0224
  br i1 %94, label %95, label %96

95:                                               ; preds = %90
  store i32 -1, ptr @guiTextBoxState, align 4, !tbaa !14
  br label %96

96:                                               ; preds = %95, %90
  %97 = phi i32 [ -1, %95 ], [ %93, %90 ]
  %98 = load i32, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 12), align 4, !tbaa !16
  %99 = icmp sgt i32 %98, %.0224
  br i1 %99, label %100, label %101

100:                                              ; preds = %96
  store i32 -1, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 12), align 4, !tbaa !16
  br label %101

101:                                              ; preds = %100, %96
  %102 = load i32, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 4), align 4, !tbaa !17
  %103 = icmp sgt i32 %102, %.0224
  br i1 %103, label %104, label %105

104:                                              ; preds = %101
  store i32 -1, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 4), align 4, !tbaa !17
  br label %105

105:                                              ; preds = %104, %101
  %106 = phi i32 [ -1, %104 ], [ %102, %101 ]
  %107 = icmp eq i32 %97, -1
  br i1 %107, label %108, label %110

108:                                              ; preds = %105
  %109 = tail call i32 @GuiTextBoxMaxCharacters(ptr noundef %2, i32 noundef %.0224, <2 x float> %62, <2 x float> %.sroa.23.12.vec.insert)
  store i32 %109, ptr @guiTextBoxState, align 4, !tbaa !14
  %.pre = load i32, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 4), align 4, !tbaa !17
  br label %110

110:                                              ; preds = %108, %105
  %111 = phi i32 [ %109, %108 ], [ %97, %105 ]
  %112 = phi i32 [ %.pre, %108 ], [ %106, %105 ]
  %113 = icmp eq i32 %112, -1
  br i1 %113, label %114, label %124

114:                                              ; preds = %110
  %115 = icmp eq i32 %111, 0
  br i1 %115, label %116, label %117

116:                                              ; preds = %114
  store i32 0, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 8), align 4, !tbaa !18
  store i32 0, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 4), align 4, !tbaa !17
  br label %124

117:                                              ; preds = %114
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #10
  store i32 0, ptr %8, align 4, !tbaa !5
  %118 = tail call i32 @GuiTextBoxGetByteIndex(ptr noundef %2, i32 noundef 0, i32 noundef 0, i32 noundef %111)
  %119 = call i32 @GuiMeasureTextBoxRev(ptr noundef %2, i32 noundef %118, <2 x float> %62, <2 x float> %.sroa.23.12.vec.insert, ptr noundef nonnull %8)
  store i32 %119, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 8), align 4, !tbaa !18
  %120 = load i32, ptr @guiTextBoxState, align 4, !tbaa !14
  %121 = load i32, ptr %8, align 4, !tbaa !5
  %122 = add i32 %120, 1
  %123 = sub i32 %122, %121
  store i32 %123, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 4), align 4, !tbaa !17
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #10
  br label %124

124:                                              ; preds = %116, %117, %110
  %125 = call zeroext i1 @IsKeyPressed(i32 noundef 262) #10
  br i1 %125, label %132, label %126

126:                                              ; preds = %124
  %127 = call zeroext i1 @IsKeyDown(i32 noundef 262) #10
  br i1 %127, label %128, label %149

128:                                              ; preds = %126
  %129 = load i32, ptr @GuiTextBoxEx.framesCounter, align 4, !tbaa !5
  %130 = srem i32 %129, 5
  %131 = icmp eq i32 %130, 0
  br i1 %131, label %132, label %149

132:                                              ; preds = %128, %124
  %133 = call zeroext i1 @IsKeyDown(i32 noundef 340) #10
  %134 = load i32, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 12), align 4, !tbaa !16
  %135 = icmp eq i32 %134, -1
  br i1 %133, label %136, label %140

136:                                              ; preds = %132
  br i1 %135, label %137, label %139

137:                                              ; preds = %136
  %138 = load i32, ptr @guiTextBoxState, align 4, !tbaa !14
  store i32 %138, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 12), align 4, !tbaa !16
  br label %139

139:                                              ; preds = %137, %136
  call void @MoveTextBoxCursorRight(ptr noundef %2, i32 noundef %.0224, <2 x float> %62, <2 x float> %.sroa.23.12.vec.insert)
  br label %148

140:                                              ; preds = %132
  br i1 %135, label %.sink.split, label %141

141:                                              ; preds = %140
  %142 = load i32, ptr @guiTextBoxState, align 4, !tbaa !14
  %.not277 = icmp eq i32 %134, %142
  br i1 %.not277, label %.sink.split, label %143

143:                                              ; preds = %141
  %144 = icmp slt i32 %142, %134
  br i1 %144, label %145, label %147

145:                                              ; preds = %143
  %146 = add nsw i32 %134, -1
  store i32 %146, ptr @guiTextBoxState, align 4, !tbaa !14
  br label %.sink.split

.sink.split:                                      ; preds = %140, %141, %145
  call void @MoveTextBoxCursorRight(ptr noundef %2, i32 noundef %.0224, <2 x float> %62, <2 x float> %.sroa.23.12.vec.insert)
  br label %147

147:                                              ; preds = %.sink.split, %143
  store i32 -1, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 12), align 4, !tbaa !16
  br label %148

148:                                              ; preds = %147, %139
  store i32 0, ptr @GuiTextBoxEx.framesCounter, align 4, !tbaa !5
  br label %293

149:                                              ; preds = %128, %126
  %150 = call zeroext i1 @IsKeyPressed(i32 noundef 263) #10
  br i1 %150, label %157, label %151

151:                                              ; preds = %149
  %152 = call zeroext i1 @IsKeyDown(i32 noundef 263) #10
  br i1 %152, label %153, label %178

153:                                              ; preds = %151
  %154 = load i32, ptr @GuiTextBoxEx.framesCounter, align 4, !tbaa !5
  %155 = srem i32 %154, 5
  %156 = icmp eq i32 %155, 0
  br i1 %156, label %157, label %178

157:                                              ; preds = %153, %149
  %158 = call zeroext i1 @IsKeyDown(i32 noundef 340) #10
  %159 = load i32, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 12), align 4, !tbaa !16
  %160 = icmp eq i32 %159, -1
  br i1 %158, label %161, label %165

161:                                              ; preds = %157
  br i1 %160, label %162, label %164

162:                                              ; preds = %161
  %163 = load i32, ptr @guiTextBoxState, align 4, !tbaa !14
  store i32 %163, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 12), align 4, !tbaa !16
  br label %164

164:                                              ; preds = %162, %161
  call void @MoveTextBoxCursorLeft(ptr noundef %2)
  br label %177

165:                                              ; preds = %157
  br i1 %160, label %175, label %166

166:                                              ; preds = %165
  %167 = load i32, ptr @guiTextBoxState, align 4, !tbaa !14
  %.not275 = icmp eq i32 %159, %167
  br i1 %.not275, label %175, label %168

168:                                              ; preds = %166
  %169 = icmp sgt i32 %167, %159
  br i1 %169, label %170, label %176

170:                                              ; preds = %168
  store i32 %159, ptr @guiTextBoxState, align 4, !tbaa !14
  %171 = load i32, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 4), align 4, !tbaa !17
  %172 = icmp sgt i32 %171, %159
  br i1 %172, label %173, label %176

173:                                              ; preds = %170
  store i32 %159, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 4), align 4, !tbaa !17
  %174 = call i32 @GuiTextBoxGetByteIndex(ptr noundef %2, i32 noundef 0, i32 noundef 0, i32 noundef %159)
  store i32 %174, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 8), align 4, !tbaa !18
  br label %176

175:                                              ; preds = %166, %165
  call void @MoveTextBoxCursorLeft(ptr noundef %2)
  br label %176

176:                                              ; preds = %168, %173, %170, %175
  store i32 -1, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 12), align 4, !tbaa !16
  br label %177

177:                                              ; preds = %176, %164
  store i32 0, ptr @GuiTextBoxEx.framesCounter, align 4, !tbaa !5
  br label %293

178:                                              ; preds = %153, %151
  %179 = call zeroext i1 @IsKeyPressed(i32 noundef 259) #10
  br i1 %179, label %186, label %180

180:                                              ; preds = %178
  %181 = call zeroext i1 @IsKeyDown(i32 noundef 259) #10
  br i1 %181, label %182, label %188

182:                                              ; preds = %180
  %183 = load i32, ptr @GuiTextBoxEx.framesCounter, align 4, !tbaa !5
  %184 = srem i32 %183, 5
  %185 = icmp eq i32 %184, 0
  br i1 %185, label %186, label %188

186:                                              ; preds = %182, %178
  %187 = call i32 @GuiTextBoxDelete(ptr noundef %2, i32 noundef %.0224, i1 noundef zeroext true)
  br label %293

188:                                              ; preds = %182, %180
  %189 = call zeroext i1 @IsKeyPressed(i32 noundef 261) #10
  br i1 %189, label %196, label %190

190:                                              ; preds = %188
  %191 = call zeroext i1 @IsKeyDown(i32 noundef 261) #10
  br i1 %191, label %192, label %198

192:                                              ; preds = %190
  %193 = load i32, ptr @GuiTextBoxEx.framesCounter, align 4, !tbaa !5
  %194 = srem i32 %193, 5
  %195 = icmp eq i32 %194, 0
  br i1 %195, label %196, label %198

196:                                              ; preds = %192, %188
  %197 = call i32 @GuiTextBoxDelete(ptr noundef %2, i32 noundef %.0224, i1 noundef zeroext false)
  br label %293

198:                                              ; preds = %192, %190
  %199 = call zeroext i1 @IsKeyPressed(i32 noundef 268) #10
  br i1 %199, label %200, label %210

200:                                              ; preds = %198
  %201 = call zeroext i1 @IsKeyDown(i32 noundef 340) #10
  br i1 %201, label %202, label %.sink.split320

202:                                              ; preds = %200
  %203 = load i32, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 12), align 4, !tbaa !16
  %204 = load i32, ptr @guiTextBoxState, align 4
  %205 = icmp sgt i32 %203, %204
  br i1 %205, label %.sink.split320, label %206

206:                                              ; preds = %202
  %207 = icmp eq i32 %203, -1
  %208 = icmp ne i32 %204, 0
  %or.cond = and i1 %207, %208
  br i1 %or.cond, label %.sink.split320, label %209

.sink.split320:                                   ; preds = %200, %202, %206
  %.sink = phi i32 [ %204, %206 ], [ %204, %202 ], [ -1, %200 ]
  store i32 %.sink, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 12), align 4, !tbaa !16
  br label %209

209:                                              ; preds = %.sink.split320, %206
  store i32 0, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 8), align 4, !tbaa !18
  store i32 0, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 4), align 4, !tbaa !17
  store i32 0, ptr @guiTextBoxState, align 4, !tbaa !14
  store i32 0, ptr @GuiTextBoxEx.framesCounter, align 4, !tbaa !5
  br label %293

210:                                              ; preds = %198
  %211 = call zeroext i1 @IsKeyPressed(i32 noundef 269) #10
  br i1 %211, label %212, label %226

212:                                              ; preds = %210
  %213 = call i32 @GuiCountCodepointsUntilNewline(ptr noundef %2)
  %214 = call zeroext i1 @IsKeyDown(i32 noundef 340) #10
  br i1 %214, label %215, label %.sink.split321

215:                                              ; preds = %212
  %216 = load i32, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 12), align 4, !tbaa !16
  %217 = icmp ne i32 %216, -1
  %218 = load i32, ptr @guiTextBoxState, align 4
  %.not273 = icmp eq i32 %218, %213
  %or.cond323 = select i1 %217, i1 true, i1 %.not273
  br i1 %or.cond323, label %219, label %.sink.split321

.sink.split321:                                   ; preds = %215, %212
  %.sink322 = phi i32 [ -1, %212 ], [ %218, %215 ]
  store i32 %.sink322, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 12), align 4, !tbaa !16
  br label %219

219:                                              ; preds = %.sink.split321, %215
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #10
  store i32 0, ptr %9, align 4, !tbaa !5
  store i32 %213, ptr @guiTextBoxState, align 4, !tbaa !14
  %220 = call i32 @GuiTextBoxGetByteIndex(ptr noundef %2, i32 noundef 0, i32 noundef 0, i32 noundef %213)
  %221 = call i32 @GuiMeasureTextBoxRev(ptr noundef %2, i32 noundef %220, <2 x float> %62, <2 x float> %.sroa.23.12.vec.insert, ptr noundef nonnull %9)
  store i32 %221, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 8), align 4, !tbaa !18
  %222 = load i32, ptr @guiTextBoxState, align 4, !tbaa !14
  %223 = load i32, ptr %9, align 4, !tbaa !5
  %224 = add i32 %222, 1
  %225 = sub i32 %224, %223
  store i32 %225, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 4), align 4, !tbaa !17
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #10
  br label %293

226:                                              ; preds = %210
  %227 = call zeroext i1 @IsKeyDown(i32 noundef 341) #10
  br i1 %227, label %228, label %231

228:                                              ; preds = %226
  %229 = call zeroext i1 @IsKeyPressed(i32 noundef 65) #10
  br i1 %229, label %230, label %231

230:                                              ; preds = %228
  call void @GuiTextBoxSelectAll(ptr noundef %2)
  br label %293

231:                                              ; preds = %228, %226
  %232 = call zeroext i1 @IsKeyDown(i32 noundef 341) #10
  br i1 %232, label %233, label %236

233:                                              ; preds = %231
  %234 = call zeroext i1 @IsKeyPressed(i32 noundef 67) #10
  br i1 %234, label %235, label %236

235:                                              ; preds = %233
  call void @GuiTextBoxCopy(ptr noundef %2)
  br label %293

236:                                              ; preds = %233, %231
  %237 = call zeroext i1 @IsKeyDown(i32 noundef 341) #10
  br i1 %237, label %238, label %241

238:                                              ; preds = %236
  %239 = call zeroext i1 @IsKeyPressed(i32 noundef 88) #10
  br i1 %239, label %240, label %241

240:                                              ; preds = %238
  call void @GuiTextBoxCut(ptr noundef %2)
  br label %293

241:                                              ; preds = %238, %236
  %242 = call zeroext i1 @IsKeyDown(i32 noundef 341) #10
  br i1 %242, label %243, label %246

243:                                              ; preds = %241
  %244 = call zeroext i1 @IsKeyPressed(i32 noundef 86) #10
  br i1 %244, label %245, label %246

245:                                              ; preds = %243
  call void @GuiTextBoxPaste(ptr noundef %2, i32 noundef %3)
  br label %293

246:                                              ; preds = %243, %241
  %247 = call zeroext i1 @IsKeyPressed(i32 noundef 257) #10
  br i1 %247, label %293, label %248

248:                                              ; preds = %246
  %249 = call i32 @GetKeyPressed() #10
  %250 = icmp sgt i32 %249, 31
  br i1 %250, label %251, label %293

251:                                              ; preds = %248
  %252 = load i32, ptr @guiTextBoxState, align 4, !tbaa !14
  %253 = add nsw i32 %252, 1
  %254 = icmp slt i32 %253, %3
  br i1 %254, label %255, label %293

255:                                              ; preds = %251
  %256 = load i32, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 12), align 4, !tbaa !16
  %.not268 = icmp eq i32 %256, -1
  %.not269 = icmp eq i32 %256, %252
  %or.cond278 = or i1 %.not268, %.not269
  br i1 %or.cond278, label %259, label %257

257:                                              ; preds = %255
  %258 = call i32 @GuiTextBoxDelete(ptr noundef %2, i32 noundef %.0224, i1 noundef zeroext true)
  br label %259

259:                                              ; preds = %257, %255
  call void @llvm.lifetime.start.p0(i64 5, ptr nonnull %10) #10
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(5) %10, i8 0, i64 5, i1 false)
  %260 = call i32 @EncodeCodepoint(i32 noundef %249, ptr noundef nonnull %10)
  %.not270 = icmp eq i32 %260, 0
  br i1 %.not270, label %292, label %261

261:                                              ; preds = %259
  %262 = load i32, ptr @guiTextBoxState, align 4, !tbaa !14
  %263 = call i32 @GuiTextBoxGetByteIndex(ptr noundef %2, i32 noundef 0, i32 noundef 0, i32 noundef %262)
  %264 = add nsw i32 %263, %260
  %.not271 = icmp sle i32 %264, %3
  %265 = add nsw i32 %3, -1
  %266 = icmp slt i32 %.0224, %265
  %or.cond280 = select i1 %.not271, i1 %266, i1 false
  br i1 %or.cond280, label %267, label %292

267:                                              ; preds = %261
  %268 = load i32, ptr @guiTextBoxState, align 4, !tbaa !14
  %269 = add nsw i32 %268, 1
  store i32 %269, ptr @guiTextBoxState, align 4, !tbaa !14
  store i32 -1, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 12), align 4, !tbaa !16
  %270 = sext i32 %264 to i64
  %271 = getelementptr inbounds i8, ptr %2, i64 %270
  %272 = sext i32 %263 to i64
  %273 = getelementptr inbounds i8, ptr %2, i64 %272
  %274 = sub nsw i32 %.0224, %263
  %275 = sext i32 %274 to i64
  call void @llvm.memmove.p0.p0.i64(ptr align 1 %271, ptr align 1 %273, i64 %275, i1 false)
  %276 = sext i32 %260 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %273, ptr nonnull align 1 %10, i64 %276, i1 false)
  %277 = add nsw i32 %260, %.0224
  %278 = sext i32 %277 to i64
  %279 = getelementptr inbounds i8, ptr %2, i64 %278
  store i8 0, ptr %279, align 1, !tbaa !9
  %280 = load i32, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 4), align 4, !tbaa !17
  %.not272 = icmp eq i32 %280, -1
  br i1 %.not272, label %292, label %281

281:                                              ; preds = %267
  %282 = load i32, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 8), align 4, !tbaa !18
  %283 = sext i32 %282 to i64
  %284 = getelementptr inbounds i8, ptr %2, i64 %283
  %285 = sub nsw i32 %277, %282
  %286 = call i32 @GuiTextBoxMaxCharacters(ptr noundef %284, i32 noundef %285, <2 x float> %62, <2 x float> %.sroa.23.12.vec.insert)
  %287 = load i32, ptr @guiTextBoxState, align 4, !tbaa !14
  %288 = load i32, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 4), align 4, !tbaa !17
  %289 = sub nsw i32 %287, %288
  %290 = icmp sgt i32 %289, %286
  br i1 %290, label %291, label %292

291:                                              ; preds = %281
  store i32 -1, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 4), align 4, !tbaa !17
  br label %292

292:                                              ; preds = %261, %267, %291, %281, %259
  %.2226 = phi i32 [ %.0224, %259 ], [ %277, %267 ], [ %.0224, %261 ], [ %277, %291 ], [ %277, %281 ]
  call void @llvm.lifetime.end.p0(i64 5, ptr nonnull %10) #10
  br label %293

293:                                              ; preds = %248, %251, %292, %246, %177, %196, %219, %235, %245, %240, %230, %209, %186, %148
  %.4 = phi i32 [ %.0224, %148 ], [ %.0224, %177 ], [ %.0224, %186 ], [ %.0224, %196 ], [ %.0224, %209 ], [ %.0224, %219 ], [ %.0224, %230 ], [ %.0224, %235 ], [ %.0224, %240 ], [ %.0224, %245 ], [ %.0224, %246 ], [ %.2226, %292 ], [ %.0224, %251 ], [ %.0224, %248 ]
  %.0221 = phi i1 [ false, %148 ], [ false, %177 ], [ false, %186 ], [ false, %196 ], [ false, %209 ], [ false, %219 ], [ false, %230 ], [ false, %235 ], [ false, %240 ], [ false, %245 ], [ true, %246 ], [ false, %292 ], [ false, %251 ], [ false, %248 ]
  %294 = call zeroext i1 @CheckCollisionPointRec(<2 x float> %77, <2 x float> %0, <2 x float> %.sroa.17.1) #10
  br i1 %294, label %295, label %366

295:                                              ; preds = %293
  %296 = call zeroext i1 @IsMouseButtonPressed(i32 noundef 0) #10
  br i1 %296, label %297, label %321

297:                                              ; preds = %295
  %298 = call zeroext i1 @CheckCollisionPointRec(<2 x float> %77, <2 x float> %62, <2 x float> %.sroa.23.12.vec.insert) #10
  br i1 %298, label %299, label %308

299:                                              ; preds = %297
  %300 = load i32, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 8), align 4, !tbaa !18
  %301 = sext i32 %300 to i64
  %302 = getelementptr inbounds i8, ptr %2, i64 %301
  %303 = sub nsw i32 %.4, %300
  %304 = call i32 @GuiTextBoxGetCursorFromMouse(ptr noundef %302, i32 noundef %303, <2 x float> %62, <2 x float> %.sroa.23.12.vec.insert, ptr noundef nonnull @guiTextBoxState)
  %305 = load i32, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 4), align 4, !tbaa !17
  %306 = load i32, ptr @guiTextBoxState, align 4, !tbaa !14
  %307 = add nsw i32 %306, %305
  store i32 %307, ptr @guiTextBoxState, align 4, !tbaa !14
  store i32 -1, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 12), align 4, !tbaa !16
  br label %366

308:                                              ; preds = %297
  %.sroa.038.0.vec.extract = extractelement <2 x float> %77, i64 0
  %309 = fmul float %.sroa.17.8.vec.extract207, 5.000000e-01
  %310 = fadd float %7, %309
  %311 = fcmp ugt float %.sroa.038.0.vec.extract, %310
  %312 = load i32, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 4), align 4, !tbaa !17
  br i1 %311, label %313, label %320

313:                                              ; preds = %308
  %314 = load i32, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 8), align 4, !tbaa !18
  %315 = sext i32 %314 to i64
  %316 = getelementptr inbounds i8, ptr %2, i64 %315
  %317 = sub nsw i32 %.4, %314
  %318 = call i32 @GuiTextBoxMaxCharacters(ptr noundef %316, i32 noundef %317, <2 x float> %62, <2 x float> %.sroa.23.12.vec.insert)
  %319 = add nsw i32 %318, %312
  br label %320

320:                                              ; preds = %308, %313
  %storemerge = phi i32 [ %319, %313 ], [ %312, %308 ]
  store i32 %storemerge, ptr @guiTextBoxState, align 4, !tbaa !14
  store i32 -1, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 12), align 4, !tbaa !16
  br label %366

321:                                              ; preds = %295
  %322 = call zeroext i1 @IsMouseButtonDown(i32 noundef 0) #10
  br i1 %322, label %323, label %366

323:                                              ; preds = %321
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #10
  %324 = load i32, ptr @guiTextBoxState, align 4, !tbaa !14
  %325 = load i32, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 4), align 4, !tbaa !17
  %326 = sub nsw i32 %324, %325
  store i32 %326, ptr %11, align 4, !tbaa !5
  %327 = call zeroext i1 @CheckCollisionPointRec(<2 x float> %77, <2 x float> %62, <2 x float> %.sroa.23.12.vec.insert) #10
  br i1 %327, label %328, label %334

328:                                              ; preds = %323
  %329 = load i32, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 8), align 4, !tbaa !18
  %330 = sext i32 %329 to i64
  %331 = getelementptr inbounds i8, ptr %2, i64 %330
  %332 = sub nsw i32 %.4, %329
  %333 = call i32 @GuiTextBoxGetCursorFromMouse(ptr noundef %331, i32 noundef %332, <2 x float> %62, <2 x float> %.sroa.23.12.vec.insert, ptr noundef nonnull %11)
  %.pr.pre = load i32, ptr %11, align 4, !tbaa !5
  br label %thread-pre-split

334:                                              ; preds = %323
  %.sroa.038.0.vec.extract47 = extractelement <2 x float> %77, i64 0
  %335 = fmul float %.sroa.17.8.vec.extract207, 5.000000e-01
  %336 = fadd float %7, %335
  %337 = fcmp ogt float %.sroa.038.0.vec.extract47, %336
  br i1 %337, label %338, label %thread-pre-split

338:                                              ; preds = %334
  %339 = load i32, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 8), align 4, !tbaa !18
  %340 = sext i32 %339 to i64
  %341 = getelementptr inbounds i8, ptr %2, i64 %340
  %342 = sub nsw i32 %.4, %339
  %343 = call i32 @GuiTextBoxMaxCharacters(ptr noundef %341, i32 noundef %342, <2 x float> %62, <2 x float> %.sroa.23.12.vec.insert)
  store i32 %343, ptr %11, align 4, !tbaa !5
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %334, %328, %338
  %344 = phi i32 [ %343, %338 ], [ %.pr.pre, %328 ], [ %326, %334 ]
  %345 = load i32, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 4), align 4, !tbaa !17
  %346 = add nsw i32 %345, %344
  store i32 %346, ptr @guiTextBoxState, align 4, !tbaa !14
  %347 = load i32, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 12), align 4, !tbaa !16
  %348 = icmp eq i32 %347, -1
  br i1 %348, label %349, label %350

349:                                              ; preds = %thread-pre-split
  store i32 %346, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 12), align 4, !tbaa !16
  br label %350

350:                                              ; preds = %349, %thread-pre-split
  %351 = load i32, ptr @GuiTextBoxEx.framesCounter, align 4, !tbaa !5
  %352 = srem i32 %351, 5
  %353 = icmp ne i32 %352, 0
  %brmerge = or i1 %327, %353
  br i1 %brmerge, label %365, label %354

354:                                              ; preds = %350
  %355 = icmp eq i32 %344, 0
  br i1 %355, label %356, label %357

356:                                              ; preds = %354
  call void @MoveTextBoxCursorLeft(ptr noundef %2)
  br label %365

357:                                              ; preds = %354
  %358 = load i32, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 8), align 4, !tbaa !18
  %359 = sext i32 %358 to i64
  %360 = getelementptr inbounds i8, ptr %2, i64 %359
  %361 = sub nsw i32 %.4, %358
  %362 = call i32 @GuiTextBoxMaxCharacters(ptr noundef %360, i32 noundef %361, <2 x float> %62, <2 x float> %.sroa.23.12.vec.insert)
  %363 = icmp eq i32 %344, %362
  br i1 %363, label %364, label %365

364:                                              ; preds = %357
  call void @MoveTextBoxCursorRight(ptr noundef %2, i32 noundef %.4, <2 x float> %62, <2 x float> %.sroa.23.12.vec.insert)
  br label %365

365:                                              ; preds = %350, %356, %364, %357
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #10
  br label %366

366:                                              ; preds = %320, %299, %365, %321, %293
  %367 = load i32, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 8), align 4, !tbaa !18
  %368 = sext i32 %367 to i64
  %369 = getelementptr inbounds i8, ptr %2, i64 %368
  %370 = sub nsw i32 %.4, %367
  %371 = load i32, ptr @guiTextBoxState, align 4, !tbaa !14
  %372 = load i32, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 4), align 4, !tbaa !17
  %373 = sub nsw i32 %371, %372
  %374 = call i32 @GuiTextBoxGetCursorCoordinates(ptr noundef %369, i32 noundef %370, <2 x float> %62, <2 x float> %.sroa.23.12.vec.insert, i32 noundef %373)
  %375 = sitofp i32 %374 to float
  %376 = load i32, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 8), align 4, !tbaa !18
  %377 = load i32, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 12), align 4, !tbaa !16
  %378 = icmp eq i32 %377, -1
  %379 = load i32, ptr @guiTextBoxState, align 4, !tbaa !14
  br i1 %378, label %386, label %380

380:                                              ; preds = %366
  %381 = icmp sgt i32 %379, %377
  br i1 %381, label %382, label %384

382:                                              ; preds = %380
  %383 = sub nsw i32 %379, %377
  br label %386

384:                                              ; preds = %380
  %385 = sub nsw i32 %377, %379
  br label %386

386:                                              ; preds = %366, %382, %384
  %.0236 = phi i32 [ %383, %382 ], [ %385, %384 ], [ 0, %366 ]
  %.0232 = phi i32 [ %377, %382 ], [ %379, %384 ], [ %379, %366 ]
  %387 = load i32, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 4), align 4, !tbaa !17
  %388 = icmp sgt i32 %387, %.0232
  br i1 %388, label %389, label %391

389:                                              ; preds = %386
  %.neg = add i32 %.0232, %.0236
  %390 = sub i32 %.neg, %387
  br label %393

391:                                              ; preds = %386
  %392 = sub nsw i32 %.0232, %387
  br label %393

393:                                              ; preds = %83, %80, %89, %389, %391
  %.0229286 = phi i1 [ true, %389 ], [ true, %391 ], [ false, %89 ], [ false, %83 ], [ false, %80 ]
  %.0240 = phi i32 [ %376, %389 ], [ %376, %391 ], [ 0, %89 ], [ 0, %83 ], [ 0, %80 ]
  %.1237 = phi i32 [ %390, %389 ], [ %.0236, %391 ], [ 0, %89 ], [ 0, %83 ], [ 0, %80 ]
  %.1233 = phi i32 [ 0, %389 ], [ %392, %391 ], [ 0, %89 ], [ 0, %83 ], [ 0, %80 ]
  %.sroa.060.0 = phi float [ %375, %389 ], [ %375, %391 ], [ %72, %89 ], [ %72, %83 ], [ %72, %80 ]
  %.1222 = phi i1 [ %.0221, %389 ], [ %.0221, %391 ], [ false, %89 ], [ false, %83 ], [ false, %80 ]
  %.0 = phi i32 [ 2, %389 ], [ 2, %391 ], [ 1, %89 ], [ 1, %83 ], [ 1, %80 ]
  %394 = call zeroext i1 @IsKeyPressed(i32 noundef 257) #10
  br i1 %394, label %.thread288, label %395

395:                                              ; preds = %393
  %396 = call zeroext i1 @CheckCollisionPointRec(<2 x float> %77, <2 x float> %0, <2 x float> %.sroa.17.1) #10
  br i1 %396, label %416, label %397

397:                                              ; preds = %395
  %398 = call zeroext i1 @IsMouseButtonPressed(i32 noundef 0) #10
  br i1 %398, label %.thread288, label %416

399:                                              ; preds = %76
  br i1 %71, label %400, label %412

400:                                              ; preds = %399
  %401 = tail call zeroext i1 @IsKeyDown(i32 noundef 341) #10
  br i1 %401, label %402, label %412

402:                                              ; preds = %400
  %403 = tail call zeroext i1 @IsKeyPressed(i32 noundef 67) #10
  br i1 %403, label %404, label %412

404:                                              ; preds = %402
  %405 = load i32, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 12), align 4, !tbaa !16
  %406 = load <2 x i32>, ptr @guiTextBoxState, align 4, !tbaa !5
  %407 = icmp eq i32 %405, -1
  %408 = extractelement <2 x i32> %406, i64 0
  %409 = icmp eq i32 %405, %408
  %or.cond282 = select i1 %407, i1 true, i1 %409
  br i1 %or.cond282, label %410, label %411

410:                                              ; preds = %404
  tail call void @GuiTextBoxSelectAll(ptr noundef %2)
  br label %411

411:                                              ; preds = %404, %410
  tail call void @GuiTextBoxCopy(ptr noundef %2)
  store i32 %405, ptr getelementptr inbounds (i8, ptr @guiTextBoxState, i64 12), align 4, !tbaa !16
  store <2 x i32> %406, ptr @guiTextBoxState, align 4, !tbaa !5
  br label %412

412:                                              ; preds = %411, %402, %400, %399
  %413 = tail call zeroext i1 @CheckCollisionPointRec(<2 x float> %77, <2 x float> %0, <2 x float> %.sroa.17.1) #10
  br i1 %413, label %414, label %.thread308

414:                                              ; preds = %412
  %415 = tail call zeroext i1 @IsMouseButtonPressed(i32 noundef 0) #10
  br i1 %415, label %.thread288, label %.thread308

416:                                              ; preds = %395, %397
  br i1 %.1222, label %.thread288, label %.thread308

.thread288:                                       ; preds = %414, %397, %393, %416
  %.1307 = phi i32 [ %.0, %416 ], [ %.0, %393 ], [ %.0, %397 ], [ 1, %414 ]
  %.sroa.060.1305 = phi float [ %.sroa.060.0, %416 ], [ %.sroa.060.0, %393 ], [ %.sroa.060.0, %397 ], [ %72, %414 ]
  %.1230303 = phi i1 [ %.0229286, %416 ], [ %.0229286, %393 ], [ %.0229286, %397 ], [ %71, %414 ]
  %.2234301 = phi i32 [ %.1233, %416 ], [ %.1233, %393 ], [ %.1233, %397 ], [ 0, %414 ]
  %.2238299 = phi i32 [ %.1237, %416 ], [ %.1237, %393 ], [ %.1237, %397 ], [ 0, %414 ]
  %.1241297 = phi i32 [ %.0240, %416 ], [ %.0240, %393 ], [ %.0240, %397 ], [ 0, %414 ]
  store i32 0, ptr @GuiTextBoxEx.framesCounter, align 4, !tbaa !5
  br label %.thread308

.thread308:                                       ; preds = %414, %412, %.thread288, %416
  %417 = phi i1 [ true, %.thread288 ], [ false, %416 ], [ false, %412 ], [ false, %414 ]
  %.1306 = phi i32 [ %.1307, %.thread288 ], [ %.0, %416 ], [ %12, %412 ], [ 1, %414 ]
  %.sroa.060.1304 = phi float [ %.sroa.060.1305, %.thread288 ], [ %.sroa.060.0, %416 ], [ %72, %412 ], [ %72, %414 ]
  %.1230302 = phi i1 [ %.1230303, %.thread288 ], [ %.0229286, %416 ], [ %71, %412 ], [ %71, %414 ]
  %.2234300 = phi i32 [ %.2234301, %.thread288 ], [ %.1233, %416 ], [ 0, %412 ], [ 0, %414 ]
  %.2238298 = phi i32 [ %.2238299, %.thread288 ], [ %.1237, %416 ], [ 0, %412 ], [ 0, %414 ]
  %.1241296 = phi i32 [ %.1241297, %.thread288 ], [ %.0240, %416 ], [ 0, %412 ], [ 0, %414 ]
  %418 = sext i32 %.1241296 to i64
  br label %419

419:                                              ; preds = %.thread308, %73, %50
  %.2242 = phi i64 [ 0, %73 ], [ %418, %.thread308 ], [ 0, %50 ]
  %.3239 = phi i32 [ 0, %73 ], [ %.2238298, %.thread308 ], [ 0, %50 ]
  %.3235 = phi i32 [ 0, %73 ], [ %.2234300, %.thread308 ], [ 0, %50 ]
  %.2231 = phi i1 [ %71, %73 ], [ %.1230302, %.thread308 ], [ %71, %50 ]
  %.sroa.060.2 = phi float [ %72, %73 ], [ %.sroa.060.1304, %.thread308 ], [ %72, %50 ]
  %.3 = phi i1 [ false, %73 ], [ %417, %.thread308 ], [ false, %50 ]
  %.2 = phi i32 [ %12, %73 ], [ %.1306, %.thread308 ], [ 3, %50 ]
  %420 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %421 = mul i32 %.2, 3
  %422 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef %421)
  %423 = call i32 @GetColor(i32 noundef %422) #10
  %424 = load float, ptr @guiAlpha, align 4, !tbaa !19
  %425 = call i32 @Fade(i32 %423, float noundef %424) #10
  call void @DrawRectangleLinesEx(<2 x float> %0, <2 x float> %.sroa.17.1, i32 noundef %420, i32 %425) #10
  switch i32 %.2, label %489 [
    i32 2, label %426
    i32 3, label %466
  ]

426:                                              ; preds = %419
  %427 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %428 = sitofp i32 %427 to float
  %429 = fadd float %7, %428
  %430 = fptosi float %429 to i32
  %431 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %432 = sitofp i32 %431 to float
  %433 = fadd float %6, %432
  %434 = fptosi float %433 to i32
  %435 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %436 = shl nsw i32 %435, 1
  %437 = sitofp i32 %436 to float
  %438 = fsub float %.sroa.17.8.vec.extract207, %437
  %439 = fptosi float %438 to i32
  %.sroa.17.12.vec.extract218 = extractelement <2 x float> %.sroa.17.1, i64 1
  %440 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %441 = shl nsw i32 %440, 1
  %442 = sitofp i32 %441 to float
  %443 = fsub float %.sroa.17.12.vec.extract218, %442
  %444 = fptosi float %443 to i32
  %445 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 4)
  %446 = call i32 @GetColor(i32 noundef %445) #10
  %447 = load float, ptr @guiAlpha, align 4, !tbaa !19
  %448 = call i32 @Fade(i32 %446, float noundef %447) #10
  call void @DrawRectangle(i32 noundef %430, i32 noundef %434, i32 noundef %439, i32 noundef %444, i32 %448) #10
  %449 = select i1 %4, i1 %.2231, i1 false
  br i1 %449, label %450, label %489

450:                                              ; preds = %426
  %451 = load i32, ptr @GuiTextBoxEx.framesCounter, align 4, !tbaa !5
  %452 = sdiv i32 %451, 20
  %453 = and i32 %452, 1
  %454 = icmp eq i32 %453, 0
  %455 = icmp eq i32 %.3239, 0
  %or.cond3 = select i1 %454, i1 %455, i1 false
  br i1 %or.cond3, label %456, label %489

456:                                              ; preds = %450
  %457 = fptosi float %.sroa.060.2 to i32
  %458 = extractelement <2 x float> %62, i64 1
  %459 = fptosi float %458 to i32
  %460 = call i32 @GuiGetStyle(i32 noundef 0, i32 noundef 16)
  %461 = shl nsw i32 %460, 1
  %462 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 6)
  %463 = call i32 @GetColor(i32 noundef %462) #10
  %464 = load float, ptr @guiAlpha, align 4, !tbaa !19
  %465 = call i32 @Fade(i32 %463, float noundef %464) #10
  call void @DrawRectangle(i32 noundef %457, i32 noundef %459, i32 noundef 1, i32 noundef %461, i32 %465) #10
  br label %489

466:                                              ; preds = %419
  %467 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %468 = sitofp i32 %467 to float
  %469 = fadd float %7, %468
  %470 = fptosi float %469 to i32
  %471 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %472 = sitofp i32 %471 to float
  %473 = fadd float %6, %472
  %474 = fptosi float %473 to i32
  %475 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %476 = shl nsw i32 %475, 1
  %477 = sitofp i32 %476 to float
  %478 = fsub float %.sroa.17.8.vec.extract207, %477
  %479 = fptosi float %478 to i32
  %.sroa.17.12.vec.extract220 = extractelement <2 x float> %.sroa.17.1, i64 1
  %480 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %481 = shl nsw i32 %480, 1
  %482 = sitofp i32 %481 to float
  %483 = fsub float %.sroa.17.12.vec.extract220, %482
  %484 = fptosi float %483 to i32
  %485 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 10)
  %486 = call i32 @GetColor(i32 noundef %485) #10
  %487 = load float, ptr @guiAlpha, align 4, !tbaa !19
  %488 = call i32 @Fade(i32 %486, float noundef %487) #10
  call void @DrawRectangle(i32 noundef %470, i32 noundef %474, i32 noundef %479, i32 noundef %484, i32 %488) #10
  br label %489

489:                                              ; preds = %419, %426, %466, %450, %456
  %490 = getelementptr inbounds i8, ptr %2, i64 %.2242
  %491 = call i32 @GuiGetStyle(i32 noundef 0, i32 noundef 16)
  %492 = sitofp i32 %491 to float
  %493 = call i32 @GuiGetStyle(i32 noundef 0, i32 noundef 17)
  %494 = sitofp i32 %493 to float
  %495 = add i32 %421, 2
  %496 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef %495)
  %497 = call i32 @GetColor(i32 noundef %496) #10
  %498 = load float, ptr @guiAlpha, align 4, !tbaa !19
  %499 = call i32 @Fade(i32 %497, float noundef %498) #10
  %500 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 18)
  %501 = call i32 @GetColor(i32 noundef %500) #10
  %502 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 19)
  %503 = call i32 @GetColor(i32 noundef %502) #10
  call void @DrawTextRecEx(ptr noundef nonnull byval(%struct.Font) align 8 @guiFont, ptr noundef %490, <2 x float> %62, <2 x float> %.sroa.23.12.vec.insert, float noundef %492, float noundef %494, i1 noundef zeroext false, i32 %499, i32 noundef %.3235, i32 noundef %.3239, i32 %501, i32 %503) #10
  ret i1 %.3
}

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @GuiTextBoxMaxCharacters(ptr noundef, i32 noundef, <2 x float>, <2 x float>) local_unnamed_addr #8

; Function Attrs: nounwind uwtable
declare hidden i32 @GuiMeasureTextBoxRev(ptr noundef, i32 noundef, <2 x float>, <2 x float>, ptr noundef) local_unnamed_addr #6

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @MoveTextBoxCursorRight(ptr noundef, i32 noundef, <2 x float>, <2 x float>) local_unnamed_addr #8

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @MoveTextBoxCursorLeft(ptr noundef) local_unnamed_addr #7

declare i32 @GetKeyPressed() local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare hidden i32 @EncodeCodepoint(i32 noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @GuiTextBoxGetCursorFromMouse(ptr noundef, i32 noundef, <2 x float>, <2 x float>, ptr noundef) local_unnamed_addr #8

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @GuiTextBoxGetCursorCoordinates(ptr noundef, i32 noundef, <2 x float>, <2 x float>, i32 noundef) local_unnamed_addr #8

declare void @DrawRectangleLinesEx(<2 x float>, <2 x float>, i32 noundef, i32) local_unnamed_addr #3

declare void @DrawRectangle(i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32) local_unnamed_addr #3

declare void @DrawTextRecEx(ptr noundef byval(%struct.Font) align 8, ptr noundef, <2 x float>, <2 x float>, float noundef, float noundef, i1 noundef zeroext, i32, i32 noundef, i32 noundef, i32, i32) local_unnamed_addr #3

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!7, !7, i64 0}
!10 = !{!11, !11, i64 0}
!11 = !{!"_Bool", !7, i64 0}
!12 = !{i8 0, i8 2}
!13 = !{}
!14 = !{!15, !6, i64 0}
!15 = !{!"GuiTextBoxState", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12}
!16 = !{!15, !6, i64 12}
!17 = !{!15, !6, i64 4}
!18 = !{!15, !6, i64 8}
!19 = !{!20, !20, i64 0}
!20 = !{!"float", !7, i64 0}


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