; LLVM IR from VTIvanov20/eight-ball-pool :: src (main)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.Font = type { i32, i32, i32, %struct.Texture, ptr, ptr }
%struct.Texture = type { i32, i32, i32, i32, i32 }
%struct.Rectangle = type { float, float, float, float }
%struct.Vector2 = type { float, float }
%struct.Color = type { i8, i8, i8, i8 }
%struct.GlyphInfo = type { i32, i32, i32, i32, %struct.Image }
%struct.Image = type { ptr, i32, i32, i32, i32 }

@_ZL8guiState = external hidden global i32, align 4
@_ZL9guiLocked = external hidden global i8, align 1
@_ZL8guiAlpha = external hidden global float, align 4
@_ZL7guiFont = external hidden global %struct.Font, align 8

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #2

; Function Attrs: mustprogress uwtable
declare dso_local i32 @GuiGetStyle(i32 noundef, i32 noundef) #3

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL16GuiDrawRectangle9Rectanglei5ColorS0_(<2 x float>, <2 x float>, i32 noundef, i32, i32) #4

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

declare i32 @GetColor(i32 noundef) #5

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

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

declare zeroext i1 @IsMouseButtonPressed(i32 noundef) #5

declare i32 @GetCharPressed() #5

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

declare ptr @CodepointToUTF8(i32 noundef, ptr noundef) #5

declare zeroext i1 @IsKeyPressed(i32 noundef) #5

; Function Attrs: mustprogress uwtable
define dso_local zeroext i1 @GuiTextBoxMulti(<2 x float> %0, <2 x float> %1, ptr noundef %2, i32 noundef %3, i1 noundef zeroext %4) #4 {
  %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 %struct.Rectangle, align 4
  %13 = alloca %struct.Rectangle, align 4
  %14 = alloca float, align 4
  %15 = alloca %struct.Vector2, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  %21 = alloca %struct.Vector2, align 4
  %22 = alloca %struct.Rectangle, align 4
  %23 = alloca %struct.Vector2, align 4
  %24 = alloca %struct.Rectangle, align 4
  %25 = alloca %struct.Rectangle, align 4
  %26 = alloca %struct.Color, align 1
  %27 = alloca %struct.Color, align 1
  %28 = alloca %struct.Color, align 1
  %29 = alloca %struct.Color, align 1
  %30 = alloca %struct.Rectangle, align 4
  %31 = alloca %struct.Color, align 1
  %32 = alloca %struct.Color, align 1
  %33 = alloca %struct.Color, align 1
  %34 = alloca %struct.Color, align 1
  %35 = alloca %struct.Rectangle, align 4
  %36 = alloca %struct.Color, align 1
  %37 = alloca %struct.Color, align 1
  %38 = alloca %struct.Color, align 1
  %39 = alloca i32, align 4
  %40 = alloca %struct.Vector2, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca %struct.Font, align 8
  %46 = alloca %struct.Rectangle, align 4
  %47 = alloca %struct.GlyphInfo, align 8
  %48 = alloca i32, align 4
  %49 = alloca %struct.Font, align 8
  %50 = alloca %struct.Vector2, align 4
  %51 = alloca %struct.Color, align 1
  %52 = alloca %struct.Color, align 1
  %53 = alloca i32, align 4
  %54 = alloca %struct.Rectangle, align 4
  %55 = alloca %struct.Color, align 1
  %56 = alloca %struct.Color, align 1
  %57 = alloca %struct.Color, align 1
  %58 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %6, i32 0, i32 0
  store <2 x float> %0, ptr %58, align 4
  %59 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %6, i32 0, i32 1
  store <2 x float> %1, ptr %59, align 4
  store ptr %2, ptr %7, align 8, !tbaa !5
  store i32 %3, ptr %8, align 4, !tbaa !9
  %60 = zext i1 %4 to i8
  store i8 %60, ptr %9, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #7
  %61 = load i32, ptr @_ZL8guiState, align 4, !tbaa !13
  store i32 %61, ptr %10, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 1, ptr %11) #7
  store i8 0, ptr %11, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 16, ptr %12) #7
  %62 = getelementptr inbounds %struct.Rectangle, ptr %12, i32 0, i32 0
  %63 = getelementptr inbounds %struct.Rectangle, ptr %6, i32 0, i32 0
  %64 = load float, ptr %63, align 4, !tbaa !15
  %65 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %66 = sitofp i32 %65 to float
  %67 = fadd float %64, %66
  %68 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 16)
  %69 = sitofp i32 %68 to float
  %70 = fadd float %67, %69
  store float %70, ptr %62, align 4, !tbaa !15
  %71 = getelementptr inbounds %struct.Rectangle, ptr %12, i32 0, i32 1
  %72 = getelementptr inbounds %struct.Rectangle, ptr %6, i32 0, i32 1
  %73 = load float, ptr %72, align 4, !tbaa !18
  %74 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %75 = sitofp i32 %74 to float
  %76 = fadd float %73, %75
  %77 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 16)
  %78 = sitofp i32 %77 to float
  %79 = fadd float %76, %78
  store float %79, ptr %71, align 4, !tbaa !18
  %80 = getelementptr inbounds %struct.Rectangle, ptr %12, i32 0, i32 2
  %81 = getelementptr inbounds %struct.Rectangle, ptr %6, i32 0, i32 2
  %82 = load float, ptr %81, align 4, !tbaa !19
  %83 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %84 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 16)
  %85 = add nsw i32 %83, %84
  %86 = mul nsw i32 2, %85
  %87 = sitofp i32 %86 to float
  %88 = fsub float %82, %87
  store float %88, ptr %80, align 4, !tbaa !19
  %89 = getelementptr inbounds %struct.Rectangle, ptr %12, i32 0, i32 3
  %90 = getelementptr inbounds %struct.Rectangle, ptr %6, i32 0, i32 3
  %91 = load float, ptr %90, align 4, !tbaa !20
  %92 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %93 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 16)
  %94 = add nsw i32 %92, %93
  %95 = mul nsw i32 2, %94
  %96 = sitofp i32 %95 to float
  %97 = fsub float %91, %96
  store float %97, ptr %89, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 16, ptr %13) #7
  %98 = getelementptr inbounds %struct.Rectangle, ptr %13, i32 0, i32 0
  store float 0.000000e+00, ptr %98, align 4, !tbaa !15
  %99 = getelementptr inbounds %struct.Rectangle, ptr %13, i32 0, i32 1
  store float -1.000000e+00, ptr %99, align 4, !tbaa !18
  %100 = getelementptr inbounds %struct.Rectangle, ptr %13, i32 0, i32 2
  store float 4.000000e+00, ptr %100, align 4, !tbaa !19
  %101 = getelementptr inbounds %struct.Rectangle, ptr %13, i32 0, i32 3
  %102 = call i32 @GuiGetStyle(i32 noundef 0, i32 noundef 16)
  %103 = sitofp i32 %102 to float
  %104 = fadd float %103, 2.000000e+00
  store float %104, ptr %101, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #7
  %105 = call i32 @GuiGetStyle(i32 noundef 0, i32 noundef 16)
  %106 = sitofp i32 %105 to float
  %107 = load i32, ptr @_ZL7guiFont, align 8, !tbaa !21
  %108 = sitofp i32 %107 to float
  %109 = fdiv float %106, %108
  store float %109, ptr %14, align 4, !tbaa !24
  %110 = load i32, ptr %10, align 4, !tbaa !13
  %111 = icmp ne i32 %110, 3
  br i1 %111, label %112, label %227

