integer N
integer,allocatable,dimension(:)::X
integer,allocatable,dimension(:)::ansx,ansy
integer minuscnt,ans
read*,N
allocate(X(N))
allocate(ansx(N-1),ansy(N-1))
read*,X
call heapsort(N,X)

minuscnt=0
do i=1,N
  if(x(i)<0)minuscnt=minuscnt+1
end do

if(minuscnt>=1.and. N-minuscnt>=2)then
  ansx(1)=X(1)
  ansy(1)=X(N-1)
  do i=2,(N-minuscnt)-1
    ansx(i)=ansx(i-1)-ansy(i-1)
    ansy(i)=X(minuscnt+i-1)
  end do
    ansy(N-minuscnt)=ansx(N-minuscnt-1)-ansy(N-minuscnt-1)
    ansx(N-minuscnt)=X(N)
  if(N-minuscnt+1/=N)then
    do i=N-minuscnt+1,N-1
      ansx(i)=ansx(i-1)-ansy(i-1)
      ansy(i)=X(i-N+minuscnt+1)
    end do
  endif
else if(minuscnt==0)then
  ansx(1)=X(1)
  ansy(1)=X(N-1)
  do i=2,N-2
    ansx(i)=ansx(i-1)-ansy(i-1)
    ansy(i)=X(i)
  end do
  ansx(N-1)=X(N)
  ansy(N-1)=ansx(N-2)-ansy(N-2)
else if(minuscnt>0)then
  ansx(1)=X(N)
  ansy(1)=X(1)
  do i=2,N-1
    ansx(i)=ansx(i-1)-ansy(i-1)
    ansy(i)=X(i)
  end do
end if

ans=ansx(N-1)-ansy(N-1)

print"(i0)",ans
do i=1,N-1
  print"(i0,A,i0)",ansx(i)," ",ansy(i)
end do
contains

subroutine heapsort(n,array)
  implicit none
!ここの入力は状況に応じて変更すること
  integer,intent(in) :: n
  integer,intent(inout) :: array(1:n)
  integer::i,k,j,l
  integer:: t

  l=n/2+1
  k=n
  do while(k /= 1)
     if(l > 1)then
        l=l-1
        t=array(L)
     else
        t=array(k)
        array(k)=array(1)
        k=k-1
        if(k == 1) then
           array(1)=t
           exit
        endif
     endif
     i=l
     j=l+l
     do while(j<=k)
        if(j < k)then
           if(array(j) < array(j+1))j=j+1
        endif
        if (t < 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
end

; 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"

@_QFEansx.0 = internal unnamed_addr global ptr null
@_QFEansy.0 = internal unnamed_addr global ptr null
@_QFEx.0 = internal unnamed_addr global ptr null
@_QFEx.8 = internal unnamed_addr global i64 0
@_QQcl.5b813bb8472fa81b8d68b7edbb54a905 = linkonce constant [73 x i8] c"/home/ubuntu/Downloads/TheStack_IR/Collated/Fortran/Source_4055/source.f\00"
@_QQcl.28693029 = linkonce constant [4 x i8] c"(i0)"
@_QQcl.2869302C412C693029 = linkonce constant [9 x i8] c"(i0,A,i0)"
@_QQcl.20 = linkonce constant [1 x i8] c" "
@_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

define void @_QQmain() local_unnamed_addr {
  %1 = alloca { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, align 8
  %2 = alloca i32, align 4
  %3 = tail call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.5b813bb8472fa81b8d68b7edbb54a905, i32 5)
  %4 = call i1 @_FortranAioInputInteger(ptr %3, ptr nonnull %2, i32 4)
  %5 = call i32 @_FortranAioEndIoStatement(ptr %3)
  %6 = load i32, ptr %2, align 4, !tbaa !3
  %7 = call i32 @llvm.smax.i32(i32 %6, i32 0)
  %8 = zext i32 %7 to i64
  %9 = shl nuw nsw i64 %8, 2
  %10 = call ptr @malloc(i64 %9)
  store ptr %10, ptr @_QFEx.0, align 8, !tbaa !7
  store i64 %8, ptr @_QFEx.8, align 8, !tbaa !7
  %11 = add i32 %6, -1
  %12 = call i32 @llvm.smax.i32(i32 %11, i32 0)
  %13 = zext i32 %12 to i64
  %14 = shl nuw nsw i64 %13, 2
  %15 = call ptr @malloc(i64 %14)
  store ptr %15, ptr @_QFEansx.0, align 8, !tbaa !7
  %16 = call ptr @malloc(i64 %14)
  store ptr %16, ptr @_QFEansy.0, align 8, !tbaa !7
  %17 = call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.5b813bb8472fa81b8d68b7edbb54a905, i32 8)
  %.unpack = load ptr, ptr @_QFEx.0, align 8, !tbaa !7
  %.unpack1446.unpack.unpack1448 = load i64, ptr @_QFEx.8, align 8, !tbaa !7
  store ptr %.unpack, ptr %1, align 8, !tbaa !7
  %.fca.1.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 1
  store i64 4, 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 %1, 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 %1, 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 %1, i64 0, i32 4
  store i8 9, 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 %1, 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 %1, 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 %1, 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 %1, i64 0, i32 7, i64 0, i64 1
  store i64 %.unpack1446.unpack.unpack1448, 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 %1, i64 0, i32 7, i64 0, i64 2
  store i64 4, ptr %.fca.7.0.2.gep, align 8, !tbaa !7
  %18 = call i1 @_FortranAioInputDescriptor(ptr %17, ptr nonnull %1)
  %19 = call i32 @_FortranAioEndIoStatement(ptr %17)
  %.unpack1451 = load ptr, ptr @_QFEx.0, align 8, !tbaa !7
  call void @_QFPheapsort(ptr nonnull %2, ptr %.unpack1451)
  %20 = load i32, ptr %2, align 4, !tbaa !3
  %21 = sext i32 %20 to i64
  %22 = icmp sgt i32 %20, 0
  br i1 %22, label %.lr.ph, label %.thread

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

vector.ph:                                        ; preds = %.lr.ph
  %n.vec = and i64 %21, -8
  %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 ]
  %vec.phi = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %27, %vector.body ]
  %vec.phi2001 = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %28, %vector.body ]
  %23 = getelementptr i32, ptr %.unpack1451, i64 %index
  %wide.load = load <4 x i32>, ptr %23, align 4, !tbaa !3
  %24 = getelementptr i32, ptr %23, i64 4
  %wide.load2002 = load <4 x i32>, ptr %24, align 4, !tbaa !3
  %25 = lshr <4 x i32> %wide.load, <i32 31, i32 31, i32 31, i32 31>
  %26 = lshr <4 x i32> %wide.load2002, <i32 31, i32 31, i32 31, i32 31>
  %27 = add <4 x i32> %25, %vec.phi
  %28 = add <4 x i32> %26, %vec.phi2001
  %index.next = add nuw i64 %index, 8
  %29 = icmp eq i64 %index.next, %n.vec
  br i1 %29, label %middle.block, label %vector.body, !llvm.loop !9

