program ARC073D
    implicit none
    integer(8)::N,W,i,j,k,l,a,b,c,d,Vall(100,4),wi,w1,vi,vcount(4),ans,wall,v
    read*,N,W
    vcount=0
    Vall=0
    ans=0
    do i=1,N
        read*,wi,vi
        if(i==1)w1=wi
        vcount(wi-w1+1)=vcount(wi-w1+1)+1
        Vall(vcount(wi-w1+1),wi-w1+1)=vi
    end do

    do i=1,4
        call heapsort(100,Vall(:,i))
    end do

    do i=0,vcount(1)
        do j=0,vcount(2)
            do k=0,vcount(3)
                do l=0,vcount(4)
                    wall=i*w1+j*(w1+1)+k*(w1+2)+l*(w1+3)
                    if(wall<=W)then
                        v=0
                        do a=0,i-1
                            v=v+Vall(100-a,1)
                        end do

                        do b=0,j-1
                            v=v+Vall(100-b,2)
                        end do

                        do c=0,k-1
                            v=v+Vall(100-c,3)
                        end do

                        do d=0,l-1
                            v=v+Vall(100-d,4)
                        end do
                        ans=max(ans,v)
                    end if
                end do
            end do
        end do
    end do

    print'(i0)',ans
end program ARC073D

subroutine heapsort(n,array)
    implicit none
    integer,intent(in) :: n
    integer(8),intent(inout) :: array(1:n)
   
    integer(8) ::i,k,j,l
    integer(8) :: t
   
    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
          endif
       endif
       i=l
       j=l+l
       do while(j.le.k)
          if(j.lt.k)then
             if(array(j).lt.array(j+1))j=j+1
          endif
          if (t.lt.array(j))then
             array(i)=array(j)
             i=j
             j=j+j
          else
             j=k+1
          endif
       enddo
       array(i)=t
    enddo
  
    return
  end subroutine heapsort
; 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"

@_QFEvall = internal global [4 x [100 x i64]] undef
@_QQcl.703eea104fd3473a08d9466b4a6a840c = linkonce constant [73 x i8] c"/home/ubuntu/Downloads/TheStack_IR/Collated/Fortran/Source_7348/source.f\00"
@_QQcl.28693029 = linkonce constant [4 x i8] c"(i0)"
@_QQEnvironmentDefaults = local_unnamed_addr constant ptr null

define void @_QQmain() local_unnamed_addr {
.preheader57.preheader:
  %0 = alloca i32, align 4
  %1 = alloca i64, align 8
  %2 = alloca [4 x i64], align 8
  %3 = alloca i64, align 8
  %4 = alloca i64, align 8
  %5 = alloca i64, align 8
  %6 = tail call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.703eea104fd3473a08d9466b4a6a840c, i32 4)
  %7 = call i1 @_FortranAioInputInteger(ptr %6, ptr nonnull %1, i32 8)
  %8 = call i1 @_FortranAioInputInteger(ptr %6, ptr nonnull %4, i32 8)
  %9 = call i32 @_FortranAioEndIoStatement(ptr %6)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(32) %2, i8 0, i64 32, i1 false), !tbaa !3
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(3200) @_QFEvall, i8 0, i64 3200, i1 false), !tbaa !3
  %10 = load i64, ptr %1, align 8, !tbaa !3
  %11 = icmp sgt i64 %10, 0
  br i1 %11, label %.lr.ph, label %.preheader56

.preheader56.loopexit:                            ; preds = %.lr.ph
  %.pre = load i64, ptr %2, align 8, !tbaa !3
  br label %.preheader56

.preheader56:                                     ; preds = %.preheader56.loopexit, %.preheader57.preheader
  %12 = phi i64 [ 0, %.preheader57.preheader ], [ %.pre, %.preheader56.loopexit ]
  %.0.lcssa = phi i64 [ undef, %.preheader57.preheader ], [ %spec.select, %.preheader56.loopexit ]
  store i32 100, ptr %0, align 4, !tbaa !3
  call void @heapsort_(ptr nonnull %0, ptr nonnull @_QFEvall)
  store i32 100, ptr %0, align 4, !tbaa !3
  call void @heapsort_(ptr nonnull %0, ptr nonnull getelementptr inbounds ([4 x [100 x i64]], ptr @_QFEvall, i64 0, i64 1, i64 0))
  store i32 100, ptr %0, align 4, !tbaa !3
  call void @heapsort_(ptr nonnull %0, ptr nonnull getelementptr inbounds ([4 x [100 x i64]], ptr @_QFEvall, i64 0, i64 2, i64 0))
  store i32 100, ptr %0, align 4, !tbaa !3
  call void @heapsort_(ptr nonnull %0, ptr nonnull getelementptr inbounds ([4 x [100 x i64]], ptr @_QFEvall, i64 0, i64 3, i64 0))
  %13 = icmp ult i64 %12, 9223372036854775807
  br i1 %13, label %.lr.ph115, label %._crit_edge116

.lr.ph:                                           ; preds = %.preheader57.preheader, %.lr.ph
  %14 = phi i64 [ %27, %.lr.ph ], [ 1, %.preheader57.preheader ]
  %.059 = phi i64 [ %spec.select, %.lr.ph ], [ undef, %.preheader57.preheader ]
  %15 = call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.703eea104fd3473a08d9466b4a6a840c, i32 9)
  %16 = call i1 @_FortranAioInputInteger(ptr %15, ptr nonnull %5, i32 8)
  %17 = call i1 @_FortranAioInputInteger(ptr %15, ptr nonnull %3, i32 8)
  %18 = call i32 @_FortranAioEndIoStatement(ptr %15)
  %19 = icmp eq i64 %14, 1
  %20 = load i64, ptr %5, align 8
  %spec.select = select i1 %19, i64 %20, i64 %.059
  %21 = sub i64 %20, %spec.select
  %22 = getelementptr [4 x i64], ptr %2, i64 0, i64 %21
  %23 = load i64, ptr %22, align 8, !tbaa !3
  %24 = add i64 %23, 1
  store i64 %24, ptr %22, align 8, !tbaa !3
  %25 = load i64, ptr %3, align 8, !tbaa !3
  %26 = getelementptr [4 x [100 x i64]], ptr @_QFEvall, i64 0, i64 %21, i64 %23
  store i64 %25, ptr %26, align 8, !tbaa !3
  %27 = add nuw i64 %14, 1
  %exitcond.not = icmp eq i64 %14, %10
  br i1 %exitcond.not, label %.preheader56.loopexit, label %.lr.ph

.lr.ph115:                                        ; preds = %.preheader56
  %28 = getelementptr inbounds [4 x i64], ptr %2, i64 0, i64 1
  %29 = load i64, ptr %28, align 8, !tbaa !3
  %30 = add i64 %29, 1
  %31 = icmp ugt i64 %29, 9223372036854775806
  %32 = getelementptr inbounds [4 x i64], ptr %2, i64 0, i64 2
  %33 = load i64, ptr %32, align 8
  %34 = add i64 %33, 1
  %35 = getelementptr inbounds [4 x i64], ptr %2, i64 0, i64 3
  %36 = load i64, ptr %35, align 8
  %37 = add i64 %36, 1
  %38 = icmp ugt i64 %36, 9223372036854775806
  %39 = add i64 %.0.lcssa, 1
  %40 = add i64 %.0.lcssa, 2
  %41 = add i64 %.0.lcssa, 3
  %42 = load i64, ptr %4, align 8
  %43 = icmp ugt i64 %33, 9223372036854775806
  %or.cond.not157 = select i1 %31, i1 true, i1 %43
  %brmerge = select i1 %or.cond.not157, i1 true, i1 %38
  br i1 %brmerge, label %._crit_edge116, label %.lr.ph108.us.us.us.preheader