112:                                              ; preds = %5
  %113 = load i8, ptr @_ZL9guiLocked, align 1, !tbaa !11, !range !25, !noundef !26
  %114 = trunc i8 %113 to i1
  br i1 %114, label %227, label %115

115:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  %116 = call <2 x float> @GetMousePosition()
  store <2 x float> %116, ptr %15, align 4
  %117 = load i8, ptr %9, align 1, !tbaa !11, !range !25, !noundef !26
  %118 = trunc i8 %117 to i1
  br i1 %118, label %119, label %214

119:                                              ; preds = %115
  store i32 2, ptr %10, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #7
  %120 = call i32 @GetCharPressed()
  store i32 %120, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #7
  %121 = load ptr, ptr %7, align 8, !tbaa !5
  %122 = call i64 @strlen(ptr noundef %121) #8
  %123 = trunc i64 %122 to i32
  store i32 %123, ptr %17, align 4, !tbaa !9
  %124 = load i32, ptr %17, align 4, !tbaa !9
  %125 = load i32, ptr %8, align 4, !tbaa !9
  %126 = sub nsw i32 %125, 1
  %127 = icmp slt i32 %124, %126
  br i1 %127, label %128, label %155

128:                                              ; preds = %119
  %129 = call zeroext i1 @IsKeyPressed(i32 noundef 257)
  br i1 %129, label %130, label %137

130:                                              ; preds = %128
  %131 = load ptr, ptr %7, align 8, !tbaa !5
  %132 = load i32, ptr %17, align 4, !tbaa !9
  %133 = sext i32 %132 to i64
  %134 = getelementptr inbounds i8, ptr %131, i64 %133
  store i8 10, ptr %134, align 1, !tbaa !27
  %135 = load i32, ptr %17, align 4, !tbaa !9
  %136 = add nsw i32 %135, 1
  store i32 %136, ptr %17, align 4, !tbaa !9
  br label %154

137:                                              ; preds = %128
  %138 = load i32, ptr %16, align 4, !tbaa !9
  %139 = icmp sge i32 %138, 32
  br i1 %139, label %140, label %153

140:                                              ; preds = %137
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #7
  store i32 0, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  %141 = load i32, ptr %16, align 4, !tbaa !9
  %142 = call ptr @CodepointToUTF8(i32 noundef %141, ptr noundef %18)
  store ptr %142, ptr %19, align 8, !tbaa !5
  %143 = load ptr, ptr %7, align 8, !tbaa !5
  %144 = load i32, ptr %17, align 4, !tbaa !9
  %145 = sext i32 %144 to i64
  %146 = getelementptr inbounds i8, ptr %143, i64 %145
  %147 = load ptr, ptr %19, align 8, !tbaa !5
  %148 = load i32, ptr %18, align 4, !tbaa !9
  %149 = sext i32 %148 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %146, ptr align 1 %147, i64 %149, i1 false)
  %150 = load i32, ptr %18, align 4, !tbaa !9
  %151 = load i32, ptr %17, align 4, !tbaa !9
  %152 = add nsw i32 %151, %150
  store i32 %152, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  br label %153

153:                                              ; preds = %140, %137
  br label %154

154:                                              ; preds = %153, %130
  br label %155

155:                                              ; preds = %154, %119
  %156 = load i32, ptr %17, align 4, !tbaa !9
  %157 = icmp sgt i32 %156, 0
  br i1 %157, label %158, label %203

158:                                              ; preds = %155
  %159 = call zeroext i1 @IsKeyPressed(i32 noundef 259)
  br i1 %159, label %160, label %202

160:                                              ; preds = %158
  %161 = load ptr, ptr %7, align 8, !tbaa !5
  %162 = load i32, ptr %17, align 4, !tbaa !9
  %163 = sub nsw i32 %162, 1
  %164 = sext i32 %163 to i64
  %165 = getelementptr inbounds i8, ptr %161, i64 %164
  %166 = load i8, ptr %165, align 1, !tbaa !27
  %167 = zext i8 %166 to i32
  %168 = icmp slt i32 %167, 127
  br i1 %168, label %169, label %176

169:                                              ; preds = %160
  %170 = load i32, ptr %17, align 4, !tbaa !9
  %171 = add nsw i32 %170, -1
  store i32 %171, ptr %17, align 4, !tbaa !9
  %172 = load ptr, ptr %7, align 8, !tbaa !5
  %173 = load i32, ptr %17, align 4, !tbaa !9
  %174 = sext i32 %173 to i64
  %175 = getelementptr inbounds i8, ptr %172, i64 %174
  store i8 0, ptr %175, align 1, !tbaa !27
  br label %201

176:                                              ; preds = %160
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %177

177:                                              ; preds = %189, %176
  %178 = load ptr, ptr %7, align 8, !tbaa !5
  %179 = load i32, ptr %17, align 4, !tbaa !9
  %180 = sub nsw i32 %179, 1
  %181 = load i32, ptr %20, align 4, !tbaa !9
  %182 = sub nsw i32 %180, %181
  %183 = sext i32 %182 to i64
  %184 = getelementptr inbounds i8, ptr %178, i64 %183
  %185 = load i8, ptr %184, align 1, !tbaa !27
  %186 = zext i8 %185 to i32
  %187 = and i32 %186, 64
  %188 = icmp eq i32 %187, 0
  br i1 %188, label %189, label %192

189:                                              ; preds = %177
  %190 = load i32, ptr %20, align 4, !tbaa !9
  %191 = add nsw i32 %190, 1
  store i32 %191, ptr %20, align 4, !tbaa !9
  br label %177, !llvm.loop !28

192:                                              ; preds = %177
  %193 = load i32, ptr %20, align 4, !tbaa !9
  %194 = add nsw i32 %193, 1
  %195 = load i32, ptr %17, align 4, !tbaa !9
  %196 = sub nsw i32 %195, %194
  store i32 %196, ptr %17, align 4, !tbaa !9
  %197 = load ptr, ptr %7, align 8, !tbaa !5
  %198 = load i32, ptr %17, align 4, !tbaa !9
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds i8, ptr %197, i64 %199
  store i8 0, ptr %200, align 1, !tbaa !27
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  br label %201

201:                                              ; preds = %192, %169
  br label %202

202:                                              ; preds = %201, %158
  br label %203

203:                                              ; preds = %202, %155
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %21, ptr align 4 %15, i64 8, i1 false), !tbaa.struct !30
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %22, ptr align 4 %6, i64 16, i1 false), !tbaa.struct !31
  %204 = load <2 x float>, ptr %21, align 4
  %205 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %22, i32 0, i32 0
  %206 = load <2 x float>, ptr %205, align 4
  %207 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %22, i32 0, i32 1
  %208 = load <2 x float>, ptr %207, align 4
  %209 = call zeroext i1 @CheckCollisionPointRec(<2 x float> %204, <2 x float> %206, <2 x float> %208)
  br i1 %209, label %213, label %210

210:                                              ; preds = %203
  %211 = call zeroext i1 @IsMouseButtonPressed(i32 noundef 0)
  br i1 %211, label %212, label %213

212:                                              ; preds = %210
  store i8 1, ptr %11, align 1, !tbaa !11
  br label %213

213:                                              ; preds = %212, %210, %203
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  br label %226

