; LLVM IR from DanEngelbrecht/longtail :: cmd (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.anon = type { i32, [256 x %struct._kgflags_flag], i32, [512 x ptr], i32, [512 x %struct._kgflags_error], ptr, i32, i32, ptr, ptr }
%struct._kgflags_flag = type { ptr, ptr, %union.anon, %union.anon.0, i8, i8, i8, i32 }
%union.anon = type { ptr }
%union.anon.0 = type { ptr }
%struct._kgflags_error = type { ptr, ptr, i32 }

@_kgflags_g = external hidden global %struct.anon, align 8
@.str.1 = external hidden unnamed_addr constant [3 x i8], align 1

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

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

; Function Attrs: nounwind uwtable
declare hidden void @_kgflags_add_error(i32 noundef, ptr noundef, ptr noundef) #1

; Function Attrs: nounwind uwtable
define dso_local zeroext i1 @kgflags_parse(i32 noundef %0, ptr noundef %1) #1 {
  %3 = alloca i1, align 1
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i8, align 1
  %9 = alloca i8, align 1
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  %14 = load i32, ptr %4, align 4, !tbaa !5
  store i32 %14, ptr getelementptr inbounds (%struct.anon, ptr @_kgflags_g, i32 0, i32 8), align 4, !tbaa !11
  %15 = load ptr, ptr %5, align 8, !tbaa !9
  store ptr %15, ptr getelementptr inbounds (%struct.anon, ptr @_kgflags_g, i32 0, i32 9), align 8, !tbaa !13
  store i32 1, ptr getelementptr inbounds (%struct.anon, ptr @_kgflags_g, i32 0, i32 7), align 8, !tbaa !14
  %16 = load ptr, ptr getelementptr inbounds (%struct.anon, ptr @_kgflags_g, i32 0, i32 6), align 8, !tbaa !15
  %17 = icmp eq ptr %16, null
  br i1 %17, label %18, label %19

18:                                               ; preds = %2
  store ptr @.str.1, ptr getelementptr inbounds (%struct.anon, ptr @_kgflags_g, i32 0, i32 6), align 8, !tbaa !15
  br label %19

19:                                               ; preds = %18, %2
  %20 = load i32, ptr getelementptr inbounds (%struct.anon, ptr @_kgflags_g, i32 0, i32 4), align 8, !tbaa !16
  %21 = icmp sgt i32 %20, 0
  br i1 %21, label %22, label %23

22:                                               ; preds = %19
  store i1 false, ptr %3, align 1
  br label %103

23:                                               ; preds = %19
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #2
  store ptr null, ptr %6, align 8, !tbaa !9
  br label %24

24:                                               ; preds = %64, %62, %23
  %25 = call ptr @_kgflags_consume_arg()
  store ptr %25, ptr %6, align 8, !tbaa !9
  %26 = icmp ne ptr %25, null
  br i1 %26, label %27, label %65

27:                                               ; preds = %24
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #2
  store ptr null, ptr %7, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %8) #2
  %28 = load ptr, ptr %6, align 8, !tbaa !9
  %29 = call zeroext i1 @_kgflags_is_flag(ptr noundef %28)
  %30 = zext i1 %29 to i8
  store i8 %30, ptr %8, align 1, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 1, ptr %9) #2
  store i8 0, ptr %9, align 1, !tbaa !17
  %31 = load i8, ptr %8, align 1, !tbaa !17, !range !19, !noundef !20
  %32 = trunc i8 %31 to i1
  br i1 %32, label %33, label %46

33:                                               ; preds = %27
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #2
  %34 = load ptr, ptr %6, align 8, !tbaa !9
  %35 = call ptr @_kgflags_get_flag_name(ptr noundef %34)
  store ptr %35, ptr %10, align 8, !tbaa !9
  %36 = load ptr, ptr %10, align 8, !tbaa !9
  %37 = call ptr @_kgflags_get_flag(ptr noundef %36, ptr noundef %9)
  store ptr %37, ptr %7, align 8, !tbaa !9
  %38 = load ptr, ptr %7, align 8, !tbaa !9
  %39 = icmp eq ptr %38, null
  br i1 %39, label %40, label %42

40:                                               ; preds = %33
  %41 = load ptr, ptr %10, align 8, !tbaa !9
  call void @_kgflags_add_error(i32 noundef 2, ptr noundef %41, ptr noundef null)
  store i32 2, ptr %11, align 4
  br label %43, !llvm.loop !21

42:                                               ; preds = %33
  store i32 0, ptr %11, align 4
  br label %43

43:                                               ; preds = %42, %40
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #2
  %44 = load i32, ptr %11, align 4
  switch i32 %44, label %62 [
    i32 0, label %45
  ]

45:                                               ; preds = %43
  br label %49

46:                                               ; preds = %27
  %47 = load ptr, ptr %6, align 8, !tbaa !9
  %48 = call zeroext i1 @_kgflags_add_non_flag_arg(ptr noundef %47)
  store i32 2, ptr %11, align 4
  br label %62, !llvm.loop !21

49:                                               ; preds = %45
  %50 = load ptr, ptr %7, align 8, !tbaa !9
  %51 = getelementptr inbounds %struct._kgflags_flag, ptr %50, i32 0, i32 4
  %52 = load i8, ptr %51, align 8, !tbaa !23, !range !19, !noundef !20
  %53 = trunc i8 %52 to i1
  br i1 %53, label %54, label %58

54:                                               ; preds = %49
  %55 = load ptr, ptr %7, align 8, !tbaa !9
  %56 = getelementptr inbounds %struct._kgflags_flag, ptr %55, i32 0, i32 0
  %57 = load ptr, ptr %56, align 8, !tbaa !25
  call void @_kgflags_add_error(i32 noundef 8, ptr noundef %57, ptr noundef null)
  br label %58

58:                                               ; preds = %54, %49
  %59 = load ptr, ptr %7, align 8, !tbaa !9
  %60 = load i8, ptr %9, align 1, !tbaa !17, !range !19, !noundef !20
  %61 = trunc i8 %60 to i1
  call void @_kgflags_parse_flag(ptr noundef %59, i1 noundef zeroext %61)
  store i32 0, ptr %11, align 4
  br label %62

62:                                               ; preds = %58, %46, %43
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #2
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #2
  %63 = load i32, ptr %11, align 4
  switch i32 %63, label %105 [
    i32 0, label %64
    i32 2, label %24
  ]

64:                                               ; preds = %62
  br label %24, !llvm.loop !21

65:                                               ; preds = %24
  call void @_kgflags_assign_default_values()
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #2
  store i32 0, ptr %12, align 4, !tbaa !5
  br label %66

66:                                               ; preds = %94, %65
  %67 = load i32, ptr %12, align 4, !tbaa !5
  %68 = load i32, ptr @_kgflags_g, align 8, !tbaa !26
  %69 = icmp slt i32 %67, %68
  br i1 %69, label %71, label %70

70:                                               ; preds = %66
  store i32 4, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #2
  br label %97

71:                                               ; preds = %66
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #2
  %72 = load i32, ptr %12, align 4, !tbaa !5
  %73 = sext i32 %72 to i64
  %74 = getelementptr inbounds [256 x %struct._kgflags_flag], ptr getelementptr inbounds (%struct.anon, ptr @_kgflags_g, i32 0, i32 1), i64 0, i64 %73
  store ptr %74, ptr %13, align 8, !tbaa !9
  %75 = load ptr, ptr %13, align 8, !tbaa !9
  %76 = getelementptr inbounds %struct._kgflags_flag, ptr %75, i32 0, i32 6
  %77 = load i8, ptr %76, align 2, !tbaa !27, !range !19, !noundef !20
  %78 = trunc i8 %77 to i1
  br i1 %78, label %79, label %93

79:                                               ; preds = %71
  %80 = load ptr, ptr %13, align 8, !tbaa !9
  %81 = getelementptr inbounds %struct._kgflags_flag, ptr %80, i32 0, i32 4
  %82 = load i8, ptr %81, align 8, !tbaa !23, !range !19, !noundef !20
  %83 = trunc i8 %82 to i1
  br i1 %83, label %93, label %84

84:                                               ; preds = %79
  %85 = load ptr, ptr %13, align 8, !tbaa !9
  %86 = getelementptr inbounds %struct._kgflags_flag, ptr %85, i32 0, i32 5
  %87 = load i8, ptr %86, align 1, !tbaa !28, !range !19, !noundef !20
  %88 = trunc i8 %87 to i1
  br i1 %88, label %93, label %89

89:                                               ; preds = %84
  %90 = load ptr, ptr %13, align 8, !tbaa !9
  %91 = getelementptr inbounds %struct._kgflags_flag, ptr %90, i32 0, i32 0
  %92 = load ptr, ptr %91, align 8, !tbaa !25
  call void @_kgflags_add_error(i32 noundef 3, ptr noundef %92, ptr noundef null)
  br label %93

93:                                               ; preds = %89, %84, %79, %71
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #2
  br label %94

94:                                               ; preds = %93
  %95 = load i32, ptr %12, align 4, !tbaa !5
  %96 = add nsw i32 %95, 1
  store i32 %96, ptr %12, align 4, !tbaa !5
  br label %66, !llvm.loop !29

97:                                               ; preds = %70
  %98 = load i32, ptr getelementptr inbounds (%struct.anon, ptr @_kgflags_g, i32 0, i32 4), align 8, !tbaa !16
  %99 = icmp sgt i32 %98, 0
  br i1 %99, label %100, label %101

100:                                              ; preds = %97
  store i1 false, ptr %3, align 1
  store i32 1, ptr %11, align 4
  br label %102

101:                                              ; preds = %97
  store i1 true, ptr %3, align 1
  store i32 1, ptr %11, align 4
  br label %102

102:                                              ; preds = %101, %100
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #2
  br label %103

103:                                              ; preds = %102, %22
  %104 = load i1, ptr %3, align 1
  ret i1 %104

105:                                              ; preds = %62
  unreachable
}

; Function Attrs: nounwind uwtable
declare hidden ptr @_kgflags_consume_arg() #1

; Function Attrs: nounwind uwtable
declare hidden zeroext i1 @_kgflags_is_flag(ptr noundef) #1

; Function Attrs: nounwind uwtable
declare hidden ptr @_kgflags_get_flag_name(ptr noundef) #1

; Function Attrs: nounwind uwtable
declare hidden ptr @_kgflags_get_flag(ptr noundef, ptr noundef) #1

; Function Attrs: nounwind uwtable
declare hidden zeroext i1 @_kgflags_add_non_flag_arg(ptr noundef) #1

; Function Attrs: nounwind uwtable
declare hidden void @_kgflags_parse_flag(ptr noundef, i1 noundef zeroext) #1

; Function Attrs: nounwind uwtable
declare hidden void @_kgflags_assign_default_values() #1

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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, !6, i64 26660}
!12 = !{!"", !6, i64 0, !7, i64 8, !6, i64 10248, !7, i64 10256, !6, i64 14352, !7, i64 14360, !10, i64 26648, !6, i64 26656, !6, i64 26660, !10, i64 26664, !10, i64 26672}
!13 = !{!12, !10, i64 26664}
!14 = !{!12, !6, i64 26656}
!15 = !{!12, !10, i64 26648}
!16 = !{!12, !6, i64 14352}
!17 = !{!18, !18, i64 0}
!18 = !{!"_Bool", !7, i64 0}
!19 = !{i8 0, i8 2}
!20 = !{}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = !{!24, !18, i64 32}
!24 = !{!"_kgflags_flag", !10, i64 0, !10, i64 8, !7, i64 16, !7, i64 24, !18, i64 32, !18, i64 33, !18, i64 34, !6, i64 36}
!25 = !{!24, !10, i64 0}
!26 = !{!12, !6, i64 0}
!27 = !{!24, !18, i64 34}
!28 = !{!24, !18, i64 33}
!29 = distinct !{!29, !22}


; 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.anon = type { i32, [256 x %struct._kgflags_flag], i32, [512 x ptr], i32, [512 x %struct._kgflags_error], ptr, i32, i32, ptr, ptr }
%struct._kgflags_flag = type { ptr, ptr, %union.anon, %union.anon.0, i8, i8, i8, i32 }
%union.anon = type { ptr }
%union.anon.0 = type { ptr }
%struct._kgflags_error = type { ptr, ptr, i32 }

@_kgflags_g = external hidden local_unnamed_addr global %struct.anon, align 8
@.str.1 = external hidden unnamed_addr constant [3 x i8], align 1

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

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

; Function Attrs: nounwind uwtable
declare hidden void @_kgflags_add_error(i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local zeroext i1 @kgflags_parse(i32 noundef %0, ptr noundef %1) local_unnamed_addr #1 {
  %3 = alloca i8, align 1
  store i32 %0, ptr getelementptr inbounds (i8, ptr @_kgflags_g, i64 26660), align 4, !tbaa !5
  store ptr %1, ptr getelementptr inbounds (i8, ptr @_kgflags_g, i64 26664), align 8, !tbaa !11
  store i32 1, ptr getelementptr inbounds (i8, ptr @_kgflags_g, i64 26656), align 8, !tbaa !12
  %4 = load ptr, ptr getelementptr inbounds (i8, ptr @_kgflags_g, i64 26648), align 8, !tbaa !13
  %5 = icmp eq ptr %4, null
  br i1 %5, label %6, label %7

6:                                                ; preds = %2
  store ptr @.str.1, ptr getelementptr inbounds (i8, ptr @_kgflags_g, i64 26648), align 8, !tbaa !13
  br label %7

7:                                                ; preds = %6, %2
  %8 = load i32, ptr getelementptr inbounds (i8, ptr @_kgflags_g, i64 14352), align 8, !tbaa !14
  %9 = icmp sgt i32 %8, 0
  br i1 %9, label %52, label %.preheader

.preheader:                                       ; preds = %7
  %10 = tail call ptr @_kgflags_consume_arg()
  %.not24 = icmp eq ptr %10, null
  br i1 %.not24, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader, %27
  %11 = phi ptr [ %28, %27 ], [ %10, %.preheader ]
  %12 = call zeroext i1 @_kgflags_is_flag(ptr noundef nonnull %11)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %3) #2
  store i8 0, ptr %3, align 1, !tbaa !15
  br i1 %12, label %13, label %17

13:                                               ; preds = %.lr.ph
  %14 = call ptr @_kgflags_get_flag_name(ptr noundef nonnull %11)
  %15 = call ptr @_kgflags_get_flag(ptr noundef %14, ptr noundef nonnull %3)
  %.not23 = icmp eq ptr %15, null
  br i1 %.not23, label %16, label %.critedge

16:                                               ; preds = %13
  call void @_kgflags_add_error(i32 noundef 2, ptr noundef %14, ptr noundef null)
  br label %27

17:                                               ; preds = %.lr.ph
  %18 = call zeroext i1 @_kgflags_add_non_flag_arg(ptr noundef nonnull %11)
  br label %27, !llvm.loop !17

.critedge:                                        ; preds = %13
  %19 = getelementptr inbounds i8, ptr %15, i64 32
  %20 = load i8, ptr %19, align 8, !tbaa !19, !range !21, !noundef !22
  %21 = trunc nuw i8 %20 to i1
  br i1 %21, label %22, label %24

22:                                               ; preds = %.critedge
  %23 = load ptr, ptr %15, align 8, !tbaa !23
  call void @_kgflags_add_error(i32 noundef 8, ptr noundef %23, ptr noundef null)
  br label %24

24:                                               ; preds = %22, %.critedge
  %25 = load i8, ptr %3, align 1, !tbaa !15, !range !21, !noundef !22
  %26 = trunc nuw i8 %25 to i1
  call void @_kgflags_parse_flag(ptr noundef nonnull %15, i1 noundef zeroext %26)
  br label %27

27:                                               ; preds = %16, %24, %17
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %3) #2
  %28 = call ptr @_kgflags_consume_arg()
  %.not = icmp eq ptr %28, null
  br i1 %.not, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %27, %.preheader
  call void @_kgflags_assign_default_values()
  %29 = load i32, ptr @_kgflags_g, align 8, !tbaa !24
  %30 = icmp sgt i32 %29, 0
  br i1 %30, label %.lr.ph27, label %._crit_edge28

._crit_edge28:                                    ; preds = %48, %._crit_edge
  %31 = load i32, ptr getelementptr inbounds (i8, ptr @_kgflags_g, i64 14352), align 8, !tbaa !14
  %32 = icmp slt i32 %31, 1
  br label %52

.lr.ph27:                                         ; preds = %._crit_edge, %48
  %33 = phi i32 [ %49, %48 ], [ %29, %._crit_edge ]
  %indvars.iv = phi i64 [ %indvars.iv.next, %48 ], [ 0, %._crit_edge ]
  %34 = getelementptr inbounds [256 x %struct._kgflags_flag], ptr getelementptr inbounds (i8, ptr @_kgflags_g, i64 8), i64 0, i64 %indvars.iv
  %35 = getelementptr inbounds i8, ptr %34, i64 34
  %36 = load i8, ptr %35, align 2, !tbaa !25, !range !21, !noundef !22
  %37 = trunc nuw i8 %36 to i1
  br i1 %37, label %38, label %48

38:                                               ; preds = %.lr.ph27
  %39 = getelementptr inbounds i8, ptr %34, i64 32
  %40 = load i8, ptr %39, align 8, !tbaa !19, !range !21, !noundef !22
  %41 = trunc nuw i8 %40 to i1
  br i1 %41, label %48, label %42

42:                                               ; preds = %38
  %43 = getelementptr inbounds i8, ptr %34, i64 33
  %44 = load i8, ptr %43, align 1, !tbaa !26, !range !21, !noundef !22
  %45 = trunc nuw i8 %44 to i1
  br i1 %45, label %48, label %46

46:                                               ; preds = %42
  %47 = load ptr, ptr %34, align 8, !tbaa !23
  call void @_kgflags_add_error(i32 noundef 3, ptr noundef %47, ptr noundef null)
  %.pre = load i32, ptr @_kgflags_g, align 8, !tbaa !24
  br label %48

48:                                               ; preds = %46, %42, %38, %.lr.ph27
  %49 = phi i32 [ %.pre, %46 ], [ %33, %42 ], [ %33, %38 ], [ %33, %.lr.ph27 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %50 = sext i32 %49 to i64
  %51 = icmp slt i64 %indvars.iv.next, %50
  br i1 %51, label %.lr.ph27, label %._crit_edge28, !llvm.loop !27

52:                                               ; preds = %7, %._crit_edge28
  %.1 = phi i1 [ %32, %._crit_edge28 ], [ false, %7 ]
  ret i1 %.1
}

; Function Attrs: nounwind uwtable
declare hidden ptr @_kgflags_consume_arg() local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden zeroext i1 @_kgflags_is_flag(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden ptr @_kgflags_get_flag_name(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden ptr @_kgflags_get_flag(ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden zeroext i1 @_kgflags_add_non_flag_arg(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden void @_kgflags_parse_flag(ptr noundef, i1 noundef zeroext) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden void @_kgflags_assign_default_values() local_unnamed_addr #1

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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, !7, i64 26660}
!6 = !{!"", !7, i64 0, !8, i64 8, !7, i64 10248, !8, i64 10256, !7, i64 14352, !8, i64 14360, !10, i64 26648, !7, i64 26656, !7, i64 26660, !10, i64 26664, !10, i64 26672}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!6, !10, i64 26664}
!12 = !{!6, !7, i64 26656}
!13 = !{!6, !10, i64 26648}
!14 = !{!6, !7, i64 14352}
!15 = !{!16, !16, i64 0}
!16 = !{!"_Bool", !8, i64 0}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = !{!20, !16, i64 32}
!20 = !{!"_kgflags_flag", !10, i64 0, !10, i64 8, !8, i64 16, !8, i64 24, !16, i64 32, !16, i64 33, !16, i64 34, !7, i64 36}
!21 = !{i8 0, i8 2}
!22 = !{}
!23 = !{!20, !10, i64 0}
!24 = !{!6, !7, i64 0}
!25 = !{!20, !16, i64 34}
!26 = !{!20, !16, i64 33}
!27 = distinct !{!27, !18}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SROAPass,SimplifyCFGPass,TailCallElimPass