middle.block:                                     ; preds = %vector.body
  %bin.rdx = add <4 x i32> %28, %27
  %30 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx)
  %cmp.n = icmp eq i64 %n.vec, %21
  br i1 %cmp.n, label %._crit_edge, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %.lr.ph, %middle.block
  %indvars.iv.ph = phi i64 [ 1, %.lr.ph ], [ %ind.end, %middle.block ]
  %.01959.ph = phi i32 [ 0, %.lr.ph ], [ %30, %middle.block ]
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %scalar.ph ], [ %indvars.iv.ph, %scalar.ph.preheader ]
  %.01959 = phi i32 [ %spec.select, %scalar.ph ], [ %.01959.ph, %scalar.ph.preheader ]
  %31 = add i64 %indvars.iv, -1
  %32 = getelementptr i32, ptr %.unpack1451, i64 %31
  %33 = load i32, ptr %32, align 4, !tbaa !3
  %.lobit = lshr i32 %33, 31
  %spec.select = add i32 %.lobit, %.01959
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv, %21
  br i1 %exitcond.not, label %._crit_edge, label %scalar.ph, !llvm.loop !12

._crit_edge:                                      ; preds = %scalar.ph, %middle.block
  %spec.select.lcssa = phi i32 [ %30, %middle.block ], [ %spec.select, %scalar.ph ]
  %34 = icmp sgt i32 %spec.select.lcssa, 0
  %35 = sub i32 %20, %spec.select.lcssa
  %36 = icmp sgt i32 %35, 1
  %37 = and i1 %34, %36
  br i1 %37, label %38, label %173

38:                                               ; preds = %._crit_edge
  %39 = load i32, ptr %.unpack1451, align 4, !tbaa !3
  %.unpack1764 = load ptr, ptr @_QFEansx.0, align 8, !tbaa !7
  store i32 %39, ptr %.unpack1764, align 4, !tbaa !3
  %40 = load i32, ptr %2, align 4, !tbaa !3
  %41 = add i32 %40, -1
  %42 = sext i32 %41 to i64
  %43 = add nsw i64 %42, -1
  %44 = getelementptr i32, ptr %.unpack1451, i64 %43
  %45 = load i32, ptr %44, align 4, !tbaa !3
  %.unpack1788 = load ptr, ptr @_QFEansy.0, align 8, !tbaa !7
  store i32 %45, ptr %.unpack1788, align 4, !tbaa !3
  %46 = load i32, ptr %2, align 4, !tbaa !3
  %47 = xor i32 %spec.select.lcssa, -1
  %48 = add i32 %46, %47
  %49 = icmp sgt i32 %48, 1
  br i1 %49, label %.lr.ph1966.lver.check, label %._crit_edge1967

.lr.ph1966.lver.check:                            ; preds = %38
  %50 = zext i32 %48 to i64
  %51 = shl nuw nsw i64 %50, 2
  %uglygep = getelementptr i8, ptr %.unpack1764, i64 %51
  %uglygep2003 = getelementptr i8, ptr %.unpack1788, i64 %51
  %bound0 = icmp ult ptr %.unpack1764, %uglygep2003
  %bound1 = icmp ult ptr %.unpack1788, %uglygep
  %found.conflict = and i1 %bound0, %bound1
  %52 = add nsw i64 %50, -2
  %53 = add i32 %spec.select.lcssa, 1
  %54 = trunc i64 %52 to i32
  %55 = add i32 %53, %54
  %56 = icmp slt i32 %55, %53
  %57 = icmp ugt i64 %52, 4294967295
  %58 = or i1 %56, %57
  %lver.safe = or i1 %found.conflict, %58
  br i1 %lver.safe, label %.lr.ph1966.lver.orig, label %.lr.ph1966.ph

.lr.ph1966.lver.orig:                             ; preds = %.lr.ph1966.lver.check, %.lr.ph1966.lver.orig
  %indvars.iv1983.lver.orig = phi i64 [ %indvars.iv.next1984.lver.orig, %.lr.ph1966.lver.orig ], [ 2, %.lr.ph1966.lver.check ]
  %59 = add nsw i64 %indvars.iv1983.lver.orig, -2
  %60 = getelementptr i32, ptr %.unpack1764, i64 %59
  %61 = load i32, ptr %60, align 4, !tbaa !3
  %62 = add nsw i64 %indvars.iv1983.lver.orig, -2
  %63 = getelementptr i32, ptr %.unpack1788, i64 %62
  %64 = load i32, ptr %63, align 4, !tbaa !3
  %65 = sub i32 %61, %64
  %66 = add nsw i64 %indvars.iv1983.lver.orig, -1
  %67 = getelementptr i32, ptr %.unpack1764, i64 %66
  store i32 %65, ptr %67, align 4, !tbaa !3
  %68 = trunc i64 %indvars.iv1983.lver.orig to i32
  %69 = add i32 %68, -1
  %70 = add i32 %spec.select.lcssa, %69
  %71 = sext i32 %70 to i64
  %72 = add nsw i64 %71, -1
  %73 = getelementptr i32, ptr %.unpack1451, i64 %72
  %74 = load i32, ptr %73, align 4, !tbaa !3
  %75 = add nsw i64 %indvars.iv1983.lver.orig, -1
  %76 = getelementptr i32, ptr %.unpack1788, i64 %75
  store i32 %74, ptr %76, align 4, !tbaa !3
  %indvars.iv.next1984.lver.orig = add nuw nsw i64 %indvars.iv1983.lver.orig, 1
  %exitcond1986.not.lver.orig = icmp eq i64 %indvars.iv1983.lver.orig, %50
  br i1 %exitcond1986.not.lver.orig, label %._crit_edge1967.loopexit, label %.lr.ph1966.lver.orig

.lr.ph1966.ph:                                    ; preds = %.lr.ph1966.lver.check
  %load_initial = load i32, ptr %.unpack1764, align 4
  %load_initial2005 = load i32, ptr %.unpack1788, align 4
  %77 = add nsw i64 %50, -1
  %xtraiter2037 = and i64 %77, 1
  %78 = icmp eq i64 %52, 0
  br i1 %78, label %._crit_edge1967.loopexit.loopexit2027.unr-lcssa, label %.lr.ph1966.ph.new

.lr.ph1966.ph.new:                                ; preds = %.lr.ph1966.ph
  %unroll_iter2039 = and i64 %77, -2
  br label %.lr.ph1966