214:                                              ; preds = %115
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %23, ptr align 4 %15, i64 8, i1 false), !tbaa.struct !30
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %24, ptr align 4 %6, i64 16, i1 false), !tbaa.struct !31
  %215 = load <2 x float>, ptr %23, align 4
  %216 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %24, i32 0, i32 0
  %217 = load <2 x float>, ptr %216, align 4
  %218 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %24, i32 0, i32 1
  %219 = load <2 x float>, ptr %218, align 4
  %220 = call zeroext i1 @CheckCollisionPointRec(<2 x float> %215, <2 x float> %217, <2 x float> %219)
  br i1 %220, label %221, label %225

221:                                              ; preds = %214
  store i32 1, ptr %10, align 4, !tbaa !13
  %222 = call zeroext i1 @IsMouseButtonPressed(i32 noundef 0)
  br i1 %222, label %223, label %224

223:                                              ; preds = %221
  store i8 1, ptr %11, align 1, !tbaa !11
  br label %224

224:                                              ; preds = %223, %221
  br label %225

225:                                              ; preds = %224, %214
  br label %226

226:                                              ; preds = %225, %213
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  br label %227

227:                                              ; preds = %226, %112, %5
  %228 = load i32, ptr %10, align 4, !tbaa !13
  %229 = icmp eq i32 %228, 2
  br i1 %229, label %230, label %251

230:                                              ; preds = %227
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %25, ptr align 4 %6, i64 16, i1 false), !tbaa.struct !31
  %231 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %232 = load i32, ptr %10, align 4, !tbaa !13
  %233 = mul nsw i32 %232, 3
  %234 = add nsw i32 0, %233
  %235 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef %234)
  %236 = call i32 @GetColor(i32 noundef %235)
  store i32 %236, ptr %27, align 1
  %237 = load float, ptr @_ZL8guiAlpha, align 4, !tbaa !24
  %238 = load i32, ptr %27, align 1
  %239 = call i32 @Fade(i32 %238, float noundef %237)
  store i32 %239, ptr %26, align 1
  %240 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 7)
  %241 = call i32 @GetColor(i32 noundef %240)
  store i32 %241, ptr %29, align 1
  %242 = load float, ptr @_ZL8guiAlpha, align 4, !tbaa !24
  %243 = load i32, ptr %29, align 1
  %244 = call i32 @Fade(i32 %243, float noundef %242)
  store i32 %244, ptr %28, align 1
  %245 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %25, i32 0, i32 0
  %246 = load <2 x float>, ptr %245, align 4
  %247 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %25, i32 0, i32 1
  %248 = load <2 x float>, ptr %247, align 4
  %249 = load i32, ptr %26, align 1
  %250 = load i32, ptr %28, align 1
  call void @_ZL16GuiDrawRectangle9Rectanglei5ColorS0_(<2 x float> %246, <2 x float> %248, i32 noundef %231, i32 %249, i32 %250)
  br label %295

251:                                              ; preds = %227
  %252 = load i32, ptr %10, align 4, !tbaa !13
  %253 = icmp eq i32 %252, 3
  br i1 %253, label %254, label %275

254:                                              ; preds = %251
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %30, ptr align 4 %6, i64 16, i1 false), !tbaa.struct !31
  %255 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %256 = load i32, ptr %10, align 4, !tbaa !13
  %257 = mul nsw i32 %256, 3
  %258 = add nsw i32 0, %257
  %259 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef %258)
  %260 = call i32 @GetColor(i32 noundef %259)
  store i32 %260, ptr %32, align 1
  %261 = load float, ptr @_ZL8guiAlpha, align 4, !tbaa !24
  %262 = load i32, ptr %32, align 1
  %263 = call i32 @Fade(i32 %262, float noundef %261)
  store i32 %263, ptr %31, align 1
  %264 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 10)
  %265 = call i32 @GetColor(i32 noundef %264)
  store i32 %265, ptr %34, align 1
  %266 = load float, ptr @_ZL8guiAlpha, align 4, !tbaa !24
  %267 = load i32, ptr %34, align 1
  %268 = call i32 @Fade(i32 %267, float noundef %266)
  store i32 %268, ptr %33, align 1
  %269 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %30, i32 0, i32 0
  %270 = load <2 x float>, ptr %269, align 4
  %271 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %30, i32 0, i32 1
  %272 = load <2 x float>, ptr %271, align 4
  %273 = load i32, ptr %31, align 1
  %274 = load i32, ptr %33, align 1
  call void @_ZL16GuiDrawRectangle9Rectanglei5ColorS0_(<2 x float> %270, <2 x float> %272, i32 noundef %255, i32 %273, i32 %274)
  br label %294

275:                                              ; preds = %251
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %35, ptr align 4 %6, i64 16, i1 false), !tbaa.struct !31
  %276 = load i32, ptr %10, align 4, !tbaa !13
  %277 = mul nsw i32 %276, 3
  %278 = add nsw i32 0, %277
  %279 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef %278)
  %280 = call i32 @GetColor(i32 noundef %279)
  store i32 %280, ptr %37, align 1
  %281 = load float, ptr @_ZL8guiAlpha, align 4, !tbaa !24
  %282 = load i32, ptr %37, align 1
  %283 = call i32 @Fade(i32 %282, float noundef %281)
  store i32 %283, ptr %36, align 1
  %284 = getelementptr inbounds %struct.Color, ptr %38, i32 0, i32 0
  store i8 0, ptr %284, align 1, !tbaa !32
  %285 = getelementptr inbounds %struct.Color, ptr %38, i32 0, i32 1
  store i8 0, ptr %285, align 1, !tbaa !34
  %286 = getelementptr inbounds %struct.Color, ptr %38, i32 0, i32 2
  store i8 0, ptr %286, align 1, !tbaa !35
  %287 = getelementptr inbounds %struct.Color, ptr %38, i32 0, i32 3
  store i8 0, ptr %287, align 1, !tbaa !36
  %288 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %35, i32 0, i32 0
  %289 = load <2 x float>, ptr %288, align 4
  %290 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %35, i32 0, i32 1
  %291 = load <2 x float>, ptr %290, align 4
  %292 = load i32, ptr %36, align 1
  %293 = load i32, ptr %38, align 1
  call void @_ZL16GuiDrawRectangle9Rectanglei5ColorS0_(<2 x float> %289, <2 x float> %291, i32 noundef 1, i32 %292, i32 %293)
  br label %294

294:                                              ; preds = %275, %254
  br label %295

295:                                              ; preds = %294, %230
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #7
  store i32 1, ptr %39, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #7
  %296 = getelementptr inbounds %struct.Vector2, ptr %40, i32 0, i32 0
  %297 = getelementptr inbounds %struct.Rectangle, ptr %12, i32 0, i32 0
  %298 = load float, ptr %297, align 4, !tbaa !15
  store float %298, ptr %296, align 4, !tbaa !37
  %299 = getelementptr inbounds %struct.Vector2, ptr %40, i32 0, i32 1
  %300 = getelementptr inbounds %struct.Rectangle, ptr %12, i32 0, i32 1
  %301 = load float, ptr %300, align 4, !tbaa !18
  store float %301, ptr %299, align 4, !tbaa !39
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #7
  store i32 0, ptr %41, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #7
  store i32 0, ptr %42, align 4, !tbaa !9
  br label %302

