module module_sort
   implicit none

contains

   recursive subroutine mergesort(a, begin, end, b)
      implicit none
      integer :: a(:), b(:)
      integer, intent(in) :: begin, end ! 配列インデックスの始点、終点
      integer :: mid ! 配列中央のインデックス

      ! 再帰終了条件: begin==end のときは何もせずにreturnする
      if (begin<end) then
         mid = (begin+end)/2
         call mergesort(a,begin,mid,b)
         call mergesort(a,mid+1,end,b)
         call merge_(a,begin,mid,end,b)
      end if
      return

   contains
      subroutine merge_(array,begin,mid,end,memo)
         implicit none
         integer:: array(:), memo(:)
         integer, intent(in) :: begin, mid, end
         integer :: i, j, k, temp

         i = begin   ! 配列前半の頭のインデックス
         j = mid + 1 ! 配列後半の頭のインデックス
         do k = begin, end
            if (j > end) then
               ! 配列後半が入れ終わっている場合
               temp = array(i)
               i = i + 1
            else if (i > mid) then
               ! 配列前半が入れ終わっている場合
               temp = array(j)
               j = j + 1
            else if ( array(i) <= array(j) ) then
               temp = array(i)
               i = i + 1
            else
               temp = array(j)
               j = j + 1
            end if
            memo(k) = temp
         end do

         do i = begin, end
            array(i) = memo(i)
         end do
      end subroutine merge_
   end subroutine mergesort

end module module_sort

program abc134c2
   use module_sort
   implicit none
   integer :: n, i
   integer, allocatable :: a1(:), b1(:), org(:)

   read(*,*) n
   allocate(a1(n), b1(n), org(n))

   do i = 1, n
      read(*,*) a1(i)
   enddo
   org = a1

   b1 = 0

   call mergesort(a1, 1, n, b1)

   do i = 1, n
      if (org(i) == a1(n)) then
         write(*,*) a1(n-1)
      else
         write(*,*) a1(n)
      endif
   enddo

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"

@_QFEa1.0 = internal unnamed_addr global ptr null
@_QFEa1.8 = internal unnamed_addr global i64 0
@_QFEb1.0 = internal unnamed_addr global ptr null
@_QFEb1.7 = internal unnamed_addr global i64 1
@_QFEb1.8 = internal unnamed_addr global i64 0
@_QFEorg.0 = internal unnamed_addr global ptr null
@_QFEorg.7 = internal unnamed_addr global i64 1
@_QFEorg.8 = internal unnamed_addr global i64 0
@_QQcl.4344370f33e68a5758c9fbecc3ac4922 = linkonce constant [73 x i8] c"/home/ubuntu/Downloads/TheStack_IR/Collated/Fortran/Source_3738/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"
@_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: nofree nosync nounwind memory(readwrite, inaccessiblemem: none)
define void @_QMmodule_sortPmergesort(ptr %0, ptr nocapture readonly %1, ptr nocapture readonly %2, ptr %3) local_unnamed_addr #2 {
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = load i32, ptr %1, align 4, !tbaa !3
  %8 = load i32, ptr %2, align 4, !tbaa !3
  %9 = icmp slt i32 %7, %8
  br i1 %9, label %10, label %14

10:                                               ; preds = %4
  %11 = add i32 %8, %7
  %12 = sdiv i32 %11, 2
  store i32 %12, ptr %6, align 4, !tbaa !3
  call void @_QMmodule_sortPmergesort(ptr %0, ptr nonnull %1, ptr nonnull %6, ptr %3)
  %13 = add nsw i32 %12, 1
  store i32 %13, ptr %5, align 4, !tbaa !3
  call void @_QMmodule_sortPmergesort(ptr %0, ptr nonnull %5, ptr nonnull %2, ptr %3)
  call void @_QMmodule_sortFmergesortPmerge_(ptr %0, ptr nonnull %1, ptr nonnull %6, ptr nonnull %2, ptr %3)
  br label %14

14:                                               ; preds = %10, %4
  ret void
}

; Function Attrs: nofree norecurse nosync nounwind memory(readwrite, inaccessiblemem: none)
define void @_QMmodule_sortFmergesortPmerge_(ptr nocapture readonly %0, ptr nocapture readonly %1, ptr nocapture readonly %2, ptr nocapture readonly %3, ptr nocapture readonly %4) local_unnamed_addr #3 {
  %6 = load i32, ptr %1, align 4, !tbaa !3
  %7 = sext i32 %6 to i64
  %8 = load i32, ptr %3, align 4, !tbaa !3
  %9 = sext i32 %8 to i64
  %10 = sub nsw i64 1, %7
  %11 = add nsw i64 %10, %9
  %12 = icmp sgt i64 %11, 0
  br i1 %12, label %.lr.ph, label %._crit_edge29

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

21:                                               ; preds = %.lr.ph, %58
  %22 = phi i64 [ %11, %.lr.ph ], [ %64, %58 ]
  %23 = phi i32 [ %6, %.lr.ph ], [ %63, %58 ]
  %.01726 = phi i32 [ %14, %.lr.ph ], [ %.1, %58 ]
  %.01825 = phi i32 [ %6, %.lr.ph ], [ %.119, %58 ]
  %24 = load i32, ptr %3, align 4, !tbaa !3
  %25 = icmp sgt i32 %.01726, %24
  br i1 %25, label %26, label %33

26:                                               ; preds = %21
  %27 = sext i32 %.01825 to i64
  %28 = add nsw i64 %27, -1
  %29 = mul i64 %20, %28
  %30 = getelementptr i8, ptr %19, i64 %29
  %31 = load i32, ptr %30, align 4, !tbaa !3
  %32 = add i32 %.01825, 1
  br label %58

33:                                               ; preds = %21
  %34 = load i32, ptr %2, align 4, !tbaa !3
  %35 = icmp sgt i32 %.01825, %34
  br i1 %35, label %36, label %43

36:                                               ; preds = %33
  %37 = sext i32 %.01726 to i64
  %38 = add nsw i64 %37, -1
  %39 = mul i64 %20, %38
  %40 = getelementptr i8, ptr %19, i64 %39
  %41 = load i32, ptr %40, align 4, !tbaa !3
  %42 = add i32 %.01726, 1
  br label %58

43:                                               ; preds = %33
  %44 = sext i32 %.01825 to i64
  %45 = add nsw i64 %44, -1
  %46 = mul i64 %20, %45
  %47 = getelementptr i8, ptr %19, i64 %46
  %48 = load i32, ptr %47, align 4, !tbaa !3
  %49 = sext i32 %.01726 to i64
  %50 = add nsw i64 %49, -1
  %51 = mul i64 %20, %50
  %52 = getelementptr i8, ptr %19, i64 %51
  %53 = load i32, ptr %52, align 4, !tbaa !3
  %.not = icmp sgt i32 %48, %53
  br i1 %.not, label %56, label %54

54:                                               ; preds = %43
  %55 = add i32 %.01825, 1
  br label %58

56:                                               ; preds = %43
  %57 = add i32 %.01726, 1
  br label %58

58:                                               ; preds = %26, %36, %54, %56
  %.119 = phi i32 [ %32, %26 ], [ %.01825, %36 ], [ %55, %54 ], [ %.01825, %56 ]
  %.1 = phi i32 [ %.01726, %26 ], [ %42, %36 ], [ %.01726, %54 ], [ %57, %56 ]
  %.0 = phi i32 [ %31, %26 ], [ %41, %36 ], [ %48, %54 ], [ %53, %56 ]
  %59 = sext i32 %23 to i64
  %60 = add nsw i64 %59, -1
  %61 = mul i64 %18, %60
  %62 = getelementptr i8, ptr %16, i64 %61
  store i32 %.0, ptr %62, align 4, !tbaa !3
  %63 = add i32 %23, 1
  %64 = add nsw i64 %22, -1
  %65 = icmp sgt i64 %22, 1
  br i1 %65, label %21, label %._crit_edge

._crit_edge:                                      ; preds = %58
  %.pre = load i32, ptr %1, align 4, !tbaa !3
  %.pre30 = load i32, ptr %3, align 4, !tbaa !3
  %.pre31 = sext i32 %.pre to i64
  %.pre32 = sext i32 %.pre30 to i64
  %.pre34 = sub nsw i64 1, %.pre31
  %.pre36 = add nsw i64 %.pre34, %.pre32
  %66 = icmp sgt i64 %.pre36, 0
  br i1 %66, label %.lr.ph28, label %._crit_edge29

.lr.ph28:                                         ; preds = %._crit_edge
  %67 = load ptr, ptr %4, align 8, !tbaa !7
  %68 = getelementptr { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %4, i64 0, i32 7, i64 0, i64 2
  %69 = load i64, ptr %68, align 8, !tbaa !7
  %70 = load ptr, ptr %0, align 8, !tbaa !7
  %71 = getelementptr { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 7, i64 0, i64 2
  %72 = load i64, ptr %71, align 8, !tbaa !7
  %xtraiter = and i64 %.pre36, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.prol.loopexit, label %.prol.loopexit.unr-lcssa

.prol.loopexit.unr-lcssa:                         ; preds = %.lr.ph28
  %73 = sext i32 %.pre to i64
  %74 = add nsw i64 %73, -1
  %75 = mul i64 %69, %74
  %76 = getelementptr i8, ptr %67, i64 %75
  %77 = load i32, ptr %76, align 4, !tbaa !3
  %78 = mul i64 %72, %74
  %79 = getelementptr i8, ptr %70, i64 %78
  store i32 %77, ptr %79, align 4, !tbaa !3
  %80 = add i32 %.pre, 1
  %81 = add nsw i64 %.pre36, -1
  br label %.prol.loopexit

.prol.loopexit:                                   ; preds = %.prol.loopexit.unr-lcssa, %.lr.ph28
  %.unr = phi i64 [ %.pre36, %.lr.ph28 ], [ %81, %.prol.loopexit.unr-lcssa ]
  %.unr39 = phi i32 [ %.pre, %.lr.ph28 ], [ %80, %.prol.loopexit.unr-lcssa ]
  %82 = icmp eq i32 %.pre30, %.pre
  br i1 %82, label %._crit_edge29, label %.lr.ph28.new

.lr.ph28.new:                                     ; preds = %.prol.loopexit, %.lr.ph28.new
  %83 = phi i64 [ %101, %.lr.ph28.new ], [ %.unr, %.prol.loopexit ]
  %84 = phi i32 [ %100, %.lr.ph28.new ], [ %.unr39, %.prol.loopexit ]
  %85 = sext i32 %84 to i64
  %86 = add nsw i64 %85, -1
  %87 = mul i64 %69, %86
  %88 = getelementptr i8, ptr %67, i64 %87
  %89 = load i32, ptr %88, align 4, !tbaa !3
  %90 = mul i64 %72, %86
  %91 = getelementptr i8, ptr %70, i64 %90
  store i32 %89, ptr %91, align 4, !tbaa !3
  %92 = add i32 %84, 1
  %93 = sext i32 %92 to i64
  %94 = add nsw i64 %93, -1
  %95 = mul i64 %69, %94
  %96 = getelementptr i8, ptr %67, i64 %95
  %97 = load i32, ptr %96, align 4, !tbaa !3
  %98 = mul i64 %72, %94
  %99 = getelementptr i8, ptr %70, i64 %98
  store i32 %97, ptr %99, align 4, !tbaa !3
  %100 = add i32 %84, 2
  %101 = add nsw i64 %83, -2
  %102 = add i64 %83, -3
  %103 = icmp ult i64 %102, -2
  br i1 %103, label %.lr.ph28.new, label %._crit_edge29

._crit_edge29:                                    ; preds = %.prol.loopexit, %.lr.ph28.new, %5, %._crit_edge
  ret void
}

define void @_QQmain() local_unnamed_addr {
  %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 i32, align 4
  %4 = alloca i32, align 4
  %5 = tail call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.4344370f33e68a5758c9fbecc3ac4922, i32 63)
  %6 = call i1 @_FortranAioInputInteger(ptr %5, ptr nonnull %4, i32 4)
  %7 = call i32 @_FortranAioEndIoStatement(ptr %5)
  %8 = load i32, ptr %4, align 4, !tbaa !3
  %9 = call i32 @llvm.smax.i32(i32 %8, i32 0)
  %10 = zext i32 %9 to i64
  %11 = shl nuw nsw i64 %10, 2
  %12 = call ptr @malloc(i64 %11)
  store ptr %12, ptr @_QFEa1.0, align 8, !tbaa !7
  store i64 %10, ptr @_QFEa1.8, align 8, !tbaa !7
  %13 = call ptr @malloc(i64 %11)
  store ptr %13, ptr @_QFEb1.0, align 8, !tbaa !7
  store i64 1, ptr @_QFEb1.7, align 8, !tbaa !7
  store i64 %10, ptr @_QFEb1.8, align 8, !tbaa !7
  %14 = call ptr @malloc(i64 %11)
  store ptr %14, ptr @_QFEorg.0, align 8, !tbaa !7
  store i64 1, ptr @_QFEorg.7, align 8, !tbaa !7
  store i64 %10, ptr @_QFEorg.8, align 8, !tbaa !7
  %15 = icmp sgt i32 %8, 0
  br i1 %15, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %0
  %16 = zext i32 %8 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 ]
  %17 = call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.4344370f33e68a5758c9fbecc3ac4922, i32 67)
  %.unpack681 = load ptr, ptr @_QFEa1.0, align 8, !tbaa !7
  %18 = add nsw i64 %indvars.iv, -1
  %19 = getelementptr i32, ptr %.unpack681, i64 %18
  %20 = call i1 @_FortranAioInputInteger(ptr %17, ptr %19, i32 4)
  %21 = call i32 @_FortranAioEndIoStatement(ptr %17)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv, %16
  br i1 %exitcond.not, label %._crit_edge.loopexit, label %.lr.ph

._crit_edge.loopexit:                             ; preds = %.lr.ph
  %.unpack.pre = load ptr, ptr @_QFEa1.0, align 8, !tbaa !7
  %.unpack549.unpack.unpack551.pre = load i64, ptr @_QFEa1.8, align 8, !tbaa !7
  %.unpack554.pre = load ptr, ptr @_QFEorg.0, align 8, !tbaa !7
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %0
  %.unpack554 = phi ptr [ %.unpack554.pre, %._crit_edge.loopexit ], [ %14, %0 ]
  %.unpack549.unpack.unpack551 = phi i64 [ %.unpack549.unpack.unpack551.pre, %._crit_edge.loopexit ], [ %10, %0 ]
  %.unpack = phi ptr [ %.unpack.pre, %._crit_edge.loopexit ], [ %12, %0 ]
  %.unpack758 = ptrtoint ptr %.unpack to i64
  %.unpack554742 = ptrtoint ptr %.unpack554 to i64
  %.unpack739 = ptrtoint ptr %.unpack to i64
  %.not = icmp eq ptr %.unpack554, null
  br i1 %.not, label %91, label %22

22:                                               ; preds = %._crit_edge
  %.unpack561.unpack.unpack563 = load i64, ptr @_QFEorg.8, align 8, !tbaa !7
  %.not695 = icmp eq i64 %.unpack561.unpack.unpack563, %.unpack549.unpack.unpack551
  br i1 %.not695, label %.preheader697, label %38

.preheader697:                                    ; preds = %22
  %23 = icmp sgt i64 %.unpack549.unpack.unpack551, 0
  br i1 %23, label %.lr.ph701.preheader, label %._crit_edge702

.lr.ph701.preheader:                              ; preds = %.preheader697
  %min.iters.check746 = icmp ult i64 %.unpack549.unpack.unpack551, 8
  %24 = sub i64 %.unpack554742, %.unpack739
  %diff.check743 = icmp ult i64 %24, 32
  %or.cond = select i1 %min.iters.check746, i1 true, i1 %diff.check743
  br i1 %or.cond, label %.lr.ph701.preheader777, label %vector.ph747

vector.ph747:                                     ; preds = %.lr.ph701.preheader
  %n.vec749 = and i64 %.unpack549.unpack.unpack551, -8
  br label %vector.body752

vector.body752:                                   ; preds = %vector.body752, %vector.ph747
  %index753 = phi i64 [ 0, %vector.ph747 ], [ %index.next756, %vector.body752 ]
  %25 = getelementptr i32, ptr %.unpack, i64 %index753
  %wide.load754 = load <4 x i32>, ptr %25, align 4, !tbaa !3
  %26 = getelementptr i32, ptr %25, i64 4
  %wide.load755 = load <4 x i32>, ptr %26, align 4, !tbaa !3
  %27 = getelementptr i32, ptr %.unpack554, i64 %index753
  store <4 x i32> %wide.load754, ptr %27, align 4, !tbaa !3
  %28 = getelementptr i32, ptr %27, i64 4
  store <4 x i32> %wide.load755, ptr %28, align 4, !tbaa !3
  %index.next756 = add nuw i64 %index753, 8
  %29 = icmp eq i64 %index.next756, %n.vec749
  br i1 %29, label %middle.block744, label %vector.body752, !llvm.loop !9

middle.block744:                                  ; preds = %vector.body752
  %cmp.n751 = icmp eq i64 %.unpack549.unpack.unpack551, %n.vec749
  br i1 %cmp.n751, label %._crit_edge702, label %.lr.ph701.preheader777

.lr.ph701.preheader777:                           ; preds = %.lr.ph701.preheader, %middle.block744
  %.ph778 = phi i64 [ 0, %.lr.ph701.preheader ], [ %n.vec749, %middle.block744 ]
  %30 = xor i64 %.ph778, -1
  %31 = add i64 %.unpack549.unpack.unpack551, %30
  %xtraiter782 = and i64 %.unpack549.unpack.unpack551, 3
  %lcmp.mod783.not = icmp eq i64 %xtraiter782, 0
  br i1 %lcmp.mod783.not, label %.lr.ph701.prol.loopexit, label %.lr.ph701.prol

.lr.ph701.prol:                                   ; preds = %.lr.ph701.preheader777, %.lr.ph701.prol
  %32 = phi i64 [ %35, %.lr.ph701.prol ], [ %.ph778, %.lr.ph701.preheader777 ]
  %prol.iter784 = phi i64 [ %prol.iter784.next, %.lr.ph701.prol ], [ 0, %.lr.ph701.preheader777 ]
  %33 = getelementptr i32, ptr %.unpack, i64 %32
  %34 = load i32, ptr %33, align 4, !tbaa !3
  %35 = add nuw nsw i64 %32, 1
  %36 = getelementptr i32, ptr %.unpack554, i64 %32
  store i32 %34, ptr %36, align 4, !tbaa !3
  %prol.iter784.next = add i64 %prol.iter784, 1
  %prol.iter784.cmp.not = icmp eq i64 %prol.iter784.next, %xtraiter782
  br i1 %prol.iter784.cmp.not, label %.lr.ph701.prol.loopexit, label %.lr.ph701.prol, !llvm.loop !12

.lr.ph701.prol.loopexit:                          ; preds = %.lr.ph701.prol, %.lr.ph701.preheader777
  %.unr785 = phi i64 [ %.ph778, %.lr.ph701.preheader777 ], [ %35, %.lr.ph701.prol ]
  %37 = icmp ult i64 %31, 3
  br i1 %37, label %._crit_edge702, label %.lr.ph701

38:                                               ; preds = %22
  %39 = shl i64 %.unpack549.unpack.unpack551, 2
  %40 = call ptr @malloc(i64 %39)
  %41 = icmp sgt i64 %.unpack549.unpack.unpack551, 0
  br i1 %41, label %.lr.ph700.preheader, label %.thread693

.lr.ph700.preheader:                              ; preds = %38
  %42 = ptrtoint ptr %40 to i64
  %min.iters.check = icmp ult i64 %.unpack549.unpack.unpack551, 8
  %43 = sub i64 %42, %.unpack739
  %diff.check = icmp ult i64 %43, 32
  %or.cond773 = select i1 %min.iters.check, i1 true, i1 %diff.check
  br i1 %or.cond773, label %.lr.ph700.preheader779, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph700.preheader
  %n.vec = and i64 %.unpack549.unpack.unpack551, -8
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %44 = getelementptr i32, ptr %.unpack, i64 %index
  %wide.load = load <4 x i32>, ptr %44, align 4, !tbaa !3
  %45 = getelementptr i32, ptr %44, i64 4
  %wide.load740 = load <4 x i32>, ptr %45, align 4, !tbaa !3
  %46 = getelementptr i32, ptr %40, i64 %index
  store <4 x i32> %wide.load, ptr %46, align 4, !tbaa !3
  %47 = getelementptr i32, ptr %46, i64 4
  store <4 x i32> %wide.load740, ptr %47, align 4, !tbaa !3
  %index.next = add nuw i64 %index, 8
  %48 = icmp eq i64 %index.next, %n.vec
  br i1 %48, label %middle.block, label %vector.body, !llvm.loop !14

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %.unpack549.unpack.unpack551, %n.vec
  br i1 %cmp.n, label %.loopexit696, label %.lr.ph700.preheader779

.lr.ph700.preheader779:                           ; preds = %.lr.ph700.preheader, %middle.block
  %.ph780 = phi i64 [ 0, %.lr.ph700.preheader ], [ %n.vec, %middle.block ]
  %49 = xor i64 %.ph780, -1
  %50 = add i64 %.unpack549.unpack.unpack551, %49
  %xtraiter = and i64 %.unpack549.unpack.unpack551, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph700.prol.loopexit, label %.lr.ph700.prol

.lr.ph700.prol:                                   ; preds = %.lr.ph700.preheader779, %.lr.ph700.prol
  %51 = phi i64 [ %54, %.lr.ph700.prol ], [ %.ph780, %.lr.ph700.preheader779 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph700.prol ], [ 0, %.lr.ph700.preheader779 ]
  %52 = getelementptr i32, ptr %.unpack, i64 %51
  %53 = load i32, ptr %52, align 4, !tbaa !3
  %54 = add nuw nsw i64 %51, 1
  %55 = getelementptr i32, ptr %40, i64 %51
  store i32 %53, ptr %55, align 4, !tbaa !3
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %.lr.ph700.prol.loopexit, label %.lr.ph700.prol, !llvm.loop !15

.lr.ph700.prol.loopexit:                          ; preds = %.lr.ph700.prol, %.lr.ph700.preheader779
  %.unr = phi i64 [ %.ph780, %.lr.ph700.preheader779 ], [ %54, %.lr.ph700.prol ]
  %56 = icmp ult i64 %50, 3
  br i1 %56, label %.loopexit696, label %.lr.ph700

.lr.ph700:                                        ; preds = %.lr.ph700.prol.loopexit, %.lr.ph700
  %57 = phi i64 [ %72, %.lr.ph700 ], [ %.unr, %.lr.ph700.prol.loopexit ]
  %58 = getelementptr i32, ptr %.unpack, i64 %57
  %59 = load i32, ptr %58, align 4, !tbaa !3
  %60 = add nuw nsw i64 %57, 1
  %61 = getelementptr i32, ptr %40, i64 %57
  store i32 %59, ptr %61, align 4, !tbaa !3
  %62 = getelementptr i32, ptr %.unpack, i64 %60
  %63 = load i32, ptr %62, align 4, !tbaa !3
  %64 = add nuw nsw i64 %57, 2
  %65 = getelementptr i32, ptr %40, i64 %60
  store i32 %63, ptr %65, align 4, !tbaa !3
  %66 = getelementptr i32, ptr %.unpack, i64 %64
  %67 = load i32, ptr %66, align 4, !tbaa !3
  %68 = add nuw nsw i64 %57, 3
  %69 = getelementptr i32, ptr %40, i64 %64
  store i32 %67, ptr %69, align 4, !tbaa !3
  %70 = getelementptr i32, ptr %.unpack, i64 %68
  %71 = load i32, ptr %70, align 4, !tbaa !3
  %72 = add nuw nsw i64 %57, 4
  %73 = getelementptr i32, ptr %40, i64 %68
  store i32 %71, ptr %73, align 4, !tbaa !3
  %exitcond711.not.3 = icmp eq i64 %72, %.unpack549.unpack.unpack551
  br i1 %exitcond711.not.3, label %.loopexit696, label %.lr.ph700, !llvm.loop !16

.lr.ph701:                                        ; preds = %.lr.ph701.prol.loopexit, %.lr.ph701
  %74 = phi i64 [ %89, %.lr.ph701 ], [ %.unr785, %.lr.ph701.prol.loopexit ]
  %75 = getelementptr i32, ptr %.unpack, i64 %74
  %76 = load i32, ptr %75, align 4, !tbaa !3
  %77 = add nuw nsw i64 %74, 1
  %78 = getelementptr i32, ptr %.unpack554, i64 %74
  store i32 %76, ptr %78, align 4, !tbaa !3
  %79 = getelementptr i32, ptr %.unpack, i64 %77
  %80 = load i32, ptr %79, align 4, !tbaa !3
  %81 = add nuw nsw i64 %74, 2
  %82 = getelementptr i32, ptr %.unpack554, i64 %77
  store i32 %80, ptr %82, align 4, !tbaa !3
  %83 = getelementptr i32, ptr %.unpack, i64 %81
  %84 = load i32, ptr %83, align 4, !tbaa !3
  %85 = add nuw nsw i64 %74, 3
  %86 = getelementptr i32, ptr %.unpack554, i64 %81
  store i32 %84, ptr %86, align 4, !tbaa !3
  %87 = getelementptr i32, ptr %.unpack, i64 %85
  %88 = load i32, ptr %87, align 4, !tbaa !3
  %89 = add nuw nsw i64 %74, 4
  %90 = getelementptr i32, ptr %.unpack554, i64 %85
  store i32 %88, ptr %90, align 4, !tbaa !3
  %exitcond712.not.3 = icmp eq i64 %89, %.unpack549.unpack.unpack551
  br i1 %exitcond712.not.3, label %._crit_edge702, label %.lr.ph701, !llvm.loop !17

91:                                               ; preds = %._crit_edge
  %92 = shl i64 %.unpack549.unpack.unpack551, 2
  %93 = call ptr @malloc(i64 %92)
  %94 = icmp sgt i64 %.unpack549.unpack.unpack551, 0
  br i1 %94, label %.lr.ph704.preheader, label %.loopexit696.thread

.lr.ph704.preheader:                              ; preds = %91
  %95 = ptrtoint ptr %93 to i64
  %min.iters.check762 = icmp ult i64 %.unpack549.unpack.unpack551, 8
  %96 = sub i64 %95, %.unpack758
  %diff.check759 = icmp ult i64 %96, 32
  %or.cond774 = select i1 %min.iters.check762, i1 true, i1 %diff.check759
  br i1 %or.cond774, label %.lr.ph704.preheader775, label %vector.ph763

vector.ph763:                                     ; preds = %.lr.ph704.preheader
  %n.vec765 = and i64 %.unpack549.unpack.unpack551, -8
  br label %vector.body768

vector.body768:                                   ; preds = %vector.body768, %vector.ph763
  %index769 = phi i64 [ 0, %vector.ph763 ], [ %index.next772, %vector.body768 ]
  %97 = getelementptr i32, ptr %.unpack, i64 %index769
  %wide.load770 = load <4 x i32>, ptr %97, align 4, !tbaa !3
  %98 = getelementptr i32, ptr %97, i64 4
  %wide.load771 = load <4 x i32>, ptr %98, align 4, !tbaa !3
  %99 = getelementptr i32, ptr %93, i64 %index769
  store <4 x i32> %wide.load770, ptr %99, align 4, !tbaa !3
  %100 = getelementptr i32, ptr %99, i64 4
  store <4 x i32> %wide.load771, ptr %100, align 4, !tbaa !3
  %index.next772 = add nuw i64 %index769, 8
  %101 = icmp eq i64 %index.next772, %n.vec765
  br i1 %101, label %middle.block760, label %vector.body768, !llvm.loop !18

middle.block760:                                  ; preds = %vector.body768
  %cmp.n767 = icmp eq i64 %.unpack549.unpack.unpack551, %n.vec765
  br i1 %cmp.n767, label %.loopexit696, label %.lr.ph704.preheader775

.lr.ph704.preheader775:                           ; preds = %.lr.ph704.preheader, %middle.block760
  %.ph776 = phi i64 [ 0, %.lr.ph704.preheader ], [ %n.vec765, %middle.block760 ]
  %102 = xor i64 %.ph776, -1
  %103 = add i64 %.unpack549.unpack.unpack551, %102
  %xtraiter786 = and i64 %.unpack549.unpack.unpack551, 3
  %lcmp.mod787.not = icmp eq i64 %xtraiter786, 0
  br i1 %lcmp.mod787.not, label %.lr.ph704.prol.loopexit, label %.lr.ph704.prol

.lr.ph704.prol:                                   ; preds = %.lr.ph704.preheader775, %.lr.ph704.prol
  %104 = phi i64 [ %107, %.lr.ph704.prol ], [ %.ph776, %.lr.ph704.preheader775 ]
  %prol.iter788 = phi i64 [ %prol.iter788.next, %.lr.ph704.prol ], [ 0, %.lr.ph704.preheader775 ]
  %105 = getelementptr i32, ptr %.unpack, i64 %104
  %106 = load i32, ptr %105, align 4, !tbaa !3
  %107 = add nuw nsw i64 %104, 1
  %108 = getelementptr i32, ptr %93, i64 %104
  store i32 %106, ptr %108, align 4, !tbaa !3
  %prol.iter788.next = add i64 %prol.iter788, 1
  %prol.iter788.cmp.not = icmp eq i64 %prol.iter788.next, %xtraiter786
  br i1 %prol.iter788.cmp.not, label %.lr.ph704.prol.loopexit, label %.lr.ph704.prol, !llvm.loop !19

.lr.ph704.prol.loopexit:                          ; preds = %.lr.ph704.prol, %.lr.ph704.preheader775
  %.unr789 = phi i64 [ %.ph776, %.lr.ph704.preheader775 ], [ %107, %.lr.ph704.prol ]
  %109 = icmp ult i64 %103, 3
  br i1 %109, label %.loopexit696, label %.lr.ph704

.lr.ph704:                                        ; preds = %.lr.ph704.prol.loopexit, %.lr.ph704
  %110 = phi i64 [ %125, %.lr.ph704 ], [ %.unr789, %.lr.ph704.prol.loopexit ]
  %111 = getelementptr i32, ptr %.unpack, i64 %110
  %112 = load i32, ptr %111, align 4, !tbaa !3
  %113 = add nuw nsw i64 %110, 1
  %114 = getelementptr i32, ptr %93, i64 %110
  store i32 %112, ptr %114, align 4, !tbaa !3
  %115 = getelementptr i32, ptr %.unpack, i64 %113
  %116 = load i32, ptr %115, align 4, !tbaa !3
  %117 = add nuw nsw i64 %110, 2
  %118 = getelementptr i32, ptr %93, i64 %113
  store i32 %116, ptr %118, align 4, !tbaa !3
  %119 = getelementptr i32, ptr %.unpack, i64 %117
  %120 = load i32, ptr %119, align 4, !tbaa !3
  %121 = add nuw nsw i64 %110, 3
  %122 = getelementptr i32, ptr %93, i64 %117
  store i32 %120, ptr %122, align 4, !tbaa !3
  %123 = getelementptr i32, ptr %.unpack, i64 %121
  %124 = load i32, ptr %123, align 4, !tbaa !3
  %125 = add nuw nsw i64 %110, 4
  %126 = getelementptr i32, ptr %93, i64 %121
  store i32 %124, ptr %126, align 4, !tbaa !3
  %exitcond713.not.3 = icmp eq i64 %125, %.unpack549.unpack.unpack551
  br i1 %exitcond713.not.3, label %.loopexit696, label %.lr.ph704, !llvm.loop !20

.loopexit696:                                     ; preds = %.lr.ph700.prol.loopexit, %.lr.ph700, %.lr.ph704.prol.loopexit, %.lr.ph704, %middle.block, %middle.block760
  %.ph = phi ptr [ %93, %middle.block760 ], [ %40, %middle.block ], [ %93, %.lr.ph704 ], [ %93, %.lr.ph704.prol.loopexit ], [ %40, %.lr.ph700 ], [ %40, %.lr.ph700.prol.loopexit ]
  br i1 %.not, label %.loopexit696.thread, label %.thread693

.thread693:                                       ; preds = %38, %.loopexit696
  %.ph730 = phi ptr [ %.ph, %.loopexit696 ], [ %40, %38 ]
  call void @free(ptr nonnull %.unpack554)
  br label %.loopexit696.thread

.loopexit696.thread:                              ; preds = %91, %.thread693, %.loopexit696
  %.ph727 = phi ptr [ %.ph730, %.thread693 ], [ %.ph, %.loopexit696 ], [ %93, %91 ]
  store ptr %.ph727, ptr @_QFEorg.0, align 8, !tbaa !7
  store i64 1, ptr @_QFEorg.7, align 8, !tbaa !7
  store i64 %.unpack549.unpack.unpack551, ptr @_QFEorg.8, align 8, !tbaa !7
  br label %._crit_edge702

._crit_edge702:                                   ; preds = %.lr.ph701.prol.loopexit, %.lr.ph701, %middle.block744, %.preheader697, %.loopexit696.thread
  %.unpack566 = load ptr, ptr @_QFEb1.0, align 8, !tbaa !7
  %.unpack573.unpack.unpack575 = load i64, ptr @_QFEb1.8, align 8, !tbaa !7
  %.not578 = icmp eq ptr %.unpack566, null
  br i1 %.not578, label %129, label %.preheader

.preheader:                                       ; preds = %._crit_edge702
  %127 = icmp sgt i64 %.unpack573.unpack.unpack575, 0
  br i1 %127, label %.lr.ph705.preheader, label %.loopexit

.lr.ph705.preheader:                              ; preds = %.preheader
  %128 = shl nuw i64 %.unpack573.unpack.unpack575, 2
  call void @llvm.memset.p0.i64(ptr nonnull align 4 %.unpack566, i8 0, i64 %128, i1 false), !tbaa !3
  br label %.loopexit

129:                                              ; preds = %._crit_edge702
  %130 = call {} @_FortranAReportFatalUserError(ptr nonnull @_QQcl.16373402fa3425c6e46827601abb88fa, ptr nonnull @_QQcl.4344370f33e68a5758c9fbecc3ac4922, i32 71)
  %.unpack658.unpack.unpack = load i64, ptr @_QFEb1.7, align 8, !tbaa !7
  %131 = icmp eq i64 %.unpack573.unpack.unpack575, 0
  %132 = select i1 %131, i64 1, i64 %.unpack658.unpack.unpack
  store ptr null, ptr @_QFEb1.0, align 8, !tbaa !7
  store i64 %132, ptr @_QFEb1.7, align 8, !tbaa !7
  store i64 %.unpack573.unpack.unpack575, ptr @_QFEb1.8, align 8, !tbaa !7
  %.unpack579.pre = load ptr, ptr @_QFEa1.0, align 8, !tbaa !7
  %.unpack586.unpack.unpack588.pre = load i64, ptr @_QFEa1.8, align 8, !tbaa !7
  br label %.loopexit

.loopexit:                                        ; preds = %.lr.ph705.preheader, %.preheader, %129
  %.unpack586.unpack.unpack588 = phi i64 [ %.unpack549.unpack.unpack551, %.lr.ph705.preheader ], [ %.unpack549.unpack.unpack551, %.preheader ], [ %.unpack586.unpack.unpack588.pre, %129 ]
  %.unpack579 = phi ptr [ %.unpack, %.lr.ph705.preheader ], [ %.unpack, %.preheader ], [ %.unpack579.pre, %129 ]
  store ptr %.unpack579, ptr %2, align 8, !tbaa !7
  %.fca.1.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 1
  store i64 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 %2, i64 0, i32 2
  store i32 20180515, ptr %.fca.2.gep, align 8, !tbaa !7
  %.fca.3.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 3
  store i8 1, ptr %.fca.3.gep, align 4, !tbaa !7
  %.fca.4.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 4
  store i8 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 %2, i64 0, i32 5
  store i8 0, ptr %.fca.5.gep, align 2, !tbaa !7
  %.fca.6.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep, align 1, !tbaa !7
  %.fca.7.0.0.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 7, i64 0, i64 0
  store i64 1, ptr %.fca.7.0.0.gep, align 8, !tbaa !7
  %.fca.7.0.1.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 7, i64 0, i64 1
  store i64 %.unpack586.unpack.unpack588, ptr %.fca.7.0.1.gep, align 8, !tbaa !7
  %.fca.7.0.2.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 7, i64 0, i64 2
  store i64 4, ptr %.fca.7.0.2.gep, align 8, !tbaa !7
  store i32 1, ptr %3, align 4, !tbaa !3
  %.unpack598.unpack.unpack = load i64, ptr @_QFEb1.7, align 8, !tbaa !7
  %133 = icmp eq i64 %.unpack573.unpack.unpack575, 0
  %134 = select i1 %133, i64 1, i64 %.unpack598.unpack.unpack
  store ptr %.unpack566, ptr %1, align 8, !tbaa !7
  %.fca.1.gep216 = 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.gep216, align 8, !tbaa !7
  %.fca.2.gep218 = 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.gep218, align 8, !tbaa !7
  %.fca.3.gep220 = 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.gep220, align 4, !tbaa !7
  %.fca.4.gep222 = 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.gep222, align 1, !tbaa !7
  %.fca.5.gep224 = 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.gep224, align 2, !tbaa !7
  %.fca.6.gep226 = 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.gep226, align 1, !tbaa !7
  %.fca.7.0.0.gep228 = 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 %134, ptr %.fca.7.0.0.gep228, align 8, !tbaa !7
  %.fca.7.0.1.gep230 = 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 %.unpack573.unpack.unpack575, ptr %.fca.7.0.1.gep230, align 8, !tbaa !7
  %.fca.7.0.2.gep232 = 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.gep232, align 8, !tbaa !7
  call void @_QMmodule_sortPmergesort(ptr nonnull %2, ptr nonnull %3, ptr nonnull %4, ptr nonnull %1)
  %135 = load i32, ptr %4, align 4, !tbaa !3
  %136 = icmp sgt i32 %135, 0
  br i1 %136, label %.lr.ph707.preheader, label %._crit_edge708

.lr.ph707.preheader:                              ; preds = %.loopexit
  %137 = zext i32 %135 to i64
  br label %.lr.ph707

.lr.ph707:                                        ; preds = %.lr.ph707.preheader, %154
  %indvars.iv714 = phi i64 [ 1, %.lr.ph707.preheader ], [ %indvars.iv.next715, %154 ]
  %.unpack603 = load ptr, ptr @_QFEorg.0, align 8, !tbaa !7
  %.unpack610.unpack.unpack = load i64, ptr @_QFEorg.7, align 8, !tbaa !7
  %138 = sub i64 %indvars.iv714, %.unpack610.unpack.unpack
  %139 = getelementptr i32, ptr %.unpack603, i64 %138
  %140 = load i32, ptr %139, align 4, !tbaa !3
  %.unpack615 = load ptr, ptr @_QFEa1.0, align 8, !tbaa !7
  %141 = load i32, ptr %4, align 4, !tbaa !3
  %142 = sext i32 %141 to i64
  %143 = add nsw i64 %142, -1
  %144 = getelementptr i32, ptr %.unpack615, i64 %143
  %145 = load i32, ptr %144, align 4, !tbaa !3
  %146 = icmp eq i32 %140, %145
  br i1 %146, label %147, label %151

147:                                              ; preds = %.lr.ph707
  %148 = call ptr @_FortranAioBeginExternalListOutput(i32 -1, ptr nonnull @_QQcl.4344370f33e68a5758c9fbecc3ac4922, i32 77)
  %149 = load i32, ptr %4, align 4, !tbaa !3
  %150 = add i32 %149, -1
  br label %154

151:                                              ; preds = %.lr.ph707
  %152 = call ptr @_FortranAioBeginExternalListOutput(i32 -1, ptr nonnull @_QQcl.4344370f33e68a5758c9fbecc3ac4922, i32 79)
  %153 = load i32, ptr %4, align 4, !tbaa !3
  br label %154

154:                                              ; preds = %147, %151
  %.sink737 = phi i32 [ %150, %147 ], [ %153, %151 ]
  %.sink732 = phi ptr [ %148, %147 ], [ %152, %151 ]
  %.unpack639.sink = load ptr, ptr @_QFEa1.0, align 8, !tbaa !7
  %155 = sext i32 %.sink737 to i64
  %156 = add nsw i64 %155, -1
  %157 = getelementptr i32, ptr %.unpack639.sink, i64 %156
  %158 = load i32, ptr %157, align 4, !tbaa !3
  %159 = call i1 @_FortranAioOutputInteger32(ptr %.sink732, i32 %158)
  %160 = call i32 @_FortranAioEndIoStatement(ptr %.sink732)
  %indvars.iv.next715 = add nuw nsw i64 %indvars.iv714, 1
  %exitcond717.not = icmp eq i64 %indvars.iv714, %137
  br i1 %exitcond717.not, label %._crit_edge708, label %.lr.ph707

._crit_edge708:                                   ; preds = %154, %.loopexit
  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 {} @_FortranAReportFatalUserError(ptr, ptr, i32) local_unnamed_addr

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

declare i1 @_FortranAioOutputInteger32(ptr, i32) local_unnamed_addr

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smax.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

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 = { nofree nosync nounwind memory(readwrite, inaccessiblemem: none) }
attributes #3 = { nofree norecurse 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, !13}
!13 = !{!"llvm.loop.unroll.disable"}
!14 = distinct !{!14, !10, !11}
!15 = distinct !{!15, !13}
!16 = distinct !{!16, !10}
!17 = distinct !{!17, !10}
!18 = distinct !{!18, !10, !11}
!19 = distinct !{!19, !13}
!20 = distinct !{!20, !10}
