module mod_union_find
  implicit none
  type union_find
    integer :: n
    integer, pointer :: par(:), rnk(:), siz(:)
    logical, pointer :: ntr(:), usd(:)
  end type union_find
  private
  public :: union_find, init_union_find, release_union_find
  public :: find, same, unite, size_of, not_tree, used, is_used
contains
  subroutine init_union_find(uf,n)
    implicit none
    type(union_find), intent(inout) :: uf
    integer, intent(in) :: n
    integer :: i
    uf%n = n
    allocate(uf%par(n),uf%rnk(n),uf%siz(n),uf%ntr(n),uf%usd(n))
    uf%rnk = 0
    uf%siz = 1
    uf%ntr = .false.
    uf%usd = .false.
    do i = 1, n
      uf%par(i) = i
    end do
    return
  end subroutine init_union_find
  subroutine release_union_find(uf)
    implicit none
    type(union_find), intent(inout) :: uf
    if (associated(uf%par)) deallocate(uf%par)
    if (associated(uf%rnk)) deallocate(uf%rnk)
    if (associated(uf%siz)) deallocate(uf%siz)
    return
  end subroutine release_union_find
  recursive function find(uf,i) result(j)
    implicit none
    type(union_find), intent(inout) :: uf
    integer, intent(in) :: i
    integer :: j
    if (uf%par(i).ne.i) then
      uf%par(i) = find(uf,uf%par(i))
    end if
    j = uf%par(i)
    return
  end function find
  function same(uf,i,j) result(y)
    implicit none
    type(union_find), intent(inout) :: uf
    integer, intent(in) :: i, j
    logical :: y
    y = find(uf,i).eq.find(uf,j)
  end function same
  subroutine unite(uf,i,j)
    implicit none
    type(union_find), intent(inout) :: uf
    integer, intent(in) :: i, j
    integer :: x, y
    x = find(uf,i)
    y = find(uf,j)
    if (x.eq.y) then
      uf%ntr(x) = .true.
      return
    end if
    if (uf%rnk(x).lt.uf%rnk(y)) then
      uf%par(x) = y
      uf%siz(y) = uf%siz(y)+uf%siz(x)
      if (uf%ntr(x)) uf%ntr(y) = .true.
    else
      uf%par(y) = x
      uf%siz(x) = uf%siz(x)+uf%siz(y)
      if (uf%ntr(y)) uf%ntr(x) = .true.
      if (uf%rnk(x).eq.uf%rnk(y)) uf%rnk(x) = uf%rnk(x)+1
    end if
    return
  end subroutine unite
  function size_of(uf,i) result(s)
    implicit none
    type(union_find), intent(inout) :: uf
    integer, intent(in) :: i
    integer :: s
    s = uf%siz(find(uf,i))
  end function size_of
  function not_tree(uf,i) result(b)
    implicit none
    type(union_find), intent(inout) :: uf
    integer, intent(in) :: i
    logical :: b
    b = uf%ntr(find(uf,i))
    return
  end function not_tree
  subroutine used(uf,i)
    implicit none
    type(union_find), intent(inout) :: uf
    integer, intent(in) :: i
    uf%usd(find(uf,i)) = .true.
    return
  end subroutine used
  function is_used(uf,i) result(b)
    implicit none
    type(union_find), intent(inout) :: uf
    integer, intent(in) :: i
    logical :: b
    b = uf%usd(find(uf,i))
    return
  end function is_used
end module mod_union_find
program strings_of_eternity
  use mod_union_find
  implicit none
  type(union_find) :: uf
  character(500000) :: s, t
  character(2500000) :: ss
  character(5000000) :: ts
  integer :: n, m, x, i, z(5000000) = 0
  logical :: ok(500000) = .false.
  read(*,*) s
  read(*,*) t
  n = len_trim(s)
  m = len_trim(t)
  ss = trim(s)//trim(s)//trim(s)
  if (len_trim(ss) < 2*m) ss = repeat(trim(ss),(2*m+len_trim(ss)-1)/len_trim(ss))
  ts = trim(t)//trim(ss)
  x = len_trim(ts)
  z(1:x) = z_algorithm(ts(1:x))
  do i = 1, n
    if (z(m+i) >= m) ok(i) = .true.
  end do
  call init_union_find(uf,n)
  do i = 1, n
    if (ok(i) .and. ok(mod(m+i-1,n)+1)) then
      if (same(uf,i,mod(m+i-1,n)+1)) then
        write(*,'(i0)') -1
        stop
      end if
      call unite(uf,i,mod(m+i-1,n)+1)
    end if
  end do
  x = 0
  do i = 1, n
    if (ok(i)) x = max(x,size_of(uf,i))
  end do
  write(*,'(i0)') x
  stop
contains
  function z_algorithm(s) result(z)
    implicit none
    character(*) :: s
    integer :: z(len_trim(s)), n, i, j, k
    z = 0
    n = len_trim(s)
    z(1) = n
    i = 1
    j = 0
    do while (i < n)
      do while (i+j < n .and. s(j+1:j+1) == s(i+j+1:i+j+1))
        j = j+1
      end do
      z(i+1) = j
      if (j == 0) then
        i = i+1
        cycle
      end if
      k = 1
      do while (i+k < n .and. k+z(k+1) < j)
        z(i+k+1) = z(k+1)
        k = k+1
      end do
      i = i+k
      j = j-k
    end do
    return
  end function z_algorithm
end program strings_of_eternity
; 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_findTunion_find = type { i32, { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] } }

@_QQcl.ca29fb1ebbbe4e7085d91417865eb658 = linkonce constant [73 x i8] c"/home/ubuntu/Downloads/TheStack_IR/Collated/Fortran/Source_3674/source.f\00"
@_QFEok = internal unnamed_addr global [500000 x i32] zeroinitializer
@_QFEs = internal global [500000 x i8] undef
@_QFEss = internal global [2500000 x i8] undef
@_QFEt = internal global [500000 x i8] undef
@_QFEts = internal global [5000000 x i8] undef
@_QFEuf = internal global %_QMmod_union_findTunion_find undef
@_QFEz = internal unnamed_addr global [5000000 x i32] zeroinitializer
@_QQcl.28693029 = linkonce constant [4 x i8] c"(i0)"
@_QQEnvironmentDefaults = local_unnamed_addr constant ptr null

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

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

; Function Attrs: nofree nounwind memory(write, argmem: readwrite, inaccessiblemem: readwrite)
define void @_QMmod_union_findPinit_union_find(ptr %0, ptr nocapture readonly %1) local_unnamed_addr #2 {
  %3 = load i32, ptr %1, align 4, !tbaa !3
  store i32 %3, ptr %0, align 4, !tbaa !3
  %4 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 1
  %5 = load i32, ptr %1, align 4, !tbaa !3
  %6 = tail call i32 @llvm.smax.i32(i32 %5, i32 0)
  %7 = zext i32 %6 to i64
  %8 = shl nuw nsw i64 %7, 2
  %9 = tail call ptr @malloc(i64 %8)
  store ptr %9, ptr %4, align 8, !tbaa !7
  %.repack278 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 1, i32 1
  store i64 4, ptr %.repack278, align 8, !tbaa !7
  %.repack280 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 1, i32 2
  store i32 20180515, ptr %.repack280, align 8, !tbaa !7
  %.repack282 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 1, i32 3
  store i8 1, ptr %.repack282, align 4, !tbaa !7
  %.repack284 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 1, i32 4
  store i8 9, ptr %.repack284, align 1, !tbaa !7
  %.repack286 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 1, i32 5
  store i8 1, ptr %.repack286, align 2, !tbaa !7
  %.repack288 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 1, i32 6
  store i8 0, ptr %.repack288, align 1, !tbaa !7
  %.repack290 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 1, i32 7
  store i64 1, ptr %.repack290, align 8, !tbaa !7
  %.repack290.repack292 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 1, i32 7, i64 0, i64 1
  store i64 %7, ptr %.repack290.repack292, align 8, !tbaa !7
  %.repack290.repack294 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 1, i32 7, i64 0, i64 2
  store i64 4, ptr %.repack290.repack294, align 8, !tbaa !7
  %10 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 2
  %11 = tail call ptr @malloc(i64 %8)
  store ptr %11, ptr %10, align 8, !tbaa !7
  %.repack296 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 2, i32 1
  store i64 4, ptr %.repack296, align 8, !tbaa !7
  %.repack298 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 2, i32 2
  store i32 20180515, ptr %.repack298, align 8, !tbaa !7
  %.repack300 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 2, i32 3
  store i8 1, ptr %.repack300, align 4, !tbaa !7
  %.repack302 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 2, i32 4
  store i8 9, ptr %.repack302, align 1, !tbaa !7
  %.repack304 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 2, i32 5
  store i8 1, ptr %.repack304, align 2, !tbaa !7
  %.repack306 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 2, i32 6
  store i8 0, ptr %.repack306, align 1, !tbaa !7
  %.repack308 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 2, i32 7
  store i64 1, ptr %.repack308, align 8, !tbaa !7
  %.repack308.repack310 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 2, i32 7, i64 0, i64 1
  store i64 %7, ptr %.repack308.repack310, align 8, !tbaa !7
  %.repack308.repack312 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 2, i32 7, i64 0, i64 2
  store i64 4, ptr %.repack308.repack312, align 8, !tbaa !7
  %12 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 3
  %13 = tail call ptr @malloc(i64 %8)
  store ptr %13, ptr %12, align 8, !tbaa !7
  %.repack314 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 3, i32 1
  store i64 4, ptr %.repack314, align 8, !tbaa !7
  %.repack316 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 3, i32 2
  store i32 20180515, ptr %.repack316, align 8, !tbaa !7
  %.repack318 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 3, i32 3
  store i8 1, ptr %.repack318, align 4, !tbaa !7
  %.repack320 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 3, i32 4
  store i8 9, ptr %.repack320, align 1, !tbaa !7
  %.repack322 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 3, i32 5
  store i8 1, ptr %.repack322, align 2, !tbaa !7
  %.repack324 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 3, i32 6
  store i8 0, ptr %.repack324, align 1, !tbaa !7
  %.repack326 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 3, i32 7
  store i64 1, ptr %.repack326, align 8, !tbaa !7
  %.repack326.repack328 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 3, i32 7, i64 0, i64 1
  store i64 %7, ptr %.repack326.repack328, align 8, !tbaa !7
  %.repack326.repack330 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 3, i32 7, i64 0, i64 2
  store i64 4, ptr %.repack326.repack330, align 8, !tbaa !7
  %14 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 4
  %15 = tail call ptr @malloc(i64 %8)
  store ptr %15, ptr %14, align 8, !tbaa !7
  %.repack332 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 4, i32 1
  store i64 4, ptr %.repack332, align 8, !tbaa !7
  %.repack334 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 4, i32 2
  store i32 20180515, ptr %.repack334, align 8, !tbaa !7
  %.repack336 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 4, i32 3
  store i8 1, ptr %.repack336, align 4, !tbaa !7
  %.repack338 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 4, i32 4
  store i8 14, ptr %.repack338, align 1, !tbaa !7
  %.repack340 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 4, i32 5
  store i8 1, ptr %.repack340, align 2, !tbaa !7
  %.repack342 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 4, i32 6
  store i8 0, ptr %.repack342, align 1, !tbaa !7
  %.repack344 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 4, i32 7
  store i64 1, ptr %.repack344, align 8, !tbaa !7
  %.repack344.repack346 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 4, i32 7, i64 0, i64 1
  store i64 %7, ptr %.repack344.repack346, align 8, !tbaa !7
  %.repack344.repack348 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 4, i32 7, i64 0, i64 2
  store i64 4, ptr %.repack344.repack348, align 8, !tbaa !7
  %16 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 5
  %17 = tail call ptr @malloc(i64 %8)
  store ptr %17, ptr %16, align 8, !tbaa !7
  %.repack350 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 5, i32 1
  store i64 4, ptr %.repack350, align 8, !tbaa !7
  %.repack352 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 5, i32 2
  store i32 20180515, ptr %.repack352, align 8, !tbaa !7
  %.repack354 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 5, i32 3
  store i8 1, ptr %.repack354, align 4, !tbaa !7
  %.repack356 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 5, i32 4
  store i8 14, ptr %.repack356, align 1, !tbaa !7
  %.repack358 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 5, i32 5
  store i8 1, ptr %.repack358, align 2, !tbaa !7
  %.repack360 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 5, i32 6
  store i8 0, ptr %.repack360, align 1, !tbaa !7
  %.repack362 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 5, i32 7
  store i64 1, ptr %.repack362, align 8, !tbaa !7
  %.repack362.repack364 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 5, i32 7, i64 0, i64 1
  store i64 %7, ptr %.repack362.repack364, align 8, !tbaa !7
  %.repack362.repack366 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 5, i32 7, i64 0, i64 2
  store i64 4, ptr %.repack362.repack366, align 8, !tbaa !7
  %.not = icmp slt i32 %5, 1
  br i1 %.not, label %._crit_edge479, label %.lr.ph474.preheader

.lr.ph474.preheader:                              ; preds = %2
  %18 = tail call i64 @llvm.smax.i64(i64 %7, i64 1)
  %19 = shl nuw nsw i64 %18, 2
  tail call void @llvm.memset.p0.i64(ptr align 4 %11, i8 0, i64 %19, i1 false), !tbaa !3
  %min.iters.check = icmp ult i32 %6, 8
  br i1 %min.iters.check, label %.lr.ph474.preheader501, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph474.preheader
  %n.vec = and i64 %7, 2147483640
  %ind.end = and i64 %7, 7
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %20 = shl i64 %index, 2
  %21 = getelementptr i8, ptr %13, i64 %20
  store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, ptr %21, align 4, !tbaa !3
  %22 = getelementptr i32, ptr %21, i64 4
  store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, ptr %22, align 4, !tbaa !3
  %index.next = add nuw i64 %index, 8
  %23 = icmp eq i64 %index.next, %n.vec
  br i1 %23, label %middle.block, label %vector.body, !llvm.loop !9

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %7
  br i1 %cmp.n, label %.preheader472, label %.lr.ph474.preheader501

.lr.ph474.preheader501:                           ; preds = %.lr.ph474.preheader, %middle.block
  %.ph = phi i64 [ %7, %.lr.ph474.preheader ], [ %ind.end, %middle.block ]
  %.ph502 = phi i64 [ 0, %.lr.ph474.preheader ], [ %n.vec, %middle.block ]
  br label %.lr.ph474

.preheader472:                                    ; preds = %.lr.ph474, %middle.block
  br i1 %.not, label %._crit_edge479, label %.lr.ph478.preheader

.lr.ph474:                                        ; preds = %.lr.ph474.preheader501, %.lr.ph474
  %24 = phi i64 [ %29, %.lr.ph474 ], [ %.ph, %.lr.ph474.preheader501 ]
  %25 = phi i64 [ %28, %.lr.ph474 ], [ %.ph502, %.lr.ph474.preheader501 ]
  %26 = shl i64 %25, 2
  %27 = getelementptr i8, ptr %13, i64 %26
  store i32 1, ptr %27, align 4, !tbaa !3
  %28 = add nuw nsw i64 %25, 1
  %29 = add nsw i64 %24, -1
  %30 = icmp ugt i64 %24, 1
  br i1 %30, label %.lr.ph474, label %.preheader472, !llvm.loop !12

.lr.ph478.preheader:                              ; preds = %.preheader472
  %31 = tail call i64 @llvm.smax.i64(i64 %7, i64 1)
  %32 = shl nuw nsw i64 %31, 2
  tail call void @llvm.memset.p0.i64(ptr align 4 %15, i8 0, i64 %32, i1 false), !tbaa !3
  %33 = tail call i64 @llvm.smax.i64(i64 %7, i64 1)
  %34 = shl nuw nsw i64 %33, 2
  tail call void @llvm.memset.p0.i64(ptr align 4 %17, i8 0, i64 %34, i1 false), !tbaa !3
  %35 = zext i32 %5 to i64
  %min.iters.check489 = icmp ult i32 %5, 8
  br i1 %min.iters.check489, label %.lr.ph478.preheader500, label %vector.ph490

vector.ph490:                                     ; preds = %.lr.ph478.preheader
  %n.vec492 = and i64 %35, 4294967288
  %ind.end493 = or i64 %n.vec492, 1
  br label %vector.body496

vector.body496:                                   ; preds = %vector.body496, %vector.ph490
  %index497 = phi i64 [ 0, %vector.ph490 ], [ %index.next499, %vector.body496 ]
  %vec.ind = phi <4 x i32> [ <i32 1, i32 2, i32 3, i32 4>, %vector.ph490 ], [ %vec.ind.next, %vector.body496 ]
  %step.add = add <4 x i32> %vec.ind, <i32 4, i32 4, i32 4, i32 4>
  %offset.idx = shl i64 %index497, 2
  %36 = getelementptr i8, ptr %9, i64 %offset.idx
  store <4 x i32> %vec.ind, ptr %36, align 4, !tbaa !3
  %37 = getelementptr i32, ptr %36, i64 4
  store <4 x i32> %step.add, ptr %37, align 4, !tbaa !3
  %index.next499 = add nuw i64 %index497, 8
  %vec.ind.next = add <4 x i32> %vec.ind, <i32 8, i32 8, i32 8, i32 8>
  %38 = icmp eq i64 %index.next499, %n.vec492
  br i1 %38, label %middle.block487, label %vector.body496, !llvm.loop !13

middle.block487:                                  ; preds = %vector.body496
  %cmp.n495 = icmp eq i64 %n.vec492, %35
  br i1 %cmp.n495, label %._crit_edge479, label %.lr.ph478.preheader500

.lr.ph478.preheader500:                           ; preds = %.lr.ph478.preheader, %middle.block487
  %indvars.iv.ph = phi i64 [ 1, %.lr.ph478.preheader ], [ %ind.end493, %middle.block487 ]
  br label %.lr.ph478

.lr.ph478:                                        ; preds = %.lr.ph478.preheader500, %.lr.ph478
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph478 ], [ %indvars.iv.ph, %.lr.ph478.preheader500 ]
  %39 = shl nsw i64 %indvars.iv, 2
  %40 = add nsw i64 %39, -4
  %41 = getelementptr i8, ptr %9, 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
  %exitcond.not = icmp eq i64 %indvars.iv, %35
  br i1 %exitcond.not, label %._crit_edge479, label %.lr.ph478, !llvm.loop !14

._crit_edge479:                                   ; preds = %.lr.ph478, %middle.block487, %2, %.preheader472
  ret void
}

; Function Attrs: mustprogress nounwind willreturn
define void @_QMmod_union_findPrelease_union_find(ptr nocapture %0) local_unnamed_addr #3 {
  %2 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 1
  %.unpack = load ptr, ptr %2, align 8, !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 %2, align 8, !tbaa !7
  %.repack259 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 1, i32 1
  store i64 4, ptr %.repack259, align 8, !tbaa !7
  %.repack260 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 1, i32 2
  store i32 20180515, ptr %.repack260, align 8, !tbaa !7
  %.repack261 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 1, i32 3
  store i8 1, ptr %.repack261, align 4, !tbaa !7
  %.repack262 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 1, i32 4
  store i8 9, ptr %.repack262, align 1, !tbaa !7
  %.repack263 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 1, i32 5
  store i8 1, ptr %.repack263, align 2, !tbaa !7
  %.repack264 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 1, i32 6
  store i8 0, ptr %.repack264, align 1, !tbaa !7
  %.repack265 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 1, i32 7
  store i64 1, ptr %.repack265, align 8, !tbaa !7
  %.repack265.repack266 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 1, i32 7, i64 0, i64 1
  store i64 0, ptr %.repack265.repack266, align 8, !tbaa !7
  %.repack265.repack267 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 1, i32 7, i64 0, i64 2
  store i64 4, ptr %.repack265.repack267, align 8, !tbaa !7
  br label %4

4:                                                ; preds = %3, %1
  %5 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 2
  %.unpack197 = load ptr, ptr %5, align 8, !tbaa !7
  %.not218 = icmp eq ptr %.unpack197, null
  br i1 %.not218, label %7, label %6

6:                                                ; preds = %4
  tail call void @free(ptr nonnull %.unpack197)
  store ptr null, ptr %5, align 8, !tbaa !7
  %.repack250 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 2, i32 1
  store i64 4, ptr %.repack250, align 8, !tbaa !7
  %.repack251 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 2, i32 2
  store i32 20180515, ptr %.repack251, align 8, !tbaa !7
  %.repack252 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 2, i32 3
  store i8 1, ptr %.repack252, align 4, !tbaa !7
  %.repack253 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 2, i32 4
  store i8 9, ptr %.repack253, align 1, !tbaa !7
  %.repack254 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 2, i32 5
  store i8 1, ptr %.repack254, align 2, !tbaa !7
  %.repack255 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 2, i32 6
  store i8 0, ptr %.repack255, align 1, !tbaa !7
  %.repack256 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 2, i32 7
  store i64 1, ptr %.repack256, align 8, !tbaa !7
  %.repack256.repack257 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 2, i32 7, i64 0, i64 1
  store i64 0, ptr %.repack256.repack257, align 8, !tbaa !7
  %.repack256.repack258 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 2, i32 7, i64 0, i64 2
  store i64 4, ptr %.repack256.repack258, align 8, !tbaa !7
  br label %7

7:                                                ; preds = %6, %4
  %8 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 3
  %.unpack219 = load ptr, ptr %8, align 8, !tbaa !7
  %.not240 = icmp eq ptr %.unpack219, null
  br i1 %.not240, label %10, label %9

9:                                                ; preds = %7
  tail call void @free(ptr nonnull %.unpack219)
  store ptr null, ptr %8, align 8, !tbaa !7
  %.repack241 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 3, i32 1
  store i64 4, ptr %.repack241, align 8, !tbaa !7
  %.repack242 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 3, i32 2
  store i32 20180515, ptr %.repack242, align 8, !tbaa !7
  %.repack243 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 3, i32 3
  store i8 1, ptr %.repack243, align 4, !tbaa !7
  %.repack244 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 3, i32 4
  store i8 9, ptr %.repack244, align 1, !tbaa !7
  %.repack245 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 3, i32 5
  store i8 1, ptr %.repack245, align 2, !tbaa !7
  %.repack246 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 3, i32 6
  store i8 0, ptr %.repack246, align 1, !tbaa !7
  %.repack247 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 3, i32 7
  store i64 1, ptr %.repack247, align 8, !tbaa !7
  %.repack247.repack248 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 3, i32 7, i64 0, i64 1
  store i64 0, ptr %.repack247.repack248, align 8, !tbaa !7
  %.repack247.repack249 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 3, i32 7, i64 0, i64 2
  store i64 4, ptr %.repack247.repack249, align 8, !tbaa !7
  br label %10

10:                                               ; preds = %9, %7
  ret void
}

; Function Attrs: nofree nosync nounwind memory(readwrite, inaccessiblemem: none)
define i32 @_QMmod_union_findPfind(ptr nocapture readonly %0, ptr nocapture readonly %1) local_unnamed_addr #4 {
  %3 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 1
  %.unpack = load ptr, ptr %3, align 8, !tbaa !7
  %.elt77 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 1, i32 7
  %.unpack78.unpack.unpack = load i64, ptr %.elt77, align 8, !tbaa !7
  %.unpack78.unpack.elt82 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 1, i32 7, i64 0, i64 2
  %.unpack78.unpack.unpack83 = load i64, ptr %.unpack78.unpack.elt82, align 8, !tbaa !7
  %4 = load i32, ptr %1, align 4, !tbaa !3
  %5 = sext i32 %4 to i64
  %6 = sub i64 %5, %.unpack78.unpack.unpack
  %7 = mul i64 %6, %.unpack78.unpack.unpack83
  %8 = getelementptr i8, ptr %.unpack, i64 %7
  %9 = load i32, ptr %8, align 4, !tbaa !3
  %.not = icmp eq i32 %9, %4
  br i1 %.not, label %17, label %10

10:                                               ; preds = %2
  %11 = tail call i32 @_QMmod_union_findPfind(ptr nonnull %0, ptr nonnull %8)
  %.unpack106 = load ptr, ptr %3, align 8, !tbaa !7
  %.unpack120.unpack.unpack = load i64, ptr %.elt77, align 8, !tbaa !7
  %.unpack120.unpack.unpack125 = load i64, ptr %.unpack78.unpack.elt82, align 8, !tbaa !7
  %12 = load i32, ptr %1, align 4, !tbaa !3
  %13 = sext i32 %12 to i64
  %14 = sub i64 %13, %.unpack120.unpack.unpack
  %15 = mul i64 %14, %.unpack120.unpack.unpack125
  %16 = getelementptr i8, ptr %.unpack106, i64 %15
  store i32 %11, ptr %16, align 4, !tbaa !3
  %.pre = load i32, ptr %1, align 4, !tbaa !3
  %.pre130 = sext i32 %.pre to i64
  %.pre131 = sub i64 %.pre130, %.unpack120.unpack.unpack
  %.pre133 = mul i64 %.pre131, %.unpack120.unpack.unpack125
  br label %17

17:                                               ; preds = %10, %2
  %.pre-phi134 = phi i64 [ %.pre133, %10 ], [ %7, %2 ]
  %.unpack85 = phi ptr [ %.unpack106, %10 ], [ %.unpack, %2 ]
  %18 = getelementptr i8, ptr %.unpack85, i64 %.pre-phi134
  %19 = load i32, ptr %18, align 4, !tbaa !3
  ret i32 %19
}

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

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

8:                                                ; preds = %3
  %9 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 4
  %.unpack427 = load ptr, ptr %9, align 8, !tbaa !7
  %.elt440 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 4, i32 7
  %.unpack441.unpack.unpack = load i64, ptr %.elt440, align 8, !tbaa !7
  %.unpack441.unpack.elt445 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 4, i32 7, i64 0, i64 2
  %.unpack441.unpack.unpack446 = load i64, ptr %.unpack441.unpack.elt445, align 8, !tbaa !7
  %10 = sub i64 %7, %.unpack441.unpack.unpack
  %11 = mul i64 %10, %.unpack441.unpack.unpack446
  %12 = getelementptr i8, ptr %.unpack427, i64 %11
  store i32 1, ptr %12, align 4, !tbaa !3
  br label %77

13:                                               ; preds = %3
  %14 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 2
  %.unpack = load ptr, ptr %14, align 8, !tbaa !7
  %.elt271 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 2, i32 7
  %.unpack272.unpack.unpack = load i64, ptr %.elt271, align 8, !tbaa !7
  %.unpack272.unpack.elt276 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 2, i32 7, i64 0, i64 2
  %.unpack272.unpack.unpack277 = load i64, ptr %.unpack272.unpack.elt276, align 8, !tbaa !7
  %15 = sub i64 %7, %.unpack272.unpack.unpack
  %16 = mul i64 %15, %.unpack272.unpack.unpack277
  %17 = getelementptr i8, ptr %.unpack, i64 %16
  %18 = load i32, ptr %17, align 4, !tbaa !3
  %19 = sext i32 %5 to i64
  %20 = sub i64 %19, %.unpack272.unpack.unpack
  %21 = mul i64 %20, %.unpack272.unpack.unpack277
  %22 = getelementptr i8, ptr %.unpack, i64 %21
  %23 = load i32, ptr %22, align 4, !tbaa !3
  %24 = icmp slt i32 %18, %23
  %25 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 1
  %.unpack363 = load ptr, ptr %25, align 8, !tbaa !7
  %.elt376 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 1, i32 7
  %.unpack377.unpack.unpack = load i64, ptr %.elt376, align 8, !tbaa !7
  %.unpack377.unpack.elt381 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 1, i32 7, i64 0, i64 2
  %.unpack377.unpack.unpack382 = load i64, ptr %.unpack377.unpack.elt381, align 8, !tbaa !7
  %26 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 3
  br i1 %24, label %27, label %49

27:                                               ; preds = %13
  %28 = sub i64 %7, %.unpack377.unpack.unpack
  %29 = mul i64 %28, %.unpack377.unpack.unpack382
  %30 = getelementptr i8, ptr %.unpack363, i64 %29
  store i32 %5, ptr %30, align 4, !tbaa !3
  %.unpack384 = load ptr, ptr %26, align 8, !tbaa !7
  %.elt397 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 3, i32 7
  %.unpack398.unpack.unpack = load i64, ptr %.elt397, align 8, !tbaa !7
  %.unpack398.unpack.elt402 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 3, i32 7, i64 0, i64 2
  %.unpack398.unpack.unpack403 = load i64, ptr %.unpack398.unpack.elt402, align 8, !tbaa !7
  %31 = sub i64 %19, %.unpack398.unpack.unpack
  %32 = mul i64 %31, %.unpack398.unpack.unpack403
  %33 = getelementptr i8, ptr %.unpack384, i64 %32
  %34 = load i32, ptr %33, align 4, !tbaa !3
  %35 = sub i64 %7, %.unpack398.unpack.unpack
  %36 = mul i64 %35, %.unpack398.unpack.unpack403
  %37 = getelementptr i8, ptr %.unpack384, i64 %36
  %38 = load i32, ptr %37, align 4, !tbaa !3
  %39 = add i32 %38, %34
  store i32 %39, ptr %33, align 4, !tbaa !3
  %40 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 4
  %.unpack405 = load ptr, ptr %40, align 8, !tbaa !7
  %.elt418 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 4, i32 7
  %.unpack419.unpack.unpack = load i64, ptr %.elt418, align 8, !tbaa !7
  %.unpack419.unpack.elt423 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 4, i32 7, i64 0, i64 2
  %.unpack419.unpack.unpack424 = load i64, ptr %.unpack419.unpack.elt423, align 8, !tbaa !7
  %41 = sub i64 %7, %.unpack419.unpack.unpack
  %42 = mul i64 %41, %.unpack419.unpack.unpack424
  %43 = getelementptr i8, ptr %.unpack405, i64 %42
  %44 = load i32, ptr %43, align 4, !tbaa !3
  %.not426 = icmp eq i32 %44, 0
  br i1 %.not426, label %77, label %45

45:                                               ; preds = %27
  %46 = sub i64 %19, %.unpack419.unpack.unpack
  %47 = mul i64 %46, %.unpack419.unpack.unpack424
  %48 = getelementptr i8, ptr %.unpack405, i64 %47
  store i32 1, ptr %48, align 4, !tbaa !3
  br label %77

49:                                               ; preds = %13
  %50 = sub i64 %19, %.unpack377.unpack.unpack
  %51 = mul i64 %50, %.unpack377.unpack.unpack382
  %52 = getelementptr i8, ptr %.unpack363, i64 %51
  store i32 %4, ptr %52, align 4, !tbaa !3
  %.unpack300 = load ptr, ptr %26, align 8, !tbaa !7
  %.elt313 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 3, i32 7
  %.unpack314.unpack.unpack = load i64, ptr %.elt313, align 8, !tbaa !7
  %.unpack314.unpack.elt318 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 3, i32 7, i64 0, i64 2
  %.unpack314.unpack.unpack319 = load i64, ptr %.unpack314.unpack.elt318, align 8, !tbaa !7
  %53 = sub i64 %7, %.unpack314.unpack.unpack
  %54 = mul i64 %53, %.unpack314.unpack.unpack319
  %55 = getelementptr i8, ptr %.unpack300, i64 %54
  %56 = load i32, ptr %55, align 4, !tbaa !3
  %57 = sub i64 %19, %.unpack314.unpack.unpack
  %58 = mul i64 %57, %.unpack314.unpack.unpack319
  %59 = getelementptr i8, ptr %.unpack300, i64 %58
  %60 = load i32, ptr %59, align 4, !tbaa !3
  %61 = add i32 %60, %56
  store i32 %61, ptr %55, align 4, !tbaa !3
  %62 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 4
  %.unpack321 = load ptr, ptr %62, align 8, !tbaa !7
  %.elt334 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 4, i32 7
  %.unpack335.unpack.unpack = load i64, ptr %.elt334, align 8, !tbaa !7
  %.unpack335.unpack.elt339 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 4, i32 7, i64 0, i64 2
  %.unpack335.unpack.unpack340 = load i64, ptr %.unpack335.unpack.elt339, align 8, !tbaa !7
  %63 = sub i64 %19, %.unpack335.unpack.unpack
  %64 = mul i64 %63, %.unpack335.unpack.unpack340
  %65 = getelementptr i8, ptr %.unpack321, i64 %64
  %66 = load i32, ptr %65, align 4, !tbaa !3
  %.not = icmp eq i32 %66, 0
  br i1 %.not, label %71, label %67

67:                                               ; preds = %49
  %68 = sub i64 %7, %.unpack335.unpack.unpack
  %69 = mul i64 %68, %.unpack335.unpack.unpack340
  %70 = getelementptr i8, ptr %.unpack321, i64 %69
  store i32 1, ptr %70, align 4, !tbaa !3
  br label %71

71:                                               ; preds = %67, %49
  %72 = load i32, ptr %17, align 4, !tbaa !3
  %73 = load i32, ptr %22, align 4, !tbaa !3
  %74 = icmp eq i32 %72, %73
  br i1 %74, label %75, label %77

75:                                               ; preds = %71
  %76 = add i32 %72, 1
  store i32 %76, ptr %17, align 4, !tbaa !3
  br label %77

77:                                               ; preds = %8, %45, %27, %75, %71
  ret void
}

; Function Attrs: nofree nosync nounwind memory(readwrite, inaccessiblemem: none)
define i32 @_QMmod_union_findPsize_of(ptr nocapture readonly %0, ptr nocapture readonly %1) local_unnamed_addr #4 {
  %3 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 3
  %.unpack = load ptr, ptr %3, align 8, !tbaa !7
  %.elt14 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 3, i32 7
  %.unpack15.unpack.unpack = load i64, ptr %.elt14, align 8, !tbaa !7
  %.unpack15.unpack.elt19 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 3, i32 7, i64 0, i64 2
  %.unpack15.unpack.unpack20 = load i64, ptr %.unpack15.unpack.elt19, align 8, !tbaa !7
  %4 = tail call i32 @_QMmod_union_findPfind(ptr %0, ptr %1)
  %5 = sext i32 %4 to i64
  %6 = sub i64 %5, %.unpack15.unpack.unpack
  %7 = mul i64 %6, %.unpack15.unpack.unpack20
  %8 = getelementptr i8, ptr %.unpack, i64 %7
  %9 = load i32, ptr %8, align 4, !tbaa !3
  ret i32 %9
}

; Function Attrs: nofree nosync nounwind memory(readwrite, inaccessiblemem: none)
define i32 @_QMmod_union_findPnot_tree(ptr nocapture readonly %0, ptr nocapture readonly %1) local_unnamed_addr #4 {
  %3 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 4
  %.unpack = load ptr, ptr %3, align 8, !tbaa !7
  %.elt14 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 4, i32 7
  %.unpack15.unpack.unpack = load i64, ptr %.elt14, align 8, !tbaa !7
  %.unpack15.unpack.elt19 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 4, i32 7, i64 0, i64 2
  %.unpack15.unpack.unpack20 = load i64, ptr %.unpack15.unpack.elt19, align 8, !tbaa !7
  %4 = tail call i32 @_QMmod_union_findPfind(ptr %0, ptr %1)
  %5 = sext i32 %4 to i64
  %6 = sub i64 %5, %.unpack15.unpack.unpack
  %7 = mul i64 %6, %.unpack15.unpack.unpack20
  %8 = getelementptr i8, ptr %.unpack, i64 %7
  %9 = load i32, ptr %8, align 4, !tbaa !3
  ret i32 %9
}

; Function Attrs: nofree nosync nounwind memory(readwrite, inaccessiblemem: none)
define void @_QMmod_union_findPused(ptr nocapture readonly %0, ptr nocapture readonly %1) local_unnamed_addr #4 {
  %3 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 5
  %.unpack = load ptr, ptr %3, align 8, !tbaa !7
  %.elt14 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 5, i32 7
  %.unpack15.unpack.unpack = load i64, ptr %.elt14, align 8, !tbaa !7
  %.unpack15.unpack.elt19 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 5, i32 7, i64 0, i64 2
  %.unpack15.unpack.unpack20 = load i64, ptr %.unpack15.unpack.elt19, align 8, !tbaa !7
  %4 = tail call i32 @_QMmod_union_findPfind(ptr %0, ptr %1)
  %5 = sext i32 %4 to i64
  %6 = sub i64 %5, %.unpack15.unpack.unpack
  %7 = mul i64 %6, %.unpack15.unpack.unpack20
  %8 = getelementptr i8, ptr %.unpack, i64 %7
  store i32 1, ptr %8, align 4, !tbaa !3
  ret void
}

; Function Attrs: nofree nosync nounwind memory(readwrite, inaccessiblemem: none)
define i32 @_QMmod_union_findPis_used(ptr nocapture readonly %0, ptr nocapture readonly %1) local_unnamed_addr #4 {
  %3 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 5
  %.unpack = load ptr, ptr %3, align 8, !tbaa !7
  %.elt14 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 5, i32 7
  %.unpack15.unpack.unpack = load i64, ptr %.elt14, align 8, !tbaa !7
  %.unpack15.unpack.elt19 = getelementptr %_QMmod_union_findTunion_find, ptr %0, i64 0, i32 5, i32 7, i64 0, i64 2
  %.unpack15.unpack.unpack20 = load i64, ptr %.unpack15.unpack.elt19, align 8, !tbaa !7
  %4 = tail call i32 @_QMmod_union_findPfind(ptr %0, ptr %1)
  %5 = sext i32 %4 to i64
  %6 = sub i64 %5, %.unpack15.unpack.unpack
  %7 = mul i64 %6, %.unpack15.unpack.unpack20
  %8 = getelementptr i8, ptr %.unpack, i64 %7
  %9 = load i32, ptr %8, align 4, !tbaa !3
  ret i32 %9
}

; Function Attrs: noreturn
define void @_QQmain() local_unnamed_addr #5 {
  %1 = alloca { ptr, i64, i32, i8, i8, i8, i8 }, align 8
  %2 = alloca { ptr, i64, i32, i8, i8, i8, i8 }, align 8
  %3 = alloca { ptr, i64, i32, i8, i8, i8, i8 }, align 8
  %4 = alloca { ptr, i64, i32, i8, i8, i8, i8 }, align 8
  %5 = alloca { ptr, i64, i32, i8, i8, i8, i8 }, align 8
  %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 { ptr, i64, i32, i8, i8, i8, i8 }, align 8
  %11 = alloca { ptr, i64, i32, i8, i8, i8, i8 }, align 8
  %12 = alloca { ptr, i64, i32, i8, i8, i8, i8 }, align 8
  %13 = alloca { ptr, i64, i32, i8, i8, i8, i8 }, align 8
  %14 = alloca { ptr, i64, i32, i8, i8, i8, i8 }, align 8
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = tail call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.ca29fb1ebbbe4e7085d91417865eb658, i32 117)
  %18 = tail call i1 @_FortranAioInputAscii(ptr %17, ptr nonnull @_QFEs, i64 500000)
  %19 = tail call i32 @_FortranAioEndIoStatement(ptr %17)
  %20 = tail call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.ca29fb1ebbbe4e7085d91417865eb658, i32 118)
  %21 = tail call i1 @_FortranAioInputAscii(ptr %20, ptr nonnull @_QFEt, i64 500000)
  %22 = tail call i32 @_FortranAioEndIoStatement(ptr %20)
  br label %23

23:                                               ; preds = %0, %23
  %24 = phi i64 [ 499999, %0 ], [ %28, %23 ]
  %25 = getelementptr [500000 x [1 x i8]], ptr @_QFEs, i64 0, i64 %24
  %26 = load i8, ptr %25, align 1, !tbaa !3
  %27 = icmp eq i8 %26, 32
  %28 = add nsw i64 %24, -1
  %29 = icmp ne i64 %24, 0
  %30 = and i1 %27, %29
  br i1 %30, label %23, label %31

31:                                               ; preds = %23
  %32 = trunc i64 %24 to i32
  %33 = add i32 %32, 1
  %34 = select i1 %27, i32 0, i32 %33
  store i32 %34, ptr %16, align 4, !tbaa !3
  br label %35

35:                                               ; preds = %31, %35
  %36 = phi i64 [ 499999, %31 ], [ %40, %35 ]
  %37 = getelementptr [500000 x [1 x i8]], ptr @_QFEt, i64 0, i64 %36
  %38 = load i8, ptr %37, align 1, !tbaa !3
  %39 = icmp eq i8 %38, 32
  %40 = add nsw i64 %36, -1
  %41 = icmp ne i64 %36, 0
  %42 = and i1 %39, %41
  br i1 %42, label %35, label %43

43:                                               ; preds = %35
  %44 = trunc i64 %36 to i32
  %45 = add i32 %44, 1
  %46 = select i1 %39, i32 0, i32 %45
  store ptr @_QFEs, ptr %5, align 8, !tbaa !7
  %.fca.1.gep229 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %5, i64 0, i32 1
  store i64 500000, ptr %.fca.1.gep229, align 8, !tbaa !7
  %.fca.2.gep230 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %5, i64 0, i32 2
  store i32 20180515, ptr %.fca.2.gep230, align 8, !tbaa !7
  %.fca.3.gep231 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %5, i64 0, i32 3
  store i8 0, ptr %.fca.3.gep231, align 4, !tbaa !7
  %.fca.4.gep232 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %5, i64 0, i32 4
  store i8 40, ptr %.fca.4.gep232, align 1, !tbaa !7
  %.fca.5.gep233 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %5, i64 0, i32 5
  store i8 0, ptr %.fca.5.gep233, align 2, !tbaa !7
  %.fca.6.gep234 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %5, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep234, align 1, !tbaa !7
  %.fca.1.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %14, i64 0, i32 1
  %.fca.2.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %14, i64 0, i32 2
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %14, i8 0, i64 16, i1 false)
  store i32 20180515, ptr %.fca.2.gep, align 8, !tbaa !7
  %.fca.3.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %14, i64 0, i32 3
  store i8 0, ptr %.fca.3.gep, align 4, !tbaa !7
  %.fca.4.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %14, i64 0, i32 4
  store i8 40, ptr %.fca.4.gep, align 1, !tbaa !7
  %.fca.5.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %14, i64 0, i32 5
  store i8 2, ptr %.fca.5.gep, align 2, !tbaa !7
  %.fca.6.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %14, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep, align 1, !tbaa !7
  %47 = call {} @_FortranATrim(ptr nonnull %14, ptr nonnull %5, ptr nonnull @_QQcl.ca29fb1ebbbe4e7085d91417865eb658, i32 121)
  %.fca.0.load = load ptr, ptr %14, align 8, !tbaa !7
  %.fca.1.load = load i64, ptr %.fca.1.gep, align 8, !tbaa !7
  %.fca.1.gep19 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %13, i64 0, i32 1
  %.fca.2.gep21 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %13, i64 0, i32 2
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %13, i8 0, i64 16, i1 false)
  store i32 20180515, ptr %.fca.2.gep21, align 8, !tbaa !7
  %.fca.3.gep23 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %13, i64 0, i32 3
  store i8 0, ptr %.fca.3.gep23, align 4, !tbaa !7
  %.fca.4.gep25 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %13, i64 0, i32 4
  store i8 40, ptr %.fca.4.gep25, align 1, !tbaa !7
  %.fca.5.gep27 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %13, i64 0, i32 5
  store i8 2, ptr %.fca.5.gep27, align 2, !tbaa !7
  %.fca.6.gep29 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %13, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep29, align 1, !tbaa !7
  %48 = call {} @_FortranATrim(ptr nonnull %13, ptr nonnull %5, ptr nonnull @_QQcl.ca29fb1ebbbe4e7085d91417865eb658, i32 121)
  %.fca.0.load31 = load ptr, ptr %13, align 8, !tbaa !7
  %.fca.1.load34 = load i64, ptr %.fca.1.gep19, align 8, !tbaa !7
  %49 = add i64 %.fca.1.load34, %.fca.1.load
  %50 = alloca i8, i64 %49, align 1
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %50, ptr align 1 %.fca.0.load, i64 %.fca.1.load, i1 false)
  %51 = icmp sgt i64 %.fca.1.load34, 0
  br i1 %51, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %43
  %uglygep = getelementptr i8, ptr %50, i64 %.fca.1.load
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %uglygep, ptr align 1 %.fca.0.load31, i64 %.fca.1.load34, i1 false), !tbaa !3
  br label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph.preheader, %43
  %.fca.1.gep54 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %12, i64 0, i32 1
  %.fca.2.gep56 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %12, i64 0, i32 2
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %12, i8 0, i64 16, i1 false)
  store i32 20180515, ptr %.fca.2.gep56, align 8, !tbaa !7
  %.fca.3.gep58 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %12, i64 0, i32 3
  store i8 0, ptr %.fca.3.gep58, align 4, !tbaa !7
  %.fca.4.gep60 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %12, i64 0, i32 4
  store i8 40, ptr %.fca.4.gep60, align 1, !tbaa !7
  %.fca.5.gep62 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %12, i64 0, i32 5
  store i8 2, ptr %.fca.5.gep62, align 2, !tbaa !7
  %.fca.6.gep64 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %12, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep64, align 1, !tbaa !7
  %52 = call {} @_FortranATrim(ptr nonnull %12, ptr nonnull %5, ptr nonnull @_QQcl.ca29fb1ebbbe4e7085d91417865eb658, i32 121)
  %.fca.0.load66 = load ptr, ptr %12, align 8, !tbaa !7
  %.fca.1.load69 = load i64, ptr %.fca.1.gep54, align 8, !tbaa !7
  %53 = add i64 %.fca.1.load69, %49
  %54 = alloca i8, i64 %53, align 1
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %54, ptr nonnull align 1 %50, i64 %49, i1 false)
  %55 = icmp sgt i64 %.fca.1.load69, 0
  br i1 %55, label %.lr.ph544.preheader, label %._crit_edge545

.lr.ph544.preheader:                              ; preds = %._crit_edge
  %uglygep597 = getelementptr i8, ptr %54, i64 %49
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %uglygep597, ptr align 1 %.fca.0.load66, i64 %.fca.1.load69, i1 false), !tbaa !3
  br label %._crit_edge545

._crit_edge545:                                   ; preds = %.lr.ph544.preheader, %._crit_edge
  %56 = call i64 @llvm.smin.i64(i64 %53, i64 2500000)
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 16 @_QFEss, ptr nonnull align 1 %54, i64 %56, i1 false)
  %57 = sub i64 2500000, %56
  %58 = icmp sgt i64 %57, 0
  br i1 %58, label %.lr.ph547.preheader, label %._crit_edge548

.lr.ph547.preheader:                              ; preds = %._crit_edge545
  %uglygep598 = getelementptr i8, ptr @_QFEss, i64 %56
  call void @llvm.memset.p0.i64(ptr align 1 %uglygep598, i8 32, i64 %57, i1 false), !tbaa !3
  br label %._crit_edge548

._crit_edge548:                                   ; preds = %.lr.ph547.preheader, %._crit_edge545
  call void @free(ptr %.fca.0.load66)
  call void @free(ptr %.fca.0.load31)
  call void @free(ptr %.fca.0.load)
  br label %59

59:                                               ; preds = %._crit_edge548, %59
  %60 = phi i64 [ 2499999, %._crit_edge548 ], [ %64, %59 ]
  %61 = getelementptr [2500000 x [1 x i8]], ptr @_QFEss, i64 0, i64 %60
  %62 = load i8, ptr %61, align 1, !tbaa !3
  %63 = icmp eq i8 %62, 32
  %64 = add nsw i64 %60, -1
  %65 = icmp ne i64 %60, 0
  %66 = and i1 %63, %65
  br i1 %66, label %59, label %67

67:                                               ; preds = %59
  %68 = trunc i64 %60 to i32
  %69 = add i32 %68, 1
  %70 = select i1 %63, i32 0, i32 %69
  %71 = shl i32 %46, 1
  %72 = icmp slt i32 %70, %71
  br i1 %72, label %73, label %106

73:                                               ; preds = %67
  store ptr @_QFEss, ptr %2, align 8, !tbaa !7
  %.fca.1.gep470 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %2, i64 0, i32 1
  store i64 2500000, ptr %.fca.1.gep470, align 8, !tbaa !7
  %.fca.2.gep471 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %2, i64 0, i32 2
  store i32 20180515, ptr %.fca.2.gep471, align 8, !tbaa !7
  %.fca.3.gep472 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %2, i64 0, i32 3
  store i8 0, ptr %.fca.3.gep472, align 4, !tbaa !7
  %.fca.4.gep473 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %2, i64 0, i32 4
  store i8 40, ptr %.fca.4.gep473, align 1, !tbaa !7
  %.fca.5.gep474 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %2, i64 0, i32 5
  store i8 0, ptr %.fca.5.gep474, align 2, !tbaa !7
  %.fca.6.gep475 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %2, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep475, align 1, !tbaa !7
  %.fca.1.gep89 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %11, i64 0, i32 1
  %.fca.2.gep91 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %11, i64 0, i32 2
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %11, i8 0, i64 16, i1 false)
  store i32 20180515, ptr %.fca.2.gep91, align 8, !tbaa !7
  %.fca.3.gep93 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %11, i64 0, i32 3
  store i8 0, ptr %.fca.3.gep93, align 4, !tbaa !7
  %.fca.4.gep95 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %11, i64 0, i32 4
  store i8 40, ptr %.fca.4.gep95, align 1, !tbaa !7
  %.fca.5.gep97 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %11, i64 0, i32 5
  store i8 2, ptr %.fca.5.gep97, align 2, !tbaa !7
  %.fca.6.gep99 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %11, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep99, align 1, !tbaa !7
  %74 = call {} @_FortranATrim(ptr nonnull %11, ptr nonnull %2, ptr nonnull @_QQcl.ca29fb1ebbbe4e7085d91417865eb658, i32 122)
  %.fca.0.load101 = load ptr, ptr %11, align 8, !tbaa !7
  %.fca.1.load104 = load i64, ptr %.fca.1.gep89, align 8, !tbaa !7
  br label %75

75:                                               ; preds = %73, %75
  %76 = phi i64 [ 2499999, %73 ], [ %80, %75 ]
  %77 = getelementptr [2500000 x [1 x i8]], ptr @_QFEss, i64 0, i64 %76
  %78 = load i8, ptr %77, align 1, !tbaa !3
  %79 = icmp eq i8 %78, 32
  %80 = add nsw i64 %76, -1
  %81 = icmp ne i64 %76, 0
  %82 = and i1 %79, %81
  br i1 %82, label %75, label %83

83:                                               ; preds = %75
  %84 = trunc i64 %76 to i32
  %85 = add i32 %84, 1
  %86 = add i32 %71, -1
  br label %87

87:                                               ; preds = %83, %87
  %88 = phi i64 [ 2499999, %83 ], [ %92, %87 ]
  %89 = getelementptr [2500000 x [1 x i8]], ptr @_QFEss, i64 0, i64 %88
  %90 = load i8, ptr %89, align 1, !tbaa !3
  %91 = icmp eq i8 %90, 32
  %92 = add nsw i64 %88, -1
  %93 = icmp ne i64 %88, 0
  %94 = and i1 %91, %93
  br i1 %94, label %87, label %95

95:                                               ; preds = %87
  %96 = select i1 %79, i32 0, i32 %85
  %97 = add i32 %86, %96
  %98 = trunc i64 %88 to i32
  %99 = add i32 %98, 1
  %100 = sdiv i32 %97, %99
  %101 = sext i32 %100 to i64
  store ptr %.fca.0.load101, ptr %1, align 8, !tbaa !7
  %.fca.1.gep486 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %1, i64 0, i32 1
  store i64 %.fca.1.load104, ptr %.fca.1.gep486, align 8, !tbaa !7
  %.fca.2.gep488 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %1, i64 0, i32 2
  store i32 20180515, ptr %.fca.2.gep488, align 8, !tbaa !7
  %.fca.3.gep490 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %1, i64 0, i32 3
  store i8 0, ptr %.fca.3.gep490, align 4, !tbaa !7
  %.fca.4.gep492 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %1, i64 0, i32 4
  store i8 40, ptr %.fca.4.gep492, align 1, !tbaa !7
  %.fca.5.gep494 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %1, i64 0, i32 5
  store i8 0, ptr %.fca.5.gep494, align 2, !tbaa !7
  %.fca.6.gep496 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %1, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep496, align 1, !tbaa !7
  %.fca.1.gep124 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %10, i64 0, i32 1
  %.fca.2.gep126 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %10, i64 0, i32 2
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %10, i8 0, i64 16, i1 false)
  store i32 20180515, ptr %.fca.2.gep126, align 8, !tbaa !7
  %.fca.3.gep128 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %10, i64 0, i32 3
  store i8 0, ptr %.fca.3.gep128, align 4, !tbaa !7
  %.fca.4.gep130 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %10, i64 0, i32 4
  store i8 40, ptr %.fca.4.gep130, align 1, !tbaa !7
  %.fca.5.gep132 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %10, i64 0, i32 5
  store i8 2, ptr %.fca.5.gep132, align 2, !tbaa !7
  %.fca.6.gep134 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %10, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep134, align 1, !tbaa !7
  %102 = call {} @_FortranARepeat(ptr nonnull %10, ptr nonnull %1, i64 %101, ptr nonnull @_QQcl.ca29fb1ebbbe4e7085d91417865eb658, i32 122)
  %.fca.0.load136 = load ptr, ptr %10, align 8, !tbaa !7
  %.fca.1.load139 = load i64, ptr %.fca.1.gep124, align 8, !tbaa !7
  %103 = call i64 @llvm.smin.i64(i64 %.fca.1.load139, i64 2500000)
  call void @llvm.memmove.p0.p0.i64(ptr nonnull align 16 @_QFEss, ptr align 1 %.fca.0.load136, i64 %103, i1 false)
  %104 = sub i64 2500000, %103
  %105 = icmp sgt i64 %104, 0
  br i1 %105, label %.lr.ph550.preheader, label %._crit_edge551

.lr.ph550.preheader:                              ; preds = %95
  %uglygep599 = getelementptr i8, ptr @_QFEss, i64 %103
  call void @llvm.memset.p0.i64(ptr align 1 %uglygep599, i8 32, i64 %104, i1 false), !tbaa !3
  br label %._crit_edge551

._crit_edge551:                                   ; preds = %.lr.ph550.preheader, %95
  call void @free(ptr %.fca.0.load136)
  call void @free(ptr %.fca.0.load101)
  br label %106

106:                                              ; preds = %._crit_edge551, %67
  store ptr @_QFEt, ptr %4, align 8, !tbaa !7
  %.fca.1.gep442 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %4, i64 0, i32 1
  store i64 500000, ptr %.fca.1.gep442, align 8, !tbaa !7
  %.fca.2.gep443 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %4, i64 0, i32 2
  store i32 20180515, ptr %.fca.2.gep443, align 8, !tbaa !7
  %.fca.3.gep444 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %4, i64 0, i32 3
  store i8 0, ptr %.fca.3.gep444, align 4, !tbaa !7
  %.fca.4.gep445 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %4, i64 0, i32 4
  store i8 40, ptr %.fca.4.gep445, align 1, !tbaa !7
  %.fca.5.gep446 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %4, i64 0, i32 5
  store i8 0, ptr %.fca.5.gep446, align 2, !tbaa !7
  %.fca.6.gep447 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %4, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep447, align 1, !tbaa !7
  %.fca.1.gep159 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %9, i64 0, i32 1
  %.fca.2.gep161 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %9, i64 0, i32 2
  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.gep161, align 8, !tbaa !7
  %.fca.3.gep163 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %9, i64 0, i32 3
  store i8 0, ptr %.fca.3.gep163, align 4, !tbaa !7
  %.fca.4.gep165 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %9, i64 0, i32 4
  store i8 40, ptr %.fca.4.gep165, align 1, !tbaa !7
  %.fca.5.gep167 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %9, i64 0, i32 5
  store i8 2, ptr %.fca.5.gep167, align 2, !tbaa !7
  %.fca.6.gep169 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %9, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep169, align 1, !tbaa !7
  %107 = call {} @_FortranATrim(ptr nonnull %9, ptr nonnull %4, ptr nonnull @_QQcl.ca29fb1ebbbe4e7085d91417865eb658, i32 123)
  %.fca.0.load171 = load ptr, ptr %9, align 8, !tbaa !7
  %.fca.1.load174 = load i64, ptr %.fca.1.gep159, align 8, !tbaa !7
  store ptr @_QFEss, ptr %3, align 8, !tbaa !7
  %.fca.1.gep456 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %3, i64 0, i32 1
  store i64 2500000, ptr %.fca.1.gep456, align 8, !tbaa !7
  %.fca.2.gep457 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %3, i64 0, i32 2
  store i32 20180515, ptr %.fca.2.gep457, align 8, !tbaa !7
  %.fca.3.gep458 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %3, i64 0, i32 3
  store i8 0, ptr %.fca.3.gep458, align 4, !tbaa !7
  %.fca.4.gep459 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %3, i64 0, i32 4
  store i8 40, ptr %.fca.4.gep459, align 1, !tbaa !7
  %.fca.5.gep460 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %3, i64 0, i32 5
  store i8 0, ptr %.fca.5.gep460, align 2, !tbaa !7
  %.fca.6.gep461 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %3, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep461, align 1, !tbaa !7
  %.fca.1.gep194 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %8, i64 0, i32 1
  %.fca.2.gep196 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %8, i64 0, i32 2
  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.gep196, align 8, !tbaa !7
  %.fca.3.gep198 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %8, i64 0, i32 3
  store i8 0, ptr %.fca.3.gep198, align 4, !tbaa !7
  %.fca.4.gep200 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %8, i64 0, i32 4
  store i8 40, ptr %.fca.4.gep200, align 1, !tbaa !7
  %.fca.5.gep202 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %8, i64 0, i32 5
  store i8 2, ptr %.fca.5.gep202, align 2, !tbaa !7
  %.fca.6.gep204 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8 }, ptr %8, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep204, align 1, !tbaa !7
  %108 = call {} @_FortranATrim(ptr nonnull %8, ptr nonnull %3, ptr nonnull @_QQcl.ca29fb1ebbbe4e7085d91417865eb658, i32 123)
  %.fca.0.load206 = load ptr, ptr %8, align 8, !tbaa !7
  %.fca.1.load209 = load i64, ptr %.fca.1.gep194, align 8, !tbaa !7
  %109 = add i64 %.fca.1.load209, %.fca.1.load174
  %110 = alloca i8, i64 %109, align 1
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %110, ptr align 1 %.fca.0.load171, i64 %.fca.1.load174, i1 false)
  %111 = icmp sgt i64 %.fca.1.load209, 0
  br i1 %111, label %.lr.ph553.preheader, label %._crit_edge554

.lr.ph553.preheader:                              ; preds = %106
  %uglygep600 = getelementptr i8, ptr %110, i64 %.fca.1.load174
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %uglygep600, ptr align 1 %.fca.0.load206, i64 %.fca.1.load209, i1 false), !tbaa !3
  br label %._crit_edge554

._crit_edge554:                                   ; preds = %.lr.ph553.preheader, %106
  %112 = call i64 @llvm.smin.i64(i64 %109, i64 5000000)
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 16 @_QFEts, ptr nonnull align 1 %110, i64 %112, i1 false)
  %113 = sub i64 5000000, %112
  %114 = icmp sgt i64 %113, 0
  br i1 %114, label %.lr.ph556.preheader, label %._crit_edge557

.lr.ph556.preheader:                              ; preds = %._crit_edge554
  %uglygep601 = getelementptr i8, ptr @_QFEts, i64 %112
  call void @llvm.memset.p0.i64(ptr align 1 %uglygep601, i8 32, i64 %113, i1 false), !tbaa !3
  br label %._crit_edge557

._crit_edge557:                                   ; preds = %.lr.ph556.preheader, %._crit_edge554
  call void @free(ptr %.fca.0.load206)
  call void @free(ptr %.fca.0.load171)
  br label %115

115:                                              ; preds = %._crit_edge557, %115
  %116 = phi i64 [ 4999999, %._crit_edge557 ], [ %120, %115 ]
  %117 = getelementptr [5000000 x [1 x i8]], ptr @_QFEts, i64 0, i64 %116
  %118 = load i8, ptr %117, align 1, !tbaa !3
  %119 = icmp eq i8 %118, 32
  %120 = add nsw i64 %116, -1
  %121 = icmp ne i64 %116, 0
  %122 = and i1 %119, %121
  br i1 %122, label %115, label %123

123:                                              ; preds = %115
  %124 = shl i64 %116, 32
  %sext = add i64 %124, 4294967296
  %125 = ashr exact i64 %sext, 32
  %126 = call i64 @llvm.smax.i64(i64 %125, i64 0)
  %127 = select i1 %119, i64 0, i64 %126
  %.not580 = icmp eq i64 %127, 0
  br i1 %.not580, label %._crit_edge560.thread, label %.lr.ph559

.lr.ph559:                                        ; preds = %123, %.lr.ph559
  %.in = phi i64 [ %128, %.lr.ph559 ], [ %127, %123 ]
  %128 = add nsw i64 %.in, -1
  %129 = getelementptr [1 x i8], ptr @_QFEts, i64 %128
  %130 = load i8, ptr %129, align 1, !tbaa !3
  %.fr = freeze i8 %130
  %131 = icmp eq i8 %.fr, 32
  %132 = icmp ne i64 %128, 0
  %133 = and i1 %131, %132
  br i1 %133, label %.lr.ph559, label %._crit_edge560

._crit_edge560:                                   ; preds = %.lr.ph559
  %134 = shl i64 %128, 32
  %sext522 = add i64 %134, 4294967296
  %135 = ashr exact i64 %sext522, 32
  %136 = call i64 @llvm.smax.i64(i64 %135, i64 0)
  br i1 %131, label %._crit_edge560.thread, label %137

._crit_edge560.thread:                            ; preds = %123, %._crit_edge560
  br label %137

137:                                              ; preds = %._crit_edge560, %._crit_edge560.thread
  %138 = phi i64 [ 0, %._crit_edge560.thread ], [ %136, %._crit_edge560 ]
  %139 = call ptr @llvm.stacksave()
  %140 = alloca i32, i64 %138, align 4
  call void @_QFPz_algorithm(ptr nonnull %140, ptr nonnull @_QFEts, i64 %127)
  br i1 %.not580, label %._crit_edge564, label %.lr.ph563.preheader

.lr.ph563.preheader:                              ; preds = %137
  %141 = shl nuw i64 %127, 2
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 16 @_QFEz, ptr nonnull align 4 %140, i64 %141, i1 false), !tbaa !3
  br label %._crit_edge564

._crit_edge564:                                   ; preds = %.lr.ph563.preheader, %137
  call void @llvm.stackrestore(ptr %139)
  %142 = sext i32 %34 to i64
  %143 = icmp sgt i32 %34, 0
  br i1 %143, label %.lr.ph567.preheader, label %._crit_edge568.thread

.lr.ph567.preheader:                              ; preds = %._crit_edge564
  %min.iters.check = icmp ult i32 %34, 8
  br i1 %min.iters.check, label %.lr.ph567.preheader658, label %vector.scevcheck

vector.scevcheck:                                 ; preds = %.lr.ph567.preheader
  %144 = add nsw i64 %142, -1
  %145 = add i32 %46, 1
  %146 = trunc i64 %144 to i32
  %147 = add i32 %145, %146
  %148 = icmp slt i32 %147, %145
  %149 = icmp ugt i64 %144, 4294967295
  %150 = or i1 %148, %149
  br i1 %150, label %.lr.ph567.preheader658, label %vector.ph

vector.ph:                                        ; preds = %vector.scevcheck
  %n.vec = and i64 %142, -8
  %ind.end = or i64 %n.vec, 1
  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %46, i64 0
  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert642 = insertelement <4 x i32> poison, i32 %46, i64 0
  %broadcast.splat643 = shufflevector <4 x i32> %broadcast.splatinsert642, <4 x i32> poison, <4 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %pred.store.continue657, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %pred.store.continue657 ]
  %151 = trunc i64 %index to i32
  %152 = or i32 %151, 1
  %153 = add i32 %46, %152
  %154 = sext i32 %153 to i64
  %155 = add nsw i64 %154, -1
  %156 = getelementptr [5000000 x i32], ptr @_QFEz, i64 0, i64 %155
  %wide.load = load <4 x i32>, ptr %156, align 4, !tbaa !3
  %157 = getelementptr i32, ptr %156, i64 4
  %wide.load641 = load <4 x i32>, ptr %157, align 4, !tbaa !3
  %158 = icmp sge <4 x i32> %wide.load, %broadcast.splat
  %159 = icmp sge <4 x i32> %wide.load641, %broadcast.splat643
  %160 = extractelement <4 x i1> %158, i64 0
  br i1 %160, label %pred.store.if, label %pred.store.continue

pred.store.if:                                    ; preds = %vector.body
  %161 = getelementptr [500000 x i32], ptr @_QFEok, i64 0, i64 %index
  store i32 1, ptr %161, align 16, !tbaa !3
  br label %pred.store.continue

pred.store.continue:                              ; preds = %pred.store.if, %vector.body
  %162 = extractelement <4 x i1> %158, i64 1
  br i1 %162, label %pred.store.if644, label %pred.store.continue645

pred.store.if644:                                 ; preds = %pred.store.continue
  %163 = or i64 %index, 1
  %164 = getelementptr [500000 x i32], ptr @_QFEok, i64 0, i64 %163
  store i32 1, ptr %164, align 4, !tbaa !3
  br label %pred.store.continue645

pred.store.continue645:                           ; preds = %pred.store.if644, %pred.store.continue
  %165 = extractelement <4 x i1> %158, i64 2
  br i1 %165, label %pred.store.if646, label %pred.store.continue647

pred.store.if646:                                 ; preds = %pred.store.continue645
  %166 = or i64 %index, 2
  %167 = getelementptr [500000 x i32], ptr @_QFEok, i64 0, i64 %166
  store i32 1, ptr %167, align 8, !tbaa !3
  br label %pred.store.continue647

pred.store.continue647:                           ; preds = %pred.store.if646, %pred.store.continue645
  %168 = extractelement <4 x i1> %158, i64 3
  br i1 %168, label %pred.store.if648, label %pred.store.continue649

pred.store.if648:                                 ; preds = %pred.store.continue647
  %169 = or i64 %index, 3
  %170 = getelementptr [500000 x i32], ptr @_QFEok, i64 0, i64 %169
  store i32 1, ptr %170, align 4, !tbaa !3
  br label %pred.store.continue649

pred.store.continue649:                           ; preds = %pred.store.if648, %pred.store.continue647
  %171 = extractelement <4 x i1> %159, i64 0
  br i1 %171, label %pred.store.if650, label %pred.store.continue651

pred.store.if650:                                 ; preds = %pred.store.continue649
  %172 = or i64 %index, 4
  %173 = getelementptr [500000 x i32], ptr @_QFEok, i64 0, i64 %172
  store i32 1, ptr %173, align 16, !tbaa !3
  br label %pred.store.continue651

pred.store.continue651:                           ; preds = %pred.store.if650, %pred.store.continue649
  %174 = extractelement <4 x i1> %159, i64 1
  br i1 %174, label %pred.store.if652, label %pred.store.continue653

pred.store.if652:                                 ; preds = %pred.store.continue651
  %175 = or i64 %index, 5
  %176 = getelementptr [500000 x i32], ptr @_QFEok, i64 0, i64 %175
  store i32 1, ptr %176, align 4, !tbaa !3
  br label %pred.store.continue653

pred.store.continue653:                           ; preds = %pred.store.if652, %pred.store.continue651
  %177 = extractelement <4 x i1> %159, i64 2
  br i1 %177, label %pred.store.if654, label %pred.store.continue655

pred.store.if654:                                 ; preds = %pred.store.continue653
  %178 = or i64 %index, 6
  %179 = getelementptr [500000 x i32], ptr @_QFEok, i64 0, i64 %178
  store i32 1, ptr %179, align 8, !tbaa !3
  br label %pred.store.continue655

pred.store.continue655:                           ; preds = %pred.store.if654, %pred.store.continue653
  %180 = extractelement <4 x i1> %159, i64 3
  br i1 %180, label %pred.store.if656, label %pred.store.continue657

pred.store.if656:                                 ; preds = %pred.store.continue655
  %181 = or i64 %index, 7
  %182 = getelementptr [500000 x i32], ptr @_QFEok, i64 0, i64 %181
  store i32 1, ptr %182, align 4, !tbaa !3
  br label %pred.store.continue657

pred.store.continue657:                           ; preds = %pred.store.if656, %pred.store.continue655
  %index.next = add nuw i64 %index, 8
  %183 = icmp eq i64 %index.next, %n.vec
  br i1 %183, label %middle.block, label %vector.body, !llvm.loop !15

middle.block:                                     ; preds = %pred.store.continue657
  %cmp.n = icmp eq i64 %n.vec, %142
  br i1 %cmp.n, label %._crit_edge568, label %.lr.ph567.preheader658

.lr.ph567.preheader658:                           ; preds = %vector.scevcheck, %.lr.ph567.preheader, %middle.block
  %indvars.iv.ph = phi i64 [ 1, %vector.scevcheck ], [ 1, %.lr.ph567.preheader ], [ %ind.end, %middle.block ]
  %xtraiter = and i64 %142, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph567.prol.loopexit, label %.lr.ph567.prol

.lr.ph567.prol:                                   ; preds = %.lr.ph567.preheader658
  %184 = trunc i64 %indvars.iv.ph to i32
  %185 = add i32 %46, %184
  %186 = sext i32 %185 to i64
  %187 = add nsw i64 %186, -1
  %188 = getelementptr [5000000 x i32], ptr @_QFEz, i64 0, i64 %187
  %189 = load i32, ptr %188, align 4, !tbaa !3
  %.not524.prol = icmp slt i32 %189, %46
  br i1 %.not524.prol, label %.lr.ph567.prol.loopexit.unr-lcssa, label %190

190:                                              ; preds = %.lr.ph567.prol
  %191 = add nsw i64 %indvars.iv.ph, -1
  %192 = getelementptr [500000 x i32], ptr @_QFEok, i64 0, i64 %191
  store i32 1, ptr %192, align 8, !tbaa !3
  br label %.lr.ph567.prol.loopexit.unr-lcssa

.lr.ph567.prol.loopexit.unr-lcssa:                ; preds = %190, %.lr.ph567.prol
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.ph, 1
  br label %.lr.ph567.prol.loopexit

.lr.ph567.prol.loopexit:                          ; preds = %.lr.ph567.prol.loopexit.unr-lcssa, %.lr.ph567.preheader658
  %indvars.iv.unr = phi i64 [ %indvars.iv.ph, %.lr.ph567.preheader658 ], [ %indvars.iv.next.prol, %.lr.ph567.prol.loopexit.unr-lcssa ]
  %193 = icmp eq i64 %indvars.iv.ph, %142
  br i1 %193, label %._crit_edge568, label %.lr.ph567

._crit_edge568.thread:                            ; preds = %._crit_edge564
  call void @_QMmod_union_findPinit_union_find(ptr nonnull @_QFEuf, ptr nonnull %16)
  br label %._crit_edge577

.lr.ph567:                                        ; preds = %.lr.ph567.prol.loopexit, %211
  %indvars.iv = phi i64 [ %indvars.iv.next.1, %211 ], [ %indvars.iv.unr, %.lr.ph567.prol.loopexit ]
  %194 = trunc i64 %indvars.iv to i32
  %195 = add i32 %46, %194
  %196 = sext i32 %195 to i64
  %197 = add nsw i64 %196, -1
  %198 = getelementptr [5000000 x i32], ptr @_QFEz, i64 0, i64 %197
  %199 = load i32, ptr %198, align 4, !tbaa !3
  %.not524 = icmp slt i32 %199, %46
  br i1 %.not524, label %.lr.ph567.1, label %200

200:                                              ; preds = %.lr.ph567
  %201 = add nsw i64 %indvars.iv, -1
  %202 = getelementptr [500000 x i32], ptr @_QFEok, i64 0, i64 %201
  store i32 1, ptr %202, align 4, !tbaa !3
  br label %.lr.ph567.1

.lr.ph567.1:                                      ; preds = %200, %.lr.ph567
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %203 = trunc i64 %indvars.iv.next to i32
  %204 = add i32 %46, %203
  %205 = sext i32 %204 to i64
  %206 = add nsw i64 %205, -1
  %207 = getelementptr [5000000 x i32], ptr @_QFEz, i64 0, i64 %206
  %208 = load i32, ptr %207, align 4, !tbaa !3
  %.not524.1 = icmp slt i32 %208, %46
  br i1 %.not524.1, label %211, label %209

209:                                              ; preds = %.lr.ph567.1
  %210 = getelementptr [500000 x i32], ptr @_QFEok, i64 0, i64 %indvars.iv
  store i32 1, ptr %210, align 4, !tbaa !3
  br label %211

211:                                              ; preds = %209, %.lr.ph567.1
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %exitcond.not.1 = icmp eq i64 %indvars.iv.next, %142
  br i1 %exitcond.not.1, label %._crit_edge568, label %.lr.ph567, !llvm.loop !16

._crit_edge568:                                   ; preds = %.lr.ph567.prol.loopexit, %211, %middle.block
  call void @_QMmod_union_findPinit_union_find(ptr nonnull @_QFEuf, ptr nonnull %16)
  store i32 1, ptr %15, align 4, !tbaa !3
  br i1 %143, label %.lr.ph574, label %._crit_edge577

.lr.ph574:                                        ; preds = %._crit_edge568
  %212 = add i32 %46, -1
  %213 = add nuw i32 %34, 1
  %wide.trip.count = zext i32 %213 to i64
  br label %214

.preheader:                                       ; preds = %_QMmod_union_findPunite.exit
  br i1 %143, label %.lr.ph576, label %._crit_edge577

214:                                              ; preds = %.lr.ph574, %_QMmod_union_findPunite.exit
  %indvars.iv603 = phi i64 [ 1, %.lr.ph574 ], [ %indvars.iv.next604, %_QMmod_union_findPunite.exit ]
  %215 = add nsw i64 %indvars.iv603, -1
  %216 = getelementptr [500000 x i32], ptr @_QFEok, i64 0, i64 %215
  %217 = load i32, ptr %216, align 4, !tbaa !3
  %218 = trunc i64 %indvars.iv603 to i32
  %219 = add i32 %212, %218
  %220 = srem i32 %219, %33
  %221 = add i32 %220, 1
  %222 = sext i32 %221 to i64
  %223 = add nsw i64 %222, -1
  %224 = getelementptr [500000 x i32], ptr @_QFEok, i64 0, i64 %223
  %225 = load i32, ptr %224, align 4, !tbaa !3
  %226 = icmp ne i32 %217, 0
  %227 = icmp ne i32 %225, 0
  %228 = and i1 %226, %227
  br i1 %228, label %229, label %_QMmod_union_findPunite.exit

229:                                              ; preds = %214
  store i32 %221, ptr %7, align 4, !tbaa !3
  %230 = call i32 @_QMmod_union_findPfind(ptr nonnull @_QFEuf, ptr nonnull %15)
  %231 = call i32 @_QMmod_union_findPfind(ptr nonnull @_QFEuf, ptr nonnull %7)
  %.not528 = icmp eq i32 %230, %231
  br i1 %.not528, label %232, label %237

232:                                              ; preds = %229
  %233 = call ptr @_FortranAioBeginExternalFormattedOutput(ptr nonnull @_QQcl.28693029, i64 4, ptr null, i32 -1, ptr nonnull @_QQcl.ca29fb1ebbbe4e7085d91417865eb658, i32 133)
  %234 = call i1 @_FortranAioOutputInteger32(ptr %233, i32 -1)
  %235 = call i32 @_FortranAioEndIoStatement(ptr %233)
  %236 = call {} @_FortranAStopStatement(i32 0, i1 false, i1 false)
  unreachable

237:                                              ; preds = %229
  store i32 %221, ptr %6, align 4, !tbaa !3
  %238 = call i32 @_QMmod_union_findPfind(ptr nonnull @_QFEuf, ptr nonnull %15)
  %239 = call i32 @_QMmod_union_findPfind(ptr nonnull @_QFEuf, ptr nonnull %6)
  %240 = icmp eq i32 %238, %239
  %241 = sext i32 %238 to i64
  br i1 %240, label %242, label %246

242:                                              ; preds = %237
  %.unpack427.i = load ptr, ptr getelementptr inbounds (%_QMmod_union_findTunion_find, ptr @_QFEuf, i64 0, i32 4), align 8, !tbaa !7
  %.unpack441.unpack.unpack.i = load i64, ptr getelementptr inbounds (%_QMmod_union_findTunion_find, ptr @_QFEuf, i64 0, i32 4, i32 7), align 16, !tbaa !7
  %.unpack441.unpack.unpack446.i = load i64, ptr getelementptr inbounds (%_QMmod_union_findTunion_find, ptr @_QFEuf, i64 0, i32 4, i32 7, i64 0, i64 2), align 16, !tbaa !7
  %243 = sub i64 %241, %.unpack441.unpack.unpack.i
  %244 = mul i64 %243, %.unpack441.unpack.unpack446.i
  %245 = getelementptr i8, ptr %.unpack427.i, i64 %244
  store i32 1, ptr %245, align 4, !tbaa !3
  br label %_QMmod_union_findPunite.exit

246:                                              ; preds = %237
  %.unpack.i = load ptr, ptr getelementptr inbounds (%_QMmod_union_findTunion_find, ptr @_QFEuf, i64 0, i32 2), align 8, !tbaa !7
  %.unpack272.unpack.unpack.i = load i64, ptr getelementptr inbounds (%_QMmod_union_findTunion_find, ptr @_QFEuf, i64 0, i32 2, i32 7), align 16, !tbaa !7
  %.unpack272.unpack.unpack277.i = load i64, ptr getelementptr inbounds (%_QMmod_union_findTunion_find, ptr @_QFEuf, i64 0, i32 2, i32 7, i64 0, i64 2), align 16, !tbaa !7
  %247 = sub i64 %241, %.unpack272.unpack.unpack.i
  %248 = mul i64 %247, %.unpack272.unpack.unpack277.i
  %249 = getelementptr i8, ptr %.unpack.i, i64 %248
  %250 = load i32, ptr %249, align 4, !tbaa !3
  %251 = sext i32 %239 to i64
  %252 = sub i64 %251, %.unpack272.unpack.unpack.i
  %253 = mul i64 %252, %.unpack272.unpack.unpack277.i
  %254 = getelementptr i8, ptr %.unpack.i, i64 %253
  %255 = load i32, ptr %254, align 4, !tbaa !3
  %256 = icmp slt i32 %250, %255
  %.unpack363.i = load ptr, ptr getelementptr inbounds (%_QMmod_union_findTunion_find, ptr @_QFEuf, i64 0, i32 1), align 8, !tbaa !7
  %.unpack377.unpack.unpack.i = load i64, ptr getelementptr inbounds (%_QMmod_union_findTunion_find, ptr @_QFEuf, i64 0, i32 1, i32 7), align 16, !tbaa !7
  %.unpack377.unpack.unpack382.i = load i64, ptr getelementptr inbounds (%_QMmod_union_findTunion_find, ptr @_QFEuf, i64 0, i32 1, i32 7, i64 0, i64 2), align 16, !tbaa !7
  br i1 %256, label %257, label %278

257:                                              ; preds = %246
  %258 = sub i64 %241, %.unpack377.unpack.unpack.i
  %259 = mul i64 %258, %.unpack377.unpack.unpack382.i
  %260 = getelementptr i8, ptr %.unpack363.i, i64 %259
  store i32 %239, ptr %260, align 4, !tbaa !3
  %.unpack384.i = load ptr, ptr getelementptr inbounds (%_QMmod_union_findTunion_find, ptr @_QFEuf, i64 0, i32 3), align 8, !tbaa !7
  %.unpack398.unpack.unpack.i = load i64, ptr getelementptr inbounds (%_QMmod_union_findTunion_find, ptr @_QFEuf, i64 0, i32 3, i32 7), align 16, !tbaa !7
  %.unpack398.unpack.unpack403.i = load i64, ptr getelementptr inbounds (%_QMmod_union_findTunion_find, ptr @_QFEuf, i64 0, i32 3, i32 7, i64 0, i64 2), align 16, !tbaa !7
  %261 = sub i64 %251, %.unpack398.unpack.unpack.i
  %262 = mul i64 %261, %.unpack398.unpack.unpack403.i
  %263 = getelementptr i8, ptr %.unpack384.i, i64 %262
  %264 = load i32, ptr %263, align 4, !tbaa !3
  %265 = sub i64 %241, %.unpack398.unpack.unpack.i
  %266 = mul i64 %265, %.unpack398.unpack.unpack403.i
  %267 = getelementptr i8, ptr %.unpack384.i, i64 %266
  %268 = load i32, ptr %267, align 4, !tbaa !3
  %269 = add i32 %268, %264
  store i32 %269, ptr %263, align 4, !tbaa !3
  %.unpack405.i = load ptr, ptr getelementptr inbounds (%_QMmod_union_findTunion_find, ptr @_QFEuf, i64 0, i32 4), align 8, !tbaa !7
  %.unpack419.unpack.unpack.i = load i64, ptr getelementptr inbounds (%_QMmod_union_findTunion_find, ptr @_QFEuf, i64 0, i32 4, i32 7), align 16, !tbaa !7
  %.unpack419.unpack.unpack424.i = load i64, ptr getelementptr inbounds (%_QMmod_union_findTunion_find, ptr @_QFEuf, i64 0, i32 4, i32 7, i64 0, i64 2), align 16, !tbaa !7
  %270 = sub i64 %241, %.unpack419.unpack.unpack.i
  %271 = mul i64 %270, %.unpack419.unpack.unpack424.i
  %272 = getelementptr i8, ptr %.unpack405.i, i64 %271
  %273 = load i32, ptr %272, align 4, !tbaa !3
  %.not426.i = icmp eq i32 %273, 0
  br i1 %.not426.i, label %_QMmod_union_findPunite.exit, label %274

274:                                              ; preds = %257
  %275 = sub i64 %251, %.unpack419.unpack.unpack.i
  %276 = mul i64 %275, %.unpack419.unpack.unpack424.i
  %277 = getelementptr i8, ptr %.unpack405.i, i64 %276
  store i32 1, ptr %277, align 4, !tbaa !3
  br label %_QMmod_union_findPunite.exit

278:                                              ; preds = %246
  %279 = sub i64 %251, %.unpack377.unpack.unpack.i
  %280 = mul i64 %279, %.unpack377.unpack.unpack382.i
  %281 = getelementptr i8, ptr %.unpack363.i, i64 %280
  store i32 %238, ptr %281, align 4, !tbaa !3
  %.unpack300.i = load ptr, ptr getelementptr inbounds (%_QMmod_union_findTunion_find, ptr @_QFEuf, i64 0, i32 3), align 8, !tbaa !7
  %.unpack314.unpack.unpack.i = load i64, ptr getelementptr inbounds (%_QMmod_union_findTunion_find, ptr @_QFEuf, i64 0, i32 3, i32 7), align 16, !tbaa !7
  %.unpack314.unpack.unpack319.i = load i64, ptr getelementptr inbounds (%_QMmod_union_findTunion_find, ptr @_QFEuf, i64 0, i32 3, i32 7, i64 0, i64 2), align 16, !tbaa !7
  %282 = sub i64 %241, %.unpack314.unpack.unpack.i
  %283 = mul i64 %282, %.unpack314.unpack.unpack319.i
  %284 = getelementptr i8, ptr %.unpack300.i, i64 %283
  %285 = load i32, ptr %284, align 4, !tbaa !3
  %286 = sub i64 %251, %.unpack314.unpack.unpack.i
  %287 = mul i64 %286, %.unpack314.unpack.unpack319.i
  %288 = getelementptr i8, ptr %.unpack300.i, i64 %287
  %289 = load i32, ptr %288, align 4, !tbaa !3
  %290 = add i32 %289, %285
  store i32 %290, ptr %284, align 4, !tbaa !3
  %.unpack321.i = load ptr, ptr getelementptr inbounds (%_QMmod_union_findTunion_find, ptr @_QFEuf, i64 0, i32 4), align 8, !tbaa !7
  %.unpack335.unpack.unpack.i = load i64, ptr getelementptr inbounds (%_QMmod_union_findTunion_find, ptr @_QFEuf, i64 0, i32 4, i32 7), align 16, !tbaa !7
  %.unpack335.unpack.unpack340.i = load i64, ptr getelementptr inbounds (%_QMmod_union_findTunion_find, ptr @_QFEuf, i64 0, i32 4, i32 7, i64 0, i64 2), align 16, !tbaa !7
  %291 = sub i64 %251, %.unpack335.unpack.unpack.i
  %292 = mul i64 %291, %.unpack335.unpack.unpack340.i
  %293 = getelementptr i8, ptr %.unpack321.i, i64 %292
  %294 = load i32, ptr %293, align 4, !tbaa !3
  %.not.i = icmp eq i32 %294, 0
  br i1 %.not.i, label %299, label %295

295:                                              ; preds = %278
  %296 = sub i64 %241, %.unpack335.unpack.unpack.i
  %297 = mul i64 %296, %.unpack335.unpack.unpack340.i
  %298 = getelementptr i8, ptr %.unpack321.i, i64 %297
  store i32 1, ptr %298, align 4, !tbaa !3
  br label %299

299:                                              ; preds = %295, %278
  %300 = load i32, ptr %249, align 4, !tbaa !3
  %301 = load i32, ptr %254, align 4, !tbaa !3
  %302 = icmp eq i32 %300, %301
  br i1 %302, label %303, label %_QMmod_union_findPunite.exit

303:                                              ; preds = %299
  %304 = add i32 %300, 1
  store i32 %304, ptr %249, align 4, !tbaa !3
  br label %_QMmod_union_findPunite.exit

_QMmod_union_findPunite.exit:                     ; preds = %303, %299, %274, %257, %242, %214
  %indvars.iv.next604 = add nuw nsw i64 %indvars.iv603, 1
  %305 = trunc i64 %indvars.iv.next604 to i32
  store i32 %305, ptr %15, align 4, !tbaa !3
  %exitcond606.not = icmp eq i64 %indvars.iv.next604, %wide.trip.count
  br i1 %exitcond606.not, label %.preheader, label %214

.lr.ph576:                                        ; preds = %.preheader, %318
  %indvars.iv607 = phi i64 [ %indvars.iv.next608, %318 ], [ 1, %.preheader ]
  %.0575 = phi i32 [ %.1, %318 ], [ 0, %.preheader ]
  %306 = trunc i64 %indvars.iv607 to i32
  store i32 %306, ptr %15, align 4, !tbaa !3
  %307 = add nsw i64 %indvars.iv607, -1
  %308 = getelementptr [500000 x i32], ptr @_QFEok, i64 0, i64 %307
  %309 = load i32, ptr %308, align 4, !tbaa !3
  %.not = icmp eq i32 %309, 0
  br i1 %.not, label %318, label %310

310:                                              ; preds = %.lr.ph576
  %.unpack.i527 = load ptr, ptr getelementptr inbounds (%_QMmod_union_findTunion_find, ptr @_QFEuf, i64 0, i32 3), align 8, !tbaa !7
  %.unpack15.unpack.unpack.i = load i64, ptr getelementptr inbounds (%_QMmod_union_findTunion_find, ptr @_QFEuf, i64 0, i32 3, i32 7), align 16, !tbaa !7
  %.unpack15.unpack.unpack20.i = load i64, ptr getelementptr inbounds (%_QMmod_union_findTunion_find, ptr @_QFEuf, i64 0, i32 3, i32 7, i64 0, i64 2), align 16, !tbaa !7
  %311 = call i32 @_QMmod_union_findPfind(ptr nonnull @_QFEuf, ptr nonnull %15)
  %312 = sext i32 %311 to i64
  %313 = sub i64 %312, %.unpack15.unpack.unpack.i
  %314 = mul i64 %313, %.unpack15.unpack.unpack20.i
  %315 = getelementptr i8, ptr %.unpack.i527, i64 %314
  %316 = load i32, ptr %315, align 4, !tbaa !3
  %317 = call i32 @llvm.smax.i32(i32 %.0575, i32 %316)
  br label %318

318:                                              ; preds = %310, %.lr.ph576
  %.1 = phi i32 [ %317, %310 ], [ %.0575, %.lr.ph576 ]
  %indvars.iv.next608 = add nuw nsw i64 %indvars.iv607, 1
  %exitcond610.not = icmp eq i64 %indvars.iv607, %142
  br i1 %exitcond610.not, label %._crit_edge577, label %.lr.ph576

._crit_edge577:                                   ; preds = %318, %._crit_edge568, %._crit_edge568.thread, %.preheader
  %.0.lcssa = phi i32 [ 0, %.preheader ], [ 0, %._crit_edge568.thread ], [ 0, %._crit_edge568 ], [ %.1, %318 ]
  %319 = call ptr @_FortranAioBeginExternalFormattedOutput(ptr nonnull @_QQcl.28693029, i64 4, ptr null, i32 -1, ptr nonnull @_QQcl.ca29fb1ebbbe4e7085d91417865eb658, i32 143)
  %320 = call i1 @_FortranAioOutputInteger32(ptr %319, i32 %.0.lcssa)
  %321 = call i32 @_FortranAioEndIoStatement(ptr %319)
  %322 = call {} @_FortranAStopStatement(i32 0, i1 false, i1 false)
  unreachable
}

define void @_QFPz_algorithm(ptr nocapture %0, ptr %1, i64 %2) local_unnamed_addr {
  %4 = add i64 %2, -1
  %5 = icmp sgt i64 %4, -1
  br i1 %5, label %.lr.ph, label %.thread

.lr.ph:                                           ; preds = %3, %.lr.ph
  %6 = phi i64 [ %10, %.lr.ph ], [ %4, %3 ]
  %7 = getelementptr [1 x i8], ptr %1, i64 %6
  %8 = load i8, ptr %7, align 1, !tbaa !3
  %9 = icmp eq i8 %8, 32
  %10 = add nsw i64 %6, -1
  %11 = icmp ne i64 %6, 0
  %12 = and i1 %9, %11
  br i1 %12, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph
  %13 = shl i64 %6, 32
  %.not55 = icmp ugt i64 %13, 9223372032559808511
  %.not = select i1 %9, i1 true, i1 %.not55
  br i1 %.not, label %.preheader29, label %select.unfold.preheader

select.unfold.preheader:                          ; preds = %._crit_edge
  %sext = add nuw nsw i64 %13, 4294967296
  %14 = lshr exact i64 %sext, 30
  tail call void @llvm.memset.p0.i64(ptr align 4 %0, i8 0, i64 %14, i1 false), !tbaa !3
  br label %.preheader29

.preheader29:                                     ; preds = %select.unfold.preheader, %._crit_edge
  br i1 %5, label %.lr.ph37, label %.thread

.lr.ph37:                                         ; preds = %.preheader29, %.lr.ph37
  %15 = phi i64 [ %19, %.lr.ph37 ], [ %4, %.preheader29 ]
  %16 = getelementptr [1 x i8], ptr %1, i64 %15
  %17 = load i8, ptr %16, align 1, !tbaa !3
  %.fr = freeze i8 %17
  %18 = icmp eq i8 %.fr, 32
  %19 = add nsw i64 %15, -1
  %20 = icmp ne i64 %15, 0
  %21 = and i1 %18, %20
  br i1 %21, label %.lr.ph37, label %._crit_edge38

._crit_edge38:                                    ; preds = %.lr.ph37
  %22 = trunc i64 %15 to i32
  %23 = add i32 %22, 1
  br i1 %18, label %.thread, label %24

.thread:                                          ; preds = %._crit_edge38, %.preheader29, %3
  store i32 0, ptr %0, align 4, !tbaa !3
  br label %._crit_edge47

24:                                               ; preds = %._crit_edge38
  store i32 %23, ptr %0, align 4, !tbaa !3
  %25 = icmp sgt i32 %23, 1
  br i1 %25, label %.preheader28.lr.ph, label %._crit_edge47

.preheader28.lr.ph:                               ; preds = %24
  %26 = getelementptr i32, ptr %0, i64 1
  br label %.preheader28

.preheader28:                                     ; preds = %.preheader28.lr.ph, %.backedge
  %.046 = phi i32 [ 1, %.preheader28.lr.ph ], [ %.0.be, %.backedge ]
  %.02345 = phi i32 [ 0, %.preheader28.lr.ph ], [ %.023.be, %.backedge ]
  br label %27

27:                                               ; preds = %.preheader28, %27
  %.1 = phi i32 [ %30, %27 ], [ %.02345, %.preheader28 ]
  %28 = add i32 %.1, %.046
  %29 = icmp slt i32 %28, %23
  %30 = add i32 %.1, 1
  %31 = sext i32 %30 to i64
  %32 = add nsw i64 %31, -1
  %33 = getelementptr [1 x i8], ptr %1, i64 %32
  %34 = add i32 %28, 1
  %35 = sext i32 %34 to i64
  %36 = add nsw i64 %35, -1
  %37 = getelementptr [1 x i8], ptr %1, i64 %36
  %38 = tail call i32 @_FortranACharacterCompareScalar1(ptr %33, ptr %37, i64 1, i64 1)
  %39 = icmp eq i32 %38, 0
  %40 = and i1 %29, %39
  br i1 %40, label %27, label %41

41:                                               ; preds = %27
  %42 = add i32 %.046, 1
  %43 = sext i32 %42 to i64
  %44 = add nsw i64 %43, -1
  %45 = getelementptr i32, ptr %0, i64 %44
  store i32 %.1, ptr %45, align 4, !tbaa !3
  %46 = icmp eq i32 %.1, 0
  br i1 %46, label %.backedge, label %.preheader

.preheader:                                       ; preds = %41
  %47 = icmp slt i32 %42, %23
  %48 = load i32, ptr %26, align 4, !tbaa !3
  %49 = add i32 %48, 1
  %50 = icmp slt i32 %49, %.1
  %51 = and i1 %47, %50
  br i1 %51, label %.lr.ph41, label %._crit_edge42

.lr.ph41:                                         ; preds = %.preheader, %.lr.ph41
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph41 ], [ %43, %.preheader ]
  %52 = phi i32 [ %60, %.lr.ph41 ], [ %48, %.preheader ]
  %53 = phi i32 [ %56, %.lr.ph41 ], [ 2, %.preheader ]
  %54 = getelementptr i32, ptr %0, i64 %indvars.iv
  store i32 %52, ptr %54, align 4, !tbaa !3
  %indvars.iv.next = add nsw i64 %indvars.iv, 1
  %indvars = trunc i64 %indvars.iv.next to i32
  %55 = icmp sgt i32 %23, %indvars
  %56 = add i32 %53, 1
  %57 = sext i32 %56 to i64
  %58 = add nsw i64 %57, -1
  %59 = getelementptr i32, ptr %0, i64 %58
  %60 = load i32, ptr %59, align 4, !tbaa !3
  %61 = add i32 %60, %53
  %62 = icmp slt i32 %61, %.1
  %63 = and i1 %55, %62
  br i1 %63, label %.lr.ph41, label %._crit_edge42.loopexit

._crit_edge42.loopexit:                           ; preds = %.lr.ph41
  %indvars.le = trunc i64 %indvars.iv.next to i32
  br label %._crit_edge42

._crit_edge42:                                    ; preds = %._crit_edge42.loopexit, %.preheader
  %.022.lcssa = phi i32 [ 1, %.preheader ], [ %53, %._crit_edge42.loopexit ]
  %.lcssa = phi i32 [ %42, %.preheader ], [ %indvars.le, %._crit_edge42.loopexit ]
  %64 = sub i32 %.1, %.022.lcssa
  br label %.backedge

.backedge:                                        ; preds = %._crit_edge42, %41
  %.023.be = phi i32 [ %64, %._crit_edge42 ], [ 0, %41 ]
  %.0.be = phi i32 [ %.lcssa, %._crit_edge42 ], [ %42, %41 ]
  %65 = icmp slt i32 %.0.be, %23
  br i1 %65, label %.preheader28, label %._crit_edge47

._crit_edge47:                                    ; preds = %.backedge, %.thread, %24
  ret void
}

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

declare i1 @_FortranAioInputAscii(ptr, ptr, i64) local_unnamed_addr

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

declare {} @_FortranARepeat(ptr, ptr, i64, ptr, i32) local_unnamed_addr

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn
declare ptr @llvm.stacksave() #7

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn
declare void @llvm.stackrestore(ptr) #7

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

declare i1 @_FortranAioOutputInteger32(ptr, i32) local_unnamed_addr

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

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

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

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

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

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

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

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

!llvm.module.flags = !{!0, !1, !2}

!0 = !{i32 2, !"Debug Info Version", i32 3}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{!4, !4, i64 0}
!4 = !{!"any data access", !5, i64 0}
!5 = !{!"any access", !6, i64 0}
!6 = !{!"Flang Type TBAA Root"}
!7 = !{!8, !8, i64 0}
!8 = !{!"descriptor member", !5, i64 0}
!9 = distinct !{!9, !10, !11}
!10 = !{!"llvm.loop.isvectorized", i32 1}
!11 = !{!"llvm.loop.unroll.runtime.disable"}
!12 = distinct !{!12, !11, !10}
!13 = distinct !{!13, !10, !11}
!14 = distinct !{!14, !11, !10}
!15 = distinct !{!15, !10, !11}
!16 = distinct !{!16, !10}