302:                                              ; preds = %444, %295
  %303 = load ptr, ptr %7, align 8, !tbaa !5
  %304 = load i32, ptr %41, align 4, !tbaa !9
  %305 = sext i32 %304 to i64
  %306 = getelementptr inbounds i8, ptr %303, i64 %305
  %307 = load i8, ptr %306, align 1, !tbaa !27
  %308 = sext i8 %307 to i32
  %309 = icmp ne i32 %308, 0
  br i1 %309, label %311, label %310

310:                                              ; preds = %302
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #7
  br label %448

311:                                              ; preds = %302
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #7
  %312 = load ptr, ptr %7, align 8, !tbaa !5
  %313 = load i32, ptr %41, align 4, !tbaa !9
  %314 = sext i32 %313 to i64
  %315 = getelementptr inbounds i8, ptr %312, i64 %314
  %316 = call i32 @GetCodepoint(ptr noundef %315, ptr noundef %42)
  store i32 %316, ptr %43, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %45, ptr align 8 @_ZL7guiFont, i64 48, i1 false), !tbaa.struct !40
  %317 = load i32, ptr %43, align 4, !tbaa !9
  %318 = call i32 @GetGlyphIndex(ptr noundef byval(%struct.Font) align 8 %45, i32 noundef %317)
  store i32 %318, ptr %44, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %46) #7
  %319 = load ptr, ptr getelementptr inbounds (%struct.Font, ptr @_ZL7guiFont, i32 0, i32 4), align 8, !tbaa !41
  %320 = load i32, ptr %44, align 4, !tbaa !9
  %321 = sext i32 %320 to i64
  %322 = getelementptr inbounds %struct.Rectangle, ptr %319, i64 %321
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %46, ptr align 4 %322, i64 16, i1 false), !tbaa.struct !31
  call void @llvm.lifetime.start.p0(i64 40, ptr %47) #7
  %323 = load ptr, ptr getelementptr inbounds (%struct.Font, ptr @_ZL7guiFont, i32 0, i32 5), align 8, !tbaa !42
  %324 = load i32, ptr %44, align 4, !tbaa !9
  %325 = sext i32 %324 to i64
  %326 = getelementptr inbounds %struct.GlyphInfo, ptr %323, i64 %325
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %47, ptr align 8 %326, i64 40, i1 false), !tbaa.struct !43
  %327 = load i32, ptr %42, align 4, !tbaa !9
  %328 = icmp eq i32 %327, 1
  br i1 %328, label %329, label %345

329:                                              ; preds = %311
  %330 = load i32, ptr %43, align 4, !tbaa !9
  %331 = icmp eq i32 %330, 10
  br i1 %331, label %332, label %345

332:                                              ; preds = %329
  %333 = load i32, ptr @_ZL7guiFont, align 8, !tbaa !21
  %334 = sitofp i32 %333 to float
  %335 = load float, ptr %14, align 4, !tbaa !24
  %336 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 17)
  %337 = sitofp i32 %336 to float
  %338 = call float @llvm.fmuladd.f32(float %334, float %335, float %337)
  %339 = getelementptr inbounds %struct.Vector2, ptr %40, i32 0, i32 1
  %340 = load float, ptr %339, align 4, !tbaa !39
  %341 = fadd float %340, %338
  store float %341, ptr %339, align 4, !tbaa !39
  %342 = getelementptr inbounds %struct.Rectangle, ptr %12, i32 0, i32 0
  %343 = load float, ptr %342, align 4, !tbaa !15
  %344 = getelementptr inbounds %struct.Vector2, ptr %40, i32 0, i32 0
  store float %343, ptr %344, align 4, !tbaa !37
  br label %443

345:                                              ; preds = %329, %311
  %346 = load i32, ptr %39, align 4, !tbaa !9
  %347 = icmp eq i32 %346, 1
  br i1 %347, label %348, label %395

348:                                              ; preds = %345
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #7
  store i32 0, ptr %48, align 4, !tbaa !9
  %349 = getelementptr inbounds %struct.GlyphInfo, ptr %47, i32 0, i32 3
  %350 = load i32, ptr %349, align 4, !tbaa !44
  %351 = icmp ne i32 %350, 0
  br i1 %351, label %352, label %357

352:                                              ; preds = %348
  %353 = getelementptr inbounds %struct.GlyphInfo, ptr %47, i32 0, i32 3
  %354 = load i32, ptr %353, align 4, !tbaa !44
  %355 = load i32, ptr %48, align 4, !tbaa !9
  %356 = add nsw i32 %355, %354
  store i32 %356, ptr %48, align 4, !tbaa !9
  br label %368

357:                                              ; preds = %348
  %358 = getelementptr inbounds %struct.Rectangle, ptr %46, i32 0, i32 2
  %359 = load float, ptr %358, align 4, !tbaa !19
  %360 = getelementptr inbounds %struct.GlyphInfo, ptr %47, i32 0, i32 1
  %361 = load i32, ptr %360, align 4, !tbaa !47
  %362 = sitofp i32 %361 to float
  %363 = fadd float %359, %362
  %364 = load i32, ptr %48, align 4, !tbaa !9
  %365 = sitofp i32 %364 to float
  %366 = fadd float %365, %363
  %367 = fptosi float %366 to i32
  store i32 %367, ptr %48, align 4, !tbaa !9
  br label %368

368:                                              ; preds = %357, %352
  %369 = getelementptr inbounds %struct.Vector2, ptr %40, i32 0, i32 0
  %370 = load float, ptr %369, align 4, !tbaa !37
  %371 = load i32, ptr %48, align 4, !tbaa !9
  %372 = sitofp i32 %371 to float
  %373 = load float, ptr %14, align 4, !tbaa !24
  %374 = call float @llvm.fmuladd.f32(float %372, float %373, float %370)
  %375 = getelementptr inbounds %struct.Rectangle, ptr %12, i32 0, i32 0
  %376 = load float, ptr %375, align 4, !tbaa !15
  %377 = getelementptr inbounds %struct.Rectangle, ptr %12, i32 0, i32 2
  %378 = load float, ptr %377, align 4, !tbaa !19
  %379 = fadd float %376, %378
  %380 = fcmp ogt float %374, %379
  br i1 %380, label %381, label %394

381:                                              ; preds = %368
  %382 = load i32, ptr @_ZL7guiFont, align 8, !tbaa !21
  %383 = sitofp i32 %382 to float
  %384 = load float, ptr %14, align 4, !tbaa !24
  %385 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 17)
  %386 = sitofp i32 %385 to float
  %387 = call float @llvm.fmuladd.f32(float %383, float %384, float %386)
  %388 = getelementptr inbounds %struct.Vector2, ptr %40, i32 0, i32 1
  %389 = load float, ptr %388, align 4, !tbaa !39
  %390 = fadd float %389, %387
  store float %390, ptr %388, align 4, !tbaa !39
  %391 = getelementptr inbounds %struct.Rectangle, ptr %12, i32 0, i32 0
  %392 = load float, ptr %391, align 4, !tbaa !15
  %393 = getelementptr inbounds %struct.Vector2, ptr %40, i32 0, i32 0
  store float %392, ptr %393, align 4, !tbaa !37
  br label %394

394:                                              ; preds = %381, %368
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #7
  br label %400

395:                                              ; preds = %345
  %396 = load i32, ptr %39, align 4, !tbaa !9
  %397 = icmp eq i32 %396, 2
  br i1 %397, label %398, label %399

398:                                              ; preds = %395
  br label %399

399:                                              ; preds = %398, %395
  br label %400

