module Sort_Module
    implicit none
    public
    contains
    recursive subroutine mergesort(a, p, r, b)
        integer(8) a(:), b(:)
        integer(8) p, r
        integer(8) q
        if (p < r) then
            q = (p+r)/2
            call mergesort(a, p, q, b)
            call mergesort(a, q+1, r, b)
            call merge(a, p, q, r, b)
        end if
    end subroutine mergesort
    subroutine merge(a, p, q, r, b)
        integer(8) a(:), b(:)
        integer(8) p, r, q, i, j, k
        integer(8) t
        k = p;   i = p;   j = q+1
        do
            if (.not. (k <= r)) exit
            if (j > r) then
                t = a(i);   i = i+1
            else if (i > q) then
                t = a(j);   j = j+1
            else if (a(i) <= a(j)) then
                t = a(i);   i = i+1
            else
                t = a(j);   j = j+1
            end if
            b(k) = t;   k = k+1
        end do
        do i = p, r
            a(i) = b(i)  
        end do
    end subroutine merge
    subroutine sort(a)
      integer(8) a(:),b(ubound(a,1)-size(a)+1:ubound(a,1)),n,k
      n = ubound(a,1)
      k = ubound(a,1)-size(a)+1
      call mergesort(a,k,n,b)
    end subroutine sort
    function POSL(a,v) result(r)!find first i:a(i)>=v
        implicit none
        integer(8) :: a(:),l,r,idx,v
        r = ubound(a,1) + 1
        l = ubound(a,1)-size(a)
        do while(r-l>1)
            idx = l + (r-l)/2
            if(a(idx) >= v)then
                r = idx
            else
                l = idx
            endif
        enddo
    end function
    function POSU(a,v) result(r)!find first i:a(i)>v
        implicit none
        integer(8) :: a(:),l,r,idx,v
        r = ubound(a,1) + 1
        l = ubound(a,1)-size(a)
        do while(r-l>1)
            idx = l + (r-l)/2
            if(a(idx) > v)then
                r = idx
            else
                l = idx
            endif
        enddo
    end function
    function NUM(a,v) result(n)
        implicit none
        integer(8) :: a(:),v,n
        n = POSU(a,v) - POSL(a,v)
    end function
end module Sort_Module



program atcoder
    use Sort_Module
    implicit none
    integer(8) :: N,M,i,ans,k,l,x,y,z,MO,j
    integer(8),allocatable,dimension(:) :: A,B,C,Csum
    MO = 1000000007_8
    read*,N
    allocate(A(N),B(N),C(N),Csum(N))
    read(*,*)(A(i),i=1,N)
    read(*,*)(B(i),i=1,N)
    do i=1,N
        C(i) = A(i)-B(i)
    enddo
    if(sum(A)<sum(B))then
        write(*,'(I0)')-1
        return 
    endif
    call sort(C)
    Csum(1) = C(1)
    do i = 2,N
        Csum(i) = Csum(i-1) + C(i)
    enddo

    k = 0
    i = 1
    do while(C(i)<0)
        k = k + C(i)
        i = i + 1
    enddo
    do j = 0,N-1
        l = Csum(N) - Csum(N-j)
        if(l+k>=0)then
            write(*,'(I0)')j+i-1
            return
        endif
    enddo

    stop 
contains
end program atcoder
; 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"

@_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.8 = internal unnamed_addr global i64 0
@_QFEc.0 = internal unnamed_addr global ptr null
@_QFEc.8 = internal unnamed_addr global i64 0
@_QFEcsum.0 = internal unnamed_addr global ptr null
@_QQcl.41d4bf5774a7132edba83b50970ca164 = linkonce constant [73 x i8] c"/home/ubuntu/Downloads/TheStack_IR/Collated/Fortran/Source_5127/source.f\00"
@_QQcl.28493029 = linkonce constant [4 x i8] c"(I0)"
@_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: nofree nosync nounwind memory(readwrite, inaccessiblemem: none)
define void @_QMsort_modulePmergesort(ptr %0, ptr nocapture readonly %1, ptr nocapture readonly %2, ptr %3) local_unnamed_addr #1 {
  %5 = alloca i64, align 8
  %6 = alloca i64, align 8
  %7 = load i64, ptr %1, align 8, !tbaa !3
  %8 = load i64, ptr %2, align 8, !tbaa !3
  %9 = icmp slt i64 %7, %8
  br i1 %9, label %10, label %_QMsort_modulePmerge.exit

10:                                               ; preds = %4
  %11 = add i64 %8, %7
  %12 = sdiv i64 %11, 2
  store i64 %12, ptr %6, align 8, !tbaa !3
  call void @_QMsort_modulePmergesort(ptr %0, ptr nonnull %1, ptr nonnull %6, ptr %3)
  %13 = add nsw i64 %12, 1
  store i64 %13, ptr %5, align 8, !tbaa !3
  call void @_QMsort_modulePmergesort(ptr %0, ptr nonnull %5, ptr nonnull %2, ptr %3)
  %14 = load i64, ptr %1, align 8, !tbaa !3
  %15 = load i64, ptr %2, align 8, !tbaa !3
  %.not26.i = icmp sgt i64 %14, %15
  br i1 %.not26.i, label %._crit_edge.i, label %.lr.ph.i

.lr.ph.i:                                         ; preds = %10
  %16 = getelementptr { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 7, i64 0, i64 2
  %17 = load ptr, ptr %3, align 8, !tbaa !7
  %18 = getelementptr { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 7, i64 0, i64 2
  %19 = load i64, ptr %18, align 8, !tbaa !7
  %20 = load ptr, ptr %0, align 8, !tbaa !7
  %21 = load i64, ptr %16, align 8, !tbaa !7
  br label %58

._crit_edge.loopexit.i:                           ; preds = %88
  %.pre.i = load i64, ptr %1, align 8, !tbaa !3
  br label %._crit_edge.i

._crit_edge.i:                                    ; preds = %._crit_edge.loopexit.i, %10
  %22 = phi i64 [ %14, %10 ], [ %.pre.i, %._crit_edge.loopexit.i ]
  %.lcssa.i = phi i64 [ %15, %10 ], [ %93, %._crit_edge.loopexit.i ]
  %23 = sub i64 1, %22
  %24 = add i64 %23, %.lcssa.i
  %25 = icmp sgt i64 %24, 0
  br i1 %25, label %.lr.ph31.i, label %_QMsort_modulePmerge.exit

.lr.ph31.i:                                       ; preds = %._crit_edge.i
  %26 = load ptr, ptr %3, align 8, !tbaa !7
  %27 = getelementptr { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 7, i64 0, i64 2
  %28 = load i64, ptr %27, align 8, !tbaa !7
  %29 = load ptr, ptr %0, align 8, !tbaa !7
  %30 = getelementptr { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 7, i64 0, i64 2
  %31 = load i64, ptr %30, align 8, !tbaa !7
  %xtraiter = and i64 %24, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.prol.loopexit, label %.prol.loopexit.unr-lcssa

.prol.loopexit.unr-lcssa:                         ; preds = %.lr.ph31.i
  %32 = add i64 %22, -1
  %33 = mul i64 %32, %28
  %34 = getelementptr i8, ptr %26, i64 %33
  %35 = load i64, ptr %34, align 8, !tbaa !3
  %36 = mul i64 %32, %31
  %37 = getelementptr i8, ptr %29, i64 %36
  store i64 %35, ptr %37, align 8, !tbaa !3
  %38 = add i64 %22, 1
  %39 = add nsw i64 %24, -1
  br label %.prol.loopexit

.prol.loopexit:                                   ; preds = %.prol.loopexit.unr-lcssa, %.lr.ph31.i
  %.unr = phi i64 [ %24, %.lr.ph31.i ], [ %39, %.prol.loopexit.unr-lcssa ]
  %.unr2 = phi i64 [ %22, %.lr.ph31.i ], [ %38, %.prol.loopexit.unr-lcssa ]
  %40 = icmp eq i64 %.lcssa.i, %22
  br i1 %40, label %_QMsort_modulePmerge.exit, label %.lr.ph31.i.new

.lr.ph31.i.new:                                   ; preds = %.prol.loopexit, %.lr.ph31.i.new
  %41 = phi i64 [ %55, %.lr.ph31.i.new ], [ %.unr, %.prol.loopexit ]
  %42 = phi i64 [ %54, %.lr.ph31.i.new ], [ %.unr2, %.prol.loopexit ]
  %43 = add i64 %42, -1
  %44 = mul i64 %43, %28
  %45 = getelementptr i8, ptr %26, i64 %44
  %46 = load i64, ptr %45, align 8, !tbaa !3
  %47 = mul i64 %43, %31
  %48 = getelementptr i8, ptr %29, i64 %47
  store i64 %46, ptr %48, align 8, !tbaa !3
  %49 = mul i64 %42, %28
  %50 = getelementptr i8, ptr %26, i64 %49
  %51 = load i64, ptr %50, align 8, !tbaa !3
  %52 = mul i64 %42, %31
  %53 = getelementptr i8, ptr %29, i64 %52
  store i64 %51, ptr %53, align 8, !tbaa !3
  %54 = add i64 %42, 2
  %55 = add nsw i64 %41, -2
  %56 = add i64 %41, -3
  %57 = icmp ult i64 %56, -2
  br i1 %57, label %.lr.ph31.i.new, label %_QMsort_modulePmerge.exit

58:                                               ; preds = %88, %.lr.ph.i
  %59 = phi i64 [ %15, %.lr.ph.i ], [ %93, %88 ]
  %.01829.i = phi i64 [ %14, %.lr.ph.i ], [ %92, %88 ]
  %.01928.i = phi i64 [ %13, %.lr.ph.i ], [ %.1.i, %88 ]
  %.02027.i = phi i64 [ %14, %.lr.ph.i ], [ %.121.i, %88 ]
  %60 = icmp sgt i64 %.01928.i, %59
  br i1 %60, label %61, label %67

61:                                               ; preds = %58
  %62 = add i64 %.02027.i, -1
  %63 = mul i64 %21, %62
  %64 = getelementptr i8, ptr %20, i64 %63
  %65 = load i64, ptr %64, align 8, !tbaa !3
  %66 = add i64 %.02027.i, 1
  br label %88

67:                                               ; preds = %58
  %68 = icmp sgt i64 %.02027.i, %12
  br i1 %68, label %69, label %75

69:                                               ; preds = %67
  %70 = add i64 %.01928.i, -1
  %71 = mul i64 %21, %70
  %72 = getelementptr i8, ptr %20, i64 %71
  %73 = load i64, ptr %72, align 8, !tbaa !3
  %74 = add i64 %.01928.i, 1
  br label %88

75:                                               ; preds = %67
  %76 = add i64 %.02027.i, -1
  %77 = mul i64 %21, %76
  %78 = getelementptr i8, ptr %20, i64 %77
  %79 = load i64, ptr %78, align 8, !tbaa !3
  %80 = add i64 %.01928.i, -1
  %81 = mul i64 %21, %80
  %82 = getelementptr i8, ptr %20, i64 %81
  %83 = load i64, ptr %82, align 8, !tbaa !3
  %.not25.i = icmp sgt i64 %79, %83
  br i1 %.not25.i, label %86, label %84

84:                                               ; preds = %75
  %85 = add nsw i64 %.02027.i, 1
  br label %88

86:                                               ; preds = %75
  %87 = add i64 %.01928.i, 1
  br label %88

88:                                               ; preds = %86, %84, %69, %61
  %.121.i = phi i64 [ %66, %61 ], [ %.02027.i, %69 ], [ %85, %84 ], [ %.02027.i, %86 ]
  %.1.i = phi i64 [ %.01928.i, %61 ], [ %74, %69 ], [ %.01928.i, %84 ], [ %87, %86 ]
  %.0.i = phi i64 [ %65, %61 ], [ %73, %69 ], [ %79, %84 ], [ %83, %86 ]
  %89 = add i64 %.01829.i, -1
  %90 = mul i64 %89, %19
  %91 = getelementptr i8, ptr %17, i64 %90
  store i64 %.0.i, ptr %91, align 8, !tbaa !3
  %92 = add i64 %.01829.i, 1
  %93 = load i64, ptr %2, align 8, !tbaa !3
  %.not.i = icmp sgt i64 %92, %93
  br i1 %.not.i, label %._crit_edge.loopexit.i, label %58

_QMsort_modulePmerge.exit:                        ; preds = %.prol.loopexit, %.lr.ph31.i.new, %._crit_edge.i, %4
  ret void
}

; Function Attrs: nofree norecurse nosync nounwind memory(readwrite, inaccessiblemem: none)
define void @_QMsort_modulePmerge(ptr nocapture readonly %0, ptr nocapture readonly %1, ptr nocapture readonly %2, ptr nocapture readonly %3, ptr nocapture readonly %4) local_unnamed_addr #2 {
  %6 = load i64, ptr %1, align 8, !tbaa !3
  %7 = load i64, ptr %3, align 8, !tbaa !3
  %.not26 = icmp sgt i64 %6, %7
  br i1 %.not26, label %._crit_edge, label %.lr.ph

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

._crit_edge.loopexit:                             ; preds = %85
  %.pre = load i64, ptr %1, align 8, !tbaa !3
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %5
  %14 = phi i64 [ %6, %5 ], [ %.pre, %._crit_edge.loopexit ]
  %.lcssa = phi i64 [ %7, %5 ], [ %90, %._crit_edge.loopexit ]
  %15 = add nsw i64 %.lcssa, 1
  %16 = sub i64 %15, %14
  %17 = icmp sgt i64 %16, 0
  br i1 %17, label %.lr.ph31, label %._crit_edge32

.lr.ph31:                                         ; preds = %._crit_edge
  %18 = load ptr, ptr %4, align 8, !tbaa !7
  %19 = getelementptr { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %4, i64 0, i32 7, i64 0, i64 2
  %20 = load i64, ptr %19, align 8, !tbaa !7
  %21 = load ptr, ptr %0, align 8, !tbaa !7
  %22 = getelementptr { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 7, i64 0, i64 2
  %23 = load i64, ptr %22, align 8, !tbaa !7
  %xtraiter = and i64 %16, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.prol.loopexit, label %.prol.loopexit.unr-lcssa

.prol.loopexit.unr-lcssa:                         ; preds = %.lr.ph31
  %24 = add i64 %14, -1
  %25 = mul i64 %20, %24
  %26 = getelementptr i8, ptr %18, i64 %25
  %27 = load i64, ptr %26, align 8, !tbaa !3
  %28 = mul i64 %23, %24
  %29 = getelementptr i8, ptr %21, i64 %28
  store i64 %27, ptr %29, align 8, !tbaa !3
  %30 = add i64 %14, 1
  %31 = add nsw i64 %16, -1
  br label %.prol.loopexit

.prol.loopexit:                                   ; preds = %.prol.loopexit.unr-lcssa, %.lr.ph31
  %.unr = phi i64 [ %16, %.lr.ph31 ], [ %31, %.prol.loopexit.unr-lcssa ]
  %.unr37 = phi i64 [ %14, %.lr.ph31 ], [ %30, %.prol.loopexit.unr-lcssa ]
  %32 = icmp eq i64 %.lcssa, %14
  br i1 %32, label %._crit_edge32, label %.lr.ph31.new

.lr.ph31.new:                                     ; preds = %.prol.loopexit, %.lr.ph31.new
  %33 = phi i64 [ %47, %.lr.ph31.new ], [ %.unr, %.prol.loopexit ]
  %34 = phi i64 [ %46, %.lr.ph31.new ], [ %.unr37, %.prol.loopexit ]
  %35 = add i64 %34, -1
  %36 = mul i64 %20, %35
  %37 = getelementptr i8, ptr %18, i64 %36
  %38 = load i64, ptr %37, align 8, !tbaa !3
  %39 = mul i64 %23, %35
  %40 = getelementptr i8, ptr %21, i64 %39
  store i64 %38, ptr %40, align 8, !tbaa !3
  %41 = mul i64 %20, %34
  %42 = getelementptr i8, ptr %18, i64 %41
  %43 = load i64, ptr %42, align 8, !tbaa !3
  %44 = mul i64 %23, %34
  %45 = getelementptr i8, ptr %21, i64 %44
  store i64 %43, ptr %45, align 8, !tbaa !3
  %46 = add i64 %34, 2
  %47 = add nsw i64 %33, -2
  %48 = add i64 %33, -3
  %49 = icmp ult i64 %48, -2
  br i1 %49, label %.lr.ph31.new, label %._crit_edge32

._crit_edge32:                                    ; preds = %.prol.loopexit, %.lr.ph31.new, %._crit_edge
  ret void

50:                                               ; preds = %.lr.ph, %85
  %51 = phi i64 [ %7, %.lr.ph ], [ %90, %85 ]
  %.01829 = phi i64 [ %6, %.lr.ph ], [ %89, %85 ]
  %.01928 = phi i64 [ %9, %.lr.ph ], [ %.1, %85 ]
  %.02027 = phi i64 [ %6, %.lr.ph ], [ %.121, %85 ]
  %52 = icmp sgt i64 %.01928, %51
  br i1 %52, label %53, label %61

53:                                               ; preds = %50
  %54 = add i64 %.02027, -1
  %55 = load ptr, ptr %0, align 8, !tbaa !7
  %56 = load i64, ptr %10, align 8, !tbaa !7
  %57 = mul i64 %56, %54
  %58 = getelementptr i8, ptr %55, i64 %57
  %59 = load i64, ptr %58, align 8, !tbaa !3
  %60 = add i64 %.02027, 1
  br label %85

61:                                               ; preds = %50
  %62 = load i64, ptr %2, align 8, !tbaa !3
  %63 = icmp sgt i64 %.02027, %62
  %64 = load ptr, ptr %0, align 8, !tbaa !7
  %65 = load i64, ptr %10, align 8, !tbaa !7
  br i1 %63, label %66, label %72

66:                                               ; preds = %61
  %67 = add i64 %.01928, -1
  %68 = mul i64 %65, %67
  %69 = getelementptr i8, ptr %64, i64 %68
  %70 = load i64, ptr %69, align 8, !tbaa !3
  %71 = add i64 %.01928, 1
  br label %85

72:                                               ; preds = %61
  %73 = add i64 %.02027, -1
  %74 = mul i64 %65, %73
  %75 = getelementptr i8, ptr %64, i64 %74
  %76 = load i64, ptr %75, align 8, !tbaa !3
  %77 = add i64 %.01928, -1
  %78 = mul i64 %65, %77
  %79 = getelementptr i8, ptr %64, i64 %78
  %80 = load i64, ptr %79, align 8, !tbaa !3
  %.not25 = icmp sgt i64 %76, %80
  br i1 %.not25, label %83, label %81

81:                                               ; preds = %72
  %82 = add i64 %.02027, 1
  br label %85

83:                                               ; preds = %72
  %84 = add i64 %.01928, 1
  br label %85

85:                                               ; preds = %53, %66, %81, %83
  %.121 = phi i64 [ %60, %53 ], [ %.02027, %66 ], [ %82, %81 ], [ %.02027, %83 ]
  %.1 = phi i64 [ %.01928, %53 ], [ %71, %66 ], [ %.01928, %81 ], [ %84, %83 ]
  %.0 = phi i64 [ %59, %53 ], [ %70, %66 ], [ %76, %81 ], [ %80, %83 ]
  %86 = add i64 %.01829, -1
  %87 = mul i64 %13, %86
  %88 = getelementptr i8, ptr %11, i64 %87
  store i64 %.0, ptr %88, align 8, !tbaa !3
  %89 = add i64 %.01829, 1
  %90 = load i64, ptr %3, align 8, !tbaa !3
  %.not = icmp sgt i64 %89, %90
  br i1 %.not, label %._crit_edge.loopexit, label %50
}

; Function Attrs: nofree nosync nounwind memory(readwrite, inaccessiblemem: none)
define void @_QMsort_modulePsort(ptr %0) local_unnamed_addr #1 {
  %2 = alloca { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, align 8
  %3 = alloca i64, align 8
  %4 = alloca i64, align 8
  %5 = getelementptr { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 7, i64 0, i64 1
  %6 = load i64, ptr %5, align 8, !tbaa !7
  %sext = shl i64 %6, 32
  %7 = ashr exact i64 %sext, 32
  %8 = tail call i64 @llvm.smax.i64(i64 %7, i64 0)
  %9 = alloca i64, i64 %8, align 8
  store i64 %7, ptr %4, align 8, !tbaa !3
  store i64 1, ptr %3, align 8, !tbaa !3
  store ptr %9, ptr %2, align 8, !tbaa !7
  %.fca.1.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 1
  store i64 8, ptr %.fca.1.gep, align 8, !tbaa !7
  %.fca.2.gep = 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.gep, align 8, !tbaa !7
  %.fca.3.gep = 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.gep, align 4, !tbaa !7
  %.fca.4.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 4
  store i8 10, ptr %.fca.4.gep, align 1, !tbaa !7
  %.fca.5.gep = 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.gep, align 2, !tbaa !7
  %.fca.6.gep = 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.gep, 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 %8, 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 8, ptr %.fca.7.0.2.gep, align 8, !tbaa !7
  call void @_QMsort_modulePmergesort(ptr %0, ptr nonnull %3, ptr nonnull %4, ptr nonnull %2)
  ret void
}

; Function Attrs: nofree norecurse nosync nounwind memory(read, inaccessiblemem: none)
define i64 @_QMsort_modulePposl(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 = shl i64 %4, 32
  %sext = add i64 %5, 4294967296
  %6 = ashr exact i64 %sext, 32
  %7 = icmp sgt i64 %sext, 4294967296
  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 i64, ptr %1, align 8, !tbaa !3
  br label %12

12:                                               ; preds = %.lr.ph, %12
  %13 = phi i64 [ %6, %.lr.ph ], [ %20, %12 ]
  %.011 = phi i64 [ %6, %.lr.ph ], [ %.0., %12 ]
  %.0810 = phi i64 [ 0, %.lr.ph ], [ %..08, %12 ]
  %14 = lshr i64 %13, 1
  %15 = add i64 %14, %.0810
  %16 = add i64 %15, -1
  %17 = mul i64 %10, %16
  %18 = getelementptr i8, ptr %8, i64 %17
  %19 = load i64, ptr %18, align 8, !tbaa !3
  %.not = icmp slt i64 %19, %11
  %..08 = select i1 %.not, i64 %15, i64 %.0810
  %.0. = select i1 %.not, i64 %.011, i64 %15
  %20 = sub i64 %.0., %..08
  %21 = icmp sgt i64 %20, 1
  br i1 %21, label %12, label %._crit_edge

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

; Function Attrs: nofree norecurse nosync nounwind memory(read, inaccessiblemem: none)
define i64 @_QMsort_modulePposu(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 = shl i64 %4, 32
  %sext = add i64 %5, 4294967296
  %6 = ashr exact i64 %sext, 32
  %7 = icmp sgt i64 %sext, 4294967296
  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 i64, ptr %1, align 8, !tbaa !3
  br label %12

12:                                               ; preds = %.lr.ph, %12
  %13 = phi i64 [ %6, %.lr.ph ], [ %21, %12 ]
  %.011 = phi i64 [ %6, %.lr.ph ], [ %..0, %12 ]
  %.0810 = phi i64 [ 0, %.lr.ph ], [ %.08., %12 ]
  %14 = lshr i64 %13, 1
  %15 = add i64 %14, %.0810
  %16 = add i64 %15, -1
  %17 = mul i64 %10, %16
  %18 = getelementptr i8, ptr %8, i64 %17
  %19 = load i64, ptr %18, align 8, !tbaa !3
  %20 = icmp sgt i64 %19, %11
  %.08. = select i1 %20, i64 %.0810, i64 %15
  %..0 = select i1 %20, i64 %15, i64 %.011
  %21 = sub i64 %..0, %.08.
  %22 = icmp sgt i64 %21, 1
  br i1 %22, label %12, label %._crit_edge

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

; Function Attrs: nofree norecurse nosync nounwind memory(read, inaccessiblemem: none)
define i64 @_QMsort_modulePnum(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 = shl i64 %4, 32
  %sext.i = add i64 %5, 4294967296
  %6 = ashr exact i64 %sext.i, 32
  %7 = icmp sgt i64 %sext.i, 4294967296
  br i1 %7, label %.lr.ph.i, label %_QMsort_modulePposl.exit

.lr.ph.i:                                         ; 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 i64, ptr %1, align 8, !tbaa !3
  br label %12

12:                                               ; preds = %12, %.lr.ph.i
  %13 = phi i64 [ %6, %.lr.ph.i ], [ %21, %12 ]
  %.011.i = phi i64 [ %6, %.lr.ph.i ], [ %..0.i, %12 ]
  %.0810.i = phi i64 [ 0, %.lr.ph.i ], [ %.08..i, %12 ]
  %14 = lshr i64 %13, 1
  %15 = add i64 %.0810.i, %14
  %16 = add i64 %15, -1
  %17 = mul i64 %16, %10
  %18 = getelementptr i8, ptr %8, i64 %17
  %19 = load i64, ptr %18, align 8, !tbaa !3
  %20 = icmp sgt i64 %19, %11
  %.08..i = select i1 %20, i64 %.0810.i, i64 %15
  %..0.i = select i1 %20, i64 %15, i64 %.011.i
  %21 = sub i64 %..0.i, %.08..i
  %22 = icmp sgt i64 %21, 1
  br i1 %22, label %12, label %.lr.ph.i2

.lr.ph.i2:                                        ; preds = %12, %.lr.ph.i2
  %23 = phi i64 [ %30, %.lr.ph.i2 ], [ %6, %12 ]
  %.011.i3 = phi i64 [ %.0..i, %.lr.ph.i2 ], [ %6, %12 ]
  %.0810.i4 = phi i64 [ %..08.i, %.lr.ph.i2 ], [ 0, %12 ]
  %24 = lshr i64 %23, 1
  %25 = add i64 %.0810.i4, %24
  %26 = add i64 %25, -1
  %27 = mul i64 %26, %10
  %28 = getelementptr i8, ptr %8, i64 %27
  %29 = load i64, ptr %28, align 8, !tbaa !3
  %.not.i = icmp slt i64 %29, %11
  %..08.i = select i1 %.not.i, i64 %25, i64 %.0810.i4
  %.0..i = select i1 %.not.i, i64 %.011.i3, i64 %25
  %30 = sub i64 %.0..i, %..08.i
  %31 = icmp sgt i64 %30, 1
  br i1 %31, label %.lr.ph.i2, label %_QMsort_modulePposl.exit

_QMsort_modulePposl.exit:                         ; preds = %.lr.ph.i2, %2
  %.0.lcssa.i7 = phi i64 [ %6, %2 ], [ %..0.i, %.lr.ph.i2 ]
  %.0.lcssa.i5 = phi i64 [ %6, %2 ], [ %.0..i, %.lr.ph.i2 ]
  %32 = sub i64 %.0.lcssa.i7, %.0.lcssa.i5
  ret i64 %32
}

define void @_QQmain() local_unnamed_addr {
  %1 = alloca { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, align 8
  %2 = alloca i64, align 8
  %3 = tail call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.41d4bf5774a7132edba83b50970ca164, i32 87)
  %4 = call i1 @_FortranAioInputInteger(ptr %3, ptr nonnull %2, i32 8)
  %5 = call i32 @_FortranAioEndIoStatement(ptr %3)
  %6 = load i64, ptr %2, align 8, !tbaa !3
  %7 = call i64 @llvm.smax.i64(i64 %6, i64 0)
  %8 = shl i64 %7, 3
  %9 = call ptr @malloc(i64 %8)
  store ptr %9, ptr @_QFEa.0, align 8, !tbaa !7
  store i64 %7, ptr @_QFEa.8, align 8, !tbaa !7
  %10 = call ptr @malloc(i64 %8)
  store ptr %10, ptr @_QFEb.0, align 8, !tbaa !7
  store i64 %7, ptr @_QFEb.8, align 8, !tbaa !7
  %11 = call ptr @malloc(i64 %8)
  store ptr %11, ptr @_QFEc.0, align 8, !tbaa !7
  store i64 %7, ptr @_QFEc.8, align 8, !tbaa !7
  %12 = call ptr @malloc(i64 %8)
  store ptr %12, ptr @_QFEcsum.0, align 8, !tbaa !7
  %13 = call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.41d4bf5774a7132edba83b50970ca164, i32 89)
  %14 = load i64, ptr %2, align 8, !tbaa !3
  %15 = icmp sgt i64 %14, 0
  br i1 %15, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %0, %.lr.ph
  %16 = phi i64 [ %20, %.lr.ph ], [ 1, %0 ]
  %.unpack834 = load ptr, ptr @_QFEa.0, align 8, !tbaa !7
  %17 = add i64 %16, -1
  %18 = getelementptr i64, ptr %.unpack834, i64 %17
  %19 = call i1 @_FortranAioInputInteger(ptr %13, ptr %18, i32 8)
  %20 = add nuw i64 %16, 1
  %exitcond.not = icmp eq i64 %16, %14
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %.lr.ph, %0
  %21 = call i32 @_FortranAioEndIoStatement(ptr %13)
  %22 = call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.41d4bf5774a7132edba83b50970ca164, i32 90)
  %23 = load i64, ptr %2, align 8, !tbaa !3
  %24 = icmp sgt i64 %23, 0
  br i1 %24, label %.lr.ph864, label %._crit_edge865

.lr.ph864:                                        ; preds = %._crit_edge, %.lr.ph864
  %25 = phi i64 [ %29, %.lr.ph864 ], [ 1, %._crit_edge ]
  %.unpack822 = load ptr, ptr @_QFEb.0, align 8, !tbaa !7
  %26 = add i64 %25, -1
  %27 = getelementptr i64, ptr %.unpack822, i64 %26
  %28 = call i1 @_FortranAioInputInteger(ptr %22, ptr %27, i32 8)
  %29 = add nuw i64 %25, 1
  %exitcond884.not = icmp eq i64 %25, %23
  br i1 %exitcond884.not, label %._crit_edge865, label %.lr.ph864

._crit_edge865:                                   ; preds = %.lr.ph864, %._crit_edge
  %30 = call i32 @_FortranAioEndIoStatement(ptr %22)
  %31 = load i64, ptr %2, align 8, !tbaa !3
  %32 = icmp sgt i64 %31, 0
  %.unpack786 = load ptr, ptr @_QFEa.0, align 8, !tbaa !7
  %.unpack786896 = ptrtoint ptr %.unpack786 to i64
  br i1 %32, label %.lr.ph867, label %._crit_edge868

.lr.ph867:                                        ; preds = %._crit_edge865
  %.unpack798 = load ptr, ptr @_QFEb.0, align 8, !tbaa !7
  %.unpack810 = load ptr, ptr @_QFEc.0, align 8, !tbaa !7
  %min.iters.check = icmp ult i64 %31, 6
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph867
  %.unpack810895 = ptrtoint ptr %.unpack810 to i64
  %.unpack798897 = ptrtoint ptr %.unpack798 to i64
  %33 = sub i64 %.unpack810895, %.unpack786896
  %diff.check = icmp ult i64 %33, 32
  %34 = sub i64 %.unpack810895, %.unpack798897
  %diff.check898 = icmp ult i64 %34, 32
  %conflict.rdx = or i1 %diff.check, %diff.check898
  br i1 %conflict.rdx, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %31, -4
  %ind.end = or i64 %n.vec, 1
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %35 = getelementptr i64, ptr %.unpack786, i64 %index
  %wide.load = load <2 x i64>, ptr %35, align 8, !tbaa !3
  %36 = getelementptr i64, ptr %35, i64 2
  %wide.load899 = load <2 x i64>, ptr %36, align 8, !tbaa !3
  %37 = getelementptr i64, ptr %.unpack798, i64 %index
  %wide.load900 = load <2 x i64>, ptr %37, align 8, !tbaa !3
  %38 = getelementptr i64, ptr %37, i64 2
  %wide.load901 = load <2 x i64>, ptr %38, align 8, !tbaa !3
  %39 = sub <2 x i64> %wide.load, %wide.load900
  %40 = sub <2 x i64> %wide.load899, %wide.load901
  %41 = getelementptr i64, ptr %.unpack810, i64 %index
  store <2 x i64> %39, ptr %41, align 8, !tbaa !3
  %42 = getelementptr i64, ptr %41, i64 2
  store <2 x i64> %40, ptr %42, align 8, !tbaa !3
  %index.next = add nuw i64 %index, 4
  %43 = icmp eq i64 %index.next, %n.vec
  br i1 %43, label %middle.block, label %vector.body, !llvm.loop !9

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %31, %n.vec
  br i1 %cmp.n, label %._crit_edge868, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %vector.memcheck, %.lr.ph867, %middle.block
  %.ph945 = phi i64 [ 1, %vector.memcheck ], [ 1, %.lr.ph867 ], [ %ind.end, %middle.block ]
  %xtraiter = and i64 %31, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader
  %44 = add nsw i64 %.ph945, -1
  %45 = getelementptr i64, ptr %.unpack786, i64 %44
  %46 = load i64, ptr %45, align 8, !tbaa !3
  %47 = add nsw i64 %.ph945, -1
  %48 = getelementptr i64, ptr %.unpack798, i64 %47
  %49 = load i64, ptr %48, align 8, !tbaa !3
  %50 = sub i64 %46, %49
  %51 = add nsw i64 %.ph945, -1
  %52 = getelementptr i64, ptr %.unpack810, i64 %51
  store i64 %50, ptr %52, align 8, !tbaa !3
  %53 = add nuw i64 %.ph945, 1
  br label %scalar.ph.prol.loopexit

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %.unr = phi i64 [ %.ph945, %scalar.ph.preheader ], [ %53, %scalar.ph.prol ]
  %54 = icmp eq i64 %31, %.ph945
  br i1 %54, label %._crit_edge868, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %55 = phi i64 [ %72, %scalar.ph ], [ %.unr, %scalar.ph.prol.loopexit ]
  %56 = add i64 %55, -1
  %57 = getelementptr i64, ptr %.unpack786, i64 %56
  %58 = load i64, ptr %57, align 8, !tbaa !3
  %59 = add i64 %55, -1
  %60 = getelementptr i64, ptr %.unpack798, i64 %59
  %61 = load i64, ptr %60, align 8, !tbaa !3
  %62 = sub i64 %58, %61
  %63 = add i64 %55, -1
  %64 = getelementptr i64, ptr %.unpack810, i64 %63
  store i64 %62, ptr %64, align 8, !tbaa !3
  %65 = add nuw i64 %55, 1
  %66 = getelementptr i64, ptr %.unpack786, i64 %55
  %67 = load i64, ptr %66, align 8, !tbaa !3
  %68 = getelementptr i64, ptr %.unpack798, i64 %55
  %69 = load i64, ptr %68, align 8, !tbaa !3
  %70 = sub i64 %67, %69
  %71 = getelementptr i64, ptr %.unpack810, i64 %55
  store i64 %70, ptr %71, align 8, !tbaa !3
  %72 = add nuw i64 %55, 2
  %exitcond885.not.1 = icmp eq i64 %65, %31
  br i1 %exitcond885.not.1, label %._crit_edge868, label %scalar.ph, !llvm.loop !12

._crit_edge868:                                   ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block, %._crit_edge865
  %.unpack685.unpack.unpack687 = load i64, ptr @_QFEa.8, align 8, !tbaa !7
  %73 = icmp sgt i64 %.unpack685.unpack.unpack687, 0
  br i1 %73, label %.lr.ph.i.preheader, label %_FortranASumInteger8x1_contract_simplified.exit

.lr.ph.i.preheader:                               ; preds = %._crit_edge868
  %min.iters.check904 = icmp ult i64 %.unpack685.unpack.unpack687, 4
  br i1 %min.iters.check904, label %.lr.ph.i.preheader939, label %vector.ph905

vector.ph905:                                     ; preds = %.lr.ph.i.preheader
  %n.vec907 = and i64 %.unpack685.unpack.unpack687, -4
  br label %vector.body910

vector.body910:                                   ; preds = %vector.body910, %vector.ph905
  %index911 = phi i64 [ 0, %vector.ph905 ], [ %index.next915, %vector.body910 ]
  %vec.phi = phi <2 x i64> [ zeroinitializer, %vector.ph905 ], [ %77, %vector.body910 ]
  %vec.phi912 = phi <2 x i64> [ zeroinitializer, %vector.ph905 ], [ %78, %vector.body910 ]
  %74 = shl i64 %index911, 3
  %75 = getelementptr i8, ptr %.unpack786, i64 %74
  %wide.load913 = load <2 x i64>, ptr %75, align 8, !tbaa !3
  %76 = getelementptr i64, ptr %75, i64 2
  %wide.load914 = load <2 x i64>, ptr %76, align 8, !tbaa !3
  %77 = add <2 x i64> %wide.load913, %vec.phi
  %78 = add <2 x i64> %wide.load914, %vec.phi912
  %index.next915 = add nuw i64 %index911, 4
  %79 = icmp eq i64 %index.next915, %n.vec907
  br i1 %79, label %middle.block902, label %vector.body910, !llvm.loop !13

middle.block902:                                  ; preds = %vector.body910
  %bin.rdx = add <2 x i64> %78, %77
  %80 = call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %bin.rdx)
  %cmp.n909 = icmp eq i64 %.unpack685.unpack.unpack687, %n.vec907
  br i1 %cmp.n909, label %_FortranASumInteger8x1_contract_simplified.exit, label %.lr.ph.i.preheader939

.lr.ph.i.preheader939:                            ; preds = %.lr.ph.i.preheader, %middle.block902
  %.ph940 = phi i64 [ 0, %.lr.ph.i.preheader ], [ %80, %middle.block902 ]
  %.ph941 = phi i64 [ 0, %.lr.ph.i.preheader ], [ %n.vec907, %middle.block902 ]
  br label %.lr.ph.i

.lr.ph.i:                                         ; preds = %.lr.ph.i.preheader939, %.lr.ph.i
  %81 = phi i64 [ %86, %.lr.ph.i ], [ %.ph940, %.lr.ph.i.preheader939 ]
  %82 = phi i64 [ %87, %.lr.ph.i ], [ %.ph941, %.lr.ph.i.preheader939 ]
  %83 = shl i64 %82, 3
  %84 = getelementptr i8, ptr %.unpack786, i64 %83
  %85 = load i64, ptr %84, align 8, !tbaa !3
  %86 = add i64 %85, %81
  %87 = add nuw nsw i64 %82, 1
  %exitcond.not.i = icmp eq i64 %87, %.unpack685.unpack.unpack687
  br i1 %exitcond.not.i, label %_FortranASumInteger8x1_contract_simplified.exit, label %.lr.ph.i, !llvm.loop !14

_FortranASumInteger8x1_contract_simplified.exit:  ; preds = %.lr.ph.i, %middle.block902, %._crit_edge868
  %.lcssa.i = phi i64 [ 0, %._crit_edge868 ], [ %80, %middle.block902 ], [ %86, %.lr.ph.i ]
  %.unpack690 = load ptr, ptr @_QFEb.0, align 8, !tbaa !7
  %.unpack697.unpack.unpack699 = load i64, ptr @_QFEb.8, align 8, !tbaa !7
  %88 = icmp sgt i64 %.unpack697.unpack.unpack699, 0
  br i1 %88, label %.lr.ph.i846.preheader, label %_FortranASumInteger8x1_contract_simplified.exit849

.lr.ph.i846.preheader:                            ; preds = %_FortranASumInteger8x1_contract_simplified.exit
  %min.iters.check918 = icmp ult i64 %.unpack697.unpack.unpack699, 4
  br i1 %min.iters.check918, label %.lr.ph.i846.preheader934, label %vector.ph919

vector.ph919:                                     ; preds = %.lr.ph.i846.preheader
  %n.vec921 = and i64 %.unpack697.unpack.unpack699, -4
  br label %vector.body924

vector.body924:                                   ; preds = %vector.body924, %vector.ph919
  %index925 = phi i64 [ 0, %vector.ph919 ], [ %index.next930, %vector.body924 ]
  %vec.phi926 = phi <2 x i64> [ zeroinitializer, %vector.ph919 ], [ %92, %vector.body924 ]
  %vec.phi927 = phi <2 x i64> [ zeroinitializer, %vector.ph919 ], [ %93, %vector.body924 ]
  %89 = shl i64 %index925, 3
  %90 = getelementptr i8, ptr %.unpack690, i64 %89
  %wide.load928 = load <2 x i64>, ptr %90, align 8, !tbaa !3
  %91 = getelementptr i64, ptr %90, i64 2
  %wide.load929 = load <2 x i64>, ptr %91, align 8, !tbaa !3
  %92 = add <2 x i64> %wide.load928, %vec.phi926
  %93 = add <2 x i64> %wide.load929, %vec.phi927
  %index.next930 = add nuw i64 %index925, 4
  %94 = icmp eq i64 %index.next930, %n.vec921
  br i1 %94, label %middle.block916, label %vector.body924, !llvm.loop !15

middle.block916:                                  ; preds = %vector.body924
  %bin.rdx931 = add <2 x i64> %93, %92
  %95 = call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %bin.rdx931)
  %cmp.n923 = icmp eq i64 %.unpack697.unpack.unpack699, %n.vec921
  br i1 %cmp.n923, label %_FortranASumInteger8x1_contract_simplified.exit849, label %.lr.ph.i846.preheader934

.lr.ph.i846.preheader934:                         ; preds = %.lr.ph.i846.preheader, %middle.block916
  %.ph = phi i64 [ 0, %.lr.ph.i846.preheader ], [ %95, %middle.block916 ]
  %.ph935 = phi i64 [ 0, %.lr.ph.i846.preheader ], [ %n.vec921, %middle.block916 ]
  br label %.lr.ph.i846

.lr.ph.i846:                                      ; preds = %.lr.ph.i846.preheader934, %.lr.ph.i846
  %96 = phi i64 [ %101, %.lr.ph.i846 ], [ %.ph, %.lr.ph.i846.preheader934 ]
  %97 = phi i64 [ %102, %.lr.ph.i846 ], [ %.ph935, %.lr.ph.i846.preheader934 ]
  %98 = shl i64 %97, 3
  %99 = getelementptr i8, ptr %.unpack690, i64 %98
  %100 = load i64, ptr %99, align 8, !tbaa !3
  %101 = add i64 %100, %96
  %102 = add nuw nsw i64 %97, 1
  %exitcond.not.i847 = icmp eq i64 %102, %.unpack697.unpack.unpack699
  br i1 %exitcond.not.i847, label %_FortranASumInteger8x1_contract_simplified.exit849, label %.lr.ph.i846, !llvm.loop !16

_FortranASumInteger8x1_contract_simplified.exit849: ; preds = %.lr.ph.i846, %middle.block916, %_FortranASumInteger8x1_contract_simplified.exit
  %.lcssa.i848 = phi i64 [ 0, %_FortranASumInteger8x1_contract_simplified.exit ], [ %95, %middle.block916 ], [ %101, %.lr.ph.i846 ]
  %103 = icmp slt i64 %.lcssa.i, %.lcssa.i848
  br i1 %103, label %105, label %108

common.ret:                                       ; preds = %152, %105
  %.sink = phi ptr [ %153, %152 ], [ %106, %105 ]
  %104 = call i32 @_FortranAioEndIoStatement(ptr %.sink)
  ret void

105:                                              ; preds = %_FortranASumInteger8x1_contract_simplified.exit849
  %106 = call ptr @_FortranAioBeginExternalFormattedOutput(ptr nonnull @_QQcl.28493029, i64 4, ptr null, i32 -1, ptr nonnull @_QQcl.41d4bf5774a7132edba83b50970ca164, i32 95)
  %107 = call i1 @_FortranAioOutputInteger32(ptr %106, i32 -1)
  br label %common.ret

108:                                              ; preds = %_FortranASumInteger8x1_contract_simplified.exit849
  %.unpack702 = load ptr, ptr @_QFEc.0, align 8, !tbaa !7
  %.unpack709.unpack.unpack711 = load i64, ptr @_QFEc.8, align 8, !tbaa !7
  store ptr %.unpack702, ptr %1, align 8, !tbaa !7
  %.fca.1.gep258 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 1
  store i64 8, ptr %.fca.1.gep258, align 8, !tbaa !7
  %.fca.2.gep260 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 2
  store i32 20180515, ptr %.fca.2.gep260, align 8, !tbaa !7
  %.fca.3.gep262 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 3
  store i8 1, ptr %.fca.3.gep262, align 4, !tbaa !7
  %.fca.4.gep264 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 4
  store i8 10, ptr %.fca.4.gep264, align 1, !tbaa !7
  %.fca.5.gep266 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 5
  store i8 0, ptr %.fca.5.gep266, align 2, !tbaa !7
  %.fca.6.gep268 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep268, align 1, !tbaa !7
  %.fca.7.0.0.gep270 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 7, i64 0, i64 0
  store i64 1, ptr %.fca.7.0.0.gep270, align 8, !tbaa !7
  %.fca.7.0.1.gep272 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 7, i64 0, i64 1
  store i64 %.unpack709.unpack.unpack711, ptr %.fca.7.0.1.gep272, align 8, !tbaa !7
  %.fca.7.0.2.gep274 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 7, i64 0, i64 2
  store i64 8, ptr %.fca.7.0.2.gep274, align 8, !tbaa !7
  call void @_QMsort_modulePsort(ptr nonnull %1)
  %109 = load i64, ptr %.unpack702, align 8, !tbaa !3
  %.unpack726 = load ptr, ptr @_QFEcsum.0, align 8, !tbaa !7
  store i64 %109, ptr %.unpack726, align 8, !tbaa !3
  %110 = load i64, ptr %2, align 8, !tbaa !3
  %111 = add i64 %110, -1
  %112 = icmp sgt i64 %111, 0
  br i1 %112, label %.lr.ph870, label %.preheader

.lr.ph870:                                        ; preds = %108
  %load_initial = load i64, ptr %.unpack726, align 8
  %xtraiter946 = and i64 %111, 1
  %113 = icmp eq i64 %110, 2
  br i1 %113, label %.preheader.loopexit.unr-lcssa, label %.lr.ph870.new

.lr.ph870.new:                                    ; preds = %.lr.ph870
  %unroll_iter = and i64 %111, -2
  br label %121

.preheader.loopexit.unr-lcssa.loopexit:           ; preds = %121
  %114 = or i64 %122, 1
  br label %.preheader.loopexit.unr-lcssa

.preheader.loopexit.unr-lcssa:                    ; preds = %.preheader.loopexit.unr-lcssa.loopexit, %.lr.ph870
  %store_forwarded.unr = phi i64 [ %load_initial, %.lr.ph870 ], [ %131, %.preheader.loopexit.unr-lcssa.loopexit ]
  %.unr947 = phi i64 [ 1, %.lr.ph870 ], [ %114, %.preheader.loopexit.unr-lcssa.loopexit ]
  %lcmp.mod948.not = icmp eq i64 %xtraiter946, 0
  br i1 %lcmp.mod948.not, label %.preheader, label %.preheader.loopexit.epilog-lcssa

.preheader.loopexit.epilog-lcssa:                 ; preds = %.preheader.loopexit.unr-lcssa
  %115 = getelementptr i64, ptr %.unpack702, i64 %.unr947
  %116 = load i64, ptr %115, align 8, !tbaa !3
  %117 = add i64 %116, %store_forwarded.unr
  %118 = getelementptr i64, ptr %.unpack726, i64 %.unr947
  store i64 %117, ptr %118, align 8, !tbaa !3
  br label %.preheader

.preheader:                                       ; preds = %.preheader.loopexit.epilog-lcssa, %.preheader.loopexit.unr-lcssa, %108
  %119 = load i64, ptr %.unpack702, align 8, !tbaa !3
  %120 = icmp slt i64 %119, 0
  br i1 %120, label %.lr.ph873, label %._crit_edge874

121:                                              ; preds = %121, %.lr.ph870.new
  %store_forwarded = phi i64 [ %load_initial, %.lr.ph870.new ], [ %131, %121 ]
  %122 = phi i64 [ 2, %.lr.ph870.new ], [ %133, %121 ]
  %niter = phi i64 [ 0, %.lr.ph870.new ], [ %niter.next.1, %121 ]
  %123 = add i64 %122, -1
  %124 = getelementptr i64, ptr %.unpack702, i64 %123
  %125 = load i64, ptr %124, align 8, !tbaa !3
  %126 = add i64 %125, %store_forwarded
  %127 = add i64 %122, -1
  %128 = getelementptr i64, ptr %.unpack726, i64 %127
  store i64 %126, ptr %128, align 8, !tbaa !3
  %129 = getelementptr i64, ptr %.unpack702, i64 %122
  %130 = load i64, ptr %129, align 8, !tbaa !3
  %131 = add i64 %130, %126
  %132 = getelementptr i64, ptr %.unpack726, i64 %122
  store i64 %131, ptr %132, align 8, !tbaa !3
  %133 = add nuw i64 %122, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.preheader.loopexit.unr-lcssa.loopexit, label %121

.lr.ph873:                                        ; preds = %.preheader, %.lr.ph873
  %134 = phi i64 [ %138, %.lr.ph873 ], [ %119, %.preheader ]
  %.0635872 = phi i64 [ %136, %.lr.ph873 ], [ 1, %.preheader ]
  %.0636871 = phi i64 [ %135, %.lr.ph873 ], [ 0, %.preheader ]
  %135 = add i64 %134, %.0636871
  %136 = add i64 %.0635872, 1
  %137 = getelementptr i64, ptr %.unpack702, i64 %.0635872
  %138 = load i64, ptr %137, align 8, !tbaa !3
  %139 = icmp slt i64 %138, 0
  br i1 %139, label %.lr.ph873, label %._crit_edge874

._crit_edge874:                                   ; preds = %.lr.ph873, %.preheader
  %.0636.lcssa = phi i64 [ 0, %.preheader ], [ %135, %.lr.ph873 ]
  %.0635.lcssa = phi i64 [ 0, %.preheader ], [ %.0635872, %.lr.ph873 ]
  %140 = load i64, ptr %2, align 8, !tbaa !3
  %141 = icmp sgt i64 %140, 0
  br i1 %141, label %.lr.ph879, label %._crit_edge880

.lr.ph879:                                        ; preds = %._crit_edge874
  %142 = add i64 %140, -1
  %143 = getelementptr i64, ptr %.unpack726, i64 %142
  %144 = load i64, ptr %143, align 8, !tbaa !3
  %145 = add i64 %144, %.0636.lcssa
  br label %146

146:                                              ; preds = %.lr.ph879, %156
  %.0637876 = phi i64 [ 0, %.lr.ph879 ], [ %157, %156 ]
  %.neg = xor i64 %.0637876, -1
  %147 = add i64 %140, %.neg
  %148 = getelementptr i64, ptr %.unpack726, i64 %147
  %149 = load i64, ptr %148, align 8, !tbaa !3
  %150 = sub i64 %145, %149
  %151 = icmp sgt i64 %150, -1
  br i1 %151, label %152, label %156

152:                                              ; preds = %146
  %153 = call ptr @_FortranAioBeginExternalFormattedOutput(ptr nonnull @_QQcl.28493029, i64 4, ptr null, i32 -1, ptr nonnull @_QQcl.41d4bf5774a7132edba83b50970ca164, i32 113)
  %154 = add i64 %.0635.lcssa, %.0637876
  %155 = call i1 @_FortranAioOutputInteger64(ptr %153, i64 %154)
  br label %common.ret

156:                                              ; preds = %146
  %157 = add nuw nsw i64 %.0637876, 1
  %exitcond887.not = icmp eq i64 %157, %140
  br i1 %exitcond887.not, label %._crit_edge880, label %146

._crit_edge880:                                   ; preds = %156, %._crit_edge874
  %158 = call {} @_FortranAStopStatement(i32 0, i1 false, i1 false)
  unreachable
}

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 ptr @_FortranAioBeginExternalFormattedOutput(ptr, i64, ptr, i32, ptr, i32) local_unnamed_addr

declare i1 @_FortranAioOutputInteger32(ptr, i32) local_unnamed_addr

declare i1 @_FortranAioOutputInteger64(ptr, i64) local_unnamed_addr

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

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

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(none)
declare i64 @llvm.vector.reduce.add.v2i64(<2 x i64>) #5

attributes #0 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" }
attributes #1 = { nofree nosync nounwind memory(readwrite, inaccessiblemem: none) }
attributes #2 = { nofree norecurse nosync nounwind memory(readwrite, inaccessiblemem: none) }
attributes #3 = { nofree norecurse nosync nounwind memory(read, inaccessiblemem: none) }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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, !10}
!13 = distinct !{!13, !10, !11}
!14 = distinct !{!14, !11, !10}
!15 = distinct !{!15, !10, !11}
!16 = distinct !{!16, !11, !10}