.lr.ph108.us.us.us.preheader:                     ; preds = %.lr.ph115
  %44 = add i64 %12, 1
  br label %.lr.ph108.us.us.us

.lr.ph108.us.us.us:                               ; preds = %.lr.ph108.us.us.us.preheader, %._crit_edge.split.us.split.us.us.us.us
  %45 = phi i64 [ %184, %._crit_edge.split.us.split.us.us.us.us ], [ %44, %.lr.ph108.us.us.us.preheader ]
  %46 = phi i64 [ %183, %._crit_edge.split.us.split.us.us.us.us ], [ 0, %.lr.ph108.us.us.us.preheader ]
  %.037113.us.us.us = phi i64 [ %.us-phi.us.us.us.us.us.us, %._crit_edge.split.us.split.us.us.us.us ], [ 0, %.lr.ph108.us.us.us.preheader ]
  %47 = mul i64 %46, %.0.lcssa
  %.not = icmp eq i64 %46, 0
  %min.iters.check265 = icmp ult i64 %46, 4
  %n.vec268 = and i64 %46, -4
  %cmp.n270 = icmp eq i64 %46, %n.vec268
  %min.iters.check189 = icmp ult i64 %46, 4
  %n.vec192 = and i64 %46, -4
  %cmp.n194 = icmp eq i64 %46, %n.vec192
  br label %.lr.ph79.us.us.us.us.us

.lr.ph79.us.us.us.us.us:                          ; preds = %._crit_edge80.split.us.us.us.us.us.us, %.lr.ph108.us.us.us
  %48 = phi i64 [ %30, %.lr.ph108.us.us.us ], [ %181, %._crit_edge80.split.us.us.us.us.us.us ]
  %49 = phi i64 [ 0, %.lr.ph108.us.us.us ], [ %180, %._crit_edge80.split.us.us.us.us.us.us ]
  %.138107.us.us.us.us.us = phi i64 [ %.037113.us.us.us, %.lr.ph108.us.us.us ], [ %.us-phi.us.us.us.us.us.us, %._crit_edge80.split.us.us.us.us.us.us ]
  %50 = mul i64 %49, %39
  %51 = add i64 %50, %47
  %.not143 = icmp eq i64 %49, 0
  %min.iters.check246 = icmp ult i64 %49, 4
  %n.vec249 = and i64 %49, -4
  %cmp.n251 = icmp eq i64 %49, %n.vec249
  %min.iters.check170 = icmp ult i64 %49, 4
  %n.vec173 = and i64 %49, -4
  %cmp.n175 = icmp eq i64 %49, %n.vec173
  br label %.lr.ph74.us.us.us.us.us.us

.lr.ph74.us.us.us.us.us.us:                       ; preds = %._crit_edge75.us.us.us.us.us.us, %.lr.ph79.us.us.us.us.us
  %52 = phi i64 [ %34, %.lr.ph79.us.us.us.us.us ], [ %110, %._crit_edge75.us.us.us.us.us.us ]
  %53 = phi i64 [ 0, %.lr.ph79.us.us.us.us.us ], [ %109, %._crit_edge75.us.us.us.us.us.us ]
  %.23977.us.us.us.us.us.us = phi i64 [ %.138107.us.us.us.us.us, %.lr.ph79.us.us.us.us.us ], [ %.us-phi.us.us.us.us.us.us, %._crit_edge75.us.us.us.us.us.us ]
  %54 = mul i64 %53, %40
  %55 = add i64 %51, %54
  %.not144 = icmp eq i64 %53, 0
  br i1 %.not144, label %.lr.ph74.split.us105.us.us.us.us.us, label %.lr.ph74.split.us.us.us.us.us.us.us.preheader

.lr.ph74.split.us.us.us.us.us.us.us.preheader:    ; preds = %.lr.ph74.us.us.us.us.us.us
  %min.iters.check227 = icmp ult i64 %53, 4
  %n.vec230 = and i64 %53, -4
  %cmp.n232 = icmp eq i64 %53, %n.vec230
  br label %.lr.ph74.split.us.us.us.us.us.us.us

.lr.ph74.split.us105.us.us.us.us.us:              ; preds = %.lr.ph74.us.us.us.us.us.us, %79
  %56 = phi i64 [ %81, %79 ], [ %37, %.lr.ph74.us.us.us.us.us.us ]
  %57 = phi i64 [ %80, %79 ], [ 0, %.lr.ph74.us.us.us.us.us.us ]
  %.34072.us82.us.us.us.us.us = phi i64 [ %.4.us88.us.us.us.us.us, %79 ], [ %.23977.us.us.us.us.us.us, %.lr.ph74.us.us.us.us.us.us ]
  %58 = mul i64 %57, %41
  %59 = add i64 %55, %58
  %.not.us83.us.us.us.us.us = icmp sgt i64 %59, %42
  br i1 %.not.us83.us.us.us.us.us, label %79, label %.preheader55.us93.us.us.us.us.us

._crit_edge.us101.us.us.us.us.us:                 ; preds = %.lr.ph70.us100.us.us.us.us.us, %middle.block, %.preheader53.us89.us.us.us.us.us
  %.3.lcssa.us84.us.us.us.us.us = phi i64 [ %.136.lcssa.us90.us.us.us.us.us, %.preheader53.us89.us.us.us.us.us ], [ %91, %middle.block ], [ %65, %.lr.ph70.us100.us.us.us.us.us ]
  %60 = call i64 @llvm.smax.i64(i64 %.34072.us82.us.us.us.us.us, i64 %.3.lcssa.us84.us.us.us.us.us)
  br label %79

.lr.ph70.us100.us.us.us.us.us:                    ; preds = %.lr.ph70.us100.us.us.us.us.us.preheader282, %.lr.ph70.us100.us.us.us.us.us
  %61 = phi i64 [ %66, %.lr.ph70.us100.us.us.us.us.us ], [ %.ph, %.lr.ph70.us100.us.us.us.us.us.preheader282 ]
  %.369.us85.us.us.us.us.us = phi i64 [ %65, %.lr.ph70.us100.us.us.us.us.us ], [ %.369.us85.us.us.us.us.us.ph, %.lr.ph70.us100.us.us.us.us.us.preheader282 ]
  %62 = sub nsw i64 99, %61
  %63 = getelementptr [4 x [100 x i64]], ptr @_QFEvall, i64 0, i64 3, i64 %62
  %64 = load i64, ptr %63, align 8, !tbaa !3
  %65 = add i64 %64, %.369.us85.us.us.us.us.us
  %66 = add nuw nsw i64 %61, 1
  %exitcond138.not = icmp eq i64 %66, %57
  br i1 %exitcond138.not, label %._crit_edge.us101.us.us.us.us.us, label %.lr.ph70.us100.us.us.us.us.us, !llvm.loop !7

.lr.ph64.us97.us.us.us.us.us:                     ; preds = %.lr.ph64.us97.us.us.us.us.us.preheader283, %.lr.ph64.us97.us.us.us.us.us
  %67 = phi i64 [ %72, %.lr.ph64.us97.us.us.us.us.us ], [ %.ph284, %.lr.ph64.us97.us.us.us.us.us.preheader283 ]
  %.13663.us86.us.us.us.us.us = phi i64 [ %71, %.lr.ph64.us97.us.us.us.us.us ], [ %.13663.us86.us.us.us.us.us.ph, %.lr.ph64.us97.us.us.us.us.us.preheader283 ]
  %68 = sub nsw i64 99, %67
  %69 = getelementptr [4 x [100 x i64]], ptr @_QFEvall, i64 0, i64 1, i64 %68
  %70 = load i64, ptr %69, align 8, !tbaa !3
  %71 = add i64 %70, %.13663.us86.us.us.us.us.us
  %72 = add nuw nsw i64 %67, 1
  %exitcond137.not = icmp eq i64 %72, %49
  br i1 %exitcond137.not, label %.preheader53.us89.us.us.us.us.us, label %.lr.ph64.us97.us.us.us.us.us, !llvm.loop !10

.lr.ph61.us94.us.us.us.us.us:                     ; preds = %.lr.ph61.us94.us.us.us.us.us.preheader285, %.lr.ph61.us94.us.us.us.us.us
  %73 = phi i64 [ %78, %.lr.ph61.us94.us.us.us.us.us ], [ %.ph286, %.lr.ph61.us94.us.us.us.us.us.preheader285 ]
  %.03560.us87.us.us.us.us.us = phi i64 [ %77, %.lr.ph61.us94.us.us.us.us.us ], [ %.03560.us87.us.us.us.us.us.ph, %.lr.ph61.us94.us.us.us.us.us.preheader285 ]
  %74 = sub nsw i64 99, %73
  %75 = getelementptr [4 x [100 x i64]], ptr @_QFEvall, i64 0, i64 0, i64 %74
  %76 = load i64, ptr %75, align 8, !tbaa !3
  %77 = add i64 %76, %.03560.us87.us.us.us.us.us
  %78 = add nuw nsw i64 %73, 1
  %exitcond136.not = icmp eq i64 %78, %46
  br i1 %exitcond136.not, label %.preheader54.us91.us.us.us.us.us, label %.lr.ph61.us94.us.us.us.us.us, !llvm.loop !11

79:                                               ; preds = %._crit_edge.us101.us.us.us.us.us, %.lr.ph74.split.us105.us.us.us.us.us
  %.4.us88.us.us.us.us.us = phi i64 [ %60, %._crit_edge.us101.us.us.us.us.us ], [ %.34072.us82.us.us.us.us.us, %.lr.ph74.split.us105.us.us.us.us.us ]
  %80 = add nuw i64 %57, 1
  %81 = add i64 %56, -1
  %82 = icmp sgt i64 %81, 0
  br i1 %82, label %.lr.ph74.split.us105.us.us.us.us.us, label %._crit_edge75.us.us.us.us.us.us

.preheader53.us89.us.us.us.us.us:                 ; preds = %.lr.ph64.us97.us.us.us.us.us, %middle.block168, %.preheader54.us91.us.us.us.us.us
  %.136.lcssa.us90.us.us.us.us.us = phi i64 [ %.035.lcssa.us92.us.us.us.us.us, %.preheader54.us91.us.us.us.us.us ], [ %100, %middle.block168 ], [ %71, %.lr.ph64.us97.us.us.us.us.us ]
  %.not145 = icmp eq i64 %57, 0
  br i1 %.not145, label %._crit_edge.us101.us.us.us.us.us, label %.lr.ph70.us100.us.us.us.us.us.preheader

.lr.ph70.us100.us.us.us.us.us.preheader:          ; preds = %.preheader53.us89.us.us.us.us.us
  %min.iters.check = icmp ult i64 %57, 4
  br i1 %min.iters.check, label %.lr.ph70.us100.us.us.us.us.us.preheader282, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph70.us100.us.us.us.us.us.preheader
  %n.vec = and i64 %57, -4
  %83 = insertelement <2 x i64> <i64 poison, i64 0>, i64 %.136.lcssa.us90.us.us.us.us.us, i64 0
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <2 x i64> [ %83, %vector.ph ], [ %88, %vector.body ]
  %vec.phi165 = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %89, %vector.body ]
  %84 = sub nsw i64 99, %index
  %85 = getelementptr [4 x [100 x i64]], ptr @_QFEvall, i64 0, i64 3, i64 %84
  %86 = getelementptr i64, ptr %85, i64 -1
  %wide.load = load <2 x i64>, ptr %86, align 16, !tbaa !3
  %reverse = shufflevector <2 x i64> %wide.load, <2 x i64> poison, <2 x i32> <i32 1, i32 0>
  %87 = getelementptr i64, ptr %85, i64 -3
  %wide.load166 = load <2 x i64>, ptr %87, align 16, !tbaa !3
  %reverse167 = shufflevector <2 x i64> %wide.load166, <2 x i64> poison, <2 x i32> <i32 1, i32 0>
  %88 = add <2 x i64> %reverse, %vec.phi
  %89 = add <2 x i64> %reverse167, %vec.phi165
  %index.next = add nuw i64 %index, 4
  %90 = icmp eq i64 %index.next, %n.vec
  br i1 %90, label %middle.block, label %vector.body, !llvm.loop !12

middle.block:                                     ; preds = %vector.body
  %bin.rdx = add <2 x i64> %89, %88
  %91 = call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %bin.rdx)
  %cmp.n = icmp eq i64 %57, %n.vec
  br i1 %cmp.n, label %._crit_edge.us101.us.us.us.us.us, label %.lr.ph70.us100.us.us.us.us.us.preheader282

.lr.ph70.us100.us.us.us.us.us.preheader282:       ; preds = %.lr.ph70.us100.us.us.us.us.us.preheader, %middle.block
  %.ph = phi i64 [ 0, %.lr.ph70.us100.us.us.us.us.us.preheader ], [ %n.vec, %middle.block ]
  %.369.us85.us.us.us.us.us.ph = phi i64 [ %.136.lcssa.us90.us.us.us.us.us, %.lr.ph70.us100.us.us.us.us.us.preheader ], [ %91, %middle.block ]
  br label %.lr.ph70.us100.us.us.us.us.us

.preheader54.us91.us.us.us.us.us:                 ; preds = %.lr.ph61.us94.us.us.us.us.us, %middle.block187, %.preheader55.us93.us.us.us.us.us
  %.035.lcssa.us92.us.us.us.us.us = phi i64 [ 0, %.preheader55.us93.us.us.us.us.us ], [ %108, %middle.block187 ], [ %77, %.lr.ph61.us94.us.us.us.us.us ]
  br i1 %.not143, label %.preheader53.us89.us.us.us.us.us, label %.lr.ph64.us97.us.us.us.us.us.preheader

.lr.ph64.us97.us.us.us.us.us.preheader:           ; preds = %.preheader54.us91.us.us.us.us.us
  br i1 %min.iters.check170, label %.lr.ph64.us97.us.us.us.us.us.preheader283, label %vector.ph171

vector.ph171:                                     ; preds = %.lr.ph64.us97.us.us.us.us.us.preheader
  %92 = insertelement <2 x i64> <i64 poison, i64 0>, i64 %.035.lcssa.us92.us.us.us.us.us, i64 0
  br label %vector.body176

vector.body176:                                   ; preds = %vector.body176, %vector.ph171
  %index177 = phi i64 [ 0, %vector.ph171 ], [ %index.next184, %vector.body176 ]
  %vec.phi178 = phi <2 x i64> [ %92, %vector.ph171 ], [ %97, %vector.body176 ]
  %vec.phi179 = phi <2 x i64> [ zeroinitializer, %vector.ph171 ], [ %98, %vector.body176 ]
  %93 = sub nsw i64 99, %index177
  %94 = getelementptr [4 x [100 x i64]], ptr @_QFEvall, i64 0, i64 1, i64 %93
  %95 = getelementptr i64, ptr %94, i64 -1
  %wide.load180 = load <2 x i64>, ptr %95, align 16, !tbaa !3
  %reverse181 = shufflevector <2 x i64> %wide.load180, <2 x i64> poison, <2 x i32> <i32 1, i32 0>
  %96 = getelementptr i64, ptr %94, i64 -3
  %wide.load182 = load <2 x i64>, ptr %96, align 16, !tbaa !3
  %reverse183 = shufflevector <2 x i64> %wide.load182, <2 x i64> poison, <2 x i32> <i32 1, i32 0>
  %97 = add <2 x i64> %reverse181, %vec.phi178
  %98 = add <2 x i64> %reverse183, %vec.phi179
  %index.next184 = add nuw i64 %index177, 4
  %99 = icmp eq i64 %index.next184, %n.vec173
  br i1 %99, label %middle.block168, label %vector.body176, !llvm.loop !13

middle.block168:                                  ; preds = %vector.body176
  %bin.rdx185 = add <2 x i64> %98, %97
  %100 = call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %bin.rdx185)
  br i1 %cmp.n175, label %.preheader53.us89.us.us.us.us.us, label %.lr.ph64.us97.us.us.us.us.us.preheader283

.lr.ph64.us97.us.us.us.us.us.preheader283:        ; preds = %.lr.ph64.us97.us.us.us.us.us.preheader, %middle.block168
  %.ph284 = phi i64 [ 0, %.lr.ph64.us97.us.us.us.us.us.preheader ], [ %n.vec173, %middle.block168 ]
  %.13663.us86.us.us.us.us.us.ph = phi i64 [ %.035.lcssa.us92.us.us.us.us.us, %.lr.ph64.us97.us.us.us.us.us.preheader ], [ %100, %middle.block168 ]
  br label %.lr.ph64.us97.us.us.us.us.us

.preheader55.us93.us.us.us.us.us:                 ; preds = %.lr.ph74.split.us105.us.us.us.us.us
  br i1 %.not, label %.preheader54.us91.us.us.us.us.us, label %.lr.ph61.us94.us.us.us.us.us.preheader

.lr.ph61.us94.us.us.us.us.us.preheader:           ; preds = %.preheader55.us93.us.us.us.us.us
  br i1 %min.iters.check189, label %.lr.ph61.us94.us.us.us.us.us.preheader285, label %vector.body195

vector.body195:                                   ; preds = %.lr.ph61.us94.us.us.us.us.us.preheader, %vector.body195
  %index196 = phi i64 [ %index.next203, %vector.body195 ], [ 0, %.lr.ph61.us94.us.us.us.us.us.preheader ]
  %vec.phi197 = phi <2 x i64> [ %105, %vector.body195 ], [ zeroinitializer, %.lr.ph61.us94.us.us.us.us.us.preheader ]
  %vec.phi198 = phi <2 x i64> [ %106, %vector.body195 ], [ zeroinitializer, %.lr.ph61.us94.us.us.us.us.us.preheader ]
  %101 = sub nsw i64 99, %index196
  %102 = getelementptr [4 x [100 x i64]], ptr @_QFEvall, i64 0, i64 0, i64 %101
  %103 = getelementptr i64, ptr %102, i64 -1
  %wide.load199 = load <2 x i64>, ptr %103, align 16, !tbaa !3
  %reverse200 = shufflevector <2 x i64> %wide.load199, <2 x i64> poison, <2 x i32> <i32 1, i32 0>
  %104 = getelementptr i64, ptr %102, i64 -3
  %wide.load201 = load <2 x i64>, ptr %104, align 16, !tbaa !3
  %reverse202 = shufflevector <2 x i64> %wide.load201, <2 x i64> poison, <2 x i32> <i32 1, i32 0>
  %105 = add <2 x i64> %reverse200, %vec.phi197
  %106 = add <2 x i64> %reverse202, %vec.phi198
  %index.next203 = add nuw i64 %index196, 4
  %107 = icmp eq i64 %index.next203, %n.vec192
  br i1 %107, label %middle.block187, label %vector.body195, !llvm.loop !14

middle.block187:                                  ; preds = %vector.body195
  %bin.rdx204 = add <2 x i64> %106, %105
  %108 = call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %bin.rdx204)
  br i1 %cmp.n194, label %.preheader54.us91.us.us.us.us.us, label %.lr.ph61.us94.us.us.us.us.us.preheader285

.lr.ph61.us94.us.us.us.us.us.preheader285:        ; preds = %.lr.ph61.us94.us.us.us.us.us.preheader, %middle.block187
  %.ph286 = phi i64 [ 0, %.lr.ph61.us94.us.us.us.us.us.preheader ], [ %n.vec192, %middle.block187 ]
  %.03560.us87.us.us.us.us.us.ph = phi i64 [ 0, %.lr.ph61.us94.us.us.us.us.us.preheader ], [ %108, %middle.block187 ]
  br label %.lr.ph61.us94.us.us.us.us.us

._crit_edge75.us.us.us.us.us.us:                  ; preds = %141, %79
  %.us-phi.us.us.us.us.us.us = phi i64 [ %.4.us88.us.us.us.us.us, %79 ], [ %.4.us.us.us.us.us.us.us, %141 ]
  %109 = add nuw i64 %53, 1
  %110 = add i64 %52, -1
  %111 = icmp sgt i64 %110, 0
  br i1 %111, label %.lr.ph74.us.us.us.us.us.us, label %._crit_edge80.split.us.us.us.us.us.us

.lr.ph74.split.us.us.us.us.us.us.us:              ; preds = %.lr.ph74.split.us.us.us.us.us.us.us.preheader, %141
  %112 = phi i64 [ %143, %141 ], [ %37, %.lr.ph74.split.us.us.us.us.us.us.us.preheader ]
  %113 = phi i64 [ %142, %141 ], [ 0, %.lr.ph74.split.us.us.us.us.us.us.us.preheader ]
  %.34072.us.us.us.us.us.us.us = phi i64 [ %.4.us.us.us.us.us.us.us, %141 ], [ %.23977.us.us.us.us.us.us, %.lr.ph74.split.us.us.us.us.us.us.us.preheader ]
  %114 = mul i64 %113, %41
  %115 = add i64 %55, %114
  %.not.us.us.us.us.us.us.us = icmp sgt i64 %115, %42
  br i1 %.not.us.us.us.us.us.us.us, label %141, label %.preheader55.us.us.us.us.us.us.us

._crit_edge.us.us.us.us.us.us.us:                 ; preds = %.lr.ph70.us.us.us.us.us.us.us, %middle.block206, %..preheader_crit_edge.us.us.us.us.us.us.us
  %.3.lcssa.us.us.us.us.us.us.us = phi i64 [ %.lcssa160, %..preheader_crit_edge.us.us.us.us.us.us.us ], [ %179, %middle.block206 ], [ %121, %.lr.ph70.us.us.us.us.us.us.us ]
  %116 = call i64 @llvm.smax.i64(i64 %.34072.us.us.us.us.us.us.us, i64 %.3.lcssa.us.us.us.us.us.us.us)
  br label %141

.lr.ph70.us.us.us.us.us.us.us:                    ; preds = %.lr.ph70.us.us.us.us.us.us.us.preheader287, %.lr.ph70.us.us.us.us.us.us.us
  %117 = phi i64 [ %122, %.lr.ph70.us.us.us.us.us.us.us ], [ %.ph288, %.lr.ph70.us.us.us.us.us.us.us.preheader287 ]
  %.369.us.us.us.us.us.us.us = phi i64 [ %121, %.lr.ph70.us.us.us.us.us.us.us ], [ %.369.us.us.us.us.us.us.us.ph, %.lr.ph70.us.us.us.us.us.us.us.preheader287 ]
  %118 = sub nsw i64 99, %117
  %119 = getelementptr [4 x [100 x i64]], ptr @_QFEvall, i64 0, i64 3, i64 %118
  %120 = load i64, ptr %119, align 8, !tbaa !3
  %121 = add i64 %120, %.369.us.us.us.us.us.us.us
  %122 = add nuw nsw i64 %117, 1
  %exitcond142.not = icmp eq i64 %122, %113
  br i1 %exitcond142.not, label %._crit_edge.us.us.us.us.us.us.us, label %.lr.ph70.us.us.us.us.us.us.us, !llvm.loop !15

scalar.ph226:                                     ; preds = %scalar.ph226.preheader, %scalar.ph226
  %123 = phi i64 [ %128, %scalar.ph226 ], [ %.ph289, %scalar.ph226.preheader ]
  %.266.us.us.us.us.us.us.us = phi i64 [ %127, %scalar.ph226 ], [ %.266.us.us.us.us.us.us.us.ph, %scalar.ph226.preheader ]
  %124 = sub nsw i64 99, %123
  %125 = getelementptr [4 x [100 x i64]], ptr @_QFEvall, i64 0, i64 2, i64 %124
  %126 = load i64, ptr %125, align 8, !tbaa !3
  %127 = add i64 %126, %.266.us.us.us.us.us.us.us
  %128 = add nuw nsw i64 %123, 1
  %exitcond141.not = icmp eq i64 %128, %53
  br i1 %exitcond141.not, label %..preheader_crit_edge.us.us.us.us.us.us.us, label %scalar.ph226, !llvm.loop !16

.lr.ph64.us.us.us.us.us.us.us:                    ; preds = %.lr.ph64.us.us.us.us.us.us.us.preheader290, %.lr.ph64.us.us.us.us.us.us.us
  %129 = phi i64 [ %134, %.lr.ph64.us.us.us.us.us.us.us ], [ %.ph291, %.lr.ph64.us.us.us.us.us.us.us.preheader290 ]
  %.13663.us.us.us.us.us.us.us = phi i64 [ %133, %.lr.ph64.us.us.us.us.us.us.us ], [ %.13663.us.us.us.us.us.us.us.ph, %.lr.ph64.us.us.us.us.us.us.us.preheader290 ]
  %130 = sub nsw i64 99, %129
  %131 = getelementptr [4 x [100 x i64]], ptr @_QFEvall, i64 0, i64 1, i64 %130
  %132 = load i64, ptr %131, align 8, !tbaa !3
  %133 = add i64 %132, %.13663.us.us.us.us.us.us.us
  %134 = add nuw nsw i64 %129, 1
  %exitcond140.not = icmp eq i64 %134, %49
  br i1 %exitcond140.not, label %.preheader53.us.us.us.us.us.us.us, label %.lr.ph64.us.us.us.us.us.us.us, !llvm.loop !17

.lr.ph61.us.us.us.us.us.us.us:                    ; preds = %.lr.ph61.us.us.us.us.us.us.us.preheader292, %.lr.ph61.us.us.us.us.us.us.us
  %135 = phi i64 [ %140, %.lr.ph61.us.us.us.us.us.us.us ], [ %.ph293, %.lr.ph61.us.us.us.us.us.us.us.preheader292 ]
  %.03560.us.us.us.us.us.us.us = phi i64 [ %139, %.lr.ph61.us.us.us.us.us.us.us ], [ %.03560.us.us.us.us.us.us.us.ph, %.lr.ph61.us.us.us.us.us.us.us.preheader292 ]
  %136 = sub nsw i64 99, %135
  %137 = getelementptr [4 x [100 x i64]], ptr @_QFEvall, i64 0, i64 0, i64 %136
  %138 = load i64, ptr %137, align 8, !tbaa !3
  %139 = add i64 %138, %.03560.us.us.us.us.us.us.us
  %140 = add nuw nsw i64 %135, 1
  %exitcond139.not = icmp eq i64 %140, %46
  br i1 %exitcond139.not, label %.preheader54.us.us.us.us.us.us.us, label %.lr.ph61.us.us.us.us.us.us.us, !llvm.loop !18

141:                                              ; preds = %._crit_edge.us.us.us.us.us.us.us, %.lr.ph74.split.us.us.us.us.us.us.us
  %.4.us.us.us.us.us.us.us = phi i64 [ %116, %._crit_edge.us.us.us.us.us.us.us ], [ %.34072.us.us.us.us.us.us.us, %.lr.ph74.split.us.us.us.us.us.us.us ]
  %142 = add nuw i64 %113, 1
  %143 = add i64 %112, -1
  %144 = icmp sgt i64 %143, 0
  br i1 %144, label %.lr.ph74.split.us.us.us.us.us.us.us, label %._crit_edge75.us.us.us.us.us.us

.preheader53.us.us.us.us.us.us.us:                ; preds = %.lr.ph64.us.us.us.us.us.us.us, %middle.block244, %.preheader54.us.us.us.us.us.us.us
  %.136.lcssa.us.us.us.us.us.us.us = phi i64 [ %.035.lcssa.us.us.us.us.us.us.us, %.preheader54.us.us.us.us.us.us.us ], [ %162, %middle.block244 ], [ %133, %.lr.ph64.us.us.us.us.us.us.us ]
  br i1 %min.iters.check227, label %scalar.ph226.preheader, label %vector.ph228

vector.ph228:                                     ; preds = %.preheader53.us.us.us.us.us.us.us
  %145 = insertelement <2 x i64> <i64 poison, i64 0>, i64 %.136.lcssa.us.us.us.us.us.us.us, i64 0
  br label %vector.body233

vector.body233:                                   ; preds = %vector.body233, %vector.ph228
  %index234 = phi i64 [ 0, %vector.ph228 ], [ %index.next241, %vector.body233 ]
  %vec.phi235 = phi <2 x i64> [ %145, %vector.ph228 ], [ %150, %vector.body233 ]
  %vec.phi236 = phi <2 x i64> [ zeroinitializer, %vector.ph228 ], [ %151, %vector.body233 ]
  %146 = sub nsw i64 99, %index234
  %147 = getelementptr [4 x [100 x i64]], ptr @_QFEvall, i64 0, i64 2, i64 %146
  %148 = getelementptr i64, ptr %147, i64 -1
  %wide.load237 = load <2 x i64>, ptr %148, align 16, !tbaa !3
  %reverse238 = shufflevector <2 x i64> %wide.load237, <2 x i64> poison, <2 x i32> <i32 1, i32 0>
  %149 = getelementptr i64, ptr %147, i64 -3
  %wide.load239 = load <2 x i64>, ptr %149, align 16, !tbaa !3
  %reverse240 = shufflevector <2 x i64> %wide.load239, <2 x i64> poison, <2 x i32> <i32 1, i32 0>
  %150 = add <2 x i64> %reverse238, %vec.phi235
  %151 = add <2 x i64> %reverse240, %vec.phi236
  %index.next241 = add nuw i64 %index234, 4
  %152 = icmp eq i64 %index.next241, %n.vec230
  br i1 %152, label %middle.block225, label %vector.body233, !llvm.loop !19

middle.block225:                                  ; preds = %vector.body233
  %bin.rdx242 = add <2 x i64> %151, %150
  %153 = call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %bin.rdx242)
  br i1 %cmp.n232, label %..preheader_crit_edge.us.us.us.us.us.us.us, label %scalar.ph226.preheader

scalar.ph226.preheader:                           ; preds = %.preheader53.us.us.us.us.us.us.us, %middle.block225
  %.ph289 = phi i64 [ 0, %.preheader53.us.us.us.us.us.us.us ], [ %n.vec230, %middle.block225 ]
  %.266.us.us.us.us.us.us.us.ph = phi i64 [ %.136.lcssa.us.us.us.us.us.us.us, %.preheader53.us.us.us.us.us.us.us ], [ %153, %middle.block225 ]
  br label %scalar.ph226

.preheader54.us.us.us.us.us.us.us:                ; preds = %.lr.ph61.us.us.us.us.us.us.us, %middle.block263, %.preheader55.us.us.us.us.us.us.us
  %.035.lcssa.us.us.us.us.us.us.us = phi i64 [ 0, %.preheader55.us.us.us.us.us.us.us ], [ %170, %middle.block263 ], [ %139, %.lr.ph61.us.us.us.us.us.us.us ]
  br i1 %.not143, label %.preheader53.us.us.us.us.us.us.us, label %.lr.ph64.us.us.us.us.us.us.us.preheader

.lr.ph64.us.us.us.us.us.us.us.preheader:          ; preds = %.preheader54.us.us.us.us.us.us.us
  br i1 %min.iters.check246, label %.lr.ph64.us.us.us.us.us.us.us.preheader290, label %vector.ph247

vector.ph247:                                     ; preds = %.lr.ph64.us.us.us.us.us.us.us.preheader
  %154 = insertelement <2 x i64> <i64 poison, i64 0>, i64 %.035.lcssa.us.us.us.us.us.us.us, i64 0
  br label %vector.body252

vector.body252:                                   ; preds = %vector.body252, %vector.ph247
  %index253 = phi i64 [ 0, %vector.ph247 ], [ %index.next260, %vector.body252 ]
  %vec.phi254 = phi <2 x i64> [ %154, %vector.ph247 ], [ %159, %vector.body252 ]
  %vec.phi255 = phi <2 x i64> [ zeroinitializer, %vector.ph247 ], [ %160, %vector.body252 ]
  %155 = sub nsw i64 99, %index253
  %156 = getelementptr [4 x [100 x i64]], ptr @_QFEvall, i64 0, i64 1, i64 %155
  %157 = getelementptr i64, ptr %156, i64 -1
  %wide.load256 = load <2 x i64>, ptr %157, align 16, !tbaa !3
  %reverse257 = shufflevector <2 x i64> %wide.load256, <2 x i64> poison, <2 x i32> <i32 1, i32 0>
  %158 = getelementptr i64, ptr %156, i64 -3
  %wide.load258 = load <2 x i64>, ptr %158, align 16, !tbaa !3
  %reverse259 = shufflevector <2 x i64> %wide.load258, <2 x i64> poison, <2 x i32> <i32 1, i32 0>
  %159 = add <2 x i64> %reverse257, %vec.phi254
  %160 = add <2 x i64> %reverse259, %vec.phi255
  %index.next260 = add nuw i64 %index253, 4
  %161 = icmp eq i64 %index.next260, %n.vec249
  br i1 %161, label %middle.block244, label %vector.body252, !llvm.loop !20

middle.block244:                                  ; preds = %vector.body252
  %bin.rdx261 = add <2 x i64> %160, %159
  %162 = call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %bin.rdx261)
  br i1 %cmp.n251, label %.preheader53.us.us.us.us.us.us.us, label %.lr.ph64.us.us.us.us.us.us.us.preheader290

.lr.ph64.us.us.us.us.us.us.us.preheader290:       ; preds = %.lr.ph64.us.us.us.us.us.us.us.preheader, %middle.block244
  %.ph291 = phi i64 [ 0, %.lr.ph64.us.us.us.us.us.us.us.preheader ], [ %n.vec249, %middle.block244 ]
  %.13663.us.us.us.us.us.us.us.ph = phi i64 [ %.035.lcssa.us.us.us.us.us.us.us, %.lr.ph64.us.us.us.us.us.us.us.preheader ], [ %162, %middle.block244 ]
  br label %.lr.ph64.us.us.us.us.us.us.us

.preheader55.us.us.us.us.us.us.us:                ; preds = %.lr.ph74.split.us.us.us.us.us.us.us
  br i1 %.not, label %.preheader54.us.us.us.us.us.us.us, label %.lr.ph61.us.us.us.us.us.us.us.preheader

.lr.ph61.us.us.us.us.us.us.us.preheader:          ; preds = %.preheader55.us.us.us.us.us.us.us
  br i1 %min.iters.check265, label %.lr.ph61.us.us.us.us.us.us.us.preheader292, label %vector.body271

vector.body271:                                   ; preds = %.lr.ph61.us.us.us.us.us.us.us.preheader, %vector.body271
  %index272 = phi i64 [ %index.next279, %vector.body271 ], [ 0, %.lr.ph61.us.us.us.us.us.us.us.preheader ]
  %vec.phi273 = phi <2 x i64> [ %167, %vector.body271 ], [ zeroinitializer, %.lr.ph61.us.us.us.us.us.us.us.preheader ]
  %vec.phi274 = phi <2 x i64> [ %168, %vector.body271 ], [ zeroinitializer, %.lr.ph61.us.us.us.us.us.us.us.preheader ]
  %163 = sub nsw i64 99, %index272
  %164 = getelementptr [4 x [100 x i64]], ptr @_QFEvall, i64 0, i64 0, i64 %163
  %165 = getelementptr i64, ptr %164, i64 -1
  %wide.load275 = load <2 x i64>, ptr %165, align 16, !tbaa !3
  %reverse276 = shufflevector <2 x i64> %wide.load275, <2 x i64> poison, <2 x i32> <i32 1, i32 0>
  %166 = getelementptr i64, ptr %164, i64 -3
  %wide.load277 = load <2 x i64>, ptr %166, align 16, !tbaa !3
  %reverse278 = shufflevector <2 x i64> %wide.load277, <2 x i64> poison, <2 x i32> <i32 1, i32 0>
  %167 = add <2 x i64> %reverse276, %vec.phi273
  %168 = add <2 x i64> %reverse278, %vec.phi274
  %index.next279 = add nuw i64 %index272, 4
  %169 = icmp eq i64 %index.next279, %n.vec268
  br i1 %169, label %middle.block263, label %vector.body271, !llvm.loop !21

middle.block263:                                  ; preds = %vector.body271
  %bin.rdx280 = add <2 x i64> %168, %167
  %170 = call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %bin.rdx280)
  br i1 %cmp.n270, label %.preheader54.us.us.us.us.us.us.us, label %.lr.ph61.us.us.us.us.us.us.us.preheader292

.lr.ph61.us.us.us.us.us.us.us.preheader292:       ; preds = %.lr.ph61.us.us.us.us.us.us.us.preheader, %middle.block263
  %.ph293 = phi i64 [ 0, %.lr.ph61.us.us.us.us.us.us.us.preheader ], [ %n.vec268, %middle.block263 ]
  %.03560.us.us.us.us.us.us.us.ph = phi i64 [ 0, %.lr.ph61.us.us.us.us.us.us.us.preheader ], [ %170, %middle.block263 ]
  br label %.lr.ph61.us.us.us.us.us.us.us

..preheader_crit_edge.us.us.us.us.us.us.us:       ; preds = %scalar.ph226, %middle.block225
  %.lcssa160 = phi i64 [ %153, %middle.block225 ], [ %127, %scalar.ph226 ]
  %.not146 = icmp eq i64 %113, 0
  br i1 %.not146, label %._crit_edge.us.us.us.us.us.us.us, label %.lr.ph70.us.us.us.us.us.us.us.preheader

.lr.ph70.us.us.us.us.us.us.us.preheader:          ; preds = %..preheader_crit_edge.us.us.us.us.us.us.us
  %min.iters.check208 = icmp ult i64 %113, 4
  br i1 %min.iters.check208, label %.lr.ph70.us.us.us.us.us.us.us.preheader287, label %vector.ph209

vector.ph209:                                     ; preds = %.lr.ph70.us.us.us.us.us.us.us.preheader
  %n.vec211 = and i64 %113, -4
  %171 = insertelement <2 x i64> <i64 poison, i64 0>, i64 %.lcssa160, i64 0
  br label %vector.body214

vector.body214:                                   ; preds = %vector.body214, %vector.ph209
  %index215 = phi i64 [ 0, %vector.ph209 ], [ %index.next222, %vector.body214 ]
  %vec.phi216 = phi <2 x i64> [ %171, %vector.ph209 ], [ %176, %vector.body214 ]
  %vec.phi217 = phi <2 x i64> [ zeroinitializer, %vector.ph209 ], [ %177, %vector.body214 ]
  %172 = sub nsw i64 99, %index215
  %173 = getelementptr [4 x [100 x i64]], ptr @_QFEvall, i64 0, i64 3, i64 %172
  %174 = getelementptr i64, ptr %173, i64 -1
  %wide.load218 = load <2 x i64>, ptr %174, align 16, !tbaa !3
  %reverse219 = shufflevector <2 x i64> %wide.load218, <2 x i64> poison, <2 x i32> <i32 1, i32 0>
  %175 = getelementptr i64, ptr %173, i64 -3
  %wide.load220 = load <2 x i64>, ptr %175, align 16, !tbaa !3
  %reverse221 = shufflevector <2 x i64> %wide.load220, <2 x i64> poison, <2 x i32> <i32 1, i32 0>
  %176 = add <2 x i64> %reverse219, %vec.phi216
  %177 = add <2 x i64> %reverse221, %vec.phi217
  %index.next222 = add nuw i64 %index215, 4
  %178 = icmp eq i64 %index.next222, %n.vec211
  br i1 %178, label %middle.block206, label %vector.body214, !llvm.loop !22

middle.block206:                                  ; preds = %vector.body214
  %bin.rdx223 = add <2 x i64> %177, %176
  %179 = call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %bin.rdx223)
  %cmp.n213 = icmp eq i64 %113, %n.vec211
  br i1 %cmp.n213, label %._crit_edge.us.us.us.us.us.us.us, label %.lr.ph70.us.us.us.us.us.us.us.preheader287

.lr.ph70.us.us.us.us.us.us.us.preheader287:       ; preds = %.lr.ph70.us.us.us.us.us.us.us.preheader, %middle.block206
  %.ph288 = phi i64 [ 0, %.lr.ph70.us.us.us.us.us.us.us.preheader ], [ %n.vec211, %middle.block206 ]
  %.369.us.us.us.us.us.us.us.ph = phi i64 [ %.lcssa160, %.lr.ph70.us.us.us.us.us.us.us.preheader ], [ %179, %middle.block206 ]
  br label %.lr.ph70.us.us.us.us.us.us.us

._crit_edge80.split.us.us.us.us.us.us:            ; preds = %._crit_edge75.us.us.us.us.us.us
  %180 = add nuw i64 %49, 1
  %181 = add i64 %48, -1
  %182 = icmp sgt i64 %181, 0
  br i1 %182, label %.lr.ph79.us.us.us.us.us, label %._crit_edge.split.us.split.us.us.us.us

._crit_edge.split.us.split.us.us.us.us:           ; preds = %._crit_edge80.split.us.us.us.us.us.us
  %183 = add nuw i64 %46, 1
  %184 = add i64 %45, -1
  %185 = icmp sgt i64 %184, 0
  br i1 %185, label %.lr.ph108.us.us.us, label %._crit_edge116

._crit_edge116:                                   ; preds = %._crit_edge.split.us.split.us.us.us.us, %.lr.ph115, %.preheader56
  %.037.lcssa = phi i64 [ 0, %.preheader56 ], [ 0, %.lr.ph115 ], [ %.us-phi.us.us.us.us.us.us, %._crit_edge.split.us.split.us.us.us.us ]
  %186 = call ptr @_FortranAioBeginExternalFormattedOutput(ptr nonnull @_QQcl.28693029, i64 4, ptr null, i32 -1, ptr nonnull @_QQcl.703eea104fd3473a08d9466b4a6a840c, i32 48)
  %187 = call i1 @_FortranAioOutputInteger64(ptr %186, i64 %.037.lcssa)
  %188 = call i32 @_FortranAioEndIoStatement(ptr %186)
  ret void
}

; Function Attrs: nofree norecurse nosync nounwind memory(argmem: readwrite)
define void @heapsort_(ptr nocapture readonly %0, ptr nocapture %1) local_unnamed_addr #0 {
  %3 = load i32, ptr %0, align 4, !tbaa !3
  %4 = icmp eq i32 %3, 1
  br i1 %4, label %.loopexit, label %.lr.ph55.preheader

.lr.ph55.preheader:                               ; preds = %2
  %5 = sext i32 %3 to i64
  %6 = sdiv i32 %3, 2
  %7 = add nsw i32 %6, 1
  %8 = sext i32 %7 to i64
  br label %.lr.ph55

.lr.ph55:                                         ; preds = %.lr.ph55.preheader, %.split50.us
  %.02654 = phi i64 [ %.1, %.split50.us ], [ %8, %.lr.ph55.preheader ]
  %.02753 = phi i64 [ %.128.fr, %.split50.us ], [ %5, %.lr.ph55.preheader ]
  %9 = icmp sgt i64 %.02654, 1
  br i1 %9, label %10, label %15

10:                                               ; preds = %.lr.ph55
  %11 = add nsw i64 %.02654, -1
  %12 = add nsw i64 %.02654, -2
  %13 = getelementptr i64, ptr %1, i64 %12
  %14 = load i64, ptr %13, align 8, !tbaa !3
  br label %22

15:                                               ; preds = %.lr.ph55
  %16 = add i64 %.02753, -1
  %17 = getelementptr i64, ptr %1, i64 %16
  %18 = load i64, ptr %17, align 8, !tbaa !3
  %19 = load i64, ptr %1, align 8, !tbaa !3
  store i64 %19, ptr %17, align 8, !tbaa !3
  %20 = icmp eq i64 %16, 1
  br i1 %20, label %21, label %22

21:                                               ; preds = %15
  store i64 %18, ptr %1, align 8, !tbaa !3
  br label %.loopexit

22:                                               ; preds = %10, %15
  %.128 = phi i64 [ %.02753, %10 ], [ %16, %15 ]
  %.1 = phi i64 [ %11, %10 ], [ %.02654, %15 ]
  %.0 = phi i64 [ %14, %10 ], [ %18, %15 ]
  %.128.fr = freeze i64 %.128
  %23 = shl i64 %.1, 1
  %.not353744 = icmp sgt i64 %23, %.128.fr
  br i1 %.not353744, label %.split50.us, label %.lr.ph.lr.ph

.lr.ph.lr.ph:                                     ; preds = %22
  %.not35.not = icmp eq i64 %.128.fr, 9223372036854775807
  br i1 %.not35.not, label %.lr.ph.preheader, label %.lr.ph.us

.lr.ph.preheader:                                 ; preds = %.lr.ph.lr.ph
  %.128.fr.le = freeze i64 %.128
  %24 = add i64 %.128.fr.le, 1
  %.not59 = icmp eq i64 %24, 9223372036854775807
  %25 = getelementptr i64, ptr %1, i64 9223372036854775807
  %26 = getelementptr i64, ptr %1, i64 %24
  br label %44

.lr.ph.us:                                        ; preds = %.lr.ph.lr.ph, %.split.us.us
  %.029.ph46.us = phi i64 [ %43, %.split.us.us ], [ %23, %.lr.ph.lr.ph ]
  %.031.ph45.us = phi i64 [ %.130.us.us, %.split.us.us ], [ %.1, %.lr.ph.lr.ph ]
  %27 = icmp slt i64 %.029.ph46.us, %.128.fr
  br i1 %27, label %28, label %36

28:                                               ; preds = %.lr.ph.us
  %29 = add i64 %.029.ph46.us, -1
  %30 = getelementptr i64, ptr %1, i64 %29
  %31 = load i64, ptr %30, align 8, !tbaa !3
  %32 = getelementptr i64, ptr %1, i64 %.029.ph46.us
  %33 = load i64, ptr %32, align 8, !tbaa !3
  %34 = icmp slt i64 %31, %33
  %35 = zext i1 %34 to i64
  %spec.select.us.us = or i64 %.029.ph46.us, %35
  br label %36

36:                                               ; preds = %28, %.lr.ph.us
  %.130.us.us = phi i64 [ %.029.ph46.us, %.lr.ph.us ], [ %spec.select.us.us, %28 ]
  %37 = add i64 %.130.us.us, -1
  %38 = getelementptr i64, ptr %1, i64 %37
  %39 = load i64, ptr %38, align 8, !tbaa !3
  %40 = icmp slt i64 %.0, %39
  br i1 %40, label %.split.us.us, label %.split50.us

.split.us.us:                                     ; preds = %36
  %41 = add i64 %.031.ph45.us, -1
  %42 = getelementptr i64, ptr %1, i64 %41
  store i64 %39, ptr %42, align 8, !tbaa !3
  %43 = shl i64 %.130.us.us, 1
  %.not3537.us = icmp sgt i64 %43, %.128.fr
  br i1 %.not3537.us, label %.split50.us, label %.lr.ph.us

44:                                               ; preds = %.split, %.lr.ph.preheader
  %.029.ph46 = phi i64 [ %68, %.split ], [ %23, %.lr.ph.preheader ]
  %.031.ph45 = phi i64 [ %.130.lcssa, %.split ], [ %.1, %.lr.ph.preheader ]
  %45 = add i64 %.029.ph46, -1
  %46 = getelementptr i64, ptr %1, i64 %45
  %47 = load i64, ptr %46, align 8, !tbaa !3
  %48 = getelementptr i64, ptr %1, i64 %.029.ph46
  %49 = load i64, ptr %48, align 8, !tbaa !3
  %50 = icmp slt i64 %47, %49
  %51 = zext i1 %50 to i64
  %spec.select.peel = or i64 %.029.ph46, %51
  %52 = add i64 %spec.select.peel, -1
  %53 = getelementptr i64, ptr %1, i64 %52
  %54 = load i64, ptr %53, align 8, !tbaa !3
  %55 = icmp slt i64 %.0, %54
  br i1 %55, label %.split, label %.peel.next

.peel.next:                                       ; preds = %44, %61
  br i1 %.not59, label %61, label %56

56:                                               ; preds = %.peel.next
  %57 = load i64, ptr %25, align 8, !tbaa !3
  %58 = load i64, ptr %26, align 8, !tbaa !3
  %59 = icmp slt i64 %57, %58
  %60 = zext i1 %59 to i64
  %spec.select = add nsw i64 %24, %60
  br label %61

61:                                               ; preds = %56, %.peel.next
  %.130 = phi i64 [ 9223372036854775807, %.peel.next ], [ %spec.select, %56 ]
  %62 = add i64 %.130, -1
  %63 = getelementptr i64, ptr %1, i64 %62
  %64 = load i64, ptr %63, align 8, !tbaa !3
  %65 = icmp slt i64 %.0, %64
  br i1 %65, label %.split, label %.peel.next, !llvm.loop !23

.split:                                           ; preds = %61, %44
  %.130.lcssa = phi i64 [ %spec.select.peel, %44 ], [ %.130, %61 ]
  %.lcssa = phi i64 [ %54, %44 ], [ %64, %61 ]
  %66 = add i64 %.031.ph45, -1
  %67 = getelementptr i64, ptr %1, i64 %66
  store i64 %.lcssa, ptr %67, align 8, !tbaa !3
  %68 = shl i64 %.130.lcssa, 1
  br label %44

.split50.us:                                      ; preds = %.split.us.us, %36, %22
  %.031.ph.lcssa = phi i64 [ %.1, %22 ], [ %.031.ph45.us, %36 ], [ %.130.us.us, %.split.us.us ]
  %69 = add i64 %.031.ph.lcssa, -1
  %70 = getelementptr i64, ptr %1, i64 %69
  store i64 %.0, ptr %70, align 8, !tbaa !3
  %.not = icmp eq i64 %.128.fr, 1
  br i1 %.not, label %.loopexit, label %.lr.ph55

.loopexit:                                        ; preds = %.split50.us, %21, %2
  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 @_FortranAioBeginExternalFormattedOutput(ptr, i64, ptr, i32, ptr, i32) local_unnamed_addr

declare i1 @_FortranAioOutputInteger64(ptr, i64) local_unnamed_addr

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

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

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

attributes #0 = { nofree norecurse nosync nounwind memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { 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 = distinct !{!7, !8, !9}
!8 = !{!"llvm.loop.unroll.runtime.disable"}
!9 = !{!"llvm.loop.isvectorized", i32 1}
!10 = distinct !{!10, !8, !9}
!11 = distinct !{!11, !8, !9}
!12 = distinct !{!12, !9, !8}
!13 = distinct !{!13, !9, !8}
!14 = distinct !{!14, !9, !8}
!15 = distinct !{!15, !8, !9}
!16 = distinct !{!16, !8, !9}
!17 = distinct !{!17, !8, !9}
!18 = distinct !{!18, !8, !9}
!19 = distinct !{!19, !9, !8}
!20 = distinct !{!20, !9, !8}
!21 = distinct !{!21, !9, !8}
!22 = distinct !{!22, !9, !8}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.peeled.count", i32 1}
