module mod_union_find
  implicit none
  integer :: n
  integer, allocatable :: par(:), rnk(:), siz(:)
  private
  public :: initialize, finalize, find, same, unite, size_of
contains
  subroutine initialize(m)
    implicit none
    integer, intent(in) :: m
    integer :: i
    n = m
    if (allocated(par)) deallocate(par)
    if (allocated(rnk)) deallocate(rnk)
    if (allocated(siz)) deallocate(siz)
    allocate(par(n),rnk(n),siz(n))
    rnk = 0
    siz = 1
    do i = 1, n
      par(i) = i
    end do
    return
  end subroutine initialize
  subroutine finalize()
    implicit none
    if (allocated(par)) deallocate(par)
    if (allocated(rnk)) deallocate(rnk)
    if (allocated(siz)) deallocate(siz)
    return
  end subroutine finalize
  recursive function find(i) result(j)
    implicit none
    integer, intent(in) :: i
    integer :: j
    if (par(i).ne.i) then
      par(i) = find(par(i))
    end if
    j = par(i)
    return
  end function find
  function same(i,j) result(y)
    implicit none
    integer, intent(in) :: i, j
    logical :: y
    y = find(i).eq.find(j)
  end function same
  subroutine unite(i,j)
    implicit none
    integer, intent(in) :: i, j
    integer :: x, y
    x = find(i)
    y = find(j)
    if (x.eq.y) return
    if (rnk(x).lt.rnk(y)) then
      par(x) = y
      siz(y) = siz(y)+siz(x)
    else
      par(y) = x
      siz(x) = siz(x)+siz(y)
      if (rnk(x).eq.rnk(y)) rnk(x) = rnk(x)+1
    end if
    return
  end subroutine unite
  function size_of(i) result(s)
    implicit none
    integer, intent(in) :: i
    integer :: s
    s = siz(find(i))
  end function size_of
end module mod_union_find
program alternating_path
  use mod_union_find
  implicit none
  integer :: h, w, a(400,400), i, j, num(160000,0:1)
  integer(8) :: m
  character(400) :: s
  a = 0
  num = 0
  read(*,*) h, w
  call initialize(h*w)
  do i = 1, h
    read(*,*) s
    s = trim(adjustl(s))
    do j = 1, w
      if (s(j:j).eq."#") a(i,j) = 1
      if (i.ne.1.and.a(i,j).ne.a(i-1,j)) call unite((i-1)*w+j,(i-2)*w+j)
      if (j.ne.1.and.a(i,j).ne.a(i,j-1)) call unite((i-1)*w+j,(i-1)*w+j-1)
    end do
  end do
  do i = 1, h
    do j = 1, w
      num(find((i-1)*w+j),a(i,j)) = num(find((i-1)*w+j),a(i,j))+1
    end do
  end do
  m = 0_8
  do i = 1, h*w
    m = m+int(num(i,0),8)*int(num(i,1),8)
  end do
  write(*,'(i0)') m
  call finalize()
  stop
end program alternating_path
; 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"

@_QMmod_union_findEn = local_unnamed_addr global i32 undef
@_QMmod_union_findEpar = local_unnamed_addr global { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] } { ptr null, i64 ptrtoint (ptr getelementptr (i32, ptr null, i32 1) to i64), i32 20180515, i8 1, i8 9, i8 2, i8 0, [1 x [3 x i64]] [[3 x i64] [i64 1, i64 0, i64 ptrtoint (ptr getelementptr (i32, ptr null, i32 1) to i64)]] }
@_QMmod_union_findErnk = local_unnamed_addr global { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] } { ptr null, i64 ptrtoint (ptr getelementptr (i32, ptr null, i32 1) to i64), i32 20180515, i8 1, i8 9, i8 2, i8 0, [1 x [3 x i64]] [[3 x i64] [i64 1, i64 0, i64 ptrtoint (ptr getelementptr (i32, ptr null, i32 1) to i64)]] }
@_QMmod_union_findEsiz = local_unnamed_addr global { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] } { ptr null, i64 ptrtoint (ptr getelementptr (i32, ptr null, i32 1) to i64), i32 20180515, i8 1, i8 9, i8 2, i8 0, [1 x [3 x i64]] [[3 x i64] [i64 1, i64 0, i64 ptrtoint (ptr getelementptr (i32, ptr null, i32 1) to i64)]] }
@_QQcl.533628dc3ea8911c19087a4f46cc2bad = linkonce constant [73 x i8] c"/home/ubuntu/Downloads/TheStack_IR/Collated/Fortran/Source_5146/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"
@_QFEa = internal unnamed_addr global [400 x [400 x i32]] undef
@_QFEnum = internal unnamed_addr global [2 x [160000 x i32]] undef
@_QFEs = internal global [400 x i8] undef
@_QQcl.23 = linkonce constant [1 x i8] c"#"
@_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

define void @_QMmod_union_findPinitialize(ptr nocapture readonly %0) local_unnamed_addr {
  %2 = load i32, ptr %0, align 4, !tbaa !3
  store i32 %2, ptr @_QMmod_union_findEn, align 4, !tbaa !3
  %.unpack = load ptr, ptr @_QMmod_union_findEpar, align 16, !tbaa !7
  %.not = icmp eq ptr %.unpack, null
  br i1 %.not, label %4, label %3

3:                                                ; preds = %1
  tail call void @free(ptr nonnull %.unpack)
  store ptr null, ptr @_QMmod_union_findEpar, align 16, !tbaa !7
  store i64 4, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 1), align 8, !tbaa !7
  store i32 20180515, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 2), align 16, !tbaa !7
  store i8 1, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 3), align 4, !tbaa !7
  store i8 9, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 4), align 1, !tbaa !7
  store i8 2, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 5), align 2, !tbaa !7
  store i8 0, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 6), align 1, !tbaa !7
  store i64 1, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 7), align 8, !tbaa !7
  store i64 0, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 7, i64 0, i64 1), align 16, !tbaa !7
  store i64 4, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 7, i64 0, i64 2), align 8, !tbaa !7
  br label %4

4:                                                ; preds = %3, %1
  %.unpack495 = load ptr, ptr @_QMmod_union_findErnk, align 16, !tbaa !7
  %.not507 = icmp eq ptr %.unpack495, null
  br i1 %.not507, label %6, label %5

5:                                                ; preds = %4
  tail call void @free(ptr nonnull %.unpack495)
  store ptr null, ptr @_QMmod_union_findErnk, align 16, !tbaa !7
  store i64 4, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 1), align 8, !tbaa !7
  store i32 20180515, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 2), align 16, !tbaa !7
  store i8 1, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 3), align 4, !tbaa !7
  store i8 9, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 4), align 1, !tbaa !7
  store i8 2, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 5), align 2, !tbaa !7
  store i8 0, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 6), align 1, !tbaa !7
  store i64 1, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 7), align 8, !tbaa !7
  store i64 0, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 7, i64 0, i64 1), align 16, !tbaa !7
  store i64 4, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 7, i64 0, i64 2), align 8, !tbaa !7
  br label %6

6:                                                ; preds = %5, %4
  %.unpack508 = load ptr, ptr @_QMmod_union_findEsiz, align 16, !tbaa !7
  %.not520 = icmp eq ptr %.unpack508, null
  br i1 %.not520, label %8, label %7

7:                                                ; preds = %6
  tail call void @free(ptr nonnull %.unpack508)
  br label %8

8:                                                ; preds = %7, %6
  %9 = load i32, ptr @_QMmod_union_findEn, align 4, !tbaa !3
  %10 = tail call i32 @llvm.smax.i32(i32 %9, i32 0)
  %11 = zext i32 %10 to i64
  %12 = shl nuw nsw i64 %11, 2
  %13 = tail call ptr @malloc(i64 %12)
  store ptr %13, ptr @_QMmod_union_findEpar, align 16, !tbaa !7
  store i64 4, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 1), align 8, !tbaa !7
  store i32 20180515, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 2), align 16, !tbaa !7
  store i8 1, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 3), align 4, !tbaa !7
  store i8 9, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 4), align 1, !tbaa !7
  store i8 2, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 5), align 2, !tbaa !7
  store i8 0, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 6), align 1, !tbaa !7
  store i64 1, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 7), align 8, !tbaa !7
  store i64 %11, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 7, i64 0, i64 1), align 16, !tbaa !7
  store i64 4, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 7, i64 0, i64 2), align 8, !tbaa !7
  %14 = tail call ptr @malloc(i64 %12)
  store ptr %14, ptr @_QMmod_union_findErnk, align 16, !tbaa !7
  store i64 4, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 1), align 8, !tbaa !7
  store i32 20180515, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 2), align 16, !tbaa !7
  store i8 1, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 3), align 4, !tbaa !7
  store i8 9, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 4), align 1, !tbaa !7
  store i8 2, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 5), align 2, !tbaa !7
  store i8 0, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 6), align 1, !tbaa !7
  store i64 1, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 7), align 8, !tbaa !7
  store i64 %11, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 7, i64 0, i64 1), align 16, !tbaa !7
  store i64 4, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 7, i64 0, i64 2), align 8, !tbaa !7
  %15 = tail call ptr @malloc(i64 %12)
  store ptr %15, ptr @_QMmod_union_findEsiz, align 16, !tbaa !7
  store i64 4, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 1), align 8, !tbaa !7
  store i32 20180515, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 2), align 16, !tbaa !7
  store i8 1, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 3), align 4, !tbaa !7
  store i8 9, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 4), align 1, !tbaa !7
  store i8 2, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 5), align 2, !tbaa !7
  store i8 0, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 6), align 1, !tbaa !7
  store i64 1, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 7), align 8, !tbaa !7
  store i64 %11, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 7, i64 0, i64 1), align 16, !tbaa !7
  store i64 4, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 7, i64 0, i64 2), align 8, !tbaa !7
  %.not560 = icmp eq ptr %14, null
  br i1 %.not560, label %18, label %.preheader629

.preheader629:                                    ; preds = %8
  %.not633 = icmp slt i32 %9, 1
  br i1 %.not633, label %.loopexit630, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %.preheader629
  %16 = tail call i64 @llvm.smax.i64(i64 %11, i64 1)
  %17 = shl nuw nsw i64 %16, 2
  tail call void @llvm.memset.p0.i64(ptr nonnull align 4 %14, i8 0, i64 %17, i1 false), !tbaa !3
  br label %.loopexit630

18:                                               ; preds = %8
  %19 = tail call {} @_FortranAReportFatalUserError(ptr nonnull @_QQcl.16373402fa3425c6e46827601abb88fa, ptr nonnull @_QQcl.533628dc3ea8911c19087a4f46cc2bad, i32 17)
  %.unpack614.unpack.unpack = load i64, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 7), align 8, !tbaa !7
  %20 = icmp slt i32 %9, 1
  %21 = select i1 %20, i64 1, i64 %.unpack614.unpack.unpack
  store ptr null, ptr @_QMmod_union_findErnk, align 16, !tbaa !7
  store i64 4, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 1), align 8, !tbaa !7
  store i32 20180515, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 2), align 16, !tbaa !7
  store i8 1, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 3), align 4, !tbaa !7
  store i8 9, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 4), align 1, !tbaa !7
  store i8 2, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 5), align 2, !tbaa !7
  store i8 0, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 6), align 1, !tbaa !7
  store i64 %21, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 7), align 8, !tbaa !7
  store i64 %11, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 7, i64 0, i64 1), align 16, !tbaa !7
  store i64 4, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 7, i64 0, i64 2), align 8, !tbaa !7
  %.unpack561.pre = load ptr, ptr @_QMmod_union_findEsiz, align 16, !tbaa !7
  %.unpack568.unpack.unpack570.pre = load i64, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 7, i64 0, i64 1), align 16, !tbaa !7
  br label %.loopexit630

.loopexit630:                                     ; preds = %.lr.ph.preheader, %.preheader629, %18
  %.unpack568.unpack.unpack570 = phi i64 [ %11, %.lr.ph.preheader ], [ %11, %.preheader629 ], [ %.unpack568.unpack.unpack570.pre, %18 ]
  %.unpack561 = phi ptr [ %15, %.lr.ph.preheader ], [ %15, %.preheader629 ], [ %.unpack561.pre, %18 ]
  %.not573 = icmp eq ptr %.unpack561, null
  br i1 %.not573, label %29, label %.preheader

.preheader:                                       ; preds = %.loopexit630
  %22 = icmp sgt i64 %.unpack568.unpack.unpack570, 0
  br i1 %22, label %.lr.ph631.preheader, label %.loopexit

.lr.ph631.preheader:                              ; preds = %.preheader
  %min.iters.check = icmp ult i64 %.unpack568.unpack.unpack570, 8
  br i1 %min.iters.check, label %.lr.ph631.preheader650, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph631.preheader
  %n.vec = and i64 %.unpack568.unpack.unpack570, -8
  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 %.unpack561, i64 %index
  store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, ptr %23, align 4, !tbaa !3
  %24 = getelementptr i32, ptr %23, i64 4
  store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, ptr %24, align 4, !tbaa !3
  %index.next = add nuw i64 %index, 8
  %25 = icmp eq i64 %index.next, %n.vec
  br i1 %25, label %middle.block, label %vector.body, !llvm.loop !9

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %.unpack568.unpack.unpack570, %n.vec
  br i1 %cmp.n, label %.loopexit, label %.lr.ph631.preheader650

.lr.ph631.preheader650:                           ; preds = %.lr.ph631.preheader, %middle.block
  %.ph = phi i64 [ 0, %.lr.ph631.preheader ], [ %n.vec, %middle.block ]
  br label %.lr.ph631

.lr.ph631:                                        ; preds = %.lr.ph631.preheader650, %.lr.ph631
  %26 = phi i64 [ %27, %.lr.ph631 ], [ %.ph, %.lr.ph631.preheader650 ]
  %27 = add nuw nsw i64 %26, 1
  %28 = getelementptr i32, ptr %.unpack561, i64 %26
  store i32 1, ptr %28, align 4, !tbaa !3
  %exitcond.not = icmp eq i64 %27, %.unpack568.unpack.unpack570
  br i1 %exitcond.not, label %.loopexit, label %.lr.ph631, !llvm.loop !12

29:                                               ; preds = %.loopexit630
  %30 = tail call {} @_FortranAReportFatalUserError(ptr nonnull @_QQcl.16373402fa3425c6e46827601abb88fa, ptr nonnull @_QQcl.533628dc3ea8911c19087a4f46cc2bad, i32 18)
  %.unpack593.unpack.unpack = load i64, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 7), align 8, !tbaa !7
  %31 = icmp eq i64 %.unpack568.unpack.unpack570, 0
  %32 = select i1 %31, i64 1, i64 %.unpack593.unpack.unpack
  store ptr null, ptr @_QMmod_union_findEsiz, align 16, !tbaa !7
  store i64 4, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 1), align 8, !tbaa !7
  store i32 20180515, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 2), align 16, !tbaa !7
  store i8 1, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 3), align 4, !tbaa !7
  store i8 9, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 4), align 1, !tbaa !7
  store i8 2, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 5), align 2, !tbaa !7
  store i8 0, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 6), align 1, !tbaa !7
  store i64 %32, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 7), align 8, !tbaa !7
  store i64 %.unpack568.unpack.unpack570, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 7, i64 0, i64 1), align 16, !tbaa !7
  store i64 4, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 7, i64 0, i64 2), align 8, !tbaa !7
  br label %.loopexit

.loopexit:                                        ; preds = %.lr.ph631, %middle.block, %.preheader, %29
  %33 = load i32, ptr @_QMmod_union_findEn, align 4, !tbaa !3
  %34 = icmp sgt i32 %33, 0
  br i1 %34, label %.lr.ph632, label %._crit_edge

.lr.ph632:                                        ; preds = %.loopexit
  %35 = zext i32 %33 to i64
  %.unpack574 = load ptr, ptr @_QMmod_union_findEpar, align 16, !tbaa !7
  %.unpack581.unpack.unpack = load i64, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 7), align 8, !tbaa !7
  %min.iters.check640 = icmp ult i32 %33, 8
  br i1 %min.iters.check640, label %scalar.ph639.preheader, label %vector.ph641

vector.ph641:                                     ; preds = %.lr.ph632
  %n.vec643 = and i64 %35, 4294967288
  %ind.end = or i64 %n.vec643, 1
  br label %vector.body646

vector.body646:                                   ; preds = %vector.body646, %vector.ph641
  %index647 = phi i64 [ 0, %vector.ph641 ], [ %index.next649, %vector.body646 ]
  %vec.ind = phi <4 x i32> [ <i32 1, i32 2, i32 3, i32 4>, %vector.ph641 ], [ %vec.ind.next, %vector.body646 ]
  %step.add = add <4 x i32> %vec.ind, <i32 4, i32 4, i32 4, i32 4>
  %offset.idx = or i64 %index647, 1
  %36 = sub i64 %offset.idx, %.unpack581.unpack.unpack
  %37 = getelementptr i32, ptr %.unpack574, i64 %36
  store <4 x i32> %vec.ind, ptr %37, align 4, !tbaa !3
  %38 = getelementptr i32, ptr %37, i64 4
  store <4 x i32> %step.add, ptr %38, align 4, !tbaa !3
  %index.next649 = add nuw i64 %index647, 8
  %vec.ind.next = add <4 x i32> %vec.ind, <i32 8, i32 8, i32 8, i32 8>
  %39 = icmp eq i64 %index.next649, %n.vec643
  br i1 %39, label %middle.block638, label %vector.body646, !llvm.loop !13

middle.block638:                                  ; preds = %vector.body646
  %cmp.n645 = icmp eq i64 %n.vec643, %35
  br i1 %cmp.n645, label %._crit_edge, label %scalar.ph639.preheader

scalar.ph639.preheader:                           ; preds = %.lr.ph632, %middle.block638
  %indvars.iv.ph = phi i64 [ 1, %.lr.ph632 ], [ %ind.end, %middle.block638 ]
  br label %scalar.ph639

scalar.ph639:                                     ; preds = %scalar.ph639.preheader, %scalar.ph639
  %indvars.iv = phi i64 [ %indvars.iv.next, %scalar.ph639 ], [ %indvars.iv.ph, %scalar.ph639.preheader ]
  %40 = sub i64 %indvars.iv, %.unpack581.unpack.unpack
  %41 = getelementptr i32, ptr %.unpack574, i64 %40
  %42 = trunc i64 %indvars.iv to i32
  store i32 %42, ptr %41, align 4, !tbaa !3
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond635.not = icmp eq i64 %indvars.iv, %35
  br i1 %exitcond635.not, label %._crit_edge, label %scalar.ph639, !llvm.loop !14

._crit_edge:                                      ; preds = %scalar.ph639, %middle.block638, %.loopexit
  ret void
}

; Function Attrs: mustprogress nounwind willreturn
define void @_QMmod_union_findPfinalize() local_unnamed_addr #2 {
  %.unpack = load ptr, ptr @_QMmod_union_findEpar, align 16, !tbaa !7
  %.not = icmp eq ptr %.unpack, null
  br i1 %.not, label %2, label %1

1:                                                ; preds = %0
  tail call void @free(ptr nonnull %.unpack)
  store ptr null, ptr @_QMmod_union_findEpar, align 16, !tbaa !7
  store i64 4, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 1), align 8, !tbaa !7
  store i32 20180515, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 2), align 16, !tbaa !7
  store i8 1, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 3), align 4, !tbaa !7
  store i8 9, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 4), align 1, !tbaa !7
  store i8 2, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 5), align 2, !tbaa !7
  store i8 0, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 6), align 1, !tbaa !7
  store i64 1, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 7), align 8, !tbaa !7
  store i64 0, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 7, i64 0, i64 1), align 16, !tbaa !7
  store i64 4, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 7, i64 0, i64 2), align 8, !tbaa !7
  br label %2

2:                                                ; preds = %1, %0
  %.unpack188 = load ptr, ptr @_QMmod_union_findErnk, align 16, !tbaa !7
  %.not200 = icmp eq ptr %.unpack188, null
  br i1 %.not200, label %4, label %3

3:                                                ; preds = %2
  tail call void @free(ptr nonnull %.unpack188)
  store ptr null, ptr @_QMmod_union_findErnk, align 16, !tbaa !7
  store i64 4, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 1), align 8, !tbaa !7
  store i32 20180515, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 2), align 16, !tbaa !7
  store i8 1, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 3), align 4, !tbaa !7
  store i8 9, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 4), align 1, !tbaa !7
  store i8 2, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 5), align 2, !tbaa !7
  store i8 0, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 6), align 1, !tbaa !7
  store i64 1, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 7), align 8, !tbaa !7
  store i64 0, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 7, i64 0, i64 1), align 16, !tbaa !7
  store i64 4, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 7, i64 0, i64 2), align 8, !tbaa !7
  br label %4

4:                                                ; preds = %3, %2
  %.unpack201 = load ptr, ptr @_QMmod_union_findEsiz, align 16, !tbaa !7
  %.not213 = icmp eq ptr %.unpack201, null
  br i1 %.not213, label %6, label %5

5:                                                ; preds = %4
  tail call void @free(ptr nonnull %.unpack201)
  store ptr null, ptr @_QMmod_union_findEsiz, align 16, !tbaa !7
  store i64 4, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 1), align 8, !tbaa !7
  store i32 20180515, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 2), align 16, !tbaa !7
  store i8 1, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 3), align 4, !tbaa !7
  store i8 9, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 4), align 1, !tbaa !7
  store i8 2, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 5), align 2, !tbaa !7
  store i8 0, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 6), align 1, !tbaa !7
  store i64 1, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 7), align 8, !tbaa !7
  store i64 0, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 7, i64 0, i64 1), align 16, !tbaa !7
  store i64 4, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 7, i64 0, i64 2), align 8, !tbaa !7
  br label %6

6:                                                ; preds = %5, %4
  ret void
}

; Function Attrs: nofree nosync nounwind memory(readwrite, inaccessiblemem: none)
define i32 @_QMmod_union_findPfind(ptr nocapture readonly %0) local_unnamed_addr #3 {
  %.unpack = load ptr, ptr @_QMmod_union_findEpar, align 16, !tbaa !7
  %.unpack67.unpack.unpack = load i64, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 7), align 8, !tbaa !7
  %2 = load i32, ptr %0, align 4, !tbaa !3
  %3 = sext i32 %2 to i64
  %4 = sub i64 %3, %.unpack67.unpack.unpack
  %5 = getelementptr i32, ptr %.unpack, i64 %4
  %6 = load i32, ptr %5, align 4, !tbaa !3
  %.not = icmp eq i32 %6, %2
  br i1 %.not, label %13, label %7

7:                                                ; preds = %1
  %8 = tail call i32 @_QMmod_union_findPfind(ptr nonnull %5)
  %.unpack84 = load ptr, ptr @_QMmod_union_findEpar, align 16, !tbaa !7
  %.unpack91.unpack.unpack = load i64, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 7), align 8, !tbaa !7
  %9 = load i32, ptr %0, align 4, !tbaa !3
  %10 = sext i32 %9 to i64
  %11 = sub i64 %10, %.unpack91.unpack.unpack
  %12 = getelementptr i32, ptr %.unpack84, i64 %11
  store i32 %8, ptr %12, align 4, !tbaa !3
  %.pre = load i32, ptr %0, align 4, !tbaa !3
  %.pre98 = sext i32 %.pre to i64
  %.pre99 = sub i64 %.pre98, %.unpack91.unpack.unpack
  br label %13

13:                                               ; preds = %7, %1
  %.pre-phi100 = phi i64 [ %.pre99, %7 ], [ %4, %1 ]
  %.unpack72 = phi ptr [ %.unpack84, %7 ], [ %.unpack, %1 ]
  %14 = getelementptr i32, ptr %.unpack72, i64 %.pre-phi100
  %15 = load i32, ptr %14, align 4, !tbaa !3
  ret i32 %15
}

; Function Attrs: nofree nosync nounwind memory(readwrite, inaccessiblemem: none)
define i32 @_QMmod_union_findPsame(ptr nocapture readonly %0, ptr nocapture readonly %1) local_unnamed_addr #3 {
  %3 = tail call i32 @_QMmod_union_findPfind(ptr %0)
  %4 = tail call i32 @_QMmod_union_findPfind(ptr %1)
  %5 = icmp eq i32 %3, %4
  %6 = zext i1 %5 to i32
  ret i32 %6
}

; Function Attrs: nofree nosync nounwind memory(readwrite, inaccessiblemem: none)
define void @_QMmod_union_findPunite(ptr nocapture readonly %0, ptr nocapture readonly %1) local_unnamed_addr #3 {
  %3 = tail call i32 @_QMmod_union_findPfind(ptr %0)
  %4 = tail call i32 @_QMmod_union_findPfind(ptr %1)
  %5 = icmp eq i32 %3, %4
  br i1 %5, label %41, label %6

6:                                                ; preds = %2
  %.unpack = load ptr, ptr @_QMmod_union_findErnk, align 16, !tbaa !7
  %.unpack143.unpack.unpack = load i64, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 7), align 8, !tbaa !7
  %7 = sext i32 %3 to i64
  %8 = sub i64 %7, %.unpack143.unpack.unpack
  %9 = getelementptr i32, ptr %.unpack, i64 %8
  %10 = load i32, ptr %9, align 4, !tbaa !3
  %11 = sext i32 %4 to i64
  %12 = sub i64 %11, %.unpack143.unpack.unpack
  %13 = getelementptr i32, ptr %.unpack, i64 %12
  %14 = load i32, ptr %13, align 4, !tbaa !3
  %15 = icmp slt i32 %10, %14
  %.unpack184 = load ptr, ptr @_QMmod_union_findEpar, align 16, !tbaa !7
  %.unpack191.unpack.unpack = load i64, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 7), align 8, !tbaa !7
  br i1 %15, label %16, label %26

16:                                               ; preds = %6
  %17 = sub i64 %7, %.unpack191.unpack.unpack
  %18 = getelementptr i32, ptr %.unpack184, i64 %17
  store i32 %4, ptr %18, align 4, !tbaa !3
  %.unpack196 = load ptr, ptr @_QMmod_union_findEsiz, align 16, !tbaa !7
  %.unpack203.unpack.unpack = load i64, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 7), align 8, !tbaa !7
  %19 = sub i64 %11, %.unpack203.unpack.unpack
  %20 = getelementptr i32, ptr %.unpack196, i64 %19
  %21 = load i32, ptr %20, align 4, !tbaa !3
  %22 = sub i64 %7, %.unpack203.unpack.unpack
  %23 = getelementptr i32, ptr %.unpack196, i64 %22
  %24 = load i32, ptr %23, align 4, !tbaa !3
  %25 = add i32 %24, %21
  store i32 %25, ptr %20, align 4, !tbaa !3
  br label %41

26:                                               ; preds = %6
  %27 = sub i64 %11, %.unpack191.unpack.unpack
  %28 = getelementptr i32, ptr %.unpack184, i64 %27
  store i32 %3, ptr %28, align 4, !tbaa !3
  %.unpack160 = load ptr, ptr @_QMmod_union_findEsiz, align 16, !tbaa !7
  %.unpack167.unpack.unpack = load i64, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 7), align 8, !tbaa !7
  %29 = sub i64 %7, %.unpack167.unpack.unpack
  %30 = getelementptr i32, ptr %.unpack160, i64 %29
  %31 = load i32, ptr %30, align 4, !tbaa !3
  %32 = sub i64 %11, %.unpack167.unpack.unpack
  %33 = getelementptr i32, ptr %.unpack160, i64 %32
  %34 = load i32, ptr %33, align 4, !tbaa !3
  %35 = add i32 %34, %31
  store i32 %35, ptr %30, align 4, !tbaa !3
  %36 = load i32, ptr %9, align 4, !tbaa !3
  %37 = load i32, ptr %13, align 4, !tbaa !3
  %38 = icmp eq i32 %36, %37
  br i1 %38, label %39, label %41

39:                                               ; preds = %26
  %40 = add i32 %36, 1
  store i32 %40, ptr %9, align 4, !tbaa !3
  br label %41

41:                                               ; preds = %16, %39, %26, %2
  ret void
}

; Function Attrs: nofree nosync nounwind memory(readwrite, inaccessiblemem: none)
define i32 @_QMmod_union_findPsize_of(ptr nocapture readonly %0) local_unnamed_addr #3 {
  %.unpack = load ptr, ptr @_QMmod_union_findEsiz, align 16, !tbaa !7
  %.unpack7.unpack.unpack = load i64, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 7), align 8, !tbaa !7
  %2 = tail call i32 @_QMmod_union_findPfind(ptr %0)
  %3 = sext i32 %2 to i64
  %4 = sub i64 %3, %.unpack7.unpack.unpack
  %5 = getelementptr i32, ptr %.unpack, i64 %4
  %6 = load i32, ptr %5, align 4, !tbaa !3
  ret i32 %6
}

; Function Attrs: noreturn
define void @_QQmain() local_unnamed_addr #4 {
.preheader.preheader:
  %0 = alloca { ptr, i64, i32, i8, i8, i8, i8 }, align 8
  %1 = alloca { ptr, i64, i32, i8, i8, i8, i8 }, align 8
  %2 = alloca i32, align 4
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca { ptr, i64, i32, i8, i8, i8, i8 }, align 8
  %9 = alloca { ptr, i64, i32, i8, i8, i8, i8 }, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(640000) @_QFEa, i8 0, i64 640000, i1 false), !tbaa !3
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(1280000) @_QFEnum, i8 0, i64 1280000, i1 false), !tbaa !3
  %13 = tail call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.533628dc3ea8911c19087a4f46cc2bad, i32 79)
  %14 = call i1 @_FortranAioInputInteger(ptr %13, ptr nonnull %11, i32 4)
  %15 = call i1 @_FortranAioInputInteger(ptr %13, ptr nonnull %12, i32 4)
  %16 = call i32 @_FortranAioEndIoStatement(ptr %13)
  %17 = load i32, ptr %11, align 4, !tbaa !3
  %18 = load i32, ptr %12, align 4, !tbaa !3
  %19 = mul i32 %18, %17
  store i32 %19, ptr %10, align 4, !tbaa !3
  call void @_QMmod_union_findPinitialize(ptr nonnull %10)
  %20 = load i32, ptr %11, align 4, !tbaa !3
  %21 = icmp sgt i32 %20, 0
  br i1 %21, label %.lr.ph181, label %._crit_edge188

.lr.ph181:                                        ; preds = %.preheader.preheader
  %22 = zext i32 %20 to i64
  %.fca.1.gep72 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %1, i64 0, i32 1
  %.fca.2.gep73 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %1, i64 0, i32 2
  %.fca.3.gep74 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %1, i64 0, i32 3
  %.fca.4.gep75 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %1, i64 0, i32 4
  %.fca.5.gep76 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %1, i64 0, i32 5
  %.fca.6.gep77 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %1, i64 0, i32 6
  %.fca.1.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %9, i64 0, i32 1
  %.fca.2.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %9, i64 0, i32 2
  %.fca.3.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %9, i64 0, i32 3
  %.fca.4.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %9, i64 0, i32 4
  %.fca.5.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %9, i64 0, i32 5
  %.fca.6.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %9, i64 0, i32 6
  %.fca.1.gep138 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %0, i64 0, i32 1
  %.fca.2.gep140 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %0, i64 0, i32 2
  %.fca.3.gep142 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %0, i64 0, i32 3
  %.fca.4.gep144 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %0, i64 0, i32 4
  %.fca.5.gep146 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %0, i64 0, i32 5
  %.fca.6.gep148 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %0, i64 0, i32 6
  %.fca.1.gep39 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %8, i64 0, i32 1
  %.fca.2.gep41 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %8, i64 0, i32 2
  %.fca.3.gep43 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %8, i64 0, i32 3
  %.fca.4.gep45 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %8, i64 0, i32 4
  %.fca.5.gep47 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %8, i64 0, i32 5
  %.fca.6.gep49 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %8, i64 0, i32 6
  br label %23

23:                                               ; preds = %.lr.ph181, %._crit_edge179
  %indvars.iv194 = phi i64 [ 1, %.lr.ph181 ], [ %indvars.iv.next195, %._crit_edge179 ]
  %24 = call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.533628dc3ea8911c19087a4f46cc2bad, i32 82)
  %25 = call i1 @_FortranAioInputAscii(ptr %24, ptr nonnull @_QFEs, i64 400)
  %26 = call i32 @_FortranAioEndIoStatement(ptr %24)
  store ptr @_QFEs, ptr %1, align 8, !tbaa !7
  store i64 400, ptr %.fca.1.gep72, align 8, !tbaa !7
  store i32 20180515, ptr %.fca.2.gep73, align 8, !tbaa !7
  store i8 0, ptr %.fca.3.gep74, align 4, !tbaa !7
  store i8 40, ptr %.fca.4.gep75, align 1, !tbaa !7
  store i8 0, ptr %.fca.5.gep76, align 2, !tbaa !7
  store i8 0, ptr %.fca.6.gep77, align 1, !tbaa !7
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %9, i8 0, i64 16, i1 false)
  store i32 20180515, ptr %.fca.2.gep, align 8, !tbaa !7
  store i8 0, ptr %.fca.3.gep, align 4, !tbaa !7
  store i8 40, ptr %.fca.4.gep, align 1, !tbaa !7
  store i8 2, ptr %.fca.5.gep, align 2, !tbaa !7
  store i8 0, ptr %.fca.6.gep, align 1, !tbaa !7
  %27 = call {} @_FortranAAdjustl(ptr nonnull %9, ptr nonnull %1, ptr nonnull @_QQcl.533628dc3ea8911c19087a4f46cc2bad, i32 83)
  %.fca.0.load = load ptr, ptr %9, align 8, !tbaa !7
  %.fca.1.load = load i64, ptr %.fca.1.gep, align 8, !tbaa !7
  store ptr %.fca.0.load, ptr %0, align 8, !tbaa !7
  store i64 %.fca.1.load, ptr %.fca.1.gep138, align 8, !tbaa !7
  store i32 20180515, ptr %.fca.2.gep140, align 8, !tbaa !7
  store i8 0, ptr %.fca.3.gep142, align 4, !tbaa !7
  store i8 40, ptr %.fca.4.gep144, align 1, !tbaa !7
  store i8 0, ptr %.fca.5.gep146, align 2, !tbaa !7
  store i8 0, ptr %.fca.6.gep148, align 1, !tbaa !7
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %8, i8 0, i64 16, i1 false)
  store i32 20180515, ptr %.fca.2.gep41, align 8, !tbaa !7
  store i8 0, ptr %.fca.3.gep43, align 4, !tbaa !7
  store i8 40, ptr %.fca.4.gep45, align 1, !tbaa !7
  store i8 2, ptr %.fca.5.gep47, align 2, !tbaa !7
  store i8 0, ptr %.fca.6.gep49, align 1, !tbaa !7
  %28 = call {} @_FortranATrim(ptr nonnull %8, ptr nonnull %0, ptr nonnull @_QQcl.533628dc3ea8911c19087a4f46cc2bad, i32 83)
  %.fca.0.load51 = load ptr, ptr %8, align 8, !tbaa !7
  %.fca.1.load54 = load i64, ptr %.fca.1.gep39, align 8, !tbaa !7
  %29 = call i64 @llvm.smin.i64(i64 %.fca.1.load54, i64 400)
  call void @llvm.memmove.p0.p0.i64(ptr nonnull align 16 @_QFEs, ptr align 1 %.fca.0.load51, i64 %29, i1 false)
  %30 = sub i64 400, %29
  %31 = icmp sgt i64 %30, 0
  br i1 %31, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %23
  %uglygep = getelementptr i8, ptr @_QFEs, i64 %29
  call void @llvm.memset.p0.i64(ptr align 1 %uglygep, i8 32, i64 %30, i1 false), !tbaa !3
  br label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph.preheader, %23
  call void @free(ptr %.fca.0.load51)
  call void @free(ptr %.fca.0.load)
  %32 = load i32, ptr %12, align 4, !tbaa !3
  %33 = icmp sgt i32 %32, 0
  br i1 %33, label %.lr.ph178, label %._crit_edge179

.lr.ph178:                                        ; preds = %._crit_edge
  %34 = zext i32 %32 to i64
  %35 = add nsw i64 %indvars.iv194, -1
  %36 = icmp ne i64 %indvars.iv194, 1
  %37 = add nsw i64 %indvars.iv194, -2
  %38 = trunc i64 %35 to i32
  %39 = trunc i64 %indvars.iv194 to i32
  %40 = add i32 %39, -2
  %41 = trunc i64 %35 to i32
  br label %42

42:                                               ; preds = %.lr.ph178, %_QMmod_union_findPunite.exit174
  %indvars.iv = phi i64 [ 1, %.lr.ph178 ], [ %indvars.iv.next, %_QMmod_union_findPunite.exit174 ]
  %43 = add nsw i64 %indvars.iv, -1
  %44 = getelementptr [400 x [1 x i8]], ptr @_QFEs, i64 0, i64 %43
  %45 = call i32 @_FortranACharacterCompareScalar1(ptr %44, ptr nonnull @_QQcl.23, i64 1, i64 1)
  %46 = icmp eq i32 %45, 0
  %47 = getelementptr [400 x [400 x i32]], ptr @_QFEa, i64 0, i64 %43, i64 %35
  br i1 %46, label %48, label %._crit_edge210

._crit_edge210:                                   ; preds = %42
  %.pre = load i32, ptr %47, align 4, !tbaa !3
  br label %49

48:                                               ; preds = %42
  store i32 1, ptr %47, align 4, !tbaa !3
  br label %49

49:                                               ; preds = %._crit_edge210, %48
  %50 = phi i32 [ %.pre, %._crit_edge210 ], [ 1, %48 ]
  %51 = getelementptr [400 x [400 x i32]], ptr @_QFEa, i64 0, i64 %43, i64 %37
  %52 = load i32, ptr %51, align 4, !tbaa !3
  %53 = icmp ne i32 %50, %52
  %54 = and i1 %36, %53
  br i1 %54, label %55, label %_QMmod_union_findPunite.exit

55:                                               ; preds = %49
  %56 = load i32, ptr %12, align 4, !tbaa !3
  %57 = mul i32 %56, %38
  %58 = trunc i64 %indvars.iv to i32
  %59 = add i32 %57, %58
  store i32 %59, ptr %7, align 4, !tbaa !3
  %60 = mul i32 %56, %40
  %61 = add i32 %60, %58
  store i32 %61, ptr %6, align 4, !tbaa !3
  %62 = call i32 @_QMmod_union_findPfind(ptr nonnull %7)
  %63 = call i32 @_QMmod_union_findPfind(ptr nonnull %6)
  %64 = icmp eq i32 %62, %63
  br i1 %64, label %_QMmod_union_findPunite.exit, label %65

65:                                               ; preds = %55
  %.unpack.i = load ptr, ptr @_QMmod_union_findErnk, align 16, !tbaa !7
  %.unpack143.unpack.unpack.i = load i64, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 7), align 8, !tbaa !7
  %66 = sext i32 %62 to i64
  %67 = sub i64 %66, %.unpack143.unpack.unpack.i
  %68 = getelementptr i32, ptr %.unpack.i, i64 %67
  %69 = load i32, ptr %68, align 4, !tbaa !3
  %70 = sext i32 %63 to i64
  %71 = sub i64 %70, %.unpack143.unpack.unpack.i
  %72 = getelementptr i32, ptr %.unpack.i, i64 %71
  %73 = load i32, ptr %72, align 4, !tbaa !3
  %74 = icmp slt i32 %69, %73
  %.unpack184.i = load ptr, ptr @_QMmod_union_findEpar, align 16, !tbaa !7
  %.unpack191.unpack.unpack.i = load i64, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 7), align 8, !tbaa !7
  br i1 %74, label %75, label %85

75:                                               ; preds = %65
  %76 = sub i64 %66, %.unpack191.unpack.unpack.i
  %77 = getelementptr i32, ptr %.unpack184.i, i64 %76
  store i32 %63, ptr %77, align 4, !tbaa !3
  %.unpack196.i = load ptr, ptr @_QMmod_union_findEsiz, align 16, !tbaa !7
  %.unpack203.unpack.unpack.i = load i64, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 7), align 8, !tbaa !7
  %78 = sub i64 %70, %.unpack203.unpack.unpack.i
  %79 = getelementptr i32, ptr %.unpack196.i, i64 %78
  %80 = load i32, ptr %79, align 4, !tbaa !3
  %81 = sub i64 %66, %.unpack203.unpack.unpack.i
  %82 = getelementptr i32, ptr %.unpack196.i, i64 %81
  %83 = load i32, ptr %82, align 4, !tbaa !3
  %84 = add i32 %83, %80
  store i32 %84, ptr %79, align 4, !tbaa !3
  br label %_QMmod_union_findPunite.exit

85:                                               ; preds = %65
  %86 = sub i64 %70, %.unpack191.unpack.unpack.i
  %87 = getelementptr i32, ptr %.unpack184.i, i64 %86
  store i32 %62, ptr %87, align 4, !tbaa !3
  %.unpack160.i = load ptr, ptr @_QMmod_union_findEsiz, align 16, !tbaa !7
  %.unpack167.unpack.unpack.i = load i64, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 7), align 8, !tbaa !7
  %88 = sub i64 %66, %.unpack167.unpack.unpack.i
  %89 = getelementptr i32, ptr %.unpack160.i, i64 %88
  %90 = load i32, ptr %89, align 4, !tbaa !3
  %91 = sub i64 %70, %.unpack167.unpack.unpack.i
  %92 = getelementptr i32, ptr %.unpack160.i, i64 %91
  %93 = load i32, ptr %92, align 4, !tbaa !3
  %94 = add i32 %93, %90
  store i32 %94, ptr %89, align 4, !tbaa !3
  %95 = load i32, ptr %68, align 4, !tbaa !3
  %96 = load i32, ptr %72, align 4, !tbaa !3
  %97 = icmp eq i32 %95, %96
  br i1 %97, label %98, label %_QMmod_union_findPunite.exit

98:                                               ; preds = %85
  %99 = add i32 %95, 1
  store i32 %99, ptr %68, align 4, !tbaa !3
  br label %_QMmod_union_findPunite.exit

_QMmod_union_findPunite.exit:                     ; preds = %98, %85, %75, %55, %49
  %100 = icmp ne i64 %indvars.iv, 1
  %101 = add nsw i64 %indvars.iv, -2
  %102 = getelementptr [400 x [400 x i32]], ptr @_QFEa, i64 0, i64 %101, i64 %35
  %103 = load i32, ptr %102, align 4, !tbaa !3
  %104 = icmp ne i32 %50, %103
  %105 = and i1 %100, %104
  br i1 %105, label %106, label %_QMmod_union_findPunite.exit174

106:                                              ; preds = %_QMmod_union_findPunite.exit
  %107 = load i32, ptr %12, align 4, !tbaa !3
  %108 = mul i32 %107, %41
  %109 = trunc i64 %indvars.iv to i32
  %110 = add i32 %108, %109
  store i32 %110, ptr %5, align 4, !tbaa !3
  %111 = add i32 %110, -1
  store i32 %111, ptr %4, align 4, !tbaa !3
  %112 = call i32 @_QMmod_union_findPfind(ptr nonnull %5)
  %113 = call i32 @_QMmod_union_findPfind(ptr nonnull %4)
  %114 = icmp eq i32 %112, %113
  br i1 %114, label %_QMmod_union_findPunite.exit174, label %115

115:                                              ; preds = %106
  %.unpack.i166 = load ptr, ptr @_QMmod_union_findErnk, align 16, !tbaa !7
  %.unpack143.unpack.unpack.i167 = load i64, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findErnk, i64 0, i32 7), align 8, !tbaa !7
  %116 = sext i32 %112 to i64
  %117 = sub i64 %116, %.unpack143.unpack.unpack.i167
  %118 = getelementptr i32, ptr %.unpack.i166, i64 %117
  %119 = load i32, ptr %118, align 4, !tbaa !3
  %120 = sext i32 %113 to i64
  %121 = sub i64 %120, %.unpack143.unpack.unpack.i167
  %122 = getelementptr i32, ptr %.unpack.i166, i64 %121
  %123 = load i32, ptr %122, align 4, !tbaa !3
  %124 = icmp slt i32 %119, %123
  %.unpack184.i168 = load ptr, ptr @_QMmod_union_findEpar, align 16, !tbaa !7
  %.unpack191.unpack.unpack.i169 = load i64, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEpar, i64 0, i32 7), align 8, !tbaa !7
  br i1 %124, label %125, label %135

125:                                              ; preds = %115
  %126 = sub i64 %116, %.unpack191.unpack.unpack.i169
  %127 = getelementptr i32, ptr %.unpack184.i168, i64 %126
  store i32 %113, ptr %127, align 4, !tbaa !3
  %.unpack196.i170 = load ptr, ptr @_QMmod_union_findEsiz, align 16, !tbaa !7
  %.unpack203.unpack.unpack.i171 = load i64, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 7), align 8, !tbaa !7
  %128 = sub i64 %120, %.unpack203.unpack.unpack.i171
  %129 = getelementptr i32, ptr %.unpack196.i170, i64 %128
  %130 = load i32, ptr %129, align 4, !tbaa !3
  %131 = sub i64 %116, %.unpack203.unpack.unpack.i171
  %132 = getelementptr i32, ptr %.unpack196.i170, i64 %131
  %133 = load i32, ptr %132, align 4, !tbaa !3
  %134 = add i32 %133, %130
  store i32 %134, ptr %129, align 4, !tbaa !3
  br label %_QMmod_union_findPunite.exit174

135:                                              ; preds = %115
  %136 = sub i64 %120, %.unpack191.unpack.unpack.i169
  %137 = getelementptr i32, ptr %.unpack184.i168, i64 %136
  store i32 %112, ptr %137, align 4, !tbaa !3
  %.unpack160.i172 = load ptr, ptr @_QMmod_union_findEsiz, align 16, !tbaa !7
  %.unpack167.unpack.unpack.i173 = load i64, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QMmod_union_findEsiz, i64 0, i32 7), align 8, !tbaa !7
  %138 = sub i64 %116, %.unpack167.unpack.unpack.i173
  %139 = getelementptr i32, ptr %.unpack160.i172, i64 %138
  %140 = load i32, ptr %139, align 4, !tbaa !3
  %141 = sub i64 %120, %.unpack167.unpack.unpack.i173
  %142 = getelementptr i32, ptr %.unpack160.i172, i64 %141
  %143 = load i32, ptr %142, align 4, !tbaa !3
  %144 = add i32 %143, %140
  store i32 %144, ptr %139, align 4, !tbaa !3
  %145 = load i32, ptr %118, align 4, !tbaa !3
  %146 = load i32, ptr %122, align 4, !tbaa !3
  %147 = icmp eq i32 %145, %146
  br i1 %147, label %148, label %_QMmod_union_findPunite.exit174

148:                                              ; preds = %135
  %149 = add i32 %145, 1
  store i32 %149, ptr %118, align 4, !tbaa !3
  br label %_QMmod_union_findPunite.exit174

_QMmod_union_findPunite.exit174:                  ; preds = %148, %135, %125, %106, %_QMmod_union_findPunite.exit
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv, %34
  br i1 %exitcond.not, label %._crit_edge179, label %42

._crit_edge179:                                   ; preds = %_QMmod_union_findPunite.exit174, %._crit_edge
  %indvars.iv.next195 = add nuw nsw i64 %indvars.iv194, 1
  %exitcond197.not = icmp eq i64 %indvars.iv194, %22
  br i1 %exitcond197.not, label %._crit_edge182, label %23

._crit_edge182:                                   ; preds = %._crit_edge179
  %.pre211 = load i32, ptr %11, align 4, !tbaa !3
  %150 = icmp sgt i32 %.pre211, 0
  br i1 %150, label %.lr.ph187.preheader, label %._crit_edge188

.lr.ph187.preheader:                              ; preds = %._crit_edge182
  %151 = zext i32 %.pre211 to i64
  br label %.lr.ph187

.lr.ph187:                                        ; preds = %.lr.ph187.preheader, %._crit_edge185
  %indvars.iv202 = phi i64 [ 1, %.lr.ph187.preheader ], [ %indvars.iv.next203, %._crit_edge185 ]
  %152 = load i32, ptr %12, align 4, !tbaa !3
  %153 = icmp sgt i32 %152, 0
  br i1 %153, label %.lr.ph184, label %._crit_edge185

.lr.ph184:                                        ; preds = %.lr.ph187
  %154 = zext i32 %152 to i64
  %155 = add nsw i64 %indvars.iv202, -1
  %156 = trunc i64 %155 to i32
  br label %157

157:                                              ; preds = %.lr.ph184, %157
  %indvars.iv198 = phi i64 [ 1, %.lr.ph184 ], [ %indvars.iv.next199, %157 ]
  %158 = load i32, ptr %12, align 4, !tbaa !3
  %159 = mul i32 %158, %156
  %160 = trunc i64 %indvars.iv198 to i32
  %161 = add i32 %159, %160
  store i32 %161, ptr %3, align 4, !tbaa !3
  %162 = call i32 @_QMmod_union_findPfind(ptr nonnull %3)
  %163 = sext i32 %162 to i64
  %164 = add nsw i64 %163, -1
  %165 = add nsw i64 %indvars.iv198, -1
  %166 = getelementptr [400 x [400 x i32]], ptr @_QFEa, i64 0, i64 %165, i64 %155
  %167 = load i32, ptr %166, align 4, !tbaa !3
  %168 = sext i32 %167 to i64
  %169 = getelementptr [2 x [160000 x i32]], ptr @_QFEnum, i64 0, i64 %168, i64 %164
  %170 = load i32, ptr %169, align 4, !tbaa !3
  %171 = add i32 %170, 1
  %172 = load i32, ptr %12, align 4, !tbaa !3
  %173 = mul i32 %172, %156
  %174 = add i32 %173, %160
  store i32 %174, ptr %2, align 4, !tbaa !3
  %175 = call i32 @_QMmod_union_findPfind(ptr nonnull %2)
  %176 = sext i32 %175 to i64
  %177 = add nsw i64 %176, -1
  %178 = getelementptr [2 x [160000 x i32]], ptr @_QFEnum, i64 0, i64 %168, i64 %177
  store i32 %171, ptr %178, align 4, !tbaa !3
  %indvars.iv.next199 = add nuw nsw i64 %indvars.iv198, 1
  %exitcond201.not = icmp eq i64 %indvars.iv198, %154
  br i1 %exitcond201.not, label %._crit_edge185, label %157

._crit_edge185:                                   ; preds = %157, %.lr.ph187
  %indvars.iv.next203 = add nuw nsw i64 %indvars.iv202, 1
  %exitcond205.not = icmp eq i64 %indvars.iv202, %151
  br i1 %exitcond205.not, label %._crit_edge188.loopexit, label %.lr.ph187

._crit_edge188.loopexit:                          ; preds = %._crit_edge185
  %.pre212 = load i32, ptr %11, align 4, !tbaa !3
  br label %._crit_edge188

._crit_edge188:                                   ; preds = %.preheader.preheader, %._crit_edge188.loopexit, %._crit_edge182
  %179 = phi i32 [ %.pre212, %._crit_edge188.loopexit ], [ %.pre211, %._crit_edge182 ], [ %20, %.preheader.preheader ]
  %180 = load i32, ptr %12, align 4, !tbaa !3
  %181 = mul i32 %180, %179
  %182 = icmp sgt i32 %181, 0
  br i1 %182, label %.lr.ph191.preheader, label %._crit_edge192

.lr.ph191.preheader:                              ; preds = %._crit_edge188
  %183 = zext i32 %181 to i64
  %xtraiter = and i64 %183, 1
  %184 = icmp eq i32 %181, 1
  br i1 %184, label %._crit_edge192.loopexit.unr-lcssa, label %.lr.ph191.preheader.new

.lr.ph191.preheader.new:                          ; preds = %.lr.ph191.preheader
  %unroll_iter = and i64 %183, 4294967294
  br label %.lr.ph191

.lr.ph191:                                        ; preds = %.lr.ph191, %.lr.ph191.preheader.new
  %indvars.iv206 = phi i64 [ 1, %.lr.ph191.preheader.new ], [ %indvars.iv.next207.1, %.lr.ph191 ]
  %.0189 = phi i64 [ 0, %.lr.ph191.preheader.new ], [ %201, %.lr.ph191 ]
  %niter = phi i64 [ 0, %.lr.ph191.preheader.new ], [ %niter.next.1, %.lr.ph191 ]
  %185 = add nsw i64 %indvars.iv206, -1
  %186 = getelementptr [2 x [160000 x i32]], ptr @_QFEnum, i64 0, i64 0, i64 %185
  %187 = load i32, ptr %186, align 4, !tbaa !3
  %188 = sext i32 %187 to i64
  %189 = getelementptr [2 x [160000 x i32]], ptr @_QFEnum, i64 0, i64 1, i64 %185
  %190 = load i32, ptr %189, align 4, !tbaa !3
  %191 = sext i32 %190 to i64
  %192 = mul nsw i64 %191, %188
  %193 = add i64 %192, %.0189
  %194 = getelementptr [2 x [160000 x i32]], ptr @_QFEnum, i64 0, i64 0, i64 %indvars.iv206
  %195 = load i32, ptr %194, align 4, !tbaa !3
  %196 = sext i32 %195 to i64
  %197 = getelementptr [2 x [160000 x i32]], ptr @_QFEnum, i64 0, i64 1, i64 %indvars.iv206
  %198 = load i32, ptr %197, align 4, !tbaa !3
  %199 = sext i32 %198 to i64
  %200 = mul nsw i64 %199, %196
  %201 = add i64 %200, %193
  %indvars.iv.next207.1 = add nuw nsw i64 %indvars.iv206, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge192.loopexit.unr-lcssa.loopexit, label %.lr.ph191

._crit_edge192.loopexit.unr-lcssa.loopexit:       ; preds = %.lr.ph191
  %202 = add nuw nsw i64 %indvars.iv206, 1
  br label %._crit_edge192.loopexit.unr-lcssa

._crit_edge192.loopexit.unr-lcssa:                ; preds = %._crit_edge192.loopexit.unr-lcssa.loopexit, %.lr.ph191.preheader
  %.lcssa.ph = phi i64 [ undef, %.lr.ph191.preheader ], [ %201, %._crit_edge192.loopexit.unr-lcssa.loopexit ]
  %indvars.iv206.unr = phi i64 [ 0, %.lr.ph191.preheader ], [ %202, %._crit_edge192.loopexit.unr-lcssa.loopexit ]
  %.0189.unr = phi i64 [ 0, %.lr.ph191.preheader ], [ %201, %._crit_edge192.loopexit.unr-lcssa.loopexit ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge192, label %.lr.ph191.epil

.lr.ph191.epil:                                   ; preds = %._crit_edge192.loopexit.unr-lcssa
  %203 = getelementptr [2 x [160000 x i32]], ptr @_QFEnum, i64 0, i64 0, i64 %indvars.iv206.unr
  %204 = load i32, ptr %203, align 4, !tbaa !3
  %205 = sext i32 %204 to i64
  %206 = getelementptr [2 x [160000 x i32]], ptr @_QFEnum, i64 0, i64 1, i64 %indvars.iv206.unr
  %207 = load i32, ptr %206, align 4, !tbaa !3
  %208 = sext i32 %207 to i64
  %209 = mul nsw i64 %208, %205
  %210 = add i64 %209, %.0189.unr
  br label %._crit_edge192

._crit_edge192:                                   ; preds = %.lr.ph191.epil, %._crit_edge192.loopexit.unr-lcssa, %._crit_edge188
  %.0.lcssa = phi i64 [ 0, %._crit_edge188 ], [ %.lcssa.ph, %._crit_edge192.loopexit.unr-lcssa ], [ %210, %.lr.ph191.epil ]
  %211 = call ptr @_FortranAioBeginExternalFormattedOutput(ptr nonnull @_QQcl.28693029, i64 4, ptr null, i32 -1, ptr nonnull @_QQcl.533628dc3ea8911c19087a4f46cc2bad, i32 99)
  %212 = call i1 @_FortranAioOutputInteger64(ptr %211, i64 %.0.lcssa)
  %213 = call i32 @_FortranAioEndIoStatement(ptr %211)
  call void @_QMmod_union_findPfinalize()
  %214 = call {} @_FortranAStopStatement(i32 0, i1 false, i1 false)
  unreachable
}

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

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 @_FortranAioInputAscii(ptr, ptr, i64) local_unnamed_addr

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

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memmove.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1 immarg) #5

declare i32 @_FortranACharacterCompareScalar1(ptr, ptr, i64, i64) 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) #6

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

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

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

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 = { mustprogress nounwind willreturn }
attributes #3 = { nofree nosync nounwind memory(readwrite, inaccessiblemem: none) }
attributes #4 = { noreturn }
attributes #5 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { 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}
