module fast_prime_sieve
  implicit none
contains
  subroutine primes(p, m, n)
    integer, allocatable, intent(inout) :: p(:)
    integer, intent(inout) :: m
    integer, intent(in) :: n
    integer :: lp(n), pr(n), i, j
    lp(n) = 0
    m = 0
    do i = 2, n
      if (lp(i) == 0) then
        lp(i) = i
        m = m + 1
        pr(m) = i
      end if
      j = 1
      do j = 1, m
        if (pr(j) > lp(i) .or. i * pr(j) > n) exit
        lp(i * pr(j)) = pr(j)
      end do
    end do
    allocate(p(m))
    p = pr(1:m)
  end
end module fast_prime_sieve
module bisection
  implicit none
  integer, private, parameter :: intkind = 4
contains
  integer function lower_bound(a, b) result(res)
    integer(intkind), intent(in) :: a(:), b
    integer :: l, r, m
    l = 0
    r = size(a) + 1
    do while (r - l > 1)
      m = (l + r) / 2
      if (a(m) < b) then
        l = m
      else
        r = m
      end if
    end do
    res = r
  end
  integer function upper_bound(a, b) result(res)
    integer(intkind), intent(in) :: a(:), b
    integer :: l, r, m
    l = 0
    r = size(a) + 1
    do while (r - l > 1)
      m = (l + r) / 2
      if (a(m) > b) then
        r = m
      else
        l = m
      end if
    end do
    res = l
  end
end module bisection
module gcd_lcm
  implicit none
  integer, private, parameter :: intkind = 4
contains
  integer(intkind) function gcd(x, y) result(res)
    integer(intkind), intent(in) :: x, y
    integer(intkind) :: a, b
    a = max(abs(x), abs(y))
    b = min(abs(x), abs(y))
    res = a
    do while (b > 0)
      res = b
      b = mod(a, b)
      a = res
    end do
  end
  integer(intkind) function lcm(x, y) result(res)
    integer(intkind), intent(in) :: x, y
    res = x / gcd(x, y) * y
  end
end module gcd_lcm
program coprime
  use fast_prime_sieve
  use bisection
  use gcd_lcm
  implicit none
  integer :: n, m, d, q, i, j
  logical :: pairwise = .true.
  integer, allocatable :: a(:), p(:)
  logical, allocatable :: b(:)
  character(8), parameter :: x = 'pairwise', y = 'setwise ', z = 'not     '
  read(*,*) n
  allocate(a(n))
  read(*,*) a
  call primes(p, m, maxval(a(1:n)))
  allocate(b(m))
  b = .false.
  do i = 1, n
    d = a(i)
    do j = 1, m
      q = p(j)
      if (q * q > d) exit
      if (mod(d, q) == 0) then
        if (b(j)) then
          pairwise = .false.
          goto 100
        end if
        b(j) = .true.
        do while (mod(d, q) == 0)
          d = d / q
        end do
      end if
    end do
    if (d /= 1) then
      j = lower_bound(p, d)
      if (b(j)) then
        pairwise = .false.
        goto 100
      end if
      b(j) = .true.
    end if
  end do
  100 if (pairwise) then
    write(*,'(a)') 'pairwise coprime'
    stop
  end if
  d = a(1)
  do i = 2, n
    d = gcd(d, a(i))
  end do
  write(*,'(a)') trim(merge('setwise', 'not    ', d == 1)) // ' coprime'
end program coprime
; ModuleID = 'FIRModule'
source_filename = "FIRModule"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-linux-gnu"

@_QMbisectionECintkind = local_unnamed_addr constant i32 4
@_QMgcd_lcmECintkind = local_unnamed_addr constant i32 4
@_QQcl.042e01d358518bd591a5270189dd3ff0 = linkonce constant [72 x i8] c"/home/ubuntu/Downloads/TheStack_IR/Collated/Fortran/Source_721/source.f\00"
@_QFEa.0 = internal unnamed_addr global ptr null
@_QFEa.8 = internal unnamed_addr global i64 0
@_QFEb.0 = internal unnamed_addr global ptr null
@_QFEb.7 = internal unnamed_addr global i64 1
@_QFEp = internal global { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] } { ptr null, i64 ptrtoint (ptr getelementptr (i32, ptr null, i32 1) to i64), i32 20180515, i8 1, i8 9, i8 2, i8 0, [1 x [3 x i64]] [[3 x i64] [i64 1, i64 0, i64 ptrtoint (ptr getelementptr (i32, ptr null, i32 1) to i64)]] }
@_QFEpairwise = internal unnamed_addr global i1 false
@_QQcl.16373402fa3425c6e46827601abb88fa = linkonce constant [76 x i8] c"array left hand side must be allocated when the right hand side is a scalar\00"
@_QQcl.286129 = linkonce constant [3 x i8] c"(a)"
@_QQcl.706169727769736520636F7072696D65 = linkonce constant [16 x i8] c"pairwise coprime"
@_QQcl.73657477697365 = linkonce constant [7 x i8] c"setwise"
@_QQcl.6E6F7420202020 = linkonce constant [7 x i8] c"not    "
@_QQcl.20636F7072696D65 = linkonce local_unnamed_addr constant [8 x i8] c" coprime"
@_QQEnvironmentDefaults = local_unnamed_addr constant ptr null

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #1

; Function Attrs: nounwind
define void @_QMfast_prime_sievePprimes(ptr nocapture writeonly %0, ptr nocapture %1, ptr nocapture readonly %2) local_unnamed_addr #2 {
  %4 = load i32, ptr %2, align 4, !tbaa !3
  %5 = sext i32 %4 to i64
  %6 = tail call i64 @llvm.smax.i64(i64 %5, i64 0)
  %7 = alloca i32, i64 %6, align 4
  %8 = alloca i32, i64 %6, align 4
  %9 = add nsw i64 %5, -1
  %10 = getelementptr i32, ptr %7, i64 %9
  store i32 0, ptr %10, align 4, !tbaa !3
  store i32 0, ptr %1, align 4, !tbaa !3
  %11 = load i32, ptr %2, align 4, !tbaa !3
  %.081128 = add i32 %11, -1
  %12 = icmp sgt i32 %.081128, 0
  br i1 %12, label %.lr.ph132, label %._crit_edge133

.lr.ph132:                                        ; preds = %3, %._crit_edge
  %13 = phi i32 [ %25, %._crit_edge ], [ 0, %3 ]
  %.080129 = phi i32 [ %43, %._crit_edge ], [ 2, %3 ]
  %14 = sext i32 %.080129 to i64
  %15 = add nsw i64 %14, -1
  %16 = getelementptr i32, ptr %7, i64 %15
  %17 = load i32, ptr %16, align 4, !tbaa !3
  %18 = icmp eq i32 %17, 0
  br i1 %18, label %19, label %24

19:                                               ; preds = %.lr.ph132
  store i32 %.080129, ptr %16, align 4, !tbaa !3
  %20 = add i32 %13, 1
  store i32 %20, ptr %1, align 4, !tbaa !3
  %21 = sext i32 %20 to i64
  %22 = add nsw i64 %21, -1
  %23 = getelementptr i32, ptr %8, i64 %22
  store i32 %.080129, ptr %23, align 4, !tbaa !3
  br label %24

24:                                               ; preds = %19, %.lr.ph132
  %25 = phi i32 [ %20, %19 ], [ %13, %.lr.ph132 ]
  %26 = icmp sgt i32 %25, 0
  br i1 %26, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %24
  %27 = load i32, ptr %2, align 4, !tbaa !3
  br label %28

28:                                               ; preds = %.lr.ph, %38
  %.0126 = phi i32 [ 1, %.lr.ph ], [ %42, %38 ]
  %29 = sext i32 %.0126 to i64
  %30 = add nsw i64 %29, -1
  %31 = getelementptr i32, ptr %8, i64 %30
  %32 = load i32, ptr %31, align 4, !tbaa !3
  %33 = load i32, ptr %16, align 4, !tbaa !3
  %34 = icmp sgt i32 %32, %33
  %35 = mul i32 %32, %.080129
  %36 = icmp sgt i32 %35, %27
  %37 = or i1 %34, %36
  br i1 %37, label %._crit_edge, label %38

38:                                               ; preds = %28
  %39 = sext i32 %35 to i64
  %40 = add nsw i64 %39, -1
  %41 = getelementptr i32, ptr %7, i64 %40
  store i32 %32, ptr %41, align 4, !tbaa !3
  %42 = add nuw i32 %.0126, 1
  %exitcond.not = icmp eq i32 %.0126, %25
  br i1 %exitcond.not, label %._crit_edge, label %28

._crit_edge:                                      ; preds = %38, %28, %24
  %43 = add nuw i32 %.080129, 1
  %exitcond140.not = icmp eq i32 %.080129, %11
  br i1 %exitcond140.not, label %._crit_edge133, label %.lr.ph132

._crit_edge133:                                   ; preds = %._crit_edge, %3
  %44 = phi i32 [ 0, %3 ], [ %25, %._crit_edge ]
  %45 = tail call i32 @llvm.smax.i32(i32 %44, i32 0)
  %46 = zext i32 %45 to i64
  %47 = shl nuw nsw i64 %46, 2
  %48 = tail call ptr @malloc(i64 %47)
  store ptr %48, ptr %0, align 8, !tbaa !7
  %.repack89 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 1
  store i64 4, ptr %.repack89, align 8, !tbaa !7
  %.repack91 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 2
  store i32 20180515, ptr %.repack91, align 8, !tbaa !7
  %.repack93 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 3
  store i8 1, ptr %.repack93, align 4, !tbaa !7
  %.repack95 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 4
  store i8 9, ptr %.repack95, align 1, !tbaa !7
  %.repack97 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 5
  store i8 2, ptr %.repack97, align 2, !tbaa !7
  %.repack99 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 6
  store i8 0, ptr %.repack99, align 1, !tbaa !7
  %.repack101 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 7
  store i64 1, ptr %.repack101, align 8, !tbaa !7
  %.repack101.repack103 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 7, i64 0, i64 1
  store i64 %46, ptr %.repack101.repack103, align 8, !tbaa !7
  %.repack101.repack105 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 7, i64 0, i64 2
  store i64 4, ptr %.repack101.repack105, align 8, !tbaa !7
  %.not = icmp eq ptr %48, null
  br i1 %.not, label %51, label %.preheader

.preheader:                                       ; preds = %._crit_edge133
  %.not138 = icmp slt i32 %44, 1
  br i1 %.not138, label %.loopexit, label %.lr.ph134.preheader

.lr.ph134.preheader:                              ; preds = %.preheader
  %49 = tail call i64 @llvm.smax.i64(i64 %46, i64 1)
  %50 = shl nuw nsw i64 %49, 2
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %48, ptr nonnull align 4 %8, i64 %50, i1 false), !tbaa !3
  br label %.loopexit

51:                                               ; preds = %._crit_edge133
  %52 = tail call ptr @malloc(i64 %47)
  %.not139 = icmp slt i32 %44, 1
  br i1 %.not139, label %._crit_edge137, label %.lr.ph136.preheader

.lr.ph136.preheader:                              ; preds = %51
  %53 = tail call i64 @llvm.smax.i64(i64 %46, i64 1)
  %54 = shl nuw nsw i64 %53, 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %52, ptr nonnull align 4 %8, i64 %54, i1 false), !tbaa !3
  br label %._crit_edge137

._crit_edge137:                                   ; preds = %51, %.lr.ph136.preheader
  store ptr %52, ptr %0, align 8, !tbaa !7
  store i64 4, ptr %.repack89, align 8, !tbaa !7
  store i32 20180515, ptr %.repack91, align 8, !tbaa !7
  store i8 1, ptr %.repack93, align 4, !tbaa !7
  store i8 9, ptr %.repack95, align 1, !tbaa !7
  store i8 2, ptr %.repack97, align 2, !tbaa !7
  store i8 0, ptr %.repack99, align 1, !tbaa !7
  store i64 1, ptr %.repack101, align 8, !tbaa !7
  store i64 %46, ptr %.repack101.repack103, align 8, !tbaa !7
  store i64 4, ptr %.repack101.repack105, align 8, !tbaa !7
  br label %.loopexit

.loopexit:                                        ; preds = %.lr.ph134.preheader, %.preheader, %._crit_edge137
  ret void
}

; Function Attrs: nofree norecurse nosync nounwind memory(read, inaccessiblemem: none)
define i32 @_QMbisectionPlower_bound(ptr nocapture readonly %0, ptr nocapture readonly %1) local_unnamed_addr #3 {
  %3 = getelementptr { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 7, i64 0, i64 1
  %4 = load i64, ptr %3, align 8, !tbaa !7
  %5 = trunc i64 %4 to i32
  %6 = add i32 %5, 1
  %7 = icmp sgt i32 %6, 1
  br i1 %7, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %2
  %8 = load ptr, ptr %0, align 8, !tbaa !7
  %9 = getelementptr { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 7, i64 0, i64 2
  %10 = load i64, ptr %9, align 8, !tbaa !7
  %11 = load i32, ptr %1, align 4, !tbaa !3
  br label %12

12:                                               ; preds = %.lr.ph, %12
  %.011 = phi i32 [ 0, %.lr.ph ], [ %..0, %12 ]
  %.0910 = phi i32 [ %6, %.lr.ph ], [ %.09., %12 ]
  %13 = add i32 %.011, %.0910
  %14 = sdiv i32 %13, 2
  %narrow = add nsw i32 %14, -1
  %15 = sext i32 %narrow to i64
  %16 = mul i64 %10, %15
  %17 = getelementptr i8, ptr %8, i64 %16
  %18 = load i32, ptr %17, align 4, !tbaa !3
  %19 = icmp slt i32 %18, %11
  %.09. = select i1 %19, i32 %.0910, i32 %14
  %..0 = select i1 %19, i32 %14, i32 %.011
  %20 = sub i32 %.09., %..0
  %21 = icmp sgt i32 %20, 1
  br i1 %21, label %12, label %._crit_edge

._crit_edge:                                      ; preds = %12, %2
  %.09.lcssa = phi i32 [ %6, %2 ], [ %.09., %12 ]
  ret i32 %.09.lcssa
}

; Function Attrs: nofree norecurse nosync nounwind memory(read, inaccessiblemem: none)
define i32 @_QMbisectionPupper_bound(ptr nocapture readonly %0, ptr nocapture readonly %1) local_unnamed_addr #3 {
  %3 = getelementptr { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 7, i64 0, i64 1
  %4 = load i64, ptr %3, align 8, !tbaa !7
  %5 = trunc i64 %4 to i32
  %6 = add i32 %5, 1
  %7 = icmp sgt i32 %6, 1
  br i1 %7, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %2
  %8 = load ptr, ptr %0, align 8, !tbaa !7
  %9 = getelementptr { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 7, i64 0, i64 2
  %10 = load i64, ptr %9, align 8, !tbaa !7
  %11 = load i32, ptr %1, align 4, !tbaa !3
  br label %12

12:                                               ; preds = %.lr.ph, %12
  %.011 = phi i32 [ 0, %.lr.ph ], [ %.0., %12 ]
  %.0910 = phi i32 [ %6, %.lr.ph ], [ %..09, %12 ]
  %13 = add i32 %.011, %.0910
  %14 = sdiv i32 %13, 2
  %narrow = add nsw i32 %14, -1
  %15 = sext i32 %narrow to i64
  %16 = mul i64 %10, %15
  %17 = getelementptr i8, ptr %8, i64 %16
  %18 = load i32, ptr %17, align 4, !tbaa !3
  %19 = icmp sgt i32 %18, %11
  %..09 = select i1 %19, i32 %14, i32 %.0910
  %.0. = select i1 %19, i32 %.011, i32 %14
  %20 = sub i32 %..09, %.0.
  %21 = icmp sgt i32 %20, 1
  br i1 %21, label %12, label %._crit_edge

._crit_edge:                                      ; preds = %12, %2
  %.0.lcssa = phi i32 [ 0, %2 ], [ %.0., %12 ]
  ret i32 %.0.lcssa
}

; Function Attrs: nofree nosync nounwind memory(argmem: read)
define i32 @_QMgcd_lcmPgcd(ptr nocapture readonly %0, ptr nocapture readonly %1) local_unnamed_addr #4 {
  %3 = load i32, ptr %0, align 4, !tbaa !3
  %4 = tail call i32 @llvm.abs.i32(i32 %3, i1 false)
  %5 = load i32, ptr %1, align 4, !tbaa !3
  %6 = tail call i32 @llvm.abs.i32(i32 %5, i1 false)
  %7 = tail call i32 @llvm.smax.i32(i32 %4, i32 %6)
  %8 = tail call i32 @llvm.smin.i32(i32 %4, i32 %6)
  %9 = icmp sgt i32 %8, 0
  br i1 %9, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %2, %.lr.ph
  %.010 = phi i32 [ %.079, %.lr.ph ], [ %7, %2 ]
  %.079 = phi i32 [ %10, %.lr.ph ], [ %8, %2 ]
  %10 = srem i32 %.010, %.079
  %11 = icmp sgt i32 %10, 0
  br i1 %11, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph, %2
  %.0.lcssa = phi i32 [ %7, %2 ], [ %.079, %.lr.ph ]
  ret i32 %.0.lcssa
}

; Function Attrs: nofree nosync nounwind memory(argmem: read)
define i32 @_QMgcd_lcmPlcm(ptr nocapture readonly %0, ptr nocapture readonly %1) local_unnamed_addr #4 {
  %3 = load i32, ptr %0, align 4, !tbaa !3
  %4 = tail call i32 @llvm.abs.i32(i32 %3, i1 false)
  %5 = load i32, ptr %1, align 4, !tbaa !3
  %6 = tail call i32 @llvm.abs.i32(i32 %5, i1 false)
  %7 = tail call i32 @llvm.smax.i32(i32 %4, i32 %6)
  %8 = tail call i32 @llvm.smin.i32(i32 %4, i32 %6)
  %9 = icmp sgt i32 %8, 0
  br i1 %9, label %.lr.ph.i, label %_QMgcd_lcmPgcd.exit

.lr.ph.i:                                         ; preds = %2, %.lr.ph.i
  %.010.i = phi i32 [ %.079.i, %.lr.ph.i ], [ %7, %2 ]
  %.079.i = phi i32 [ %10, %.lr.ph.i ], [ %8, %2 ]
  %10 = srem i32 %.010.i, %.079.i
  %11 = icmp sgt i32 %10, 0
  br i1 %11, label %.lr.ph.i, label %_QMgcd_lcmPgcd.exit

_QMgcd_lcmPgcd.exit:                              ; preds = %.lr.ph.i, %2
  %.0.lcssa.i = phi i32 [ %7, %2 ], [ %.079.i, %.lr.ph.i ]
  %12 = sdiv i32 %3, %.0.lcssa.i
  %13 = mul i32 %12, %5
  ret i32 %13
}

define void @_QQmain() local_unnamed_addr {
  %1 = alloca { ptr, i64, i32, i8, i8, i8, i8 }, align 8
  %2 = alloca { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, align 8
  %3 = alloca { ptr, i64, i32, i8, i8, i8, i8 }, align 8
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = tail call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.042e01d358518bd591a5270189dd3ff0, i32 93)
  %8 = call i1 @_FortranAioInputInteger(ptr %7, ptr nonnull %6, i32 4)
  %9 = call i32 @_FortranAioEndIoStatement(ptr %7)
  %10 = load i32, ptr %6, align 4, !tbaa !3
  %11 = call i32 @llvm.smax.i32(i32 %10, i32 0)
  %12 = zext i32 %11 to i64
  %13 = shl nuw nsw i64 %12, 2
  %14 = call ptr @malloc(i64 %13)
  store ptr %14, ptr @_QFEa.0, align 8, !tbaa !7
  store i64 %12, ptr @_QFEa.8, align 8, !tbaa !7
  %15 = call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.042e01d358518bd591a5270189dd3ff0, i32 95)
  %.unpack = load ptr, ptr @_QFEa.0, align 8, !tbaa !7
  %.unpack696.unpack.unpack698 = load i64, ptr @_QFEa.8, align 8, !tbaa !7
  store ptr %.unpack, ptr %2, align 8, !tbaa !7
  %.fca.1.gep90 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 1
  store i64 4, ptr %.fca.1.gep90, align 8, !tbaa !7
  %.fca.2.gep92 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 2
  store i32 20180515, ptr %.fca.2.gep92, align 8, !tbaa !7
  %.fca.3.gep94 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 3
  store i8 1, ptr %.fca.3.gep94, align 4, !tbaa !7
  %.fca.4.gep96 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 4
  store i8 9, ptr %.fca.4.gep96, align 1, !tbaa !7
  %.fca.5.gep98 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 5
  store i8 0, ptr %.fca.5.gep98, align 2, !tbaa !7
  %.fca.6.gep100 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep100, align 1, !tbaa !7
  %.fca.7.0.0.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 7, i64 0, i64 0
  store i64 1, ptr %.fca.7.0.0.gep, align 8, !tbaa !7
  %.fca.7.0.1.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 7, i64 0, i64 1
  store i64 %.unpack696.unpack.unpack698, ptr %.fca.7.0.1.gep, align 8, !tbaa !7
  %.fca.7.0.2.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 7, i64 0, i64 2
  store i64 4, ptr %.fca.7.0.2.gep, align 8, !tbaa !7
  %16 = call i1 @_FortranAioInputDescriptor(ptr %15, ptr nonnull %2)
  %17 = call i32 @_FortranAioEndIoStatement(ptr %15)
  %.unpack701 = load ptr, ptr @_QFEa.0, align 8, !tbaa !7
  %18 = load i32, ptr %6, align 4, !tbaa !3
  %19 = call i32 @llvm.smax.i32(i32 %18, i32 0)
  %20 = zext i32 %19 to i64
  %.not851 = icmp slt i32 %18, 1
  br i1 %.not851, label %_FortranAMaxvalInteger4x1_contract_simplified.exit, label %.lr.ph.i.preheader

.lr.ph.i.preheader:                               ; preds = %0
  %min.iters.check = icmp ult i32 %19, 8
  br i1 %min.iters.check, label %.lr.ph.i.preheader891, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph.i.preheader
  %n.vec = and i64 %20, 2147483640
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <4 x i32> [ <i32 -2147483648, i32 -2147483648, i32 -2147483648, i32 -2147483648>, %vector.ph ], [ %24, %vector.body ]
  %vec.phi888 = phi <4 x i32> [ <i32 -2147483648, i32 -2147483648, i32 -2147483648, i32 -2147483648>, %vector.ph ], [ %25, %vector.body ]
  %21 = shl i64 %index, 2
  %22 = getelementptr i8, ptr %.unpack701, i64 %21
  %wide.load = load <4 x i32>, ptr %22, align 4, !tbaa !3
  %23 = getelementptr i32, ptr %22, i64 4
  %wide.load889 = load <4 x i32>, ptr %23, align 4, !tbaa !3
  %24 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %wide.load, <4 x i32> %vec.phi)
  %25 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %wide.load889, <4 x i32> %vec.phi888)
  %index.next = add nuw i64 %index, 8
  %26 = icmp eq i64 %index.next, %n.vec
  br i1 %26, label %middle.block, label %vector.body, !llvm.loop !9

middle.block:                                     ; preds = %vector.body
  %rdx.minmax.select = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %24, <4 x i32> %25)
  %27 = call i32 @llvm.vector.reduce.smax.v4i32(<4 x i32> %rdx.minmax.select)
  %cmp.n = icmp eq i64 %n.vec, %20
  br i1 %cmp.n, label %_FortranAMaxvalInteger4x1_contract_simplified.exit, label %.lr.ph.i.preheader891

.lr.ph.i.preheader891:                            ; preds = %.lr.ph.i.preheader, %middle.block
  %.ph = phi i32 [ -2147483648, %.lr.ph.i.preheader ], [ %27, %middle.block ]
  %.ph892 = phi i64 [ 0, %.lr.ph.i.preheader ], [ %n.vec, %middle.block ]
  br label %.lr.ph.i

.lr.ph.i:                                         ; preds = %.lr.ph.i.preheader891, %.lr.ph.i
  %28 = phi i32 [ %33, %.lr.ph.i ], [ %.ph, %.lr.ph.i.preheader891 ]
  %29 = phi i64 [ %34, %.lr.ph.i ], [ %.ph892, %.lr.ph.i.preheader891 ]
  %30 = shl i64 %29, 2
  %31 = getelementptr i8, ptr %.unpack701, i64 %30
  %32 = load i32, ptr %31, align 4, !tbaa !3
  %33 = call i32 @llvm.smax.i32(i32 %32, i32 %28)
  %34 = add nuw nsw i64 %29, 1
  %exitcond.not.i = icmp eq i64 %34, %20
  br i1 %exitcond.not.i, label %_FortranAMaxvalInteger4x1_contract_simplified.exit, label %.lr.ph.i, !llvm.loop !12

_FortranAMaxvalInteger4x1_contract_simplified.exit: ; preds = %.lr.ph.i, %middle.block, %0
  %.lcssa.i = phi i32 [ -2147483648, %0 ], [ %27, %middle.block ], [ %33, %.lr.ph.i ]
  store i32 %.lcssa.i, ptr %4, align 4, !tbaa !3
  call void @_QMfast_prime_sievePprimes(ptr nonnull @_QFEp, ptr nonnull %5, ptr nonnull %4)
  %35 = load i32, ptr %5, align 4, !tbaa !3
  %36 = call i32 @llvm.smax.i32(i32 %35, i32 0)
  %37 = zext i32 %36 to i64
  %38 = shl nuw nsw i64 %37, 2
  %39 = call ptr @malloc(i64 %38)
  store ptr %39, ptr @_QFEb.0, align 8, !tbaa !7
  store i64 1, ptr @_QFEb.7, align 8, !tbaa !7
  %.not = icmp eq ptr %39, null
  br i1 %.not, label %42, label %.preheader

.preheader:                                       ; preds = %_FortranAMaxvalInteger4x1_contract_simplified.exit
  %.not874 = icmp slt i32 %35, 1
  br i1 %.not874, label %.loopexit853, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %.preheader
  %40 = call i64 @llvm.smax.i64(i64 %37, i64 1)
  %41 = shl nuw nsw i64 %40, 2
  call void @llvm.memset.p0.i64(ptr nonnull align 4 %39, i8 0, i64 %41, i1 false), !tbaa !3
  br label %.loopexit853

42:                                               ; preds = %_FortranAMaxvalInteger4x1_contract_simplified.exit
  %43 = call {} @_FortranAReportFatalUserError(ptr nonnull @_QQcl.16373402fa3425c6e46827601abb88fa, ptr nonnull @_QQcl.042e01d358518bd591a5270189dd3ff0, i32 98)
  %.unpack817.unpack.unpack = load i64, ptr @_QFEb.7, align 8, !tbaa !7
  %44 = icmp slt i32 %35, 1
  %45 = select i1 %44, i64 1, i64 %.unpack817.unpack.unpack
  store i64 %45, ptr @_QFEb.7, align 8, !tbaa !7
  br label %.loopexit853

.loopexit853:                                     ; preds = %.lr.ph.preheader, %.preheader, %42
  %.unpack804.unpack.unpack = phi i64 [ 1, %.lr.ph.preheader ], [ 1, %.preheader ], [ %45, %42 ]
  %46 = load i32, ptr %6, align 4, !tbaa !3
  %47 = icmp sgt i32 %46, 0
  br i1 %47, label %.lr.ph867, label %._crit_edge868

.lr.ph867:                                        ; preds = %.loopexit853
  %.unpack747 = load ptr, ptr @_QFEa.0, align 8, !tbaa !7
  %48 = icmp sgt i32 %35, 0
  %.unpack785 = load ptr, ptr @_QFEp, align 16
  %.unpack792.unpack.unpack = load i64, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QFEp, i64 0, i32 7), align 8
  %.unpack767.unpack.unpack769 = load i64, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QFEp, i64 0, i32 7, i64 0, i64 1), align 16
  %49 = trunc i64 %.unpack767.unpack.unpack769 to i32
  %50 = add i32 %49, 1
  %51 = icmp sgt i32 %50, 1
  br label %52

52:                                               ; preds = %.lr.ph867, %89
  %.0675865 = phi i32 [ 1, %.lr.ph867 ], [ %90, %89 ]
  %53 = sext i32 %.0675865 to i64
  %54 = add nsw i64 %53, -1
  %55 = getelementptr i32, ptr %.unpack747, i64 %54
  %56 = load i32, ptr %55, align 4, !tbaa !3
  br i1 %48, label %.lr.ph860, label %._crit_edge

.lr.ph860:                                        ; preds = %52, %.loopexit
  %.0674858 = phi i32 [ %73, %.loopexit ], [ 1, %52 ]
  %.0848857 = phi i32 [ %.2, %.loopexit ], [ %56, %52 ]
  %57 = sext i32 %.0674858 to i64
  %58 = sub i64 %57, %.unpack792.unpack.unpack
  %59 = getelementptr i32, ptr %.unpack785, i64 %58
  %60 = load i32, ptr %59, align 4, !tbaa !3
  %61 = mul i32 %60, %60
  %62 = icmp sgt i32 %61, %.0848857
  br i1 %62, label %._crit_edge, label %63

63:                                               ; preds = %.lr.ph860
  %64 = srem i32 %.0848857, %60
  %65 = icmp eq i32 %64, 0
  br i1 %65, label %66, label %.loopexit

66:                                               ; preds = %63
  %67 = sub i64 %57, %.unpack804.unpack.unpack
  %68 = getelementptr i32, ptr %39, i64 %67
  %69 = load i32, ptr %68, align 4, !tbaa !3
  %.not809 = icmp eq i32 %69, 0
  br i1 %.not809, label %.lr.ph856.preheader, label %.thread849

.thread849:                                       ; preds = %_QMbisectionPlower_bound.exit, %66
  store i1 true, ptr @_QFEpairwise, align 1
  br label %96

.lr.ph856.preheader:                              ; preds = %66
  store i32 1, ptr %68, align 4, !tbaa !3
  br label %.lr.ph856

.lr.ph856:                                        ; preds = %.lr.ph856.preheader, %.lr.ph856
  %.1855 = phi i32 [ %70, %.lr.ph856 ], [ %.0848857, %.lr.ph856.preheader ]
  %70 = sdiv i32 %.1855, %60
  %71 = srem i32 %70, %60
  %72 = icmp eq i32 %71, 0
  br i1 %72, label %.lr.ph856, label %.loopexit

.loopexit:                                        ; preds = %.lr.ph856, %63
  %.2 = phi i32 [ %.0848857, %63 ], [ %70, %.lr.ph856 ]
  %73 = add nuw i32 %.0674858, 1
  %exitcond.not = icmp eq i32 %.0674858, %35
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph860

._crit_edge:                                      ; preds = %.loopexit, %.lr.ph860, %52
  %.0848.lcssa = phi i32 [ %56, %52 ], [ %.0848857, %.lr.ph860 ], [ %.2, %.loopexit ]
  %.not759 = icmp eq i32 %.0848.lcssa, 1
  br i1 %.not759, label %89, label %74

74:                                               ; preds = %._crit_edge
  br i1 %51, label %.lr.ph.i831, label %_QMbisectionPlower_bound.exit

.lr.ph.i831:                                      ; preds = %74, %.lr.ph.i831
  %.011.i = phi i32 [ %..0.i, %.lr.ph.i831 ], [ 0, %74 ]
  %.0910.i = phi i32 [ %.09..i, %.lr.ph.i831 ], [ %50, %74 ]
  %75 = add i32 %.0910.i, %.011.i
  %76 = sdiv i32 %75, 2
  %narrow.i = add nsw i32 %76, -1
  %77 = sext i32 %narrow.i to i64
  %78 = shl nsw i64 %77, 2
  %79 = getelementptr i8, ptr %.unpack785, i64 %78
  %80 = load i32, ptr %79, align 4, !tbaa !3
  %81 = icmp slt i32 %80, %.0848.lcssa
  %.09..i = select i1 %81, i32 %.0910.i, i32 %76
  %..0.i = select i1 %81, i32 %76, i32 %.011.i
  %82 = sub i32 %.09..i, %..0.i
  %83 = icmp sgt i32 %82, 1
  br i1 %83, label %.lr.ph.i831, label %_QMbisectionPlower_bound.exit

_QMbisectionPlower_bound.exit:                    ; preds = %.lr.ph.i831, %74
  %.09.lcssa.i = phi i32 [ %50, %74 ], [ %.09..i, %.lr.ph.i831 ]
  %84 = sext i32 %.09.lcssa.i to i64
  %85 = sub i64 %84, %.unpack804.unpack.unpack
  %86 = getelementptr i32, ptr %39, i64 %85
  %87 = load i32, ptr %86, align 4, !tbaa !3
  %.not784 = icmp eq i32 %87, 0
  br i1 %.not784, label %88, label %.thread849

88:                                               ; preds = %_QMbisectionPlower_bound.exit
  store i32 1, ptr %86, align 4, !tbaa !3
  br label %89

89:                                               ; preds = %88, %._crit_edge
  %90 = add nuw i32 %.0675865, 1
  %exitcond877.not = icmp eq i32 %.0675865, %46
  br i1 %exitcond877.not, label %._crit_edge868, label %52

._crit_edge868:                                   ; preds = %89, %.loopexit853
  %.b.pr = load i1, ptr @_QFEpairwise, align 1
  br i1 %.b.pr, label %._crit_edge868._crit_edge, label %91

._crit_edge868._crit_edge:                        ; preds = %._crit_edge868
  %.unpack722.pre = load ptr, ptr @_QFEa.0, align 8, !tbaa !7
  br label %96

91:                                               ; preds = %._crit_edge868
  %92 = call ptr @_FortranAioBeginExternalFormattedOutput(ptr nonnull @_QQcl.286129, i64 3, ptr null, i32 -1, ptr nonnull @_QQcl.042e01d358518bd591a5270189dd3ff0, i32 125)
  %93 = call i1 @_FortranAioOutputAscii(ptr %92, ptr nonnull @_QQcl.706169727769736520636F7072696D65, i64 16)
  %94 = call i32 @_FortranAioEndIoStatement(ptr %92)
  %95 = call {} @_FortranAStopStatement(i32 0, i1 false, i1 false)
  unreachable

96:                                               ; preds = %._crit_edge868._crit_edge, %.thread849
  %.unpack722 = phi ptr [ %.unpack722.pre, %._crit_edge868._crit_edge ], [ %.unpack747, %.thread849 ]
  %97 = load i32, ptr %.unpack722, align 4, !tbaa !3
  %98 = icmp sgt i32 %46, 1
  br i1 %98, label %.lr.ph871.preheader, label %._crit_edge872

.lr.ph871.preheader:                              ; preds = %96
  %99 = zext i32 %46 to i64
  br label %.lr.ph871

.lr.ph871:                                        ; preds = %.lr.ph871.preheader, %_QMgcd_lcmPgcd.exit
  %indvars.iv = phi i64 [ 2, %.lr.ph871.preheader ], [ %indvars.iv.next, %_QMgcd_lcmPgcd.exit ]
  %.3869 = phi i32 [ %97, %.lr.ph871.preheader ], [ %.0.lcssa.i, %_QMgcd_lcmPgcd.exit ]
  %100 = add nsw i64 %indvars.iv, -1
  %101 = getelementptr i32, ptr %.unpack722, i64 %100
  %102 = call i32 @llvm.abs.i32(i32 %.3869, i1 false)
  %103 = load i32, ptr %101, align 4, !tbaa !3
  %104 = call i32 @llvm.abs.i32(i32 %103, i1 false)
  %105 = call i32 @llvm.smax.i32(i32 %102, i32 %104)
  %106 = call i32 @llvm.smin.i32(i32 %102, i32 %104)
  %107 = icmp sgt i32 %106, 0
  br i1 %107, label %.lr.ph.i832, label %_QMgcd_lcmPgcd.exit

.lr.ph.i832:                                      ; preds = %.lr.ph871, %.lr.ph.i832
  %.010.i = phi i32 [ %.079.i, %.lr.ph.i832 ], [ %105, %.lr.ph871 ]
  %.079.i = phi i32 [ %108, %.lr.ph.i832 ], [ %106, %.lr.ph871 ]
  %108 = srem i32 %.010.i, %.079.i
  %109 = icmp sgt i32 %108, 0
  br i1 %109, label %.lr.ph.i832, label %_QMgcd_lcmPgcd.exit

_QMgcd_lcmPgcd.exit:                              ; preds = %.lr.ph.i832, %.lr.ph871
  %.0.lcssa.i = phi i32 [ %105, %.lr.ph871 ], [ %.079.i, %.lr.ph.i832 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond879.not = icmp eq i64 %indvars.iv, %99
  br i1 %exitcond879.not, label %._crit_edge872, label %.lr.ph871

._crit_edge872:                                   ; preds = %_QMgcd_lcmPgcd.exit, %96
  %.3.lcssa = phi i32 [ %97, %96 ], [ %.0.lcssa.i, %_QMgcd_lcmPgcd.exit ]
  %110 = call ptr @_FortranAioBeginExternalFormattedOutput(ptr nonnull @_QQcl.286129, i64 3, ptr null, i32 -1, ptr nonnull @_QQcl.042e01d358518bd591a5270189dd3ff0, i32 132)
  %111 = icmp eq i32 %.3.lcssa, 1
  %112 = select i1 %111, ptr @_QQcl.73657477697365, ptr @_QQcl.6E6F7420202020
  store ptr %112, ptr %1, align 8, !tbaa !7
  %.fca.1.gep276 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %1, i64 0, i32 1
  store i64 7, ptr %.fca.1.gep276, align 8, !tbaa !7
  %.fca.2.gep278 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %1, i64 0, i32 2
  store i32 20180515, ptr %.fca.2.gep278, align 8, !tbaa !7
  %.fca.3.gep280 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %1, i64 0, i32 3
  store i8 0, ptr %.fca.3.gep280, align 4, !tbaa !7
  %.fca.4.gep282 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %1, i64 0, i32 4
  store i8 40, ptr %.fca.4.gep282, align 1, !tbaa !7
  %.fca.5.gep284 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %1, i64 0, i32 5
  store i8 0, ptr %.fca.5.gep284, align 2, !tbaa !7
  %.fca.6.gep286 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %1, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep286, align 1, !tbaa !7
  %.fca.1.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %3, i64 0, i32 1
  %.fca.2.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %3, i64 0, i32 2
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %3, i8 0, i64 16, i1 false)
  store i32 20180515, ptr %.fca.2.gep, align 8, !tbaa !7
  %.fca.3.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %3, i64 0, i32 3
  store i8 0, ptr %.fca.3.gep, align 4, !tbaa !7
  %.fca.4.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %3, i64 0, i32 4
  store i8 40, ptr %.fca.4.gep, align 1, !tbaa !7
  %.fca.5.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %3, i64 0, i32 5
  store i8 2, ptr %.fca.5.gep, align 2, !tbaa !7
  %.fca.6.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %3, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep, align 1, !tbaa !7
  %113 = call {} @_FortranATrim(ptr nonnull %3, ptr nonnull %1, ptr nonnull @_QQcl.042e01d358518bd591a5270189dd3ff0, i32 132)
  %.fca.0.load = load ptr, ptr %3, align 8, !tbaa !7
  %.fca.1.load = load i64, ptr %.fca.1.gep, align 8, !tbaa !7
  %114 = add i64 %.fca.1.load, 8
  %115 = alloca i8, i64 %114, align 1
  call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %115, ptr align 1 %.fca.0.load, i64 %.fca.1.load, i1 false)
  %uglygep = getelementptr i8, ptr %115, i64 %.fca.1.load
  %116 = load i64, ptr @_QQcl.20636F7072696D65, align 1, !tbaa !3
  store i64 %116, ptr %uglygep, align 1, !tbaa !3
  %117 = call i1 @_FortranAioOutputAscii(ptr %110, ptr nonnull %115, i64 %114)
  call void @free(ptr %.fca.0.load)
  %118 = call i32 @_FortranAioEndIoStatement(ptr %110)
  ret void
}

declare ptr @_FortranAioBeginExternalListInput(i32, ptr, i32) local_unnamed_addr

declare i1 @_FortranAioInputInteger(ptr, ptr, i32) local_unnamed_addr

declare i32 @_FortranAioEndIoStatement(ptr) local_unnamed_addr

declare i1 @_FortranAioInputDescriptor(ptr, ptr) local_unnamed_addr

declare {} @_FortranAReportFatalUserError(ptr, ptr, i32) local_unnamed_addr

declare ptr @_FortranAioBeginExternalFormattedOutput(ptr, i64, ptr, i32, ptr, i32) local_unnamed_addr

declare i1 @_FortranAioOutputAscii(ptr, ptr, i64) local_unnamed_addr

declare {} @_FortranAStopStatement(i32, i1, i1) local_unnamed_addr

declare {} @_FortranATrim(ptr, ptr, ptr, i32) local_unnamed_addr

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

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smax.i32(i32, i32) #6

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.smax.i64(i64, i64) #7

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.abs.i32(i32, i1 immarg) #7

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smin.i32(i32, i32) #7

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x i32> @llvm.smax.v4i32(<4 x i32>, <4 x i32>) #7

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(none)
declare i32 @llvm.vector.reduce.smax.v4i32(<4 x i32>) #10

attributes #0 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" }
attributes #1 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" }
attributes #2 = { nounwind }
attributes #3 = { nofree norecurse nosync nounwind memory(read, inaccessiblemem: none) }
attributes #4 = { nofree nosync nounwind memory(argmem: read) }
attributes #5 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #9 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #10 = { nocallback nofree nosync nounwind willreturn memory(none) }

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

!0 = !{i32 2, !"Debug Info Version", i32 3}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{!4, !4, i64 0}
!4 = !{!"any data access", !5, i64 0}
!5 = !{!"any access", !6, i64 0}
!6 = !{!"Flang Type TBAA Root"}
!7 = !{!8, !8, i64 0}
!8 = !{!"descriptor member", !5, i64 0}
!9 = distinct !{!9, !10, !11}
!10 = !{!"llvm.loop.isvectorized", i32 1}
!11 = !{!"llvm.loop.unroll.runtime.disable"}
!12 = distinct !{!12, !11, !10}
