program tak_and_cards
  implicit none
  integer                :: n, a, x(50), lbnd, ubnd, i, j
  integer(8),allocatable :: dp(:,:)
  x = 0
  read(*,*) n, a
  read(*,*) x(1:n)
  x(1:n) = x(1:n) - a
  call merge_sort(x(1:n))
  lbnd = sum(x(1:n),mask=x(1:n)<0)
  ubnd = sum(x(1:n),mask=x(1:n)>0)
  allocate(dp(0:n,lbnd:ubnd))
  dp = 0_8
  dp(0,0) = 1_8
  do j = 1, n
    do i = lbnd, ubnd
      dp(j,i) = dp(j-1,i)
      if ((lbnd.le.i-x(j)).and.(i-x(j).le.ubnd)) then
        dp(j,i) = dp(j,i) + dp(j-1,i-x(j))
      end if 
    end do
  end do
  write(*,'(i0)') dp(n,0)-1_8
  deallocate(dp)
  stop
contains
  subroutine merge_sort(c)
    implicit none
    integer, intent(inout) :: c(:)
    integer                :: n, num, lng, i, ubnd
    n = size(c)
    num = n
    lng = 1
    do while (num.gt.1)
      do i = 1, num/2
        ubnd = min(2*i*lng,n)
        call merge(c(2*(i-1)*lng+1:(2*i-1)*lng),c((2*i-1)*lng+1:ubnd))
      end do
      lng = 2*lng
      num = (num+1)/2
    end do
    return
  end subroutine merge_sort
  subroutine merge(c1,c2)
    implicit none
    integer, intent(inout) :: c1(:), c2(:)
    integer                :: c(size(c1)+size(c2))
    integer                :: i1, i2, n1, n2
    i1 = 1
    i2 = 1
    n1 = size(c1)
    n2 = size(c2)
    do while (i1.le.n1.and.i2.le.n2)
      if (c1(i1).le.c2(i2)) then
        c(i1+i2-1) = c1(i1)
        i1 = i1+1
      else
        c(i1+i2-1) = c2(i2)
        i2 = i2+1
      end if
    end do
    if (i1.le.n1) then
      c(i1+i2-1:n1+n2) = c1(i1:n1)
    else if (i2.le.n2) then
      c(i1+i2-1:n1+n2) = c2(i2:n2)
    end if
    c1 = c(1:n1)
    c2 = c(n1+1:n1+n2)
    return
  end subroutine merge
end program tak_and_cards
; 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"

@_QFEdp = internal unnamed_addr global { ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] } { ptr null, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64), i32 20180515, i8 2, i8 10, i8 2, i8 0, [2 x [3 x i64]] [[3 x i64] [i64 1, i64 0, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)], [3 x i64] [i64 1, i64 0, i64 0]] }
@_QFEx = internal global [50 x i32] undef
@_QQcl.9aaf1ce10b5e354af98bc00c2cffd4de = linkonce constant [73 x i8] c"/home/ubuntu/Downloads/TheStack_IR/Collated/Fortran/Source_7936/source.f\00"
@_QQcl.16373402fa3425c6e46827601abb88fa = linkonce constant [76 x i8] c"array left hand side must be allocated when the right hand side is a scalar\00"
@_QQcl.28693029 = linkonce constant [4 x i8] c"(i0)"
@_QQEnvironmentDefaults = local_unnamed_addr constant ptr null

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

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

; Function Attrs: noreturn
define void @_QQmain() local_unnamed_addr #2 {
  %1 = alloca { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, align 8
  %2 = alloca { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, align 8
  %3 = alloca { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, align 8
  %4 = alloca { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, align 8
  %5 = alloca { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, align 8
  %6 = alloca { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(200) @_QFEx, i8 0, i64 200, i1 false), !tbaa !3
  %9 = tail call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.9aaf1ce10b5e354af98bc00c2cffd4de, i32 6)
  %10 = call i1 @_FortranAioInputInteger(ptr %9, ptr nonnull %8, i32 4)
  %11 = call i1 @_FortranAioInputInteger(ptr %9, ptr nonnull %7, i32 4)
  %12 = call i32 @_FortranAioEndIoStatement(ptr %9)
  %13 = call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.9aaf1ce10b5e354af98bc00c2cffd4de, i32 7)
  %14 = load i32, ptr %8, align 4, !tbaa !3
  %15 = call i32 @llvm.smax.i32(i32 %14, i32 0)
  %16 = zext i32 %15 to i64
  store ptr @_QFEx, ptr %6, align 8, !tbaa !7
  %.fca.1.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %6, 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 %6, 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 %6, 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 %6, 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 %6, 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 %6, 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 %6, 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 %6, i64 0, i32 7, i64 0, i64 1
  store i64 %16, 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 %6, i64 0, i32 7, i64 0, i64 2
  store i64 4, ptr %.fca.7.0.2.gep, align 8, !tbaa !7
  %17 = call i1 @_FortranAioInputDescriptor(ptr %13, ptr nonnull %6)
  %18 = call i32 @_FortranAioEndIoStatement(ptr %13)
  %19 = load i32, ptr %8, align 4, !tbaa !3
  %20 = call i32 @llvm.smax.i32(i32 %19, i32 0)
  %21 = zext i32 %20 to i64
  %22 = load i32, ptr %7, align 4, !tbaa !3
  %.not647 = icmp slt i32 %19, 1
  br i1 %.not647, label %._crit_edge, label %.lr.ph.preheader

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

vector.ph:                                        ; preds = %.lr.ph.preheader
  %n.vec = and i64 %21, 2147483640
  %ind.end = and i64 %21, 7
  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %22, i64 0
  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert669 = insertelement <4 x i32> poison, i32 %22, i64 0
  %broadcast.splat670 = shufflevector <4 x i32> %broadcast.splatinsert669, <4 x i32> poison, <4 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %23 = getelementptr i32, ptr @_QFEx, i64 %index
  %wide.load = load <4 x i32>, ptr %23, align 16, !tbaa !3
  %24 = getelementptr i32, ptr %23, i64 4
  %wide.load668 = load <4 x i32>, ptr %24, align 16, !tbaa !3
  %25 = sub <4 x i32> %wide.load, %broadcast.splat
  %26 = sub <4 x i32> %wide.load668, %broadcast.splat670
  store <4 x i32> %25, ptr %23, align 16, !tbaa !3
  store <4 x i32> %26, ptr %24, align 16, !tbaa !3
  %index.next = add nuw i64 %index, 8
  %27 = icmp eq i64 %index.next, %n.vec
  br i1 %27, label %middle.block, label %vector.body, !llvm.loop !9

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %21
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph.preheader708

.lr.ph.preheader708:                              ; preds = %.lr.ph.preheader, %middle.block
  %.ph709 = phi i64 [ %21, %.lr.ph.preheader ], [ %ind.end, %middle.block ]
  %.ph710 = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec, %middle.block ]
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader708, %.lr.ph
  %28 = phi i64 [ %34, %.lr.ph ], [ %.ph709, %.lr.ph.preheader708 ]
  %29 = phi i64 [ %30, %.lr.ph ], [ %.ph710, %.lr.ph.preheader708 ]
  %30 = add nuw nsw i64 %29, 1
  %31 = getelementptr i32, ptr @_QFEx, i64 %29
  %32 = load i32, ptr %31, align 4, !tbaa !3
  %33 = sub i32 %32, %22
  store i32 %33, ptr %31, align 4, !tbaa !3
  %34 = add nsw i64 %28, -1
  %35 = icmp ugt i64 %28, 1
  br i1 %35, label %.lr.ph, label %._crit_edge, !llvm.loop !12

._crit_edge:                                      ; preds = %.lr.ph, %middle.block, %0
  store ptr @_QFEx, ptr %5, align 8, !tbaa !7
  %.fca.1.gep17 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %5, i64 0, i32 1
  store i64 4, ptr %.fca.1.gep17, align 8, !tbaa !7
  %.fca.2.gep19 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %5, i64 0, i32 2
  store i32 20180515, ptr %.fca.2.gep19, align 8, !tbaa !7
  %.fca.3.gep21 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %5, i64 0, i32 3
  store i8 1, ptr %.fca.3.gep21, align 4, !tbaa !7
  %.fca.4.gep23 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %5, i64 0, i32 4
  store i8 9, ptr %.fca.4.gep23, align 1, !tbaa !7
  %.fca.5.gep25 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %5, i64 0, i32 5
  store i8 0, ptr %.fca.5.gep25, align 2, !tbaa !7
  %.fca.6.gep27 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %5, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep27, align 1, !tbaa !7
  %.fca.7.0.0.gep29 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %5, i64 0, i32 7, i64 0, i64 0
  store i64 1, ptr %.fca.7.0.0.gep29, align 8, !tbaa !7
  %.fca.7.0.1.gep31 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %5, i64 0, i32 7, i64 0, i64 1
  store i64 %21, ptr %.fca.7.0.1.gep31, align 8, !tbaa !7
  %.fca.7.0.2.gep33 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %5, i64 0, i32 7, i64 0, i64 2
  store i64 4, ptr %.fca.7.0.2.gep33, align 8, !tbaa !7
  call void @_QFPmerge_sort(ptr nonnull %5)
  %36 = load i32, ptr %8, align 4, !tbaa !3
  %37 = call i32 @llvm.smax.i32(i32 %36, i32 0)
  %38 = zext i32 %37 to i64
  store ptr @_QFEx, ptr %4, align 8, !tbaa !7
  %.fca.1.gep37 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %4, i64 0, i32 1
  store i64 4, ptr %.fca.1.gep37, align 8, !tbaa !7
  %.fca.2.gep39 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %4, i64 0, i32 2
  store i32 20180515, ptr %.fca.2.gep39, align 8, !tbaa !7
  %.fca.3.gep41 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %4, i64 0, i32 3
  store i8 1, ptr %.fca.3.gep41, align 4, !tbaa !7
  %.fca.4.gep43 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %4, i64 0, i32 4
  store i8 9, ptr %.fca.4.gep43, align 1, !tbaa !7
  %.fca.5.gep45 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %4, i64 0, i32 5
  store i8 0, ptr %.fca.5.gep45, align 2, !tbaa !7
  %.fca.6.gep47 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %4, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep47, align 1, !tbaa !7
  %.fca.7.0.0.gep49 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %4, i64 0, i32 7, i64 0, i64 0
  store i64 1, ptr %.fca.7.0.0.gep49, align 8, !tbaa !7
  %.fca.7.0.1.gep51 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %4, i64 0, i32 7, i64 0, i64 1
  store i64 %38, ptr %.fca.7.0.1.gep51, align 8, !tbaa !7
  %.fca.7.0.2.gep53 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %4, i64 0, i32 7, i64 0, i64 2
  store i64 4, ptr %.fca.7.0.2.gep53, align 8, !tbaa !7
  %39 = shl nuw nsw i64 %38, 2
  %40 = call ptr @malloc(i64 %39)
  %.not648 = icmp slt i32 %36, 1
  br i1 %.not648, label %._crit_edge637, label %.lr.ph636.preheader

.lr.ph636.preheader:                              ; preds = %._crit_edge
  %min.iters.check674 = icmp ult i32 %37, 8
  br i1 %min.iters.check674, label %.lr.ph636.preheader705, label %vector.ph675

vector.ph675:                                     ; preds = %.lr.ph636.preheader
  %n.vec677 = and i64 %38, 2147483640
  %ind.end678 = and i64 %38, 7
  br label %vector.body682

vector.body682:                                   ; preds = %vector.body682, %vector.ph675
  %index683 = phi i64 [ 0, %vector.ph675 ], [ %index.next686, %vector.body682 ]
  %41 = getelementptr i32, ptr @_QFEx, i64 %index683
  %wide.load684 = load <4 x i32>, ptr %41, align 16, !tbaa !3
  %42 = getelementptr i32, ptr %41, i64 4
  %wide.load685 = load <4 x i32>, ptr %42, align 16, !tbaa !3
  %43 = lshr <4 x i32> %wide.load684, <i32 31, i32 31, i32 31, i32 31>
  %44 = lshr <4 x i32> %wide.load685, <i32 31, i32 31, i32 31, i32 31>
  %45 = getelementptr i32, ptr %40, i64 %index683
  store <4 x i32> %43, ptr %45, align 4, !tbaa !3
  %46 = getelementptr i32, ptr %45, i64 4
  store <4 x i32> %44, ptr %46, align 4, !tbaa !3
  %index.next686 = add nuw i64 %index683, 8
  %47 = icmp eq i64 %index.next686, %n.vec677
  br i1 %47, label %middle.block672, label %vector.body682, !llvm.loop !13

middle.block672:                                  ; preds = %vector.body682
  %cmp.n681 = icmp eq i64 %n.vec677, %38
  br i1 %cmp.n681, label %._crit_edge637, label %.lr.ph636.preheader705

.lr.ph636.preheader705:                           ; preds = %.lr.ph636.preheader, %middle.block672
  %.ph706 = phi i64 [ %38, %.lr.ph636.preheader ], [ %ind.end678, %middle.block672 ]
  %.ph707 = phi i64 [ 0, %.lr.ph636.preheader ], [ %n.vec677, %middle.block672 ]
  br label %.lr.ph636

.lr.ph636:                                        ; preds = %.lr.ph636.preheader705, %.lr.ph636
  %48 = phi i64 [ %54, %.lr.ph636 ], [ %.ph706, %.lr.ph636.preheader705 ]
  %49 = phi i64 [ %50, %.lr.ph636 ], [ %.ph707, %.lr.ph636.preheader705 ]
  %50 = add nuw nsw i64 %49, 1
  %51 = getelementptr i32, ptr @_QFEx, i64 %49
  %52 = load i32, ptr %51, align 4, !tbaa !3
  %.lobit = lshr i32 %52, 31
  %53 = getelementptr i32, ptr %40, i64 %49
  store i32 %.lobit, ptr %53, align 4, !tbaa !3
  %54 = add nsw i64 %48, -1
  %55 = icmp ugt i64 %48, 1
  br i1 %55, label %.lr.ph636, label %._crit_edge637, !llvm.loop !14

._crit_edge637:                                   ; preds = %.lr.ph636, %middle.block672, %._crit_edge
  store ptr %40, ptr %3, align 8, !tbaa !7
  %.fca.1.gep57 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 1
  store i64 4, ptr %.fca.1.gep57, align 8, !tbaa !7
  %.fca.2.gep59 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 2
  store i32 20180515, ptr %.fca.2.gep59, align 8, !tbaa !7
  %.fca.3.gep61 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 3
  store i8 1, ptr %.fca.3.gep61, align 4, !tbaa !7
  %.fca.4.gep63 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 4
  store i8 14, ptr %.fca.4.gep63, align 1, !tbaa !7
  %.fca.5.gep65 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 5
  store i8 0, ptr %.fca.5.gep65, align 2, !tbaa !7
  %.fca.6.gep67 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep67, align 1, !tbaa !7
  %.fca.7.0.0.gep69 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 7, i64 0, i64 0
  store i64 1, ptr %.fca.7.0.0.gep69, align 8, !tbaa !7
  %.fca.7.0.1.gep71 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 7, i64 0, i64 1
  store i64 %38, ptr %.fca.7.0.1.gep71, align 8, !tbaa !7
  %.fca.7.0.2.gep73 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 7, i64 0, i64 2
  store i64 4, ptr %.fca.7.0.2.gep73, align 8, !tbaa !7
  %56 = call i32 @_FortranASumInteger4(ptr nonnull %4, ptr nonnull @_QQcl.9aaf1ce10b5e354af98bc00c2cffd4de, i32 10, i32 0, ptr nonnull %3)
  call void @free(ptr %40)
  %57 = load i32, ptr %8, align 4, !tbaa !3
  %58 = call i32 @llvm.smax.i32(i32 %57, i32 0)
  %59 = zext i32 %58 to i64
  store ptr @_QFEx, ptr %2, align 8, !tbaa !7
  %.fca.1.gep77 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 1
  store i64 4, ptr %.fca.1.gep77, align 8, !tbaa !7
  %.fca.2.gep79 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 2
  store i32 20180515, ptr %.fca.2.gep79, align 8, !tbaa !7
  %.fca.3.gep81 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 3
  store i8 1, ptr %.fca.3.gep81, align 4, !tbaa !7
  %.fca.4.gep83 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 4
  store i8 9, ptr %.fca.4.gep83, align 1, !tbaa !7
  %.fca.5.gep85 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 5
  store i8 0, ptr %.fca.5.gep85, align 2, !tbaa !7
  %.fca.6.gep87 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep87, align 1, !tbaa !7
  %.fca.7.0.0.gep89 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 7, i64 0, i64 0
  store i64 1, ptr %.fca.7.0.0.gep89, align 8, !tbaa !7
  %.fca.7.0.1.gep91 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 7, i64 0, i64 1
  store i64 %59, ptr %.fca.7.0.1.gep91, align 8, !tbaa !7
  %.fca.7.0.2.gep93 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 7, i64 0, i64 2
  store i64 4, ptr %.fca.7.0.2.gep93, align 8, !tbaa !7
  %60 = shl nuw nsw i64 %59, 2
  %61 = call ptr @malloc(i64 %60)
  %.not649 = icmp slt i32 %57, 1
  br i1 %.not649, label %._crit_edge640, label %.lr.ph639.preheader

.lr.ph639.preheader:                              ; preds = %._crit_edge637
  %min.iters.check690 = icmp ult i32 %58, 8
  br i1 %min.iters.check690, label %.lr.ph639.preheader703, label %vector.ph691

vector.ph691:                                     ; preds = %.lr.ph639.preheader
  %n.vec693 = and i64 %59, 2147483640
  %ind.end694 = and i64 %59, 7
  br label %vector.body698

vector.body698:                                   ; preds = %vector.body698, %vector.ph691
  %index699 = phi i64 [ 0, %vector.ph691 ], [ %index.next702, %vector.body698 ]
  %62 = getelementptr i32, ptr @_QFEx, i64 %index699
  %wide.load700 = load <4 x i32>, ptr %62, align 16, !tbaa !3
  %63 = getelementptr i32, ptr %62, i64 4
  %wide.load701 = load <4 x i32>, ptr %63, align 16, !tbaa !3
  %64 = icmp sgt <4 x i32> %wide.load700, zeroinitializer
  %65 = icmp sgt <4 x i32> %wide.load701, zeroinitializer
  %66 = zext <4 x i1> %64 to <4 x i32>
  %67 = zext <4 x i1> %65 to <4 x i32>
  %68 = getelementptr i32, ptr %61, i64 %index699
  store <4 x i32> %66, ptr %68, align 4, !tbaa !3
  %69 = getelementptr i32, ptr %68, i64 4
  store <4 x i32> %67, ptr %69, align 4, !tbaa !3
  %index.next702 = add nuw i64 %index699, 8
  %70 = icmp eq i64 %index.next702, %n.vec693
  br i1 %70, label %middle.block688, label %vector.body698, !llvm.loop !15

middle.block688:                                  ; preds = %vector.body698
  %cmp.n697 = icmp eq i64 %n.vec693, %59
  br i1 %cmp.n697, label %._crit_edge640, label %.lr.ph639.preheader703

.lr.ph639.preheader703:                           ; preds = %.lr.ph639.preheader, %middle.block688
  %.ph = phi i64 [ %59, %.lr.ph639.preheader ], [ %ind.end694, %middle.block688 ]
  %.ph704 = phi i64 [ 0, %.lr.ph639.preheader ], [ %n.vec693, %middle.block688 ]
  br label %.lr.ph639

.lr.ph639:                                        ; preds = %.lr.ph639.preheader703, %.lr.ph639
  %71 = phi i64 [ %79, %.lr.ph639 ], [ %.ph, %.lr.ph639.preheader703 ]
  %72 = phi i64 [ %73, %.lr.ph639 ], [ %.ph704, %.lr.ph639.preheader703 ]
  %73 = add nuw nsw i64 %72, 1
  %74 = getelementptr i32, ptr @_QFEx, i64 %72
  %75 = load i32, ptr %74, align 4, !tbaa !3
  %76 = icmp sgt i32 %75, 0
  %77 = zext i1 %76 to i32
  %78 = getelementptr i32, ptr %61, i64 %72
  store i32 %77, ptr %78, align 4, !tbaa !3
  %79 = add nsw i64 %71, -1
  %80 = icmp ugt i64 %71, 1
  br i1 %80, label %.lr.ph639, label %._crit_edge640, !llvm.loop !16

._crit_edge640:                                   ; preds = %.lr.ph639, %middle.block688, %._crit_edge637
  store ptr %61, ptr %1, align 8, !tbaa !7
  %.fca.1.gep97 = 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.gep97, align 8, !tbaa !7
  %.fca.2.gep99 = 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.gep99, align 8, !tbaa !7
  %.fca.3.gep101 = 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.gep101, align 4, !tbaa !7
  %.fca.4.gep103 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 4
  store i8 14, ptr %.fca.4.gep103, align 1, !tbaa !7
  %.fca.5.gep105 = 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.gep105, align 2, !tbaa !7
  %.fca.6.gep107 = 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.gep107, align 1, !tbaa !7
  %.fca.7.0.0.gep109 = 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.gep109, align 8, !tbaa !7
  %.fca.7.0.1.gep111 = 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 %59, ptr %.fca.7.0.1.gep111, align 8, !tbaa !7
  %.fca.7.0.2.gep113 = 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.gep113, align 8, !tbaa !7
  %81 = call i32 @_FortranASumInteger4(ptr nonnull %2, ptr nonnull @_QQcl.9aaf1ce10b5e354af98bc00c2cffd4de, i32 11, i32 0, ptr nonnull %1)
  call void @free(ptr %61)
  %82 = load i32, ptr %8, align 4, !tbaa !3
  %83 = sext i32 %56 to i64
  %84 = sext i32 %81 to i64
  %85 = sub nsw i64 %84, %83
  %86 = add nsw i64 %85, 1
  %87 = call i32 @llvm.smax.i32(i32 %82, i32 -1)
  %88 = sext i32 %87 to i64
  %.neg = xor i64 %88, -1
  %89 = add nsw i64 %88, 1
  %90 = call i64 @llvm.smax.i64(i64 %86, i64 0)
  %91 = shl nuw nsw i64 %89, 3
  %92 = mul i64 %91, %90
  %93 = call ptr @malloc(i64 %92)
  %94 = icmp eq i64 %89, 0
  %95 = zext i1 %94 to i64
  %96 = icmp slt i64 %85, 0
  %97 = select i1 %96, i64 1, i64 %83
  store ptr %93, ptr @_QFEdp, align 16, !tbaa !7
  store i64 8, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 1), align 8, !tbaa !7
  store i32 20180515, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 2), align 16, !tbaa !7
  store i8 2, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 3), align 4, !tbaa !7
  store i8 10, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 4), align 1, !tbaa !7
  store i8 2, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 5), align 2, !tbaa !7
  store i8 0, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 6), align 1, !tbaa !7
  store i64 %95, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 7), align 8, !tbaa !7
  store i64 %89, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 7, i64 0, i64 1), align 16, !tbaa !7
  store i64 8, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 7, i64 0, i64 2), align 8, !tbaa !7
  store i64 %97, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 7, i64 1), align 16, !tbaa !7
  store i64 %90, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 7, i64 1, i64 1), align 8, !tbaa !7
  store i64 %91, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 7, i64 1, i64 2), align 16, !tbaa !7
  %.not = icmp eq ptr %93, null
  br i1 %.not, label %106, label %.preheader634

.preheader634:                                    ; preds = %._crit_edge640
  br i1 %96, label %._crit_edge643, label %.preheader633.lr.ph

.preheader633.lr.ph:                              ; preds = %.preheader634
  %98 = icmp sgt i32 %82, -1
  br i1 %98, label %.preheader633.us.preheader, label %._crit_edge643.thread

._crit_edge643.thread:                            ; preds = %.preheader633.lr.ph
  %.neg661665 = mul nsw i64 %97, %.neg
  %.neg662666 = sub nsw i64 %.neg661665, %95
  %99 = getelementptr i64, ptr %93, i64 %.neg662666
  store i64 1, ptr %99, align 8, !tbaa !3
  br label %._crit_edge646

.preheader633.us.preheader:                       ; preds = %.preheader633.lr.ph
  %100 = add nsw i64 %88, 2
  %smin = call i64 @llvm.smin.i64(i64 %89, i64 1)
  %101 = sub nuw nsw i64 %100, %smin
  %102 = call i64 @llvm.smin.i64(i64 %90, i64 1)
  %smin653 = add nuw nsw i64 %102, 2305843009213693951
  %103 = sub nsw i64 %90, %smin653
  %104 = mul i64 %101, %103
  %105 = shl i64 %104, 3
  call void @llvm.memset.p0.i64(ptr nonnull align 8 %93, i8 0, i64 %105, i1 false), !tbaa !3
  br label %._crit_edge643

106:                                              ; preds = %._crit_edge640
  %107 = call {} @_FortranAReportFatalUserError(ptr nonnull @_QQcl.16373402fa3425c6e46827601abb88fa, ptr nonnull @_QQcl.9aaf1ce10b5e354af98bc00c2cffd4de, i32 13)
  %.pre.pre = load i32, ptr %8, align 4, !tbaa !3
  %.unpack611.unpack612.unpack.pre = load i64, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 7, i64 1), align 16, !tbaa !7
  %.unpack611.unpack.unpack.pre = load i64, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 7), align 8, !tbaa !7
  %108 = select i1 %94, i64 1, i64 %.unpack611.unpack.unpack.pre
  %109 = select i1 %96, i64 1, i64 %.unpack611.unpack612.unpack.pre
  store ptr %93, ptr @_QFEdp, align 16, !tbaa !7
  store i64 8, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 1), align 8, !tbaa !7
  store i32 20180515, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 2), align 16, !tbaa !7
  store i8 2, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 3), align 4, !tbaa !7
  store i8 10, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 4), align 1, !tbaa !7
  store i8 2, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 5), align 2, !tbaa !7
  store i8 0, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 6), align 1, !tbaa !7
  store i64 %108, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 7), align 8, !tbaa !7
  store i64 %89, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 7, i64 0, i64 1), align 16, !tbaa !7
  store i64 8, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 7, i64 0, i64 2), align 8, !tbaa !7
  store i64 %109, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 7, i64 1), align 16, !tbaa !7
  store i64 %90, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 7, i64 1, i64 1), align 8, !tbaa !7
  store i64 %91, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 7, i64 1, i64 2), align 16, !tbaa !7
  br label %._crit_edge643

._crit_edge643:                                   ; preds = %.preheader634, %.preheader633.us.preheader, %106
  %110 = phi i32 [ %.pre.pre, %106 ], [ %82, %.preheader633.us.preheader ], [ %82, %.preheader634 ]
  %.unpack531.unpack532.unpack = phi i64 [ %109, %106 ], [ %83, %.preheader633.us.preheader ], [ 1, %.preheader634 ]
  %.unpack531.unpack.unpack = phi i64 [ %108, %106 ], [ %95, %.preheader633.us.preheader ], [ %95, %.preheader634 ]
  %.neg661 = mul i64 %.unpack531.unpack532.unpack, %.neg
  %.neg662 = sub i64 %.neg661, %.unpack531.unpack.unpack
  %111 = getelementptr i64, ptr %93, i64 %.neg662
  store i64 1, ptr %111, align 8, !tbaa !3
  %112 = icmp sgt i32 %110, 0
  %113 = icmp sgt i64 %85, -1
  %or.cond = select i1 %112, i1 %113, i1 false
  br i1 %or.cond, label %.preheader.us.preheader, label %._crit_edge646

.preheader.us.preheader:                          ; preds = %._crit_edge643
  %114 = zext i32 %110 to i64
  br label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.us.preheader, %._crit_edge645.us
  %indvars.iv = phi i64 [ 1, %.preheader.us.preheader ], [ %indvars.iv.next, %._crit_edge645.us ]
  %115 = add nsw i64 %indvars.iv, -1
  %116 = sub i64 %115, %.unpack531.unpack.unpack
  %117 = sub i64 %indvars.iv, %.unpack531.unpack.unpack
  %118 = getelementptr [50 x i32], ptr @_QFEx, i64 0, i64 %115
  %.pre659 = load i32, ptr %118, align 4, !tbaa !3
  br label %119

119:                                              ; preds = %.preheader.us, %142
  %120 = phi i64 [ %86, %.preheader.us ], [ %144, %142 ]
  %121 = phi i32 [ %56, %.preheader.us ], [ %143, %142 ]
  %122 = sext i32 %121 to i64
  %123 = sub i64 %122, %.unpack531.unpack532.unpack
  %124 = mul i64 %123, %89
  %125 = add i64 %124, %116
  %126 = getelementptr i64, ptr %93, i64 %125
  %127 = load i64, ptr %126, align 8, !tbaa !3
  %128 = add i64 %117, %124
  %129 = getelementptr i64, ptr %93, i64 %128
  store i64 %127, ptr %129, align 8, !tbaa !3
  %130 = sub i32 %121, %.pre659
  %131 = icmp sle i32 %56, %130
  %132 = icmp sle i32 %130, %81
  %133 = and i1 %131, %132
  br i1 %133, label %134, label %142

134:                                              ; preds = %119
  %135 = sext i32 %130 to i64
  %136 = sub i64 %135, %.unpack531.unpack532.unpack
  %137 = mul i64 %136, %89
  %138 = add i64 %137, %116
  %139 = getelementptr i64, ptr %93, i64 %138
  %140 = load i64, ptr %139, align 8, !tbaa !3
  %141 = add i64 %140, %127
  store i64 %141, ptr %129, align 8, !tbaa !3
  br label %142

142:                                              ; preds = %134, %119
  %143 = add i32 %121, 1
  %144 = add nsw i64 %120, -1
  %145 = icmp sgt i64 %120, 1
  br i1 %145, label %119, label %._crit_edge645.us

._crit_edge645.us:                                ; preds = %142
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv, %114
  br i1 %exitcond.not, label %._crit_edge646, label %.preheader.us

._crit_edge646:                                   ; preds = %._crit_edge645.us, %._crit_edge643.thread, %._crit_edge643
  %146 = call ptr @_FortranAioBeginExternalFormattedOutput(ptr nonnull @_QQcl.28693029, i64 4, ptr null, i32 -1, ptr nonnull @_QQcl.9aaf1ce10b5e354af98bc00c2cffd4de, i32 23)
  %.unpack540 = load ptr, ptr @_QFEdp, align 16, !tbaa !7
  %.unpack547.unpack.unpack = load i64, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 7), align 8, !tbaa !7
  %.unpack547.unpack.unpack550 = load i64, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 7, i64 0, i64 1), align 16, !tbaa !7
  %.unpack547.unpack548.unpack = load i64, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 7, i64 1), align 16, !tbaa !7
  %147 = load i32, ptr %8, align 4, !tbaa !3
  %148 = sext i32 %147 to i64
  %149 = mul i64 %.unpack547.unpack548.unpack, %.unpack547.unpack.unpack550
  %150 = add i64 %149, %.unpack547.unpack.unpack
  %151 = sub i64 %148, %150
  %152 = getelementptr i64, ptr %.unpack540, i64 %151
  %153 = load i64, ptr %152, align 8, !tbaa !3
  %154 = add i64 %153, -1
  %155 = call i1 @_FortranAioOutputInteger64(ptr %146, i64 %154)
  %156 = call i32 @_FortranAioEndIoStatement(ptr %146)
  %.unpack556 = load ptr, ptr @_QFEdp, align 16, !tbaa !7
  call void @free(ptr %.unpack556)
  store ptr null, ptr @_QFEdp, align 16, !tbaa !7
  store i64 8, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 1), align 8, !tbaa !7
  store i32 20180515, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 2), align 16, !tbaa !7
  store i8 2, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 3), align 4, !tbaa !7
  store i8 10, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 4), align 1, !tbaa !7
  store i8 2, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 5), align 2, !tbaa !7
  store i8 0, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 6), align 1, !tbaa !7
  store i64 1, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 7), align 8, !tbaa !7
  store i64 0, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 7, i64 0, i64 1), align 16, !tbaa !7
  store i64 8, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 7, i64 0, i64 2), align 8, !tbaa !7
  store i64 1, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 7, i64 1), align 16, !tbaa !7
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [2 x [3 x i64]] }, ptr @_QFEdp, i64 0, i32 7, i64 1, i64 1), i8 0, i64 16, i1 false)
  %157 = call {} @_FortranAStopStatement(i32 0, i1 false, i1 false)
  unreachable
}

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

.lr.ph37:                                         ; preds = %1
  %8 = getelementptr { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 7, i64 0, i64 2
  %.fca.1.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 1
  %.fca.2.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 2
  %.fca.3.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 3
  %.fca.4.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 4
  %.fca.5.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 5
  %.fca.6.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 6
  %.fca.7.0.0.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 7, i64 0, i64 0
  %.fca.7.0.1.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 7, i64 0, i64 1
  %.fca.7.0.2.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 7, i64 0, i64 2
  %.fca.1.gep15 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 1
  %.fca.2.gep17 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 2
  %.fca.3.gep19 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 3
  %.fca.4.gep21 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 4
  %.fca.5.gep23 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 5
  %.fca.6.gep25 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 6
  %.fca.7.0.0.gep27 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 7, i64 0, i64 0
  %.fca.7.0.1.gep29 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 7, i64 0, i64 1
  %.fca.7.0.2.gep31 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 7, i64 0, i64 2
  br label %9

9:                                                ; preds = %.lr.ph37, %._crit_edge
  %.035 = phi i32 [ %6, %.lr.ph37 ], [ %47, %._crit_edge ]
  %.03234 = phi i32 [ 1, %.lr.ph37 ], [ %45, %._crit_edge ]
  %.not = icmp ult i32 %.035, 2
  br i1 %.not, label %._crit_edge38, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %9
  %10 = lshr i32 %.035, 1
  %11 = zext i32 %10 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 ]
  %12 = phi i64 [ %11, %.lr.ph.preheader ], [ %43, %.lr.ph ]
  %13 = shl nuw i64 %indvars.iv, 1
  %14 = trunc i64 %13 to i32
  %15 = mul i32 %.03234, %14
  %16 = tail call i32 @llvm.smin.i32(i32 %15, i32 %6)
  %17 = trunc i64 %13 to i32
  %18 = add i32 %17, -2
  %19 = mul i32 %18, %.03234
  %20 = or i32 %19, 1
  %21 = sext i32 %20 to i64
  %22 = trunc i64 %13 to i32
  %23 = add i32 %22, -1
  %24 = mul i32 %23, %.03234
  %25 = sext i32 %24 to i64
  %26 = load i64, ptr %8, align 8, !tbaa !7
  %27 = load ptr, ptr %0, align 8, !tbaa !7
  %28 = add nsw i64 %21, -1
  %29 = mul i64 %26, %28
  %30 = getelementptr i8, ptr %27, i64 %29
  %31 = sub nsw i64 %25, %21
  %32 = tail call i64 @llvm.smax.i64(i64 %31, i64 -1)
  %33 = add nsw i64 %32, 1
  store ptr %30, ptr %3, align 8, !tbaa !7
  store i64 4, ptr %.fca.1.gep, align 8, !tbaa !7
  store i32 20180515, ptr %.fca.2.gep, align 8, !tbaa !7
  store i8 1, ptr %.fca.3.gep, align 4, !tbaa !7
  store i8 9, ptr %.fca.4.gep, align 1, !tbaa !7
  store i8 0, ptr %.fca.5.gep, align 2, !tbaa !7
  store i8 0, ptr %.fca.6.gep, align 1, !tbaa !7
  store i64 1, ptr %.fca.7.0.0.gep, align 8, !tbaa !7
  store i64 %33, ptr %.fca.7.0.1.gep, align 8, !tbaa !7
  store i64 %26, ptr %.fca.7.0.2.gep, align 8, !tbaa !7
  %34 = add i32 %24, 1
  %35 = sext i32 %34 to i64
  %36 = sext i32 %16 to i64
  %37 = add nsw i64 %35, -1
  %38 = mul i64 %26, %37
  %39 = getelementptr i8, ptr %27, i64 %38
  %40 = sub nsw i64 %36, %35
  %41 = tail call i64 @llvm.smax.i64(i64 %40, i64 -1)
  %42 = add nsw i64 %41, 1
  store ptr %39, ptr %2, align 8, !tbaa !7
  store i64 4, ptr %.fca.1.gep15, align 8, !tbaa !7
  store i32 20180515, ptr %.fca.2.gep17, align 8, !tbaa !7
  store i8 1, ptr %.fca.3.gep19, align 4, !tbaa !7
  store i8 9, ptr %.fca.4.gep21, align 1, !tbaa !7
  store i8 0, ptr %.fca.5.gep23, align 2, !tbaa !7
  store i8 0, ptr %.fca.6.gep25, align 1, !tbaa !7
  store i64 1, ptr %.fca.7.0.0.gep27, align 8, !tbaa !7
  store i64 %42, ptr %.fca.7.0.1.gep29, align 8, !tbaa !7
  store i64 %26, ptr %.fca.7.0.2.gep31, align 8, !tbaa !7
  call void @_QFPmerge(ptr nonnull %3, ptr nonnull %2)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %43 = add nsw i64 %12, -1
  %44 = icmp ugt i64 %12, 1
  br i1 %44, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph
  %45 = shl i32 %.03234, 1
  %46 = add i32 %.035, 1
  %47 = lshr i32 %46, 1
  %48 = icmp sgt i32 %46, 3
  br i1 %48, label %9, label %._crit_edge38

._crit_edge38:                                    ; preds = %9, %._crit_edge, %1
  ret void
}

; Function Attrs: nofree nosync nounwind memory(readwrite, inaccessiblemem: none)
define void @_QFPmerge(ptr nocapture readonly %0, ptr nocapture readonly %1) local_unnamed_addr #3 {
  %3 = getelementptr { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 7, i64 0, i64 1
  %4 = load i64, ptr %3, align 8, !tbaa !7
  %5 = trunc i64 %4 to i32
  %6 = getelementptr { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 7, i64 0, i64 1
  %7 = load i64, ptr %6, align 8, !tbaa !7
  %8 = trunc i64 %7 to i32
  %9 = add i64 %7, %4
  %sext = shl i64 %9, 32
  %10 = ashr exact i64 %sext, 32
  %11 = tail call i64 @llvm.smax.i64(i64 %10, i64 0)
  %12 = alloca i32, i64 %11, align 4
  %13 = icmp sgt i32 %8, 0
  %14 = icmp sgt i32 %5, 0
  %15 = and i1 %13, %14
  br i1 %15, label %.lr.ph.lr.ph, label %.outer._crit_edge

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

.lr.ph.split.preheader:                           ; preds = %.outer, %.lr.ph.lr.ph
  %.0.ph61 = phi i32 [ 1, %.lr.ph.lr.ph ], [ %.041, %.outer ]
  %.027.ph60 = phi i32 [ 1, %.lr.ph.lr.ph ], [ %39, %.outer ]
  %22 = sext i32 %.027.ph60 to i64
  %23 = add nsw i64 %22, -1
  %24 = mul i64 %21, %23
  %25 = getelementptr i8, ptr %19, i64 %24
  %26 = load i32, ptr %25, align 4, !tbaa !3
  %27 = add i32 %.027.ph60, -1
  br label %.lr.ph.split

.lr.ph.split:                                     ; preds = %.lr.ph.split.preheader, %37
  %.041 = phi i32 [ %38, %37 ], [ %.0.ph61, %.lr.ph.split.preheader ]
  %28 = sext i32 %.041 to i64
  %29 = add nsw i64 %28, -1
  %30 = mul i64 %18, %29
  %31 = getelementptr i8, ptr %16, i64 %30
  %32 = load i32, ptr %31, align 4, !tbaa !3
  %.not = icmp sgt i32 %32, %26
  %33 = add i32 %27, %.041
  %34 = sext i32 %33 to i64
  %35 = add nsw i64 %34, -1
  %36 = getelementptr i32, ptr %12, i64 %35
  br i1 %.not, label %.outer, label %37

37:                                               ; preds = %.lr.ph.split
  store i32 %32, ptr %36, align 4, !tbaa !3
  %38 = add i32 %.041, 1
  %.not93 = icmp sgt i32 %38, %5
  br i1 %.not93, label %.thread, label %.lr.ph.split

.outer:                                           ; preds = %.lr.ph.split
  store i32 %26, ptr %36, align 4, !tbaa !3
  %39 = add i32 %.027.ph60, 1
  %40 = icmp sle i32 %39, %8
  %41 = icmp sle i32 %.041, %5
  %42 = and i1 %40, %41
  br i1 %42, label %.lr.ph.split.preheader, label %.outer._crit_edge

.outer._crit_edge:                                ; preds = %.outer, %2
  %.027.ph.lcssa = phi i32 [ 1, %2 ], [ %39, %.outer ]
  %.0.lcssa = phi i32 [ 1, %2 ], [ %.041, %.outer ]
  %.lcssa37 = phi i1 [ %14, %2 ], [ %41, %.outer ]
  %.lcssa = phi i1 [ %13, %2 ], [ %40, %.outer ]
  br i1 %.lcssa37, label %43, label %67

43:                                               ; preds = %.outer._crit_edge
  %44 = add i32 %.027.ph.lcssa, -1
  %45 = add i32 %44, %.0.lcssa
  %46 = sext i32 %45 to i64
  %47 = sub nsw i64 %10, %46
  %48 = sext i32 %.0.lcssa to i64
  %49 = icmp sgt i64 %47, -1
  br i1 %49, label %.lr.ph69, label %.loopexit

.lr.ph69:                                         ; preds = %43
  %50 = add nuw nsw i64 %47, 1
  %51 = getelementptr { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 7, i64 0, i64 2
  %52 = load i64, ptr %51, align 8, !tbaa !7
  %53 = load ptr, ptr %0, align 8, !tbaa !7
  br label %54

54:                                               ; preds = %.lr.ph69, %54
  %55 = phi i64 [ %50, %.lr.ph69 ], [ %65, %54 ]
  %56 = phi i64 [ 0, %.lr.ph69 ], [ %57, %54 ]
  %57 = add nuw nsw i64 %56, 1
  %58 = add nsw i64 %56, -1
  %59 = add nsw i64 %58, %48
  %60 = mul i64 %52, %59
  %61 = getelementptr i8, ptr %53, i64 %60
  %62 = load i32, ptr %61, align 4, !tbaa !3
  %63 = add nsw i64 %58, %46
  %64 = getelementptr i32, ptr %12, i64 %63
  store i32 %62, ptr %64, align 4, !tbaa !3
  %65 = add nsw i64 %55, -1
  %66 = icmp ugt i64 %55, 1
  br i1 %66, label %54, label %.loopexit

67:                                               ; preds = %.outer._crit_edge
  br i1 %.lcssa, label %.thread, label %.loopexit

.thread:                                          ; preds = %37, %67
  %.027.ph.lcssa98105 = phi i32 [ %.027.ph.lcssa, %67 ], [ %.027.ph60, %37 ]
  %.0.lcssa99104 = phi i32 [ %.0.lcssa, %67 ], [ %38, %37 ]
  %68 = add i32 %.027.ph.lcssa98105, -1
  %69 = add i32 %68, %.0.lcssa99104
  %70 = sext i32 %69 to i64
  %71 = sub nsw i64 %10, %70
  %72 = sext i32 %.027.ph.lcssa98105 to i64
  %73 = icmp sgt i64 %71, -1
  br i1 %73, label %.lr.ph67, label %.loopexit

.lr.ph67:                                         ; preds = %.thread
  %74 = add nuw nsw i64 %71, 1
  %75 = getelementptr { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 7, i64 0, i64 2
  %76 = load i64, ptr %75, align 8, !tbaa !7
  %77 = load ptr, ptr %1, align 8, !tbaa !7
  br label %78

78:                                               ; preds = %.lr.ph67, %78
  %79 = phi i64 [ %74, %.lr.ph67 ], [ %89, %78 ]
  %80 = phi i64 [ 0, %.lr.ph67 ], [ %81, %78 ]
  %81 = add nuw nsw i64 %80, 1
  %82 = add nsw i64 %80, -1
  %83 = add nsw i64 %82, %72
  %84 = mul i64 %76, %83
  %85 = getelementptr i8, ptr %77, i64 %84
  %86 = load i32, ptr %85, align 4, !tbaa !3
  %87 = add nsw i64 %82, %70
  %88 = getelementptr i32, ptr %12, i64 %87
  store i32 %86, ptr %88, align 4, !tbaa !3
  %89 = add nsw i64 %79, -1
  %90 = icmp ugt i64 %79, 1
  br i1 %90, label %78, label %.loopexit

.loopexit:                                        ; preds = %78, %54, %.thread, %43, %67
  %91 = icmp sgt i64 %4, 0
  br i1 %91, label %.lr.ph71, label %._crit_edge72

.lr.ph71:                                         ; preds = %.loopexit
  %92 = getelementptr { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 7, i64 0, i64 2
  %93 = load i64, ptr %92, align 8, !tbaa !7
  %94 = load ptr, ptr %0, align 8, !tbaa !7
  %xtraiter = and i64 %4, 3
  %95 = icmp ult i64 %4, 4
  br i1 %95, label %._crit_edge72.loopexit.unr-lcssa, label %.lr.ph71.new

.lr.ph71.new:                                     ; preds = %.lr.ph71
  %unroll_iter = and i64 %4, -4
  br label %96

96:                                               ; preds = %96, %.lr.ph71.new
  %97 = phi i64 [ 0, %.lr.ph71.new ], [ %113, %96 ]
  %niter = phi i64 [ 0, %.lr.ph71.new ], [ %niter.next.3, %96 ]
  %98 = or i64 %97, 1
  %99 = getelementptr i32, ptr %12, i64 %97
  %100 = load i32, ptr %99, align 4, !tbaa !3
  %101 = mul i64 %93, %97
  %102 = getelementptr i8, ptr %94, i64 %101
  store i32 %100, ptr %102, align 4, !tbaa !3
  %103 = or i64 %97, 2
  %104 = getelementptr i32, ptr %12, i64 %98
  %105 = load i32, ptr %104, align 4, !tbaa !3
  %106 = mul i64 %93, %98
  %107 = getelementptr i8, ptr %94, i64 %106
  store i32 %105, ptr %107, align 4, !tbaa !3
  %108 = or i64 %97, 3
  %109 = getelementptr i32, ptr %12, i64 %103
  %110 = load i32, ptr %109, align 4, !tbaa !3
  %111 = mul i64 %93, %103
  %112 = getelementptr i8, ptr %94, i64 %111
  store i32 %110, ptr %112, align 4, !tbaa !3
  %113 = add nuw nsw i64 %97, 4
  %114 = getelementptr i32, ptr %12, i64 %108
  %115 = load i32, ptr %114, align 4, !tbaa !3
  %116 = mul i64 %93, %108
  %117 = getelementptr i8, ptr %94, i64 %116
  store i32 %115, ptr %117, align 4, !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_edge72.loopexit.unr-lcssa, label %96

._crit_edge72.loopexit.unr-lcssa:                 ; preds = %96, %.lr.ph71
  %.unr = phi i64 [ 0, %.lr.ph71 ], [ %113, %96 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge72, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge72.loopexit.unr-lcssa, %.epil.preheader
  %118 = phi i64 [ %119, %.epil.preheader ], [ %.unr, %._crit_edge72.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %._crit_edge72.loopexit.unr-lcssa ]
  %119 = add nuw nsw i64 %118, 1
  %120 = getelementptr i32, ptr %12, i64 %118
  %121 = load i32, ptr %120, align 4, !tbaa !3
  %122 = mul i64 %93, %118
  %123 = getelementptr i8, ptr %94, i64 %122
  store i32 %121, ptr %123, align 4, !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_edge72, label %.epil.preheader, !llvm.loop !17

._crit_edge72:                                    ; preds = %._crit_edge72.loopexit.unr-lcssa, %.epil.preheader, %.loopexit
  %124 = icmp sgt i64 %7, 0
  br i1 %124, label %.lr.ph74, label %._crit_edge75

.lr.ph74:                                         ; preds = %._crit_edge72
  %125 = shl i64 %4, 32
  %sext34 = add i64 %125, 4294967296
  %126 = ashr exact i64 %sext34, 32
  %127 = add nsw i64 %126, -1
  %128 = getelementptr { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 7, i64 0, i64 2
  %129 = load i64, ptr %128, align 8, !tbaa !7
  %130 = load ptr, ptr %1, align 8, !tbaa !7
  %xtraiter130 = and i64 %7, 3
  %131 = icmp ult i64 %7, 4
  br i1 %131, label %._crit_edge75.loopexit.unr-lcssa, label %.lr.ph74.new

.lr.ph74.new:                                     ; preds = %.lr.ph74
  %unroll_iter134 = and i64 %7, -4
  br label %132

132:                                              ; preds = %132, %.lr.ph74.new
  %133 = phi i64 [ 0, %.lr.ph74.new ], [ %152, %132 ]
  %niter135 = phi i64 [ 0, %.lr.ph74.new ], [ %niter135.next.3, %132 ]
  %134 = or i64 %133, 1
  %135 = add i64 %127, %133
  %136 = getelementptr i32, ptr %12, i64 %135
  %137 = load i32, ptr %136, align 4, !tbaa !3
  %138 = mul i64 %129, %133
  %139 = getelementptr i8, ptr %130, i64 %138
  store i32 %137, ptr %139, align 4, !tbaa !3
  %140 = or i64 %133, 2
  %141 = add i64 %126, %133
  %142 = getelementptr i32, ptr %12, i64 %141
  %143 = load i32, ptr %142, align 4, !tbaa !3
  %144 = mul i64 %129, %134
  %145 = getelementptr i8, ptr %130, i64 %144
  store i32 %143, ptr %145, align 4, !tbaa !3
  %146 = or i64 %133, 3
  %147 = add i64 %127, %140
  %148 = getelementptr i32, ptr %12, i64 %147
  %149 = load i32, ptr %148, align 4, !tbaa !3
  %150 = mul i64 %129, %140
  %151 = getelementptr i8, ptr %130, i64 %150
  store i32 %149, ptr %151, align 4, !tbaa !3
  %152 = add nuw nsw i64 %133, 4
  %153 = add i64 %127, %146
  %154 = getelementptr i32, ptr %12, i64 %153
  %155 = load i32, ptr %154, align 4, !tbaa !3
  %156 = mul i64 %129, %146
  %157 = getelementptr i8, ptr %130, i64 %156
  store i32 %155, ptr %157, align 4, !tbaa !3
  %niter135.next.3 = add i64 %niter135, 4
  %niter135.ncmp.3 = icmp eq i64 %niter135.next.3, %unroll_iter134
  br i1 %niter135.ncmp.3, label %._crit_edge75.loopexit.unr-lcssa, label %132

._crit_edge75.loopexit.unr-lcssa:                 ; preds = %132, %.lr.ph74
  %.unr132 = phi i64 [ 0, %.lr.ph74 ], [ %152, %132 ]
  %lcmp.mod133.not = icmp eq i64 %xtraiter130, 0
  br i1 %lcmp.mod133.not, label %._crit_edge75, label %.epil.preheader129

.epil.preheader129:                               ; preds = %._crit_edge75.loopexit.unr-lcssa, %.epil.preheader129
  %158 = phi i64 [ %159, %.epil.preheader129 ], [ %.unr132, %._crit_edge75.loopexit.unr-lcssa ]
  %epil.iter131 = phi i64 [ %epil.iter131.next, %.epil.preheader129 ], [ 0, %._crit_edge75.loopexit.unr-lcssa ]
  %159 = add nuw nsw i64 %158, 1
  %160 = add i64 %127, %158
  %161 = getelementptr i32, ptr %12, i64 %160
  %162 = load i32, ptr %161, align 4, !tbaa !3
  %163 = mul i64 %129, %158
  %164 = getelementptr i8, ptr %130, i64 %163
  store i32 %162, ptr %164, align 4, !tbaa !3
  %epil.iter131.next = add i64 %epil.iter131, 1
  %epil.iter131.cmp.not = icmp eq i64 %epil.iter131.next, %xtraiter130
  br i1 %epil.iter131.cmp.not, label %._crit_edge75, label %.epil.preheader129, !llvm.loop !19

._crit_edge75:                                    ; preds = %._crit_edge75.loopexit.unr-lcssa, %.epil.preheader129, %._crit_edge72
  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 i32 @_FortranASumInteger4(ptr, ptr, i32, i32, ptr) local_unnamed_addr

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

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

declare i1 @_FortranAioOutputInteger64(ptr, i64) local_unnamed_addr

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

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

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

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

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

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

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

!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, !10, !11}
!14 = distinct !{!14, !11, !10}
!15 = distinct !{!15, !10, !11}
!16 = distinct !{!16, !11, !10}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.unroll.disable"}
!19 = distinct !{!19, !18}