400:                                              ; preds = %399, %394
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %49, ptr align 8 @_ZL7guiFont, i64 48, i1 false), !tbaa.struct !40
  %401 = load i32, ptr %43, align 4, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %50, ptr align 4 %40, i64 8, i1 false), !tbaa.struct !30
  %402 = call i32 @GuiGetStyle(i32 noundef 0, i32 noundef 16)
  %403 = sitofp i32 %402 to float
  %404 = load i32, ptr %10, align 4, !tbaa !13
  %405 = mul nsw i32 %404, 3
  %406 = add nsw i32 2, %405
  %407 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef %406)
  %408 = call i32 @GetColor(i32 noundef %407)
  store i32 %408, ptr %52, align 1
  %409 = load float, ptr @_ZL8guiAlpha, align 4, !tbaa !24
  %410 = load i32, ptr %52, align 1
  %411 = call i32 @Fade(i32 %410, float noundef %409)
  store i32 %411, ptr %51, align 1
  %412 = load <2 x float>, ptr %50, align 4
  %413 = load i32, ptr %51, align 1
  call void @DrawTextCodepoint(ptr noundef byval(%struct.Font) align 8 %49, i32 noundef %401, <2 x float> %412, float noundef %403, i32 %413)
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #7
  store i32 0, ptr %53, align 4, !tbaa !9
  %414 = getelementptr inbounds %struct.GlyphInfo, ptr %47, i32 0, i32 3
  %415 = load i32, ptr %414, align 4, !tbaa !44
  %416 = icmp ne i32 %415, 0
  br i1 %416, label %417, label %422

417:                                              ; preds = %400
  %418 = getelementptr inbounds %struct.GlyphInfo, ptr %47, i32 0, i32 3
  %419 = load i32, ptr %418, align 4, !tbaa !44
  %420 = load i32, ptr %53, align 4, !tbaa !9
  %421 = add nsw i32 %420, %419
  store i32 %421, ptr %53, align 4, !tbaa !9
  br label %433

422:                                              ; preds = %400
  %423 = getelementptr inbounds %struct.Rectangle, ptr %46, i32 0, i32 2
  %424 = load float, ptr %423, align 4, !tbaa !19
  %425 = getelementptr inbounds %struct.GlyphInfo, ptr %47, i32 0, i32 1
  %426 = load i32, ptr %425, align 4, !tbaa !47
  %427 = sitofp i32 %426 to float
  %428 = fadd float %424, %427
  %429 = load i32, ptr %53, align 4, !tbaa !9
  %430 = sitofp i32 %429 to float
  %431 = fadd float %430, %428
  %432 = fptosi float %431 to i32
  store i32 %432, ptr %53, align 4, !tbaa !9
  br label %433

433:                                              ; preds = %422, %417
  %434 = load i32, ptr %53, align 4, !tbaa !9
  %435 = sitofp i32 %434 to float
  %436 = load float, ptr %14, align 4, !tbaa !24
  %437 = call i32 @GuiGetStyle(i32 noundef 0, i32 noundef 17)
  %438 = sitofp i32 %437 to float
  %439 = call float @llvm.fmuladd.f32(float %435, float %436, float %438)
  %440 = getelementptr inbounds %struct.Vector2, ptr %40, i32 0, i32 0
  %441 = load float, ptr %440, align 4, !tbaa !37
  %442 = fadd float %441, %439
  store float %442, ptr %440, align 4, !tbaa !37
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #7
  br label %443

443:                                              ; preds = %433, %332
  call void @llvm.lifetime.end.p0(i64 40, ptr %47) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %46) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #7
  br label %444

444:                                              ; preds = %443
  %445 = load i32, ptr %42, align 4, !tbaa !9
  %446 = load i32, ptr %41, align 4, !tbaa !9
  %447 = add nsw i32 %446, %445
  store i32 %447, ptr %41, align 4, !tbaa !9
  br label %302, !llvm.loop !48

448:                                              ; preds = %310
  %449 = getelementptr inbounds %struct.Vector2, ptr %40, i32 0, i32 0
  %450 = load float, ptr %449, align 4, !tbaa !37
  %451 = getelementptr inbounds %struct.Rectangle, ptr %13, i32 0, i32 0
  store float %450, ptr %451, align 4, !tbaa !15
  %452 = getelementptr inbounds %struct.Vector2, ptr %40, i32 0, i32 1
  %453 = load float, ptr %452, align 4, !tbaa !39
  %454 = getelementptr inbounds %struct.Rectangle, ptr %13, i32 0, i32 1
  store float %453, ptr %454, align 4, !tbaa !18
  %455 = load i8, ptr %9, align 1, !tbaa !11, !range !25, !noundef !26
  %456 = trunc i8 %455 to i1
  br i1 %456, label %457, label %473

457:                                              ; preds = %448
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %54, ptr align 4 %13, i64 16, i1 false), !tbaa.struct !31
  %458 = getelementptr inbounds %struct.Color, ptr %55, i32 0, i32 0
  store i8 0, ptr %458, align 1, !tbaa !32
  %459 = getelementptr inbounds %struct.Color, ptr %55, i32 0, i32 1
  store i8 0, ptr %459, align 1, !tbaa !34
  %460 = getelementptr inbounds %struct.Color, ptr %55, i32 0, i32 2
  store i8 0, ptr %460, align 1, !tbaa !35
  %461 = getelementptr inbounds %struct.Color, ptr %55, i32 0, i32 3
  store i8 0, ptr %461, align 1, !tbaa !36
  %462 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 6)
  %463 = call i32 @GetColor(i32 noundef %462)
  store i32 %463, ptr %57, align 1
  %464 = load float, ptr @_ZL8guiAlpha, align 4, !tbaa !24
  %465 = load i32, ptr %57, align 1
  %466 = call i32 @Fade(i32 %465, float noundef %464)
  store i32 %466, ptr %56, align 1
  %467 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %54, i32 0, i32 0
  %468 = load <2 x float>, ptr %467, align 4
  %469 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %54, i32 0, i32 1
  %470 = load <2 x float>, ptr %469, align 4
  %471 = load i32, ptr %55, align 1
  %472 = load i32, ptr %56, align 1
  call void @_ZL16GuiDrawRectangle9Rectanglei5ColorS0_(<2 x float> %468, <2 x float> %470, i32 noundef 0, i32 %471, i32 %472)
  br label %473

473:                                              ; preds = %457, %448
  %474 = load i8, ptr %11, align 1, !tbaa !11, !range !25, !noundef !26
  %475 = trunc i8 %474 to i1
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  ret i1 %475
}

declare i32 @GetCodepoint(ptr noundef, ptr noundef) #5

declare i32 @GetGlyphIndex(ptr noundef byval(%struct.Font) align 8, i32 noundef) #5

declare void @DrawTextCodepoint(ptr noundef byval(%struct.Font) align 8, i32 noundef, <2 x float>, float noundef, i32) #5

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { 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 #7 = { nounwind }
attributes #8 = { 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++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"_ZTS15GuiControlState", !7, i64 0}
!15 = !{!16, !17, i64 0}
!16 = !{!"_ZTS9Rectangle", !17, i64 0, !17, i64 4, !17, i64 8, !17, i64 12}
!17 = !{!"float", !7, i64 0}
!18 = !{!16, !17, i64 4}
!19 = !{!16, !17, i64 8}
!20 = !{!16, !17, i64 12}
!21 = !{!22, !10, i64 0}
!22 = !{!"_ZTS4Font", !10, i64 0, !10, i64 4, !10, i64 8, !23, i64 12, !6, i64 32, !6, i64 40}
!23 = !{!"_ZTS7Texture", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16}
!24 = !{!17, !17, i64 0}
!25 = !{i8 0, i8 2}
!26 = !{}
!27 = !{!7, !7, i64 0}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = !{i64 0, i64 4, !24, i64 4, i64 4, !24}
!31 = !{i64 0, i64 4, !24, i64 4, i64 4, !24, i64 8, i64 4, !24, i64 12, i64 4, !24}
!32 = !{!33, !7, i64 0}
!33 = !{!"_ZTS5Color", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3}
!34 = !{!33, !7, i64 1}
!35 = !{!33, !7, i64 2}
!36 = !{!33, !7, i64 3}
!37 = !{!38, !17, i64 0}
!38 = !{!"_ZTS7Vector2", !17, i64 0, !17, i64 4}
!39 = !{!38, !17, i64 4}
!40 = !{i64 0, i64 4, !9, i64 4, i64 4, !9, i64 8, i64 4, !9, i64 12, i64 4, !9, i64 16, i64 4, !9, i64 20, i64 4, !9, i64 24, i64 4, !9, i64 28, i64 4, !9, i64 32, i64 8, !5, i64 40, i64 8, !5}
!41 = !{!22, !6, i64 32}
!42 = !{!22, !6, i64 40}
!43 = !{i64 0, i64 4, !9, i64 4, i64 4, !9, i64 8, i64 4, !9, i64 12, i64 4, !9, i64 16, i64 8, !5, i64 24, i64 4, !9, i64 28, i64 4, !9, i64 32, i64 4, !9, i64 36, i64 4, !9}
!44 = !{!45, !10, i64 12}
!45 = !{!"_ZTS9GlyphInfo", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !46, i64 16}
!46 = !{!"_ZTS5Image", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20}
!47 = !{!45, !10, i64 4}
!48 = distinct !{!48, !29}


; 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.GlyphInfo = type { i32, i32, i32, i32, %struct.Image }
%struct.Image = type { ptr, i32, i32, i32, i32 }
%struct.Rectangle = type { float, float, float, float }

@_ZL8guiState = external hidden local_unnamed_addr global i32, align 4
@_ZL9guiLocked = external hidden local_unnamed_addr global i8, align 1
@_ZL8guiAlpha = external hidden local_unnamed_addr global float, align 4
@_ZL7guiFont = external hidden local_unnamed_addr global %struct.Font, align 8

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

; Function Attrs: mustprogress 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) #1

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

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #2

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL16GuiDrawRectangle9Rectanglei5ColorS0_(<2 x float>, <2 x float>, i32 noundef, i32, i32) local_unnamed_addr #4

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

declare i32 @GetColor(i32 noundef) local_unnamed_addr #5

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

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

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

declare i32 @GetCharPressed() local_unnamed_addr #5

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

declare ptr @CodepointToUTF8(i32 noundef, ptr noundef) local_unnamed_addr #5

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

; Function Attrs: mustprogress uwtable
define dso_local zeroext i1 @GuiTextBoxMulti(<2 x float> %0, <2 x float> %1, ptr noundef %2, i32 noundef %3, i1 noundef zeroext %4) local_unnamed_addr #4 {
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca %struct.Font, align 8
  %9 = load i32, ptr @_ZL8guiState, align 4, !tbaa !5
  %.sroa.0139.0.vec.extract = extractelement <2 x float> %0, i64 0
  %10 = tail call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %11 = sitofp i32 %10 to float
  %12 = fadd float %.sroa.0139.0.vec.extract, %11
  %13 = tail call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 16)
  %14 = sitofp i32 %13 to float
  %15 = fadd float %12, %14
  %.sroa.0139.4.vec.extract = extractelement <2 x float> %0, i64 1
  %16 = tail call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %17 = sitofp i32 %16 to float
  %18 = fadd float %.sroa.0139.4.vec.extract, %17
  %19 = tail call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 16)
  %20 = sitofp i32 %19 to float
  %21 = fadd float %18, %20
  %.sroa.8.8.vec.extract = extractelement <2 x float> %1, i64 0
  %22 = tail call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %23 = tail call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 16)
  %24 = add nsw i32 %23, %22
  %25 = shl nsw i32 %24, 1
  %26 = sitofp i32 %25 to float
  %27 = fsub float %.sroa.8.8.vec.extract, %26
  %28 = tail call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %29 = tail call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 16)
  %30 = tail call i32 @GuiGetStyle(i32 noundef 0, i32 noundef 16)
  %31 = sitofp i32 %30 to float
  %32 = fadd float %31, 2.000000e+00
  %.sroa.7.12.vec.insert = insertelement <2 x float> <float 4.000000e+00, float poison>, float %32, i64 1
  %33 = tail call i32 @GuiGetStyle(i32 noundef 0, i32 noundef 16)
  %34 = sitofp i32 %33 to float
  %35 = load i32, ptr @_ZL7guiFont, align 8, !tbaa !9
  %36 = sitofp i32 %35 to float
  %37 = fdiv float %34, %36
  %.not = icmp eq i32 %9, 3
  br i1 %.not, label %.thread178, label %38

38:                                               ; preds = %5
  %39 = load i8, ptr @_ZL9guiLocked, align 1, !tbaa !14, !range !16, !noundef !17
  %40 = trunc nuw i8 %39 to i1
  br i1 %40, label %96, label %41

41:                                               ; preds = %38
  %42 = tail call <2 x float> @GetMousePosition()
  br i1 %4, label %43, label %93

43:                                               ; preds = %41
  %44 = tail call i32 @GetCharPressed()
  %45 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %2) #7
  %46 = trunc i64 %45 to i32
  %47 = add nsw i32 %3, -1
  %48 = icmp sgt i32 %47, %46
  br i1 %48, label %49, label %64

49:                                               ; preds = %43
  %50 = tail call zeroext i1 @IsKeyPressed(i32 noundef 257)
  br i1 %50, label %51, label %55

51:                                               ; preds = %49
  %sext162 = shl i64 %45, 32
  %52 = ashr exact i64 %sext162, 32
  %53 = getelementptr inbounds i8, ptr %2, i64 %52
  store i8 10, ptr %53, align 1, !tbaa !18
  %54 = add nsw i32 %46, 1
  br label %64

55:                                               ; preds = %49
  %56 = icmp sgt i32 %44, 31
  br i1 %56, label %57, label %64

57:                                               ; preds = %55
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #8
  store i32 0, ptr %6, align 4, !tbaa !19
  %58 = call ptr @CodepointToUTF8(i32 noundef %44, ptr noundef nonnull %6)
  %sext = shl i64 %45, 32
  %59 = ashr exact i64 %sext, 32
  %60 = getelementptr inbounds i8, ptr %2, i64 %59
  %61 = load i32, ptr %6, align 4, !tbaa !19
  %62 = sext i32 %61 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %60, ptr align 1 %58, i64 %62, i1 false)
  %63 = add nsw i32 %61, %46
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #8
  br label %64

64:                                               ; preds = %51, %57, %55, %43
  %.0152 = phi i32 [ %54, %51 ], [ %63, %57 ], [ %46, %55 ], [ %46, %43 ]
  %65 = icmp sgt i32 %.0152, 0
  br i1 %65, label %66, label %89

66:                                               ; preds = %64
  %67 = call zeroext i1 @IsKeyPressed(i32 noundef 259)
  br i1 %67, label %68, label %89

68:                                               ; preds = %66
  %69 = add nsw i32 %.0152, -1
  %70 = zext nneg i32 %69 to i64
  %71 = getelementptr inbounds i8, ptr %2, i64 %70
  %72 = load i8, ptr %71, align 1, !tbaa !18
  %73 = icmp ult i8 %72, 127
  br i1 %73, label %75, label %.preheader.preheader

.preheader.preheader:                             ; preds = %68
  %74 = zext nneg i32 %69 to i64
  br label %.preheader

75:                                               ; preds = %68
  %76 = zext nneg i32 %.0152 to i64
  %77 = getelementptr i8, ptr %2, i64 %76
  %78 = getelementptr i8, ptr %77, i64 -1
  br label %.sink.split

.preheader:                                       ; preds = %.preheader.preheader, %.preheader
  %indvars.iv = phi i64 [ 0, %.preheader.preheader ], [ %indvars.iv.next, %.preheader ]
  %79 = sub nsw i64 %74, %indvars.iv
  %80 = getelementptr inbounds i8, ptr %2, i64 %79
  %81 = load i8, ptr %80, align 1, !tbaa !18
  %82 = and i8 %81, 64
  %83 = icmp eq i8 %82, 0
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  br i1 %83, label %.preheader, label %84, !llvm.loop !20

84:                                               ; preds = %.preheader
  %85 = trunc nuw nsw i64 %indvars.iv to i32
  %.neg = xor i32 %85, -1
  %86 = add nsw i32 %.0152, %.neg
  %87 = sext i32 %86 to i64
  %88 = getelementptr inbounds i8, ptr %2, i64 %87
  br label %.sink.split

.sink.split:                                      ; preds = %75, %84
  %.sink = phi ptr [ %88, %84 ], [ %78, %75 ]
  store i8 0, ptr %.sink, align 1, !tbaa !18
  br label %89

89:                                               ; preds = %.sink.split, %66, %64
  %90 = call zeroext i1 @CheckCollisionPointRec(<2 x float> %42, <2 x float> %0, <2 x float> %1)
  br i1 %90, label %.thread, label %91

91:                                               ; preds = %89
  %92 = call zeroext i1 @IsMouseButtonPressed(i32 noundef 0)
  br label %.thread

93:                                               ; preds = %41
  %94 = tail call zeroext i1 @CheckCollisionPointRec(<2 x float> %42, <2 x float> %0, <2 x float> %1)
  br i1 %94, label %.thread173, label %96

.thread173:                                       ; preds = %93
  %95 = tail call zeroext i1 @IsMouseButtonPressed(i32 noundef 0)
  br label %115

96:                                               ; preds = %93, %38
  %cond = icmp eq i32 %9, 2
  br i1 %cond, label %.thread, label %115

.thread:                                          ; preds = %96, %89, %91
  %.2170 = phi i1 [ false, %96 ], [ %92, %91 ], [ false, %89 ]
  %97 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %98 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 6)
  %99 = call i32 @GetColor(i32 noundef %98)
  %100 = load float, ptr @_ZL8guiAlpha, align 4, !tbaa !22
  %101 = call i32 @Fade(i32 %99, float noundef %100)
  %102 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 7)
  %103 = call i32 @GetColor(i32 noundef %102)
  %104 = load float, ptr @_ZL8guiAlpha, align 4, !tbaa !22
  %105 = call i32 @Fade(i32 %103, float noundef %104)
  call void @_ZL16GuiDrawRectangle9Rectanglei5ColorS0_(<2 x float> %0, <2 x float> %1, i32 noundef %97, i32 %101, i32 %105)
  br label %122

.thread178:                                       ; preds = %5
  %106 = tail call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 12)
  %107 = tail call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 9)
  %108 = tail call i32 @GetColor(i32 noundef %107)
  %109 = load float, ptr @_ZL8guiAlpha, align 4, !tbaa !22
  %110 = tail call i32 @Fade(i32 %108, float noundef %109)
  %111 = tail call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 10)
  %112 = tail call i32 @GetColor(i32 noundef %111)
  %113 = load float, ptr @_ZL8guiAlpha, align 4, !tbaa !22
  %114 = tail call i32 @Fade(i32 %112, float noundef %113)
  tail call void @_ZL16GuiDrawRectangle9Rectanglei5ColorS0_(<2 x float> %0, <2 x float> %1, i32 noundef %106, i32 %110, i32 %114)
  br label %122

115:                                              ; preds = %96, %.thread173
  %.1177 = phi i32 [ 1, %.thread173 ], [ %9, %96 ]
  %.2176 = phi i1 [ %95, %.thread173 ], [ false, %96 ]
  %116 = mul nsw i32 %.1177, 3
  %117 = tail call i32 @GuiGetStyle(i32 noundef 9, i32 noundef %116)
  %118 = tail call i32 @GetColor(i32 noundef %117)
  %119 = load float, ptr @_ZL8guiAlpha, align 4, !tbaa !22
  %120 = tail call i32 @Fade(i32 %118, float noundef %119)
  tail call void @_ZL16GuiDrawRectangle9Rectanglei5ColorS0_(<2 x float> %0, <2 x float> %1, i32 noundef 1, i32 %120, i32 0)
  %121 = add nsw i32 %116, 2
  br label %122

122:                                              ; preds = %.thread178, %115, %.thread
  %.1171 = phi i32 [ 11, %.thread178 ], [ %121, %115 ], [ 8, %.thread ]
  %.2169 = phi i1 [ false, %.thread178 ], [ %.2176, %115 ], [ %.2170, %.thread ]
  %.sroa.033.0.vec.insert = insertelement <2 x float> poison, float %15, i64 0
  %.sroa.033.4.vec.insert = insertelement <2 x float> %.sroa.033.0.vec.insert, float %21, i64 1
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #8
  store i32 0, ptr %7, align 4, !tbaa !19
  %123 = load i8, ptr %2, align 1, !tbaa !18
  %.not163183 = icmp eq i8 %123, 0
  br i1 %.not163183, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %122
  %124 = fadd float %15, %27
  br label %125

._crit_edge:                                      ; preds = %168, %122
  %.sroa.033.0.lcssa = phi <2 x float> [ %.sroa.033.4.vec.insert, %122 ], [ %.sroa.033.3, %168 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #8
  br i1 %4, label %174, label %179

125:                                              ; preds = %.lr.ph, %168
  %126 = phi ptr [ %2, %.lr.ph ], [ %172, %168 ]
  %.sroa.033.0185 = phi <2 x float> [ %.sroa.033.4.vec.insert, %.lr.ph ], [ %.sroa.033.3, %168 ]
  %.0154184 = phi i32 [ 0, %.lr.ph ], [ %170, %168 ]
  %127 = call i32 @GetCodepoint(ptr noundef nonnull %126, ptr noundef nonnull %7)
  %128 = call i32 @GetGlyphIndex(ptr noundef nonnull byval(%struct.Font) align 8 @_ZL7guiFont, i32 noundef %127)
  %129 = load i32, ptr %7, align 4, !tbaa !19
  %130 = icmp eq i32 %129, 1
  %131 = icmp eq i32 %127, 10
  %or.cond = and i1 %131, %130
  br i1 %or.cond, label %132, label %139

132:                                              ; preds = %125
  %133 = load i32, ptr @_ZL7guiFont, align 8, !tbaa !9
  %134 = sitofp i32 %133 to float
  %135 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 17)
  %136 = sitofp i32 %135 to float
  %137 = call float @llvm.fmuladd.f32(float %134, float %37, float %136)
  %.sroa.033.4.vec.extract = extractelement <2 x float> %.sroa.033.0185, i64 1
  %138 = fadd float %.sroa.033.4.vec.extract, %137
  %.sroa.033.0.vec.insert36 = insertelement <2 x float> %.sroa.033.0.vec.insert, float %138, i64 1
  br label %168

