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

; 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.GuiFileDialogState = type { %struct.Vector2, %struct.Vector2, i8, i8, [256 x i8], i32, i8, i32, i8, [256 x i8], i8, i8, i32, i32, ptr, i32, [256 x i8], [256 x i8], [256 x i8], i32 }
%struct.Vector2 = type { float, float }

@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [4 x i8], align 1

; 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 nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #1

declare ptr @GetDirectoryPath(ptr noundef) #2

; Function Attrs: nounwind uwtable
define dso_local void @InitGuiFileDialog(ptr dead_on_unwind noalias writable sret(%struct.GuiFileDialogState) align 8 %0, i32 noundef %1, i32 noundef %2, ptr noundef %3, i1 noundef zeroext %4) #3 {
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca i8, align 1
  %10 = alloca %struct.Vector2, align 4
  store i32 %1, ptr %6, align 4, !tbaa !5
  store i32 %2, ptr %7, align 4, !tbaa !5
  store ptr %3, ptr %8, align 8, !tbaa !9
  %11 = zext i1 %4 to i8
  store i8 %11, ptr %9, align 1, !tbaa !11
  call void @llvm.memset.p0.i64(ptr align 8 %0, i8 0, i64 1344, i1 false)
  %12 = load i32, ptr %6, align 4, !tbaa !5
  %13 = icmp eq i32 %12, -1
  br i1 %13, label %14, label %15

14:                                               ; preds = %5
  br label %17

15:                                               ; preds = %5
  %16 = load i32, ptr %6, align 4, !tbaa !5
  br label %17

17:                                               ; preds = %15, %14
  %18 = phi i32 [ 440, %14 ], [ %16, %15 ]
  %19 = sitofp i32 %18 to float
  %20 = getelementptr inbounds %struct.GuiFileDialogState, ptr %0, i32 0, i32 1
  %21 = getelementptr inbounds %struct.Vector2, ptr %20, i32 0, i32 0
  store float %19, ptr %21, align 8, !tbaa !13
  %22 = load i32, ptr %7, align 4, !tbaa !5
  %23 = icmp eq i32 %22, -1
  br i1 %23, label %24, label %25

24:                                               ; preds = %17
  br label %27

25:                                               ; preds = %17
  %26 = load i32, ptr %7, align 4, !tbaa !5
  br label %27

