program prob3
    implicit none
    integer::n, m, i, j
    integer(8)::t, ans
    integer(8), allocatable::a(:,:)
    read(*,*) n, m
    allocate(a(n,2))
    do i = 1, n
        read(*,*) a(i,1), a(i,2)
    end do
    call hsort(n,2,1,a)
    ans = 0
    do i = 1, n
        if(m >= a(i,2)) then
            ans = ans + a(i,1) * a(i,2)
            m = m - a(i,2)
        else
            ans = ans + m * a(i,1)
            exit
        end if
    end do
    write(*,*) ans
    stop
contains
    ! n行m列の配列をp列目でsort
    ! 1次元配列ならm=p=1
    subroutine hsort(n,m,p,array)
        implicit none
        integer,intent(in)::n, m, p
        integer(8),intent(inout)::array(n,m)

        integer ::i,k,j,l
        integer::t(m)

        if(n.le.0)then
        write(6,*)"Error, at heapsort"; stop
        end if
        if(n.eq.1)return

        l=n/2+1
        k=n
        do while(k.ne.1)
        if(l.gt.1)then
            l=l-1
            t=array(L,:)
        else
            t=array(k,:)
            array(k,:)=array(1,:)
            k=k-1
            if(k.eq.1) then
                array(1,:)=t
                exit
            end if
        end if
        i=l
        j=l+l
        do while(j.le.k)
            if(j.lt.k)then
                if(array(j,p).lt.array(j+1,p))j=j+1
            end if
            if (t(p).lt.array(j,p))then
                array(i,:)=array(j,:)
                i=j
                j=j+j
            else
                j=k+1
            end if
        end do
        array(i,:)=t
        end do

        return
    end subroutine hsort
end program
; 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
@_QQcl.6d2bbab57e3b7b73eae5736ddf90c14c = linkonce constant [73 x i8] c"/home/ubuntu/Downloads/TheStack_IR/Collated/Fortran/Source_4761/source.f\00"
@_QQcl.4572726F722C2061742068656170736F7274 = linkonce constant [18 x i8] c"Error, at heapsort"
@_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: noreturn
define void @_QQmain() local_unnamed_addr #1 {
  %1 = alloca i32, align 4
  %2 = alloca i32, align 4
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = tail call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.6d2bbab57e3b7b73eae5736ddf90c14c, i32 6)
  %6 = call i1 @_FortranAioInputInteger(ptr %5, ptr nonnull %4, i32 4)
  %7 = call i1 @_FortranAioInputInteger(ptr %5, ptr nonnull %3, i32 4)
  %8 = call i32 @_FortranAioEndIoStatement(ptr %5)
  %9 = load i32, ptr %4, align 4, !tbaa !3
  %10 = call i32 @llvm.smax.i32(i32 %9, i32 0)
  %11 = zext i32 %10 to i64
  %12 = shl nuw nsw i64 %11, 4
  %13 = call ptr @malloc(i64 %12)
  store ptr %13, ptr @_QFEa.0, align 8, !tbaa !7
  store i64 %11, ptr @_QFEa.8, align 8, !tbaa !7
  %14 = icmp sgt i32 %9, 0
  br i1 %14, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %0
  %15 = zext i32 %9 to i64
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv = phi i64 [ 1, %.lr.ph.preheader ], [ %indvars.iv.next, %.lr.ph ]
  %16 = call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.6d2bbab57e3b7b73eae5736ddf90c14c, i32 9)
  %.unpack251 = load ptr, ptr @_QFEa.0, align 8, !tbaa !7
  %17 = add nsw i64 %indvars.iv, -1
  %18 = getelementptr i64, ptr %.unpack251, i64 %17
  %19 = call i1 @_FortranAioInputInteger(ptr %16, ptr %18, i32 8)
  %.unpack267 = load ptr, ptr @_QFEa.0, align 8, !tbaa !7
  %.unpack274.unpack.unpack277 = load i64, ptr @_QFEa.8, align 8, !tbaa !7
  %20 = add nsw i64 %indvars.iv, -1
  %21 = add i64 %20, %.unpack274.unpack.unpack277
  %22 = getelementptr i64, ptr %.unpack267, i64 %21
  %23 = call i1 @_FortranAioInputInteger(ptr %16, ptr %22, i32 8)
  %24 = call i32 @_FortranAioEndIoStatement(ptr %16)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv, %15
  br i1 %exitcond.not, label %._crit_edge.loopexit, label %.lr.ph

._crit_edge.loopexit:                             ; preds = %.lr.ph
  %.unpack.pre = load ptr, ptr @_QFEa.0, align 8, !tbaa !7
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %0
  %.unpack = phi ptr [ %.unpack.pre, %._crit_edge.loopexit ], [ %13, %0 ]
  store i32 2, ptr %2, align 4, !tbaa !3
  store i32 1, ptr %1, align 4, !tbaa !3
  call void @_QFPhsort(ptr nonnull %4, ptr nonnull %2, ptr nonnull %1, ptr %.unpack)
  %25 = load i32, ptr %4, align 4, !tbaa !3
  %26 = icmp sgt i32 %25, 0
  br i1 %26, label %.lr.ph290, label %.loopexit

.lr.ph290:                                        ; preds = %._crit_edge
  %.promoted = load i32, ptr %3, align 4, !tbaa !3
  %.unpack235 = load ptr, ptr @_QFEa.0, align 8, !tbaa !7
  %.unpack242.unpack.unpack245 = load i64, ptr @_QFEa.8, align 8, !tbaa !7
  br label %27

27:                                               ; preds = %.lr.ph290, %37
  %.0288 = phi i32 [ 1, %.lr.ph290 ], [ %42, %37 ]
  %.0202287 = phi i64 [ 0, %.lr.ph290 ], [ %39, %37 ]
  %28 = phi i32 [ %.promoted, %.lr.ph290 ], [ %41, %37 ]
  %29 = sext i32 %28 to i64
  %30 = sext i32 %.0288 to i64
  %31 = add nsw i64 %30, -1
  %32 = add i64 %.unpack242.unpack.unpack245, %31
  %33 = getelementptr i64, ptr %.unpack235, i64 %32
  %34 = load i64, ptr %33, align 8, !tbaa !3
  %.not = icmp sgt i64 %34, %29
  %35 = getelementptr i64, ptr %.unpack235, i64 %31
  %36 = load i64, ptr %35, align 8, !tbaa !3
  br i1 %.not, label %43, label %37

37:                                               ; preds = %27
  %38 = mul i64 %36, %34
  %39 = add i64 %38, %.0202287
  %40 = trunc i64 %34 to i32
  %41 = sub i32 %28, %40
  store i32 %41, ptr %3, align 4, !tbaa !3
  %42 = add nuw i32 %.0288, 1
  %exitcond297.not = icmp eq i32 %.0288, %25
  br i1 %exitcond297.not, label %.loopexit, label %27

43:                                               ; preds = %27
  %44 = mul i64 %36, %29
  %45 = add i64 %44, %.0202287
  br label %.loopexit

.loopexit:                                        ; preds = %37, %._crit_edge, %43
  %.1 = phi i64 [ %45, %43 ], [ 0, %._crit_edge ], [ %39, %37 ]
  %46 = call ptr @_FortranAioBeginExternalListOutput(i32 -1, ptr nonnull @_QQcl.6d2bbab57e3b7b73eae5736ddf90c14c, i32 22)
  %47 = call i1 @_FortranAioOutputInteger64(ptr %46, i64 %.1)
  %48 = call i32 @_FortranAioEndIoStatement(ptr %46)
  %49 = call {} @_FortranAStopStatement(i32 0, i1 false, i1 false)
  unreachable
}

define void @_QFPhsort(ptr nocapture readonly %0, ptr nocapture readonly %1, ptr nocapture readonly %2, ptr nocapture %3) local_unnamed_addr {
  %5 = load i32, ptr %0, align 4, !tbaa !3
  %6 = tail call i32 @llvm.smax.i32(i32 %5, i32 0)
  %7 = zext i32 %6 to i64
  %8 = load i32, ptr %1, align 4, !tbaa !3
  %9 = icmp sgt i32 %8, 0
  %narrow = tail call i32 @llvm.smax.i32(i32 %8, i32 0)
  %10 = zext i32 %narrow to i64
  %11 = alloca i32, i64 %10, align 4
  %12 = icmp slt i32 %5, 1
  br i1 %12, label %13, label %18

13:                                               ; preds = %4
  %14 = tail call ptr @_FortranAioBeginExternalListOutput(i32 6, ptr nonnull @_QQcl.6d2bbab57e3b7b73eae5736ddf90c14c, i32 36)
  %15 = tail call i1 @_FortranAioOutputAscii(ptr %14, ptr nonnull @_QQcl.4572726F722C2061742068656170736F7274, i64 18)
  %16 = tail call i32 @_FortranAioEndIoStatement(ptr %14)
  %17 = tail call {} @_FortranAStopStatement(i32 0, i1 false, i1 false)
  unreachable

18:                                               ; preds = %4
  %19 = icmp eq i32 %5, 1
  br i1 %19, label %.loopexit, label %20

20:                                               ; preds = %18
  %21 = lshr i32 %5, 1
  %22 = add nuw nsw i32 %21, 1
  %.not65 = icmp slt i32 %8, 1
  %23 = select i1 %9, i64 %10, i64 0
  %.not66 = icmp eq i64 %23, 0
  %xtraiter = and i64 %23, 3
  %24 = icmp ult i64 %23, 4
  %unroll_iter = and i64 %23, 2147483644
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  %xtraiter77 = and i64 %23, 1
  %25 = icmp eq i64 %23, 1
  %unroll_iter81 = and i64 %23, 2147483646
  %lcmp.mod80.not = icmp eq i64 %xtraiter77, 0
  %xtraiter83 = and i64 %23, 3
  %26 = icmp ult i64 %23, 4
  %unroll_iter87 = and i64 %23, 2147483644
  %lcmp.mod86.not = icmp eq i64 %xtraiter83, 0
  br label %.loopexit39

.loopexit39.loopexit.unr-lcssa:                   ; preds = %select.unfold36, %.lr.ph63
  %.unr85 = phi i64 [ 0, %.lr.ph63 ], [ %241, %select.unfold36 ]
  br i1 %lcmp.mod86.not, label %.loopexit39.backedge, label %select.unfold36.epil

select.unfold36.epil:                             ; preds = %.loopexit39.loopexit.unr-lcssa, %select.unfold36.epil
  %27 = phi i64 [ %28, %select.unfold36.epil ], [ %.unr85, %.loopexit39.loopexit.unr-lcssa ]
  %epil.iter84 = phi i64 [ %epil.iter84.next, %select.unfold36.epil ], [ 0, %.loopexit39.loopexit.unr-lcssa ]
  %28 = add nuw nsw i64 %27, 1
  %29 = getelementptr i32, ptr %11, i64 %27
  %30 = load i32, ptr %29, align 4, !tbaa !3
  %31 = sext i32 %30 to i64
  %32 = mul nuw nsw i64 %27, %7
  %33 = add nsw i64 %218, %32
  %34 = getelementptr i64, ptr %3, i64 %33
  store i64 %31, ptr %34, align 8, !tbaa !3
  %epil.iter84.next = add i64 %epil.iter84, 1
  %epil.iter84.cmp.not = icmp eq i64 %epil.iter84.next, %xtraiter83
  br i1 %epil.iter84.cmp.not, label %.loopexit39.backedge, label %select.unfold36.epil, !llvm.loop !9

.loopexit39:                                      ; preds = %.loopexit39.backedge, %20
  %.023 = phi i32 [ %5, %20 ], [ %.124.fr, %.loopexit39.backedge ]
  %.0 = phi i32 [ %22, %20 ], [ %.1, %.loopexit39.backedge ]
  %35 = icmp sgt i32 %.0, 1
  br i1 %35, label %36, label %52

36:                                               ; preds = %.loopexit39
  %37 = add nsw i32 %.0, -1
  br i1 %.not65, label %.loopexit40, label %.lr.ph46

.lr.ph46:                                         ; preds = %36
  %38 = zext i32 %37 to i64
  %39 = add nsw i64 %38, -1
  br label %40

40:                                               ; preds = %.lr.ph46, %40
  %41 = phi i64 [ %10, %.lr.ph46 ], [ %50, %40 ]
  %42 = phi i64 [ 0, %.lr.ph46 ], [ %43, %40 ]
  %43 = add nuw nsw i64 %42, 1
  %44 = mul nuw nsw i64 %42, %7
  %45 = add nsw i64 %39, %44
  %46 = getelementptr i64, ptr %3, i64 %45
  %47 = load i64, ptr %46, align 8, !tbaa !3
  %48 = trunc i64 %47 to i32
  %49 = getelementptr i32, ptr %11, i64 %42
  store i32 %48, ptr %49, align 4, !tbaa !3
  %50 = add nsw i64 %41, -1
  %51 = icmp sgt i64 %41, 1
  br i1 %51, label %40, label %.loopexit40

52:                                               ; preds = %.loopexit39
  %53 = zext i32 %.023 to i64
  br i1 %.not65, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %52
  %54 = add nsw i64 %53, -1
  br label %55

55:                                               ; preds = %.lr.ph, %55
  %56 = phi i64 [ %10, %.lr.ph ], [ %65, %55 ]
  %57 = phi i64 [ 0, %.lr.ph ], [ %58, %55 ]
  %58 = add nuw nsw i64 %57, 1
  %59 = mul nuw nsw i64 %57, %7
  %60 = add nsw i64 %54, %59
  %61 = getelementptr i64, ptr %3, i64 %60
  %62 = load i64, ptr %61, align 8, !tbaa !3
  %63 = trunc i64 %62 to i32
  %64 = getelementptr i32, ptr %11, i64 %57
  store i32 %63, ptr %64, align 4, !tbaa !3
  %65 = add nsw i64 %56, -1
  %66 = icmp sgt i64 %56, 1
  br i1 %66, label %55, label %._crit_edge

._crit_edge:                                      ; preds = %55, %52
  br i1 %.not66, label %._crit_edge44.thread, label %.lr.ph43

.lr.ph43:                                         ; preds = %._crit_edge
  %67 = add nsw i64 %53, -1
  br i1 %24, label %._crit_edge44.unr-lcssa, label %.lr.ph43.new

.lr.ph43.new:                                     ; preds = %.lr.ph43, %.lr.ph43.new
  %68 = phi i64 [ %87, %.lr.ph43.new ], [ 0, %.lr.ph43 ]
  %niter = phi i64 [ %niter.next.3, %.lr.ph43.new ], [ 0, %.lr.ph43 ]
  %69 = or i64 %68, 1
  %70 = mul nuw nsw i64 %68, %7
  %71 = getelementptr i64, ptr %3, i64 %70
  %72 = load i64, ptr %71, align 8, !tbaa !3
  %73 = add nsw i64 %67, %70
  %74 = getelementptr i64, ptr %3, i64 %73
  store i64 %72, ptr %74, align 8, !tbaa !3
  %75 = or i64 %68, 2
  %76 = mul nuw nsw i64 %69, %7
  %77 = getelementptr i64, ptr %3, i64 %76
  %78 = load i64, ptr %77, align 8, !tbaa !3
  %79 = add nsw i64 %67, %76
  %80 = getelementptr i64, ptr %3, i64 %79
  store i64 %78, ptr %80, align 8, !tbaa !3
  %81 = or i64 %68, 3
  %82 = mul nuw nsw i64 %75, %7
  %83 = getelementptr i64, ptr %3, i64 %82
  %84 = load i64, ptr %83, align 8, !tbaa !3
  %85 = add nsw i64 %67, %82
  %86 = getelementptr i64, ptr %3, i64 %85
  store i64 %84, ptr %86, align 8, !tbaa !3
  %87 = add nuw nsw i64 %68, 4
  %88 = mul nuw nsw i64 %81, %7
  %89 = getelementptr i64, ptr %3, i64 %88
  %90 = load i64, ptr %89, align 8, !tbaa !3
  %91 = add nsw i64 %67, %88
  %92 = getelementptr i64, ptr %3, i64 %91
  store i64 %90, ptr %92, align 8, !tbaa !3
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %._crit_edge44.unr-lcssa, label %.lr.ph43.new

._crit_edge44.unr-lcssa:                          ; preds = %.lr.ph43.new, %.lr.ph43
  %.unr = phi i64 [ 0, %.lr.ph43 ], [ %87, %.lr.ph43.new ]
  br i1 %lcmp.mod.not, label %._crit_edge44, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge44.unr-lcssa, %.epil.preheader
  %93 = phi i64 [ %94, %.epil.preheader ], [ %.unr, %._crit_edge44.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %._crit_edge44.unr-lcssa ]
  %94 = add nuw nsw i64 %93, 1
  %95 = mul nuw nsw i64 %93, %7
  %96 = getelementptr i64, ptr %3, i64 %95
  %97 = load i64, ptr %96, align 8, !tbaa !3
  %98 = add nsw i64 %67, %95
  %99 = getelementptr i64, ptr %3, i64 %98
  store i64 %97, ptr %99, align 8, !tbaa !3
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %._crit_edge44, label %.epil.preheader, !llvm.loop !11

._crit_edge44:                                    ; preds = %.epil.preheader, %._crit_edge44.unr-lcssa
  %100 = add i32 %.023, -1
  %101 = icmp eq i32 %100, 1
  br i1 %101, label %.preheader, label %.loopexit40

._crit_edge44.thread:                             ; preds = %._crit_edge
  %102 = add i32 %.023, -1
  %103 = icmp eq i32 %102, 1
  br i1 %103, label %.loopexit, label %.loopexit40

.preheader:                                       ; preds = %._crit_edge44
  br i1 %.not66, label %.loopexit, label %.lr.ph64.preheader

.lr.ph64.preheader:                               ; preds = %.preheader
  %xtraiter89 = and i64 %23, 3
  %104 = icmp ult i64 %23, 4
  br i1 %104, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph64.preheader.new

.lr.ph64.preheader.new:                           ; preds = %.lr.ph64.preheader
  %unroll_iter93 = and i64 %23, 2147483644
  br label %.lr.ph64

.lr.ph64:                                         ; preds = %.lr.ph64, %.lr.ph64.preheader.new
  %105 = phi i64 [ 0, %.lr.ph64.preheader.new ], [ %124, %.lr.ph64 ]
  %niter94 = phi i64 [ 0, %.lr.ph64.preheader.new ], [ %niter94.next.3, %.lr.ph64 ]
  %106 = or i64 %105, 1
  %107 = getelementptr i32, ptr %11, i64 %105
  %108 = load i32, ptr %107, align 4, !tbaa !3
  %109 = sext i32 %108 to i64
  %110 = mul nuw nsw i64 %105, %7
  %111 = getelementptr i64, ptr %3, i64 %110
  store i64 %109, ptr %111, align 8, !tbaa !3
  %112 = or i64 %105, 2
  %113 = getelementptr i32, ptr %11, i64 %106
  %114 = load i32, ptr %113, align 4, !tbaa !3
  %115 = sext i32 %114 to i64
  %116 = mul nuw nsw i64 %106, %7
  %117 = getelementptr i64, ptr %3, i64 %116
  store i64 %115, ptr %117, align 8, !tbaa !3
  %118 = or i64 %105, 3
  %119 = getelementptr i32, ptr %11, i64 %112
  %120 = load i32, ptr %119, align 4, !tbaa !3
  %121 = sext i32 %120 to i64
  %122 = mul nuw nsw i64 %112, %7
  %123 = getelementptr i64, ptr %3, i64 %122
  store i64 %121, ptr %123, align 8, !tbaa !3
  %124 = add nuw nsw i64 %105, 4
  %125 = getelementptr i32, ptr %11, i64 %118
  %126 = load i32, ptr %125, align 4, !tbaa !3
  %127 = sext i32 %126 to i64
  %128 = mul nuw nsw i64 %118, %7
  %129 = getelementptr i64, ptr %3, i64 %128
  store i64 %127, ptr %129, align 8, !tbaa !3
  %niter94.next.3 = add i64 %niter94, 4
  %niter94.ncmp.3 = icmp eq i64 %niter94.next.3, %unroll_iter93
  br i1 %niter94.ncmp.3, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph64

.loopexit40:                                      ; preds = %40, %._crit_edge44.thread, %36, %._crit_edge44
  %.124 = phi i32 [ %100, %._crit_edge44 ], [ %.023, %36 ], [ %102, %._crit_edge44.thread ], [ %.023, %40 ]
  %.1 = phi i32 [ 1, %._crit_edge44 ], [ %37, %36 ], [ 1, %._crit_edge44.thread ], [ %37, %40 ]
  %.124.fr = freeze i32 %.124
  %130 = shl i32 %.1, 1
  %.not4758 = icmp sgt i32 %130, %.124.fr
  br i1 %.not4758, label %._crit_edge50.split.us, label %.lr.ph49.lr.ph

.lr.ph49.lr.ph:                                   ; preds = %.loopexit40
  %131 = add i32 %.124.fr, 1
  %.not.not = icmp eq i32 %.124.fr, 2147483647
  %.not = icmp eq i32 %131, 2147483647
  %132 = sext i32 %131 to i64
  %133 = add nsw i64 %132, -1
  br label %.lr.ph49

.lr.ph49:                                         ; preds = %.lr.ph49.lr.ph, %.outer
  %.025.ph60 = phi i32 [ %130, %.lr.ph49.lr.ph ], [ %216, %.outer ]
  %.027.ph59 = phi i32 [ %.1, %.lr.ph49.lr.ph ], [ %.us-phi, %.outer ]
  %134 = load i32, ptr %2, align 4, !tbaa !3
  %135 = sext i32 %134 to i64
  %136 = add nsw i64 %135, -1
  %137 = getelementptr i32, ptr %11, i64 %136
  %138 = load i32, ptr %137, align 4, !tbaa !3
  %139 = sext i32 %138 to i64
  %140 = mul nsw i64 %136, %7
  br i1 %.not.not, label %141, label %.lr.ph49.split.us

141:                                              ; preds = %.lr.ph49
  %142 = sext i32 %.025.ph60 to i64
  %143 = add nsw i64 %142, -1
  %144 = add i64 %143, %140
  %145 = getelementptr i64, ptr %3, i64 %144
  %146 = load i64, ptr %145, align 8, !tbaa !3
  %147 = add i64 %140, %142
  %148 = getelementptr i64, ptr %3, i64 %147
  %149 = load i64, ptr %148, align 8, !tbaa !3
  %150 = icmp slt i64 %146, %149
  %151 = zext i1 %150 to i32
  %spec.select.peel = or i32 %.025.ph60, %151
  %152 = sext i32 %spec.select.peel to i64
  %153 = add nsw i64 %152, -1
  %154 = add i64 %140, %153
  %155 = getelementptr i64, ptr %3, i64 %154
  %156 = load i64, ptr %155, align 8, !tbaa !3
  %157 = icmp sgt i64 %156, %139
  br i1 %157, label %.split.us, label %.lr.ph49.split.peel.next

.lr.ph49.split.peel.next:                         ; preds = %141
  %158 = add i64 %133, %140
  %159 = getelementptr i64, ptr %3, i64 %158
  %160 = add i64 %140, %132
  %161 = getelementptr i64, ptr %3, i64 %160
  br label %.lr.ph49.split

.lr.ph49.split.us:                                ; preds = %.lr.ph49
  %162 = icmp slt i32 %.025.ph60, %.124.fr
  br i1 %162, label %163, label %174

163:                                              ; preds = %.lr.ph49.split.us
  %164 = sext i32 %.025.ph60 to i64
  %165 = add nsw i64 %164, -1
  %166 = add i64 %165, %140
  %167 = getelementptr i64, ptr %3, i64 %166
  %168 = load i64, ptr %167, align 8, !tbaa !3
  %169 = add i64 %140, %164
  %170 = getelementptr i64, ptr %3, i64 %169
  %171 = load i64, ptr %170, align 8, !tbaa !3
  %172 = icmp slt i64 %168, %171
  %173 = zext i1 %172 to i32
  %spec.select.us = or i32 %.025.ph60, %173
  br label %174

174:                                              ; preds = %163, %.lr.ph49.split.us
  %.126.us = phi i32 [ %.025.ph60, %.lr.ph49.split.us ], [ %spec.select.us, %163 ]
  %175 = sext i32 %.126.us to i64
  %176 = add nsw i64 %175, -1
  %177 = add i64 %140, %176
  %178 = getelementptr i64, ptr %3, i64 %177
  %179 = load i64, ptr %178, align 8, !tbaa !3
  %180 = icmp sgt i64 %179, %139
  br i1 %180, label %.split.us, label %._crit_edge50.split.us

.lr.ph49.split:                                   ; preds = %.lr.ph49.split.peel.next, %186
  br i1 %.not, label %186, label %181

181:                                              ; preds = %.lr.ph49.split
  %182 = load i64, ptr %159, align 8, !tbaa !3
  %183 = load i64, ptr %161, align 8, !tbaa !3
  %184 = icmp slt i64 %182, %183
  %185 = zext i1 %184 to i32
  %spec.select = add nsw i32 %131, %185
  br label %186

186:                                              ; preds = %181, %.lr.ph49.split
  %.126 = phi i32 [ 2147483647, %.lr.ph49.split ], [ %spec.select, %181 ]
  %187 = sext i32 %.126 to i64
  %188 = add nsw i64 %187, -1
  %189 = add i64 %140, %188
  %190 = getelementptr i64, ptr %3, i64 %189
  %191 = load i64, ptr %190, align 8, !tbaa !3
  %192 = icmp sgt i64 %191, %139
  br i1 %192, label %.split.us, label %.lr.ph49.split, !llvm.loop !12

.split.us:                                        ; preds = %186, %141, %174
  %.us-phi = phi i32 [ %.126.us, %174 ], [ %spec.select.peel, %141 ], [ %.126, %186 ]
  %.us-phi52 = phi i64 [ %176, %174 ], [ %153, %141 ], [ %188, %186 ]
  br i1 %.not66, label %.outer, label %.lr.ph57

.lr.ph57:                                         ; preds = %.split.us
  %193 = sext i32 %.027.ph59 to i64
  %194 = add nsw i64 %193, -1
  br i1 %25, label %.outer.loopexit.unr-lcssa, label %select.unfold

select.unfold:                                    ; preds = %.lr.ph57, %select.unfold
  %195 = phi i64 [ %203, %select.unfold ], [ 0, %.lr.ph57 ]
  %niter82 = phi i64 [ %niter82.next.1, %select.unfold ], [ 0, %.lr.ph57 ]
  %196 = or i64 %195, 1
  %197 = mul nuw nsw i64 %195, %7
  %198 = add nsw i64 %197, %.us-phi52
  %199 = getelementptr i64, ptr %3, i64 %198
  %200 = load i64, ptr %199, align 8, !tbaa !3
  %201 = add nsw i64 %194, %197
  %202 = getelementptr i64, ptr %3, i64 %201
  store i64 %200, ptr %202, align 8, !tbaa !3
  %203 = add nuw nsw i64 %195, 2
  %204 = mul nuw nsw i64 %196, %7
  %205 = add nsw i64 %204, %.us-phi52
  %206 = getelementptr i64, ptr %3, i64 %205
  %207 = load i64, ptr %206, align 8, !tbaa !3
  %208 = add nsw i64 %194, %204
  %209 = getelementptr i64, ptr %3, i64 %208
  store i64 %207, ptr %209, align 8, !tbaa !3
  %niter82.next.1 = add i64 %niter82, 2
  %niter82.ncmp.1 = icmp eq i64 %niter82.next.1, %unroll_iter81
  br i1 %niter82.ncmp.1, label %.outer.loopexit.unr-lcssa, label %select.unfold

.outer.loopexit.unr-lcssa:                        ; preds = %select.unfold, %.lr.ph57
  %.unr79 = phi i64 [ 0, %.lr.ph57 ], [ %203, %select.unfold ]
  br i1 %lcmp.mod80.not, label %.outer, label %select.unfold.epil

select.unfold.epil:                               ; preds = %.outer.loopexit.unr-lcssa
  %210 = mul nuw nsw i64 %.unr79, %7
  %211 = add nsw i64 %210, %.us-phi52
  %212 = getelementptr i64, ptr %3, i64 %211
  %213 = load i64, ptr %212, align 8, !tbaa !3
  %214 = add nsw i64 %194, %210
  %215 = getelementptr i64, ptr %3, i64 %214
  store i64 %213, ptr %215, align 8, !tbaa !3
  br label %.outer

.outer:                                           ; preds = %select.unfold.epil, %.outer.loopexit.unr-lcssa, %.split.us
  %216 = shl i32 %.us-phi, 1
  %.not47 = icmp sgt i32 %216, %.124.fr
  br i1 %.not47, label %._crit_edge50.split.us, label %.lr.ph49

._crit_edge50.split.us:                           ; preds = %.outer, %174, %.loopexit40
  %.027.ph.lcssa = phi i32 [ %.1, %.loopexit40 ], [ %.027.ph59, %174 ], [ %.us-phi, %.outer ]
  br i1 %.not66, label %.loopexit39.backedge, label %.lr.ph63

.loopexit39.backedge:                             ; preds = %.loopexit39.loopexit.unr-lcssa, %select.unfold36.epil, %._crit_edge50.split.us
  br label %.loopexit39

.lr.ph63:                                         ; preds = %._crit_edge50.split.us
  %217 = sext i32 %.027.ph.lcssa to i64
  %218 = add nsw i64 %217, -1
  br i1 %26, label %.loopexit39.loopexit.unr-lcssa, label %select.unfold36

select.unfold36:                                  ; preds = %.lr.ph63, %select.unfold36
  %219 = phi i64 [ %241, %select.unfold36 ], [ 0, %.lr.ph63 ]
  %niter88 = phi i64 [ %niter88.next.3, %select.unfold36 ], [ 0, %.lr.ph63 ]
  %220 = or i64 %219, 1
  %221 = getelementptr i32, ptr %11, i64 %219
  %222 = load i32, ptr %221, align 4, !tbaa !3
  %223 = sext i32 %222 to i64
  %224 = mul nuw nsw i64 %219, %7
  %225 = add nsw i64 %218, %224
  %226 = getelementptr i64, ptr %3, i64 %225
  store i64 %223, ptr %226, align 8, !tbaa !3
  %227 = or i64 %219, 2
  %228 = getelementptr i32, ptr %11, i64 %220
  %229 = load i32, ptr %228, align 4, !tbaa !3
  %230 = sext i32 %229 to i64
  %231 = mul nuw nsw i64 %220, %7
  %232 = add nsw i64 %218, %231
  %233 = getelementptr i64, ptr %3, i64 %232
  store i64 %230, ptr %233, align 8, !tbaa !3
  %234 = or i64 %219, 3
  %235 = getelementptr i32, ptr %11, i64 %227
  %236 = load i32, ptr %235, align 4, !tbaa !3
  %237 = sext i32 %236 to i64
  %238 = mul nuw nsw i64 %227, %7
  %239 = add nsw i64 %218, %238
  %240 = getelementptr i64, ptr %3, i64 %239
  store i64 %237, ptr %240, align 8, !tbaa !3
  %241 = add nuw nsw i64 %219, 4
  %242 = getelementptr i32, ptr %11, i64 %234
  %243 = load i32, ptr %242, align 4, !tbaa !3
  %244 = sext i32 %243 to i64
  %245 = mul nuw nsw i64 %234, %7
  %246 = add nsw i64 %218, %245
  %247 = getelementptr i64, ptr %3, i64 %246
  store i64 %244, ptr %247, align 8, !tbaa !3
  %niter88.next.3 = add i64 %niter88, 4
  %niter88.ncmp.3 = icmp eq i64 %niter88.next.3, %unroll_iter87
  br i1 %niter88.ncmp.3, label %.loopexit39.loopexit.unr-lcssa, label %select.unfold36

.loopexit.loopexit.unr-lcssa:                     ; preds = %.lr.ph64, %.lr.ph64.preheader
  %.unr91 = phi i64 [ 0, %.lr.ph64.preheader ], [ %124, %.lr.ph64 ]
  %lcmp.mod92.not = icmp eq i64 %xtraiter89, 0
  br i1 %lcmp.mod92.not, label %.loopexit, label %.lr.ph64.epil

.lr.ph64.epil:                                    ; preds = %.loopexit.loopexit.unr-lcssa, %.lr.ph64.epil
  %248 = phi i64 [ %249, %.lr.ph64.epil ], [ %.unr91, %.loopexit.loopexit.unr-lcssa ]
  %epil.iter90 = phi i64 [ %epil.iter90.next, %.lr.ph64.epil ], [ 0, %.loopexit.loopexit.unr-lcssa ]
  %249 = add nuw nsw i64 %248, 1
  %250 = getelementptr i32, ptr %11, i64 %248
  %251 = load i32, ptr %250, align 4, !tbaa !3
  %252 = sext i32 %251 to i64
  %253 = mul nuw nsw i64 %248, %7
  %254 = getelementptr i64, ptr %3, i64 %253
  store i64 %252, ptr %254, align 8, !tbaa !3
  %epil.iter90.next = add i64 %epil.iter90, 1
  %epil.iter90.cmp.not = icmp eq i64 %epil.iter90.next, %xtraiter89
  br i1 %epil.iter90.cmp.not, label %.loopexit, label %.lr.ph64.epil, !llvm.loop !14

.loopexit:                                        ; preds = %._crit_edge44.thread, %.loopexit.loopexit.unr-lcssa, %.lr.ph64.epil, %.preheader, %18
  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 ptr @_FortranAioBeginExternalListOutput(i32, ptr, i32) local_unnamed_addr

declare i1 @_FortranAioOutputInteger64(ptr, i64) local_unnamed_addr

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

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

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

attributes #0 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" }
attributes #1 = { noreturn }
attributes #2 = { nocallback nofree nosync nounwind speculatable 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}
!10 = !{!"llvm.loop.unroll.disable"}
!11 = distinct !{!11, !10}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.peeled.count", i32 1}
!14 = distinct !{!14, !10}