.lr.ph1966:                                       ; preds = %.lr.ph1966, %.lr.ph1966.ph.new
  %store_forwarded2006 = phi i32 [ %load_initial2005, %.lr.ph1966.ph.new ], [ %98, %.lr.ph1966 ]
  %store_forwarded = phi i32 [ %load_initial, %.lr.ph1966.ph.new ], [ %91, %.lr.ph1966 ]
  %indvars.iv1983 = phi i64 [ 2, %.lr.ph1966.ph.new ], [ %indvars.iv.next1984.1, %.lr.ph1966 ]
  %niter2040 = phi i64 [ 0, %.lr.ph1966.ph.new ], [ %niter2040.next.1, %.lr.ph1966 ]
  %79 = sub i32 %store_forwarded, %store_forwarded2006
  %80 = add nsw i64 %indvars.iv1983, -1
  %81 = getelementptr i32, ptr %.unpack1764, i64 %80
  store i32 %79, ptr %81, align 4, !tbaa !3
  %82 = trunc i64 %indvars.iv1983 to i32
  %83 = add i32 %82, -1
  %84 = add i32 %spec.select.lcssa, %83
  %85 = sext i32 %84 to i64
  %86 = add nsw i64 %85, -1
  %87 = getelementptr i32, ptr %.unpack1451, i64 %86
  %88 = load i32, ptr %87, align 4, !tbaa !3
  %89 = add nsw i64 %indvars.iv1983, -1
  %90 = getelementptr i32, ptr %.unpack1788, i64 %89
  store i32 %88, ptr %90, align 4, !tbaa !3
  %91 = sub i32 %79, %88
  %92 = getelementptr i32, ptr %.unpack1764, i64 %indvars.iv1983
  store i32 %91, ptr %92, align 4, !tbaa !3
  %93 = trunc i64 %indvars.iv1983 to i32
  %94 = add i32 %spec.select.lcssa, %93
  %95 = sext i32 %94 to i64
  %96 = add nsw i64 %95, -1
  %97 = getelementptr i32, ptr %.unpack1451, i64 %96
  %98 = load i32, ptr %97, align 4, !tbaa !3
  %99 = getelementptr i32, ptr %.unpack1788, i64 %indvars.iv1983
  store i32 %98, ptr %99, align 4, !tbaa !3
  %indvars.iv.next1984.1 = add nuw nsw i64 %indvars.iv1983, 2
  %niter2040.next.1 = add i64 %niter2040, 2
  %niter2040.ncmp.1 = icmp eq i64 %niter2040.next.1, %unroll_iter2039
  br i1 %niter2040.ncmp.1, label %._crit_edge1967.loopexit.loopexit2027.unr-lcssa, label %.lr.ph1966

._crit_edge1967.loopexit.loopexit2027.unr-lcssa:  ; preds = %.lr.ph1966, %.lr.ph1966.ph
  %store_forwarded2006.unr = phi i32 [ %load_initial2005, %.lr.ph1966.ph ], [ %98, %.lr.ph1966 ]
  %store_forwarded.unr = phi i32 [ %load_initial, %.lr.ph1966.ph ], [ %91, %.lr.ph1966 ]
  %indvars.iv1983.unr = phi i64 [ 2, %.lr.ph1966.ph ], [ %indvars.iv.next1984.1, %.lr.ph1966 ]
  %lcmp.mod2038.not = icmp eq i64 %xtraiter2037, 0
  br i1 %lcmp.mod2038.not, label %._crit_edge1967.loopexit, label %.lr.ph1966.epil

.lr.ph1966.epil:                                  ; preds = %._crit_edge1967.loopexit.loopexit2027.unr-lcssa
  %100 = sub i32 %store_forwarded.unr, %store_forwarded2006.unr
  %101 = add nsw i64 %indvars.iv1983.unr, -1
  %102 = getelementptr i32, ptr %.unpack1764, i64 %101
  store i32 %100, ptr %102, align 4, !tbaa !3
  %103 = trunc i64 %indvars.iv1983.unr to i32
  %104 = add i32 %103, -1
  %105 = add i32 %spec.select.lcssa, %104
  %106 = sext i32 %105 to i64
  %107 = add nsw i64 %106, -1
  %108 = getelementptr i32, ptr %.unpack1451, i64 %107
  %109 = load i32, ptr %108, align 4, !tbaa !3
  %110 = add nsw i64 %indvars.iv1983.unr, -1
  %111 = getelementptr i32, ptr %.unpack1788, i64 %110
  store i32 %109, ptr %111, align 4, !tbaa !3
  br label %._crit_edge1967.loopexit

._crit_edge1967.loopexit:                         ; preds = %.lr.ph1966.epil, %._crit_edge1967.loopexit.loopexit2027.unr-lcssa, %.lr.ph1966.lver.orig
  %.pre1991 = load i32, ptr %2, align 4, !tbaa !3
  br label %._crit_edge1967

._crit_edge1967:                                  ; preds = %._crit_edge1967.loopexit, %38
  %112 = phi i32 [ %.pre1991, %._crit_edge1967.loopexit ], [ %46, %38 ]
  %113 = sub i32 %112, %spec.select.lcssa
  %114 = add i32 %113, -1
  %115 = sext i32 %114 to i64
  %116 = add nsw i64 %115, -1
  %117 = getelementptr i32, ptr %.unpack1764, i64 %116
  %118 = load i32, ptr %117, align 4, !tbaa !3
  %119 = add nsw i64 %115, -1
  %120 = getelementptr i32, ptr %.unpack1788, i64 %119
  %121 = load i32, ptr %120, align 4, !tbaa !3
  %122 = sub i32 %118, %121
  %123 = sext i32 %113 to i64
  %124 = add nsw i64 %123, -1
  %125 = getelementptr i32, ptr %.unpack1788, i64 %124
  store i32 %122, ptr %125, align 4, !tbaa !3
  %126 = load i32, ptr %2, align 4, !tbaa !3
  %127 = sext i32 %126 to i64
  %128 = add nsw i64 %127, -1
  %129 = getelementptr i32, ptr %.unpack1451, i64 %128
  %130 = load i32, ptr %129, align 4, !tbaa !3
  %131 = sub i32 %126, %spec.select.lcssa
  %132 = sext i32 %131 to i64
  %133 = add nsw i64 %132, -1
  %134 = getelementptr i32, ptr %.unpack1764, i64 %133
  store i32 %130, ptr %134, align 4, !tbaa !3
  %135 = load i32, ptr %2, align 4, !tbaa !3
  %136 = sub i32 %135, %spec.select.lcssa
  %137 = add i32 %136, 1
  %.not = icmp eq i32 %137, %135
  br i1 %.not, label %.loopexit, label %138

138:                                              ; preds = %._crit_edge1967
  %139 = sext i32 %137 to i64
  %140 = add i32 %135, -1
  %141 = sext i32 %140 to i64
  %142 = add nsw i64 %141, 1
  %143 = sub nsw i64 %142, %139
  %144 = icmp sgt i64 %143, 0
  br i1 %144, label %.lr.ph1969, label %.loopexit

.lr.ph1969:                                       ; preds = %138
  %145 = add i32 %spec.select.lcssa, 1
  br label %146

146:                                              ; preds = %.lr.ph1969, %146
  %147 = phi i64 [ %143, %.lr.ph1969 ], [ %171, %146 ]
  %148 = phi i32 [ %137, %.lr.ph1969 ], [ %170, %146 ]
  %149 = add i32 %148, -1
  %150 = sext i32 %149 to i64
  %151 = add nsw i64 %150, -1
  %152 = getelementptr i32, ptr %.unpack1764, i64 %151
  %153 = load i32, ptr %152, align 4, !tbaa !3
  %154 = add nsw i64 %150, -1
  %155 = getelementptr i32, ptr %.unpack1788, i64 %154
  %156 = load i32, ptr %155, align 4, !tbaa !3
  %157 = sub i32 %153, %156
  %158 = sext i32 %148 to i64
  %159 = add nsw i64 %158, -1
  %160 = getelementptr i32, ptr %.unpack1764, i64 %159
  store i32 %157, ptr %160, align 4, !tbaa !3
  %161 = load i32, ptr %2, align 4, !tbaa !3
  %162 = add i32 %145, %148
  %163 = sub i32 %162, %161
  %164 = sext i32 %163 to i64
  %165 = add nsw i64 %164, -1
  %166 = getelementptr i32, ptr %.unpack1451, i64 %165
  %167 = load i32, ptr %166, align 4, !tbaa !3
  %168 = add nsw i64 %158, -1
  %169 = getelementptr i32, ptr %.unpack1788, i64 %168
  store i32 %167, ptr %169, align 4, !tbaa !3
  %170 = add i32 %148, 1
  %171 = add nsw i64 %147, -1
  %172 = icmp ugt i64 %147, 1
  br i1 %172, label %146, label %.loopexit

173:                                              ; preds = %._crit_edge
  %174 = icmp eq i32 %spec.select.lcssa, 0
  br i1 %174, label %.thread, label %245

.thread:                                          ; preds = %0, %173
  %175 = load i32, ptr %.unpack1451, align 4, !tbaa !3
  %.unpack1619 = load ptr, ptr @_QFEansx.0, align 8, !tbaa !7
  store i32 %175, ptr %.unpack1619, align 4, !tbaa !3
  %176 = load i32, ptr %2, align 4, !tbaa !3
  %177 = add i32 %176, -1
  %178 = sext i32 %177 to i64
  %179 = add nsw i64 %178, -1
  %180 = getelementptr i32, ptr %.unpack1451, i64 %179
  %181 = load i32, ptr %180, align 4, !tbaa !3
  %.unpack1643 = load ptr, ptr @_QFEansy.0, align 8, !tbaa !7
  store i32 %181, ptr %.unpack1643, align 4, !tbaa !3
  %182 = load i32, ptr %2, align 4, !tbaa !3
  %183 = add i32 %182, -2
  %184 = icmp sgt i32 %183, 1
  br i1 %184, label %.lr.ph1963.lver.check, label %._crit_edge1964

.lr.ph1963.lver.check:                            ; preds = %.thread
  %185 = zext i32 %183 to i64
  %186 = shl nuw nsw i64 %185, 2
  %uglygep2007 = getelementptr i8, ptr %.unpack1619, i64 %186
  %uglygep2008 = getelementptr i8, ptr %.unpack1643, i64 %186
  %bound02009 = icmp ult ptr %.unpack1619, %uglygep2008
  %bound12010 = icmp ult ptr %.unpack1643, %uglygep2007
  %found.conflict2011 = and i1 %bound02009, %bound12010
  br i1 %found.conflict2011, label %.lr.ph1963.lver.orig, label %.lr.ph1963.ph

.lr.ph1963.lver.orig:                             ; preds = %.lr.ph1963.lver.check, %.lr.ph1963.lver.orig
  %indvars.iv1979.lver.orig = phi i64 [ %indvars.iv.next1980.lver.orig, %.lr.ph1963.lver.orig ], [ 2, %.lr.ph1963.lver.check ]
  %187 = add nsw i64 %indvars.iv1979.lver.orig, -2
  %188 = getelementptr i32, ptr %.unpack1619, i64 %187
  %189 = load i32, ptr %188, align 4, !tbaa !3
  %190 = add nsw i64 %indvars.iv1979.lver.orig, -2
  %191 = getelementptr i32, ptr %.unpack1643, i64 %190
  %192 = load i32, ptr %191, align 4, !tbaa !3
  %193 = sub i32 %189, %192
  %194 = add nsw i64 %indvars.iv1979.lver.orig, -1
  %195 = getelementptr i32, ptr %.unpack1619, i64 %194
  store i32 %193, ptr %195, align 4, !tbaa !3
  %196 = add nsw i64 %indvars.iv1979.lver.orig, -1
  %197 = getelementptr i32, ptr %.unpack1451, i64 %196
  %198 = load i32, ptr %197, align 4, !tbaa !3
  %199 = add nsw i64 %indvars.iv1979.lver.orig, -1
  %200 = getelementptr i32, ptr %.unpack1643, i64 %199
  store i32 %198, ptr %200, align 4, !tbaa !3
  %indvars.iv.next1980.lver.orig = add nuw nsw i64 %indvars.iv1979.lver.orig, 1
  %exitcond1982.not.lver.orig = icmp eq i64 %indvars.iv1979.lver.orig, %185
  br i1 %exitcond1982.not.lver.orig, label %._crit_edge1964.loopexit, label %.lr.ph1963.lver.orig

.lr.ph1963.ph:                                    ; preds = %.lr.ph1963.lver.check
  %load_initial2013 = load i32, ptr %.unpack1619, align 4
  %load_initial2015 = load i32, ptr %.unpack1643, align 4
  %201 = add nsw i64 %185, -1
  %xtraiter2033 = and i64 %201, 1
  %202 = icmp eq i32 %183, 2
  br i1 %202, label %._crit_edge1964.loopexit.loopexit2028.unr-lcssa, label %.lr.ph1963.ph.new

.lr.ph1963.ph.new:                                ; preds = %.lr.ph1963.ph
  %unroll_iter2035 = and i64 %201, -2
  br label %.lr.ph1963

.lr.ph1963:                                       ; preds = %.lr.ph1963, %.lr.ph1963.ph.new
  %store_forwarded2016 = phi i32 [ %load_initial2015, %.lr.ph1963.ph.new ], [ %214, %.lr.ph1963 ]
  %store_forwarded2014 = phi i32 [ %load_initial2013, %.lr.ph1963.ph.new ], [ %211, %.lr.ph1963 ]
  %indvars.iv1979 = phi i64 [ 2, %.lr.ph1963.ph.new ], [ %indvars.iv.next1980.1, %.lr.ph1963 ]
  %niter2036 = phi i64 [ 0, %.lr.ph1963.ph.new ], [ %niter2036.next.1, %.lr.ph1963 ]
  %203 = sub i32 %store_forwarded2014, %store_forwarded2016
  %204 = add nsw i64 %indvars.iv1979, -1
  %205 = getelementptr i32, ptr %.unpack1619, i64 %204
  store i32 %203, ptr %205, align 4, !tbaa !3
  %206 = add nsw i64 %indvars.iv1979, -1
  %207 = getelementptr i32, ptr %.unpack1451, i64 %206
  %208 = load i32, ptr %207, align 4, !tbaa !3
  %209 = add nsw i64 %indvars.iv1979, -1
  %210 = getelementptr i32, ptr %.unpack1643, i64 %209
  store i32 %208, ptr %210, align 4, !tbaa !3
  %211 = sub i32 %203, %208
  %212 = getelementptr i32, ptr %.unpack1619, i64 %indvars.iv1979
  store i32 %211, ptr %212, align 4, !tbaa !3
  %213 = getelementptr i32, ptr %.unpack1451, i64 %indvars.iv1979
  %214 = load i32, ptr %213, align 4, !tbaa !3
  %215 = getelementptr i32, ptr %.unpack1643, i64 %indvars.iv1979
  store i32 %214, ptr %215, align 4, !tbaa !3
  %indvars.iv.next1980.1 = add nuw nsw i64 %indvars.iv1979, 2
  %niter2036.next.1 = add i64 %niter2036, 2
  %niter2036.ncmp.1 = icmp eq i64 %niter2036.next.1, %unroll_iter2035
  br i1 %niter2036.ncmp.1, label %._crit_edge1964.loopexit.loopexit2028.unr-lcssa.loopexit, label %.lr.ph1963

._crit_edge1964.loopexit.loopexit2028.unr-lcssa.loopexit: ; preds = %.lr.ph1963
  %216 = or i64 %indvars.iv1979, 1
  br label %._crit_edge1964.loopexit.loopexit2028.unr-lcssa

._crit_edge1964.loopexit.loopexit2028.unr-lcssa:  ; preds = %._crit_edge1964.loopexit.loopexit2028.unr-lcssa.loopexit, %.lr.ph1963.ph
  %store_forwarded2016.unr = phi i32 [ %load_initial2015, %.lr.ph1963.ph ], [ %214, %._crit_edge1964.loopexit.loopexit2028.unr-lcssa.loopexit ]
  %store_forwarded2014.unr = phi i32 [ %load_initial2013, %.lr.ph1963.ph ], [ %211, %._crit_edge1964.loopexit.loopexit2028.unr-lcssa.loopexit ]
  %indvars.iv1979.unr = phi i64 [ 1, %.lr.ph1963.ph ], [ %216, %._crit_edge1964.loopexit.loopexit2028.unr-lcssa.loopexit ]
  %lcmp.mod2034.not = icmp eq i64 %xtraiter2033, 0
  br i1 %lcmp.mod2034.not, label %._crit_edge1964.loopexit, label %.lr.ph1963.epil

.lr.ph1963.epil:                                  ; preds = %._crit_edge1964.loopexit.loopexit2028.unr-lcssa
  %217 = sub i32 %store_forwarded2014.unr, %store_forwarded2016.unr
  %218 = getelementptr i32, ptr %.unpack1619, i64 %indvars.iv1979.unr
  store i32 %217, ptr %218, align 4, !tbaa !3
  %219 = getelementptr i32, ptr %.unpack1451, i64 %indvars.iv1979.unr
  %220 = load i32, ptr %219, align 4, !tbaa !3
  %221 = getelementptr i32, ptr %.unpack1643, i64 %indvars.iv1979.unr
  store i32 %220, ptr %221, align 4, !tbaa !3
  br label %._crit_edge1964.loopexit

._crit_edge1964.loopexit:                         ; preds = %.lr.ph1963.epil, %._crit_edge1964.loopexit.loopexit2028.unr-lcssa, %.lr.ph1963.lver.orig
  %.pre = load i32, ptr %2, align 4, !tbaa !3
  br label %._crit_edge1964

._crit_edge1964:                                  ; preds = %._crit_edge1964.loopexit, %.thread
  %222 = phi i32 [ %.pre, %._crit_edge1964.loopexit ], [ %182, %.thread ]
  %223 = sext i32 %222 to i64
  %224 = add nsw i64 %223, -1
  %225 = getelementptr i32, ptr %.unpack1451, i64 %224
  %226 = load i32, ptr %225, align 4, !tbaa !3
  %227 = add i32 %222, -1
  %228 = sext i32 %227 to i64
  %229 = add nsw i64 %228, -1
  %230 = getelementptr i32, ptr %.unpack1619, i64 %229
  store i32 %226, ptr %230, align 4, !tbaa !3
  %231 = load i32, ptr %2, align 4, !tbaa !3
  %232 = add i32 %231, -2
  %233 = sext i32 %232 to i64
  %234 = add nsw i64 %233, -1
  %235 = getelementptr i32, ptr %.unpack1619, i64 %234
  %236 = load i32, ptr %235, align 4, !tbaa !3
  %237 = add nsw i64 %233, -1
  %238 = getelementptr i32, ptr %.unpack1643, i64 %237
  %239 = load i32, ptr %238, align 4, !tbaa !3
  %240 = sub i32 %236, %239
  %241 = add i32 %231, -1
  %242 = sext i32 %241 to i64
  %243 = add nsw i64 %242, -1
  %244 = getelementptr i32, ptr %.unpack1643, i64 %243
  store i32 %240, ptr %244, align 4, !tbaa !3
  br label %.loopexit

245:                                              ; preds = %173
  br i1 %34, label %246, label %..loopexit_crit_edge

..loopexit_crit_edge:                             ; preds = %245
  %.unpack1463.pre = load ptr, ptr @_QFEansx.0, align 8, !tbaa !7
  %.unpack1475.pre = load ptr, ptr @_QFEansy.0, align 8, !tbaa !7
  br label %.loopexit

246:                                              ; preds = %245
  %247 = add nsw i64 %21, -1
  %248 = getelementptr i32, ptr %.unpack1451, i64 %247
  %249 = load i32, ptr %248, align 4, !tbaa !3
  %.unpack1523 = load ptr, ptr @_QFEansx.0, align 8, !tbaa !7
  store i32 %249, ptr %.unpack1523, align 4, !tbaa !3
  %250 = load i32, ptr %.unpack1451, align 4, !tbaa !3
  %.unpack1547 = load ptr, ptr @_QFEansy.0, align 8, !tbaa !7
  store i32 %250, ptr %.unpack1547, align 4, !tbaa !3
  %251 = load i32, ptr %2, align 4, !tbaa !3
  %252 = add i32 %251, -1
  %253 = icmp sgt i32 %252, 1
  br i1 %253, label %.lr.ph1961.lver.check, label %.loopexit

.lr.ph1961.lver.check:                            ; preds = %246
  %254 = zext i32 %252 to i64
  %255 = shl nuw nsw i64 %254, 2
  %uglygep2017 = getelementptr i8, ptr %.unpack1523, i64 %255
  %uglygep2018 = getelementptr i8, ptr %.unpack1547, i64 %255
  %bound02019 = icmp ult ptr %.unpack1523, %uglygep2018
  %bound12020 = icmp ult ptr %.unpack1547, %uglygep2017
  %found.conflict2021 = and i1 %bound02019, %bound12020
  br i1 %found.conflict2021, label %.lr.ph1961.lver.orig, label %.lr.ph1961.ph

.lr.ph1961.lver.orig:                             ; preds = %.lr.ph1961.lver.check, %.lr.ph1961.lver.orig
  %indvars.iv1975.lver.orig = phi i64 [ %indvars.iv.next1976.lver.orig, %.lr.ph1961.lver.orig ], [ 2, %.lr.ph1961.lver.check ]
  %256 = add nsw i64 %indvars.iv1975.lver.orig, -2
  %257 = getelementptr i32, ptr %.unpack1523, i64 %256
  %258 = load i32, ptr %257, align 4, !tbaa !3
  %259 = add nsw i64 %indvars.iv1975.lver.orig, -2
  %260 = getelementptr i32, ptr %.unpack1547, i64 %259
  %261 = load i32, ptr %260, align 4, !tbaa !3
  %262 = sub i32 %258, %261
  %263 = add nsw i64 %indvars.iv1975.lver.orig, -1
  %264 = getelementptr i32, ptr %.unpack1523, i64 %263
  store i32 %262, ptr %264, align 4, !tbaa !3
  %265 = add nsw i64 %indvars.iv1975.lver.orig, -1
  %266 = getelementptr i32, ptr %.unpack1451, i64 %265
  %267 = load i32, ptr %266, align 4, !tbaa !3
  %268 = add nsw i64 %indvars.iv1975.lver.orig, -1
  %269 = getelementptr i32, ptr %.unpack1547, i64 %268
  store i32 %267, ptr %269, align 4, !tbaa !3
  %indvars.iv.next1976.lver.orig = add nuw nsw i64 %indvars.iv1975.lver.orig, 1
  %exitcond1978.not.lver.orig = icmp eq i64 %indvars.iv1975.lver.orig, %254
  br i1 %exitcond1978.not.lver.orig, label %.loopexit, label %.lr.ph1961.lver.orig

.lr.ph1961.ph:                                    ; preds = %.lr.ph1961.lver.check
  %load_initial2023 = load i32, ptr %.unpack1523, align 4
  %load_initial2025 = load i32, ptr %.unpack1547, align 4
  %270 = add nsw i64 %254, -1
  %xtraiter = and i64 %270, 1
  %271 = icmp eq i32 %252, 2
  br i1 %271, label %.loopexit.loopexit2030.unr-lcssa, label %.lr.ph1961.ph.new

.lr.ph1961.ph.new:                                ; preds = %.lr.ph1961.ph
  %unroll_iter = and i64 %270, -2
  br label %.lr.ph1961

.lr.ph1961:                                       ; preds = %.lr.ph1961, %.lr.ph1961.ph.new
  %store_forwarded2026 = phi i32 [ %load_initial2025, %.lr.ph1961.ph.new ], [ %283, %.lr.ph1961 ]
  %store_forwarded2024 = phi i32 [ %load_initial2023, %.lr.ph1961.ph.new ], [ %280, %.lr.ph1961 ]
  %indvars.iv1975 = phi i64 [ 2, %.lr.ph1961.ph.new ], [ %indvars.iv.next1976.1, %.lr.ph1961 ]
  %niter = phi i64 [ 0, %.lr.ph1961.ph.new ], [ %niter.next.1, %.lr.ph1961 ]
  %272 = sub i32 %store_forwarded2024, %store_forwarded2026
  %273 = add nsw i64 %indvars.iv1975, -1
  %274 = getelementptr i32, ptr %.unpack1523, i64 %273
  store i32 %272, ptr %274, align 4, !tbaa !3
  %275 = add nsw i64 %indvars.iv1975, -1
  %276 = getelementptr i32, ptr %.unpack1451, i64 %275
  %277 = load i32, ptr %276, align 4, !tbaa !3
  %278 = add nsw i64 %indvars.iv1975, -1
  %279 = getelementptr i32, ptr %.unpack1547, i64 %278
  store i32 %277, ptr %279, align 4, !tbaa !3
  %280 = sub i32 %272, %277
  %281 = getelementptr i32, ptr %.unpack1523, i64 %indvars.iv1975
  store i32 %280, ptr %281, align 4, !tbaa !3
  %282 = getelementptr i32, ptr %.unpack1451, i64 %indvars.iv1975
  %283 = load i32, ptr %282, align 4, !tbaa !3
  %284 = getelementptr i32, ptr %.unpack1547, i64 %indvars.iv1975
  store i32 %283, ptr %284, align 4, !tbaa !3
  %indvars.iv.next1976.1 = add nuw nsw i64 %indvars.iv1975, 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 %.loopexit.loopexit2030.unr-lcssa.loopexit, label %.lr.ph1961

.loopexit.loopexit2030.unr-lcssa.loopexit:        ; preds = %.lr.ph1961
  %285 = or i64 %indvars.iv1975, 1
  br label %.loopexit.loopexit2030.unr-lcssa

.loopexit.loopexit2030.unr-lcssa:                 ; preds = %.loopexit.loopexit2030.unr-lcssa.loopexit, %.lr.ph1961.ph
  %store_forwarded2026.unr = phi i32 [ %load_initial2025, %.lr.ph1961.ph ], [ %283, %.loopexit.loopexit2030.unr-lcssa.loopexit ]
  %store_forwarded2024.unr = phi i32 [ %load_initial2023, %.lr.ph1961.ph ], [ %280, %.loopexit.loopexit2030.unr-lcssa.loopexit ]
  %indvars.iv1975.unr = phi i64 [ 1, %.lr.ph1961.ph ], [ %285, %.loopexit.loopexit2030.unr-lcssa.loopexit ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.loopexit, label %.lr.ph1961.epil

.lr.ph1961.epil:                                  ; preds = %.loopexit.loopexit2030.unr-lcssa
  %286 = sub i32 %store_forwarded2024.unr, %store_forwarded2026.unr
  %287 = getelementptr i32, ptr %.unpack1523, i64 %indvars.iv1975.unr
  store i32 %286, ptr %287, align 4, !tbaa !3
  %288 = getelementptr i32, ptr %.unpack1451, i64 %indvars.iv1975.unr
  %289 = load i32, ptr %288, align 4, !tbaa !3
  %290 = getelementptr i32, ptr %.unpack1547, i64 %indvars.iv1975.unr
  store i32 %289, ptr %290, align 4, !tbaa !3
  br label %.loopexit

.loopexit:                                        ; preds = %.lr.ph1961.epil, %.loopexit.loopexit2030.unr-lcssa, %.lr.ph1961.lver.orig, %146, %..loopexit_crit_edge, %246, %138, %._crit_edge1967, %._crit_edge1964
  %.unpack1475 = phi ptr [ %.unpack1475.pre, %..loopexit_crit_edge ], [ %.unpack1547, %246 ], [ %.unpack1788, %138 ], [ %.unpack1788, %._crit_edge1967 ], [ %.unpack1643, %._crit_edge1964 ], [ %.unpack1788, %146 ], [ %.unpack1547, %.lr.ph1961.lver.orig ], [ %.unpack1547, %.loopexit.loopexit2030.unr-lcssa ], [ %.unpack1547, %.lr.ph1961.epil ]
  %.unpack1463 = phi ptr [ %.unpack1463.pre, %..loopexit_crit_edge ], [ %.unpack1523, %246 ], [ %.unpack1764, %138 ], [ %.unpack1764, %._crit_edge1967 ], [ %.unpack1619, %._crit_edge1964 ], [ %.unpack1764, %146 ], [ %.unpack1523, %.lr.ph1961.lver.orig ], [ %.unpack1523, %.loopexit.loopexit2030.unr-lcssa ], [ %.unpack1523, %.lr.ph1961.epil ]
  %291 = load i32, ptr %2, align 4, !tbaa !3
  %292 = add i32 %291, -1
  %293 = sext i32 %292 to i64
  %294 = add nsw i64 %293, -1
  %295 = getelementptr i32, ptr %.unpack1463, i64 %294
  %296 = load i32, ptr %295, align 4, !tbaa !3
  %297 = add nsw i64 %293, -1
  %298 = getelementptr i32, ptr %.unpack1475, i64 %297
  %299 = load i32, ptr %298, align 4, !tbaa !3
  %300 = sub i32 %296, %299
  %301 = call ptr @_FortranAioBeginExternalFormattedOutput(ptr nonnull @_QQcl.28693029, i64 4, ptr null, i32 -1, ptr nonnull @_QQcl.5b813bb8472fa81b8d68b7edbb54a905, i32 51)
  %302 = call i1 @_FortranAioOutputInteger32(ptr %301, i32 %300)
  %303 = call i32 @_FortranAioEndIoStatement(ptr %301)
  %304 = load i32, ptr %2, align 4, !tbaa !3
  %305 = add i32 %304, -1
  %306 = icmp sgt i32 %305, 0
  br i1 %306, label %.lr.ph1971.preheader, label %._crit_edge1972

.lr.ph1971.preheader:                             ; preds = %.loopexit
  %307 = zext i32 %305 to i64
  br label %.lr.ph1971

.lr.ph1971:                                       ; preds = %.lr.ph1971.preheader, %.lr.ph1971
  %indvars.iv1987 = phi i64 [ 1, %.lr.ph1971.preheader ], [ %indvars.iv.next1988, %.lr.ph1971 ]
  %308 = call ptr @_FortranAioBeginExternalFormattedOutput(ptr nonnull @_QQcl.2869302C412C693029, i64 9, ptr null, i32 -1, ptr nonnull @_QQcl.5b813bb8472fa81b8d68b7edbb54a905, i32 53)
  %.unpack1487 = load ptr, ptr @_QFEansx.0, align 8, !tbaa !7
  %309 = add nsw i64 %indvars.iv1987, -1
  %310 = getelementptr i32, ptr %.unpack1487, i64 %309
  %311 = load i32, ptr %310, align 4, !tbaa !3
  %312 = call i1 @_FortranAioOutputInteger32(ptr %308, i32 %311)
  %313 = call i1 @_FortranAioOutputAscii(ptr %308, ptr nonnull @_QQcl.20, i64 1)
  %.unpack1499 = load ptr, ptr @_QFEansy.0, align 8, !tbaa !7
  %314 = add nsw i64 %indvars.iv1987, -1
  %315 = getelementptr i32, ptr %.unpack1499, i64 %314
  %316 = load i32, ptr %315, align 4, !tbaa !3
  %317 = call i1 @_FortranAioOutputInteger32(ptr %308, i32 %316)
  %318 = call i32 @_FortranAioEndIoStatement(ptr %308)
  %indvars.iv.next1988 = add nuw nsw i64 %indvars.iv1987, 1
  %exitcond1990.not = icmp eq i64 %indvars.iv1987, %307
  br i1 %exitcond1990.not, label %._crit_edge1972, label %.lr.ph1971

._crit_edge1972:                                  ; preds = %.lr.ph1971, %.loopexit
  ret void
}

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

.lr.ph54.preheader:                               ; preds = %2
  %4 = sdiv i32 %3, 2
  %5 = add nsw i32 %4, 1
  br label %.lr.ph54

.lr.ph54:                                         ; preds = %.lr.ph54.preheader, %.split49.us
  %.02653 = phi i32 [ %.1, %.split49.us ], [ %5, %.lr.ph54.preheader ]
  %.02752 = phi i32 [ %.128.fr, %.split49.us ], [ %3, %.lr.ph54.preheader ]
  %6 = icmp sgt i32 %.02653, 1
  br i1 %6, label %7, label %13

7:                                                ; preds = %.lr.ph54
  %8 = add nsw i32 %.02653, -1
  %9 = zext i32 %8 to i64
  %10 = add nsw i64 %9, -1
  %11 = getelementptr i32, ptr %1, i64 %10
  %12 = load i32, ptr %11, align 4, !tbaa !3
  br label %22

13:                                               ; preds = %.lr.ph54
  %14 = sext i32 %.02752 to i64
  %15 = add nsw i64 %14, -1
  %16 = getelementptr i32, ptr %1, i64 %15
  %17 = load i32, ptr %16, align 4, !tbaa !3
  %18 = load i32, ptr %1, align 4, !tbaa !3
  store i32 %18, ptr %16, align 4, !tbaa !3
  %19 = add i32 %.02752, -1
  %20 = icmp eq i32 %19, 1
  br i1 %20, label %21, label %22

21:                                               ; preds = %13
  store i32 %17, ptr %1, align 4, !tbaa !3
  br label %.loopexit

22:                                               ; preds = %7, %13
  %.128 = phi i32 [ %.02752, %7 ], [ %19, %13 ]
  %.1 = phi i32 [ %8, %7 ], [ %.02653, %13 ]
  %.0 = phi i32 [ %12, %7 ], [ %17, %13 ]
  %.128.fr = freeze i32 %.128
  %23 = shl i32 %.1, 1
  %.not343643 = icmp sgt i32 %23, %.128.fr
  br i1 %.not343643, label %.split49.us, label %.lr.ph.lr.ph

.lr.ph.lr.ph:                                     ; preds = %22
  %.not34.not = icmp eq i32 %.128.fr, 2147483647
  br i1 %.not34.not, label %.lr.ph.preheader, label %.lr.ph.us

.lr.ph.preheader:                                 ; preds = %.lr.ph.lr.ph
  %.128.fr.le = freeze i32 %.128
  %24 = add i32 %.128.fr.le, 1
  %.not58 = icmp eq i32 %24, 2147483647
  %25 = sext i32 %24 to i64
  %26 = add nsw i64 %25, -1
  %27 = getelementptr i32, ptr %1, i64 %26
  %28 = getelementptr i32, ptr %1, i64 %25
  br label %49

.lr.ph.us:                                        ; preds = %.lr.ph.lr.ph, %.split.us.us
  %.029.ph45.us = phi i32 [ %48, %.split.us.us ], [ %23, %.lr.ph.lr.ph ]
  %.031.ph44.us = phi i32 [ %.130.us.us, %.split.us.us ], [ %.1, %.lr.ph.lr.ph ]
  %29 = icmp slt i32 %.029.ph45.us, %.128.fr
  br i1 %29, label %30, label %39

30:                                               ; preds = %.lr.ph.us
  %31 = sext i32 %.029.ph45.us to i64
  %32 = add nsw i64 %31, -1
  %33 = getelementptr i32, ptr %1, i64 %32
  %34 = load i32, ptr %33, align 4, !tbaa !3
  %35 = getelementptr i32, ptr %1, i64 %31
  %36 = load i32, ptr %35, align 4, !tbaa !3
  %37 = icmp slt i32 %34, %36
  %38 = zext i1 %37 to i32
  %spec.select.us.us = or i32 %.029.ph45.us, %38
  br label %39

39:                                               ; preds = %30, %.lr.ph.us
  %.130.us.us = phi i32 [ %.029.ph45.us, %.lr.ph.us ], [ %spec.select.us.us, %30 ]
  %40 = sext i32 %.130.us.us to i64
  %41 = add nsw i64 %40, -1
  %42 = getelementptr i32, ptr %1, i64 %41
  %43 = load i32, ptr %42, align 4, !tbaa !3
  %44 = icmp slt i32 %.0, %43
  br i1 %44, label %.split.us.us, label %.split49.us

.split.us.us:                                     ; preds = %39
  %45 = sext i32 %.031.ph44.us to i64
  %46 = add nsw i64 %45, -1
  %47 = getelementptr i32, ptr %1, i64 %46
  store i32 %43, ptr %47, align 4, !tbaa !3
  %48 = shl i32 %.130.us.us, 1
  %.not3436.us = icmp sgt i32 %48, %.128.fr
  br i1 %.not3436.us, label %.split49.us, label %.lr.ph.us

49:                                               ; preds = %.split, %.lr.ph.preheader
  %.029.ph45 = phi i32 [ %77, %.split ], [ %23, %.lr.ph.preheader ]
  %.031.ph44 = phi i32 [ %.130.lcssa, %.split ], [ %.1, %.lr.ph.preheader ]
  %50 = sext i32 %.029.ph45 to i64
  %51 = add nsw i64 %50, -1
  %52 = getelementptr i32, ptr %1, i64 %51
  %53 = load i32, ptr %52, align 4, !tbaa !3
  %54 = getelementptr i32, ptr %1, i64 %50
  %55 = load i32, ptr %54, align 4, !tbaa !3
  %56 = icmp slt i32 %53, %55
  %57 = zext i1 %56 to i32
  %spec.select.peel = or i32 %.029.ph45, %57
  %58 = sext i32 %spec.select.peel to i64
  %59 = add nsw i64 %58, -1
  %60 = getelementptr i32, ptr %1, i64 %59
  %61 = load i32, ptr %60, align 4, !tbaa !3
  %62 = icmp slt i32 %.0, %61
  br i1 %62, label %.split, label %.peel.next

.peel.next:                                       ; preds = %49, %68
  br i1 %.not58, label %68, label %63

63:                                               ; preds = %.peel.next
  %64 = load i32, ptr %27, align 4, !tbaa !3
  %65 = load i32, ptr %28, align 4, !tbaa !3
  %66 = icmp slt i32 %64, %65
  %67 = zext i1 %66 to i32
  %spec.select = add nsw i32 %24, %67
  br label %68

68:                                               ; preds = %63, %.peel.next
  %.130 = phi i32 [ 2147483647, %.peel.next ], [ %spec.select, %63 ]
  %69 = sext i32 %.130 to i64
  %70 = add nsw i64 %69, -1
  %71 = getelementptr i32, ptr %1, i64 %70
  %72 = load i32, ptr %71, align 4, !tbaa !3
  %73 = icmp slt i32 %.0, %72
  br i1 %73, label %.split, label %.peel.next, !llvm.loop !13

.split:                                           ; preds = %68, %49
  %.130.lcssa = phi i32 [ %spec.select.peel, %49 ], [ %.130, %68 ]
  %.lcssa = phi i32 [ %61, %49 ], [ %72, %68 ]
  %74 = sext i32 %.031.ph44 to i64
  %75 = add nsw i64 %74, -1
  %76 = getelementptr i32, ptr %1, i64 %75
  store i32 %.lcssa, ptr %76, align 4, !tbaa !3
  %77 = shl i32 %.130.lcssa, 1
  br label %49

.split49.us:                                      ; preds = %.split.us.us, %39, %22
  %.031.ph.lcssa = phi i32 [ %.1, %22 ], [ %.031.ph44.us, %39 ], [ %.130.us.us, %.split.us.us ]
  %78 = sext i32 %.031.ph.lcssa to i64
  %79 = add nsw i64 %78, -1
  %80 = getelementptr i32, ptr %1, i64 %79
  store i32 %.0, ptr %80, align 4, !tbaa !3
  %.not = icmp eq i32 %.128.fr, 1
  br i1 %.not, label %.loopexit, label %.lr.ph54

.loopexit:                                        ; preds = %.split49.us, %2, %21
  ret void
}

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

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

declare i32 @_FortranAioEndIoStatement(ptr) local_unnamed_addr

declare i1 @_FortranAioInputDescriptor(ptr, ptr) local_unnamed_addr

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

declare i1 @_FortranAioOutputInteger32(ptr, i32) 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

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

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