27:                                               ; preds = %25, %24
  %28 = phi i32 [ 310, %24 ], [ %26, %25 ]
  %29 = sitofp i32 %28 to float
  %30 = getelementptr inbounds %struct.GuiFileDialogState, ptr %0, i32 0, i32 1
  %31 = getelementptr inbounds %struct.Vector2, ptr %30, i32 0, i32 1
  store float %29, ptr %31, align 4, !tbaa !17
  %32 = getelementptr inbounds %struct.GuiFileDialogState, ptr %0, i32 0, i32 0
  %33 = getelementptr inbounds %struct.Vector2, ptr %10, i32 0, i32 0
  %34 = call i32 @GetScreenWidth()
  %35 = sdiv i32 %34, 2
  %36 = sitofp i32 %35 to float
  %37 = getelementptr inbounds %struct.GuiFileDialogState, ptr %0, i32 0, i32 1
  %38 = getelementptr inbounds %struct.Vector2, ptr %37, i32 0, i32 0
  %39 = load float, ptr %38, align 8, !tbaa !13
  %40 = fdiv float %39, 2.000000e+00
  %41 = fsub float %36, %40
  store float %41, ptr %33, align 4, !tbaa !18
  %42 = getelementptr inbounds %struct.Vector2, ptr %10, i32 0, i32 1
  %43 = call i32 @GetScreenHeight()
  %44 = sdiv i32 %43, 2
  %45 = sitofp i32 %44 to float
  %46 = getelementptr inbounds %struct.GuiFileDialogState, ptr %0, i32 0, i32 1
  %47 = getelementptr inbounds %struct.Vector2, ptr %46, i32 0, i32 1
  %48 = load float, ptr %47, align 4, !tbaa !17
  %49 = fdiv float %48, 2.000000e+00
  %50 = fsub float %45, %49
  store float %50, ptr %42, align 4, !tbaa !19
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %32, ptr align 4 %10, i64 8, i1 false), !tbaa.struct !20
  %51 = load i8, ptr %9, align 1, !tbaa !11, !range !22, !noundef !23
  %52 = trunc i8 %51 to i1
  %53 = getelementptr inbounds %struct.GuiFileDialogState, ptr %0, i32 0, i32 2
  %54 = zext i1 %52 to i8
  store i8 %54, ptr %53, align 8, !tbaa !24
  %55 = getelementptr inbounds %struct.GuiFileDialogState, ptr %0, i32 0, i32 3
  store i8 0, ptr %55, align 1, !tbaa !25
  %56 = getelementptr inbounds %struct.GuiFileDialogState, ptr %0, i32 0, i32 7
  store i32 -1, ptr %56, align 4, !tbaa !26
  %57 = getelementptr inbounds %struct.GuiFileDialogState, ptr %0, i32 0, i32 7
  %58 = load i32, ptr %57, align 4, !tbaa !26
  %59 = getelementptr inbounds %struct.GuiFileDialogState, ptr %0, i32 0, i32 19
  store i32 %58, ptr %59, align 4, !tbaa !27
  %60 = getelementptr inbounds %struct.GuiFileDialogState, ptr %0, i32 0, i32 5
  store i32 0, ptr %60, align 4, !tbaa !28
  %61 = getelementptr inbounds %struct.GuiFileDialogState, ptr %0, i32 0, i32 8
  store i8 0, ptr %61, align 8, !tbaa !29
  %62 = getelementptr inbounds %struct.GuiFileDialogState, ptr %0, i32 0, i32 10
  store i8 0, ptr %62, align 1, !tbaa !30
  %63 = getelementptr inbounds %struct.GuiFileDialogState, ptr %0, i32 0, i32 11
  store i8 0, ptr %63, align 2, !tbaa !31
  %64 = getelementptr inbounds %struct.GuiFileDialogState, ptr %0, i32 0, i32 12
  store i32 0, ptr %64, align 4, !tbaa !32
  %65 = getelementptr inbounds %struct.GuiFileDialogState, ptr %0, i32 0, i32 9
  %66 = getelementptr inbounds [256 x i8], ptr %65, i64 0, i64 0
  %67 = call ptr @strcpy(ptr noundef %66, ptr noundef @.str.8) #5
  %68 = load ptr, ptr %8, align 8, !tbaa !9
  %69 = icmp ne ptr %68, null
  br i1 %69, label %70, label %78

70:                                               ; preds = %27
  %71 = load ptr, ptr %8, align 8, !tbaa !9
  %72 = call zeroext i1 @DirectoryExists(ptr noundef %71)
  br i1 %72, label %73, label %78

73:                                               ; preds = %70
  %74 = getelementptr inbounds %struct.GuiFileDialogState, ptr %0, i32 0, i32 4
  %75 = getelementptr inbounds [256 x i8], ptr %74, i64 0, i64 0
  %76 = load ptr, ptr %8, align 8, !tbaa !9
  %77 = call ptr @strcpy(ptr noundef %75, ptr noundef %76) #5
  br label %101

78:                                               ; preds = %70, %27
  %79 = load ptr, ptr %8, align 8, !tbaa !9
  %80 = icmp ne ptr %79, null
  br i1 %80, label %81, label %95

81:                                               ; preds = %78
  %82 = load ptr, ptr %8, align 8, !tbaa !9
  %83 = call zeroext i1 @FileExists(ptr noundef %82)
  br i1 %83, label %84, label %95