139:                                              ; preds = %125
  %140 = load ptr, ptr getelementptr inbounds (i8, ptr @_ZL7guiFont, i64 40), align 8, !tbaa !24
  %141 = sext i32 %128 to i64
  %142 = getelementptr inbounds %struct.GlyphInfo, ptr %140, i64 %141
  %.sroa.517.0..sroa_idx = getelementptr inbounds i8, ptr %142, i64 12
  %.sroa.517.0.copyload = load i32, ptr %.sroa.517.0..sroa_idx, align 4, !tbaa !19
  %.sroa.315.0..sroa_idx = getelementptr inbounds i8, ptr %142, i64 4
  %.sroa.315.0.copyload = load i32, ptr %.sroa.315.0..sroa_idx, align 4, !tbaa !19
  %143 = load ptr, ptr getelementptr inbounds (i8, ptr @_ZL7guiFont, i64 32), align 8, !tbaa !25
  %.sroa.322.0..sroa_idx = getelementptr inbounds %struct.Rectangle, ptr %143, i64 %141, i32 2
  %.sroa.322.0.copyload = load float, ptr %.sroa.322.0..sroa_idx, align 4, !tbaa !22
  %.not164 = icmp eq i32 %.sroa.517.0.copyload, 0
  %144 = sitofp i32 %.sroa.315.0.copyload to float
  %145 = fadd float %.sroa.322.0.copyload, %144
  %146 = fptosi float %145 to i32
  %.0156 = select i1 %.not164, i32 %146, i32 %.sroa.517.0.copyload
  %.sroa.033.0.vec.extract = extractelement <2 x float> %.sroa.033.0185, i64 0
  %147 = sitofp i32 %.0156 to float
  %148 = call float @llvm.fmuladd.f32(float %147, float %37, float %.sroa.033.0.vec.extract)
  %149 = fcmp ogt float %148, %124
  br i1 %149, label %150, label %157

150:                                              ; preds = %139
  %151 = load i32, ptr @_ZL7guiFont, align 8, !tbaa !9
  %152 = sitofp i32 %151 to float
  %153 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 17)
  %154 = sitofp i32 %153 to float
  %155 = call float @llvm.fmuladd.f32(float %152, float %37, float %154)
  %.sroa.033.4.vec.extract50 = extractelement <2 x float> %.sroa.033.0185, i64 1
  %156 = fadd float %.sroa.033.4.vec.extract50, %155
  %.sroa.033.0.vec.insert39 = insertelement <2 x float> %.sroa.033.0.vec.insert, float %156, i64 1
  br label %157

157:                                              ; preds = %139, %150
  %.sroa.033.0.vec.extract41.pre-phi = phi float [ %.sroa.033.0.vec.extract, %139 ], [ %15, %150 ]
  %.sroa.033.1 = phi <2 x float> [ %.sroa.033.0185, %139 ], [ %.sroa.033.0.vec.insert39, %150 ]
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(48) %8, ptr noundef nonnull align 8 dereferenceable(48) @_ZL7guiFont, i64 48, i1 false), !tbaa.struct !26
  %158 = call i32 @GuiGetStyle(i32 noundef 0, i32 noundef 16)
  %159 = sitofp i32 %158 to float
  %160 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef %.1171)
  %161 = call i32 @GetColor(i32 noundef %160)
  %162 = load float, ptr @_ZL8guiAlpha, align 4, !tbaa !22
  %163 = call i32 @Fade(i32 %161, float noundef %162)
  call void @DrawTextCodepoint(ptr noundef nonnull byval(%struct.Font) align 8 %8, i32 noundef %127, <2 x float> %.sroa.033.1, float noundef %159, i32 %163)
  %164 = call i32 @GuiGetStyle(i32 noundef 0, i32 noundef 17)
  %165 = sitofp i32 %164 to float
  %166 = call float @llvm.fmuladd.f32(float %147, float %37, float %165)
  %167 = fadd float %.sroa.033.0.vec.extract41.pre-phi, %166
  %.sroa.033.0.vec.insert43 = insertelement <2 x float> %.sroa.033.1, float %167, i64 0
  br label %168

168:                                              ; preds = %157, %132
  %.sroa.033.3 = phi <2 x float> [ %.sroa.033.0.vec.insert36, %132 ], [ %.sroa.033.0.vec.insert43, %157 ]
  %169 = load i32, ptr %7, align 4, !tbaa !19
  %170 = add nsw i32 %169, %.0154184
  %171 = sext i32 %170 to i64
  %172 = getelementptr inbounds i8, ptr %2, i64 %171
  %173 = load i8, ptr %172, align 1, !tbaa !18
  %.not163 = icmp eq i8 %173, 0
  br i1 %.not163, label %._crit_edge, label %125, !llvm.loop !28

174:                                              ; preds = %._crit_edge
  %175 = call i32 @GuiGetStyle(i32 noundef 9, i32 noundef 6)
  %176 = call i32 @GetColor(i32 noundef %175)
  %177 = load float, ptr @_ZL8guiAlpha, align 4, !tbaa !22
  %178 = call i32 @Fade(i32 %176, float noundef %177)
  call void @_ZL16GuiDrawRectangle9Rectanglei5ColorS0_(<2 x float> %.sroa.033.0.lcssa, <2 x float> %.sroa.7.12.vec.insert, i32 noundef 0, i32 0, i32 %178)
  br label %179

179:                                              ; preds = %174, %._crit_edge
  ret i1 %.2169
}

declare i32 @GetCodepoint(ptr noundef, ptr noundef) local_unnamed_addr #5

declare i32 @GetGlyphIndex(ptr noundef byval(%struct.Font) align 8, i32 noundef) local_unnamed_addr #5

declare void @DrawTextCodepoint(ptr noundef byval(%struct.Font) align 8, i32 noundef, <2 x float>, float noundef, i32) local_unnamed_addr #5

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"_ZTS15GuiControlState", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !11, i64 0}
!10 = !{!"_ZTS4Font", !11, i64 0, !11, i64 4, !11, i64 8, !12, i64 12, !13, i64 32, !13, i64 40}
!11 = !{!"int", !7, i64 0}
!12 = !{!"_ZTS7Texture", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16}
!13 = !{!"any pointer", !7, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"bool", !7, i64 0}
!16 = !{i8 0, i8 2}
!17 = !{}
!18 = !{!7, !7, i64 0}
!19 = !{!11, !11, i64 0}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{!23, !23, i64 0}
!23 = !{!"float", !7, i64 0}
!24 = !{!10, !13, i64 40}
!25 = !{!10, !13, i64 32}
!26 = !{i64 0, i64 4, !19, i64 4, i64 4, !19, i64 8, i64 4, !19, i64 12, i64 4, !19, i64 16, i64 4, !19, i64 20, i64 4, !19, i64 24, i64 4, !19, i64 28, i64 4, !19, i64 32, i64 8, !27, i64 40, i64 8, !27}
!27 = !{!13, !13, i64 0}
!28 = distinct !{!28, !21}


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