84:                                               ; preds = %81
  %85 = getelementptr inbounds %struct.GuiFileDialogState, ptr %0, i32 0, i32 4
  %86 = getelementptr inbounds [256 x i8], ptr %85, i64 0, i64 0
  %87 = load ptr, ptr %8, align 8, !tbaa !9
  %88 = call ptr @GetDirectoryPath(ptr noundef %87)
  %89 = call ptr @strcpy(ptr noundef %86, ptr noundef %88) #5
  %90 = getelementptr inbounds %struct.GuiFileDialogState, ptr %0, i32 0, i32 9
  %91 = getelementptr inbounds [256 x i8], ptr %90, i64 0, i64 0
  %92 = load ptr, ptr %8, align 8, !tbaa !9
  %93 = call ptr @GetFileName(ptr noundef %92)
  %94 = call ptr @strcpy(ptr noundef %91, ptr noundef %93) #5
  br label %100

95:                                               ; preds = %81, %78
  %96 = getelementptr inbounds %struct.GuiFileDialogState, ptr %0, i32 0, i32 4
  %97 = getelementptr inbounds [256 x i8], ptr %96, i64 0, i64 0
  %98 = call ptr @GetWorkingDirectory()
  %99 = call ptr @strcpy(ptr noundef %97, ptr noundef %98) #5
  br label %100

100:                                              ; preds = %95, %84
  br label %101

101:                                              ; preds = %100, %73
  %102 = getelementptr inbounds %struct.GuiFileDialogState, ptr %0, i32 0, i32 17
  %103 = getelementptr inbounds [256 x i8], ptr %102, i64 0, i64 0
  %104 = getelementptr inbounds %struct.GuiFileDialogState, ptr %0, i32 0, i32 4
  %105 = getelementptr inbounds [256 x i8], ptr %104, i64 0, i64 0
  %106 = call ptr @strcpy(ptr noundef %103, ptr noundef %105) #5
  %107 = getelementptr inbounds %struct.GuiFileDialogState, ptr %0, i32 0, i32 18
  %108 = getelementptr inbounds [256 x i8], ptr %107, i64 0, i64 0
  %109 = getelementptr inbounds %struct.GuiFileDialogState, ptr %0, i32 0, i32 9
  %110 = getelementptr inbounds [256 x i8], ptr %109, i64 0, i64 0
  %111 = call ptr @strcpy(ptr noundef %108, ptr noundef %110) #5
  %112 = getelementptr inbounds %struct.GuiFileDialogState, ptr %0, i32 0, i32 16
  %113 = getelementptr inbounds [256 x i8], ptr %112, i64 0, i64 0
  %114 = call ptr @strcpy(ptr noundef %113, ptr noundef @.str.9) #5
  %115 = getelementptr inbounds %struct.GuiFileDialogState, ptr %0, i32 0, i32 15
  store i32 0, ptr %115, align 8, !tbaa !33
  %116 = getelementptr inbounds %struct.GuiFileDialogState, ptr %0, i32 0, i32 14
  store ptr null, ptr %116, align 8, !tbaa !34
  ret void
}

declare i32 @GetScreenWidth() #2

declare i32 @GetScreenHeight() #2

; Function Attrs: nounwind
declare ptr @strcpy(ptr noundef, ptr noundef) #4

declare zeroext i1 @DirectoryExists(ptr noundef) #2

declare zeroext i1 @FileExists(ptr noundef) #2

declare ptr @GetFileName(ptr noundef) #2

declare ptr @GetWorkingDirectory() #2

attributes #0 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #2 = { "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 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"_Bool", !7, i64 0}
!13 = !{!14, !16, i64 8}
!14 = !{!"", !15, i64 0, !15, i64 8, !12, i64 16, !12, i64 17, !7, i64 18, !6, i64 276, !12, i64 280, !6, i64 284, !12, i64 288, !7, i64 289, !12, i64 545, !12, i64 546, !6, i64 548, !6, i64 552, !10, i64 560, !6, i64 568, !7, i64 572, !7, i64 828, !7, i64 1084, !6, i64 1340}
!15 = !{!"Vector2", !16, i64 0, !16, i64 4}
!16 = !{!"float", !7, i64 0}
!17 = !{!14, !16, i64 12}
!18 = !{!15, !16, i64 0}
!19 = !{!15, !16, i64 4}
!20 = !{i64 0, i64 4, !21, i64 4, i64 4, !21}
!21 = !{!16, !16, i64 0}
!22 = !{i8 0, i8 2}
!23 = !{}
!24 = !{!14, !12, i64 16}
!25 = !{!14, !12, i64 17}
!26 = !{!14, !6, i64 284}
!27 = !{!14, !6, i64 1340}
!28 = !{!14, !6, i64 276}
!29 = !{!14, !12, i64 288}
!30 = !{!14, !12, i64 545}
!31 = !{!14, !12, i64 546}
!32 = !{!14, !6, i64 548}
!33 = !{!14, !6, i64 568}
!34 = !{!14, !10, i64 560}


; 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.GuiFileDialogState = type { %struct.Vector2, %struct.Vector2, i8, i8, [256 x i8], i32, i8, i32, i8, [256 x i8], i8, i8, i32, i32, ptr, i32, [256 x i8], [256 x i8], [256 x i8], i32 }
%struct.Vector2 = type { float, float }

@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [4 x i8], align 1

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

declare ptr @GetDirectoryPath(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local void @InitGuiFileDialog(ptr dead_on_unwind noalias writable sret(%struct.GuiFileDialogState) align 8 %0, i32 noundef %1, i32 noundef %2, ptr noundef %3, i1 noundef zeroext %4) local_unnamed_addr #2 {
  %6 = zext i1 %4 to i8
  %7 = getelementptr inbounds i8, ptr %0, i64 16
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1344) %7, i8 0, i64 1328, i1 false)
  %8 = insertelement <2 x i32> poison, i32 %1, i64 0
  %9 = insertelement <2 x i32> %8, i32 %2, i64 1
  %10 = icmp eq <2 x i32> %9, <i32 -1, i32 -1>
  %11 = getelementptr inbounds i8, ptr %0, i64 8
  %12 = select <2 x i1> %10, <2 x i32> <i32 440, i32 310>, <2 x i32> %9
  %13 = sitofp <2 x i32> %12 to <2 x float>
  store <2 x float> %13, ptr %11, align 8, !tbaa !5
  %14 = tail call i32 @GetScreenWidth() #4
  %15 = tail call i32 @GetScreenHeight() #4
  %16 = insertelement <2 x i32> poison, i32 %14, i64 0
  %17 = insertelement <2 x i32> %16, i32 %15, i64 1
  %18 = sdiv <2 x i32> %17, <i32 2, i32 2>
  %19 = sitofp <2 x i32> %18 to <2 x float>
  %20 = fmul <2 x float> %13, <float 5.000000e-01, float 5.000000e-01>
  %21 = fsub <2 x float> %19, %20
  store <2 x float> %21, ptr %0, align 8, !tbaa !5
  %22 = getelementptr inbounds i8, ptr %0, i64 16
  store i8 %6, ptr %22, align 8, !tbaa !9
  %23 = getelementptr inbounds i8, ptr %0, i64 17
  store i8 0, ptr %23, align 1, !tbaa !15
  %24 = getelementptr inbounds i8, ptr %0, i64 284
  store i32 -1, ptr %24, align 4, !tbaa !16
  %25 = getelementptr inbounds i8, ptr %0, i64 1340
  store i32 -1, ptr %25, align 4, !tbaa !17
  %26 = getelementptr inbounds i8, ptr %0, i64 276
  store i32 0, ptr %26, align 4, !tbaa !18
  %27 = getelementptr inbounds i8, ptr %0, i64 288
  store i8 0, ptr %27, align 8, !tbaa !19
  %28 = getelementptr inbounds i8, ptr %0, i64 545
  store i8 0, ptr %28, align 1, !tbaa !20
  %29 = getelementptr inbounds i8, ptr %0, i64 546
  store i8 0, ptr %29, align 2, !tbaa !21
  %30 = getelementptr inbounds i8, ptr %0, i64 548
  store i32 0, ptr %30, align 4, !tbaa !22
  %31 = getelementptr inbounds i8, ptr %0, i64 289
  %32 = tail call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %31, ptr noundef nonnull dereferenceable(1) @.str.8) #4
  %.not = icmp eq ptr %3, null
  br i1 %.not, label %.critedge, label %33

33:                                               ; preds = %5
  %34 = tail call zeroext i1 @DirectoryExists(ptr noundef nonnull %3) #4
  br i1 %34, label %35, label %38

35:                                               ; preds = %33
  %36 = getelementptr inbounds i8, ptr %0, i64 18
  %37 = tail call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %36, ptr noundef nonnull dereferenceable(1) %3) #4
  br label %49

38:                                               ; preds = %33
  %39 = tail call zeroext i1 @FileExists(ptr noundef nonnull %3) #4
  br i1 %39, label %40, label %.critedge

40:                                               ; preds = %38
  %41 = getelementptr inbounds i8, ptr %0, i64 18
  %42 = tail call ptr @GetDirectoryPath(ptr noundef nonnull %3) #4
  %43 = tail call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %41, ptr noundef nonnull dereferenceable(1) %42) #4
  %44 = tail call ptr @GetFileName(ptr noundef nonnull %3) #4
  %45 = tail call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %31, ptr noundef nonnull dereferenceable(1) %44) #4
  br label %49

.critedge:                                        ; preds = %5, %38
  %46 = getelementptr inbounds i8, ptr %0, i64 18
  %47 = tail call ptr @GetWorkingDirectory() #4
  %48 = tail call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %46, ptr noundef nonnull dereferenceable(1) %47) #4
  br label %49

49:                                               ; preds = %40, %.critedge, %35
  %50 = getelementptr inbounds i8, ptr %0, i64 828
  %51 = getelementptr inbounds i8, ptr %0, i64 18
  %52 = tail call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %50, ptr noundef nonnull dereferenceable(1) %51) #4
  %53 = getelementptr inbounds i8, ptr %0, i64 1084
  %54 = tail call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %53, ptr noundef nonnull dereferenceable(1) %31) #4
  %55 = getelementptr inbounds i8, ptr %0, i64 572
  %56 = tail call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %55, ptr noundef nonnull dereferenceable(1) @.str.9) #4
  %57 = getelementptr inbounds i8, ptr %0, i64 568
  store i32 0, ptr %57, align 8, !tbaa !23
  %58 = getelementptr inbounds i8, ptr %0, i64 560
  store ptr null, ptr %58, align 8, !tbaa !24
  ret void
}

declare i32 @GetScreenWidth() local_unnamed_addr #1

declare i32 @GetScreenHeight() local_unnamed_addr #1

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: readwrite)
declare ptr @strcpy(ptr noalias noundef returned writeonly, ptr noalias nocapture noundef readonly) local_unnamed_addr #3

declare zeroext i1 @DirectoryExists(ptr noundef) local_unnamed_addr #1

declare zeroext i1 @FileExists(ptr noundef) local_unnamed_addr #1

declare ptr @GetFileName(ptr noundef) local_unnamed_addr #1

declare ptr @GetWorkingDirectory() local_unnamed_addr #1

attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 = { mustprogress nofree nounwind willreturn memory(argmem: readwrite) "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 = { 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 = !{!"float", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !12, i64 16}
!10 = !{!"", !11, i64 0, !11, i64 8, !12, i64 16, !12, i64 17, !7, i64 18, !13, i64 276, !12, i64 280, !13, i64 284, !12, i64 288, !7, i64 289, !12, i64 545, !12, i64 546, !13, i64 548, !13, i64 552, !14, i64 560, !13, i64 568, !7, i64 572, !7, i64 828, !7, i64 1084, !13, i64 1340}
!11 = !{!"Vector2", !6, i64 0, !6, i64 4}
!12 = !{!"_Bool", !7, i64 0}
!13 = !{!"int", !7, i64 0}
!14 = !{!"any pointer", !7, i64 0}
!15 = !{!10, !12, i64 17}
!16 = !{!10, !13, i64 284}
!17 = !{!10, !13, i64 1340}
!18 = !{!10, !13, i64 276}
!19 = !{!10, !12, i64 288}
!20 = !{!10, !12, i64 545}
!21 = !{!10, !12, i64 546}
!22 = !{!10, !13, i64 548}
!23 = !{!10, !13, i64 568}
!24 = !{!10, !14, i64 560}


; Effective O3 passes: DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass