      MODULE divisorMod
! 約数列挙のためのモジュール
      IMPLICIT NONE
      
      integer,parameter,private :: prec = 8
      
      contains
! 引数Nの約数全て(1-N)を割り付け配列で返す関数．
! N>=1のみ．
! O( sqrt(N) )
      function allDivisor( N ) result( resArray )
        implicit none
        integer(prec),intent(in) :: N
        integer(prec),allocatable :: resArray(:),buffer(:)
        integer(prec) :: i,c
        
        if( N<=0 )then !error
          resArray = [0]
          return
        end if
        
        
        allocate( buffer(floor(sqrt(real(N)))*2) )
        
        !c : counter
        c = 1
        do i = 1,floor(sqrt(real(N+1)))
          if( mod(N,i)==0 )then
            buffer(c) = i
            c = c + 1
          end if
        end do
        
        !c is allways over 1
        c = c - 1
        
        
        if( buffer(c)*buffer(c)==N )then
          !n is Square number
          buffer(c:2*c-1) = N / buffer(c:1:-1)
          c = 2*c - 1
        else
          buffer(c+1:2*c) = N / buffer(c:1:-1)
          c = 2*c
        end if
        
        !c is now number of divisor
        allocate( resArray(1:c) )
        resArray(1:c) = buffer(1:c)
      end function allDivisor
      END MODULE divisorMod
      
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

      PROGRAM NotDivisible
      use divisorMod
      IMPLICIT NONE
      INTEGER,PARAMETER :: prec = 8
      integer(prec) :: n, ans=0
      integer(prec), allocatable :: a(:)
      integer(prec) :: i,j
      integer(prec) :: list(10**6) = 0
      integer(prec) ,allocatable :: div(:)
      
      
      read*,n
      allocate( a(n) )
      read*,a(1:n)
      
      
      do i = 1,n
        list( a(i) ) = list( a(i) ) + 1
      end do
      
      
      
      outer:&
      do i = 1,n
        div = allDivisor( a(i) )
       ! print'(*(x,i0))',div(:)
        
        do j = 1,size(div)-1
          if( list(div(j))/=0 )then
            cycle outer
          end if
        end do
        
        if( list(a(i))>=2 )then
          cycle outer
        end if
        
        ans = ans + 1
        deallocate( div )
      end do outer
      
      print*,ans
      
      
     ! stop
      !debugg
      
      
      
      END PROGRAM
; 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"

@_QMdivisormodECprec = local_unnamed_addr constant i32 8
@_QQcl.f128f5b7529d5a6eca66a3f20f10ebef = linkonce constant [73 x i8] c"/home/ubuntu/Downloads/TheStack_IR/Collated/Fortran/Source_1212/source.f\00"
@_QFEa.0 = internal unnamed_addr global ptr null
@_QFEans = internal unnamed_addr global i64 0
@_QFEdiv.0 = internal unnamed_addr global ptr null
@_QFEdiv.8 = internal unnamed_addr global i64 0
@_QFElist = internal unnamed_addr global [1000000 x i64] zeroinitializer
@_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: nounwind
define void @_QMdivisormodPalldivisor(ptr nocapture writeonly %0, ptr nocapture readonly %1) local_unnamed_addr #2 {
  %.repack154 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 1
  %.repack155 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 2
  %.repack156 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 3
  %.repack157 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 4
  %.repack158 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 5
  %.repack159 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 6
  %.repack160 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 7
  %.repack160.repack161 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 7, i64 0, i64 1
  %.repack160.repack162 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %0, i64 0, i32 7, i64 0, i64 2
  %3 = load i64, ptr %1, align 8, !tbaa !3
  %4 = icmp slt i64 %3, 1
  br i1 %4, label %5, label %7

5:                                                ; preds = %2
  %6 = tail call dereferenceable_or_null(8) ptr @malloc(i64 8)
  store i64 0, ptr %6, align 8, !tbaa !3
  store ptr %6, ptr %0, align 8, !tbaa !7
  store i64 8, ptr %.repack154, align 8, !tbaa !7
  store i32 20180515, ptr %.repack155, align 8, !tbaa !7
  store i8 1, ptr %.repack156, align 4, !tbaa !7
  store i8 10, ptr %.repack157, align 1, !tbaa !7
  store i8 2, ptr %.repack158, align 2, !tbaa !7
  store i8 0, ptr %.repack159, align 1, !tbaa !7
  store i64 1, ptr %.repack160, align 8, !tbaa !7
  store i64 1, ptr %.repack160.repack161, align 8, !tbaa !7
  store i64 8, ptr %.repack160.repack162, align 8, !tbaa !7
  br label %.loopexit

7:                                                ; preds = %2
  %8 = sitofp i64 %3 to float
  %9 = tail call contract float @llvm.sqrt.f32(float %8)
  %10 = tail call contract float @llvm.floor.f32(float %9)
  %11 = fptosi float %10 to i32
  %12 = shl i32 %11, 1
  %13 = tail call i32 @llvm.smax.i32(i32 %12, i32 0)
  %14 = zext i32 %13 to i64
  %15 = shl nuw nsw i64 %14, 3
  %16 = tail call ptr @malloc(i64 %15)
  %17 = add nuw i64 %3, 1
  %18 = sitofp i64 %17 to float
  %19 = tail call contract float @llvm.sqrt.f32(float %18)
  %20 = tail call contract float @llvm.floor.f32(float %19)
  %21 = fptosi float %20 to i32
  %22 = icmp sgt i32 %21, 0
  br i1 %22, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %7
  %23 = zext i32 %21 to i64
  %xtraiter = and i64 %23, 1
  %24 = icmp eq i32 %21, 1
  br i1 %24, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph.preheader.new

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

.lr.ph:                                           ; preds = %39, %.lr.ph.preheader.new
  %25 = phi i64 [ 1, %.lr.ph.preheader.new ], [ %40, %39 ]
  %.0200 = phi i64 [ 1, %.lr.ph.preheader.new ], [ %.1.1, %39 ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.1, %39 ]
  %26 = srem i64 %3, %25
  %27 = icmp eq i64 %26, 0
  br i1 %27, label %28, label %.lr.ph.1

28:                                               ; preds = %.lr.ph
  %29 = add i64 %.0200, -1
  %30 = getelementptr i64, ptr %16, i64 %29
  store i64 %25, ptr %30, align 8, !tbaa !3
  %31 = add i64 %.0200, 1
  br label %.lr.ph.1

.lr.ph.1:                                         ; preds = %28, %.lr.ph
  %.1 = phi i64 [ %31, %28 ], [ %.0200, %.lr.ph ]
  %32 = add nuw nsw i64 %25, 1
  %33 = srem i64 %3, %32
  %34 = icmp eq i64 %33, 0
  br i1 %34, label %35, label %39

35:                                               ; preds = %.lr.ph.1
  %36 = add i64 %.1, -1
  %37 = getelementptr i64, ptr %16, i64 %36
  store i64 %32, ptr %37, align 8, !tbaa !3
  %38 = add i64 %.1, 1
  br label %39

39:                                               ; preds = %35, %.lr.ph.1
  %.1.1 = phi i64 [ %38, %35 ], [ %.1, %.lr.ph.1 ]
  %40 = add nuw nsw i64 %25, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph

._crit_edge.loopexit.unr-lcssa:                   ; preds = %39, %.lr.ph.preheader
  %.1.lcssa.ph = phi i64 [ undef, %.lr.ph.preheader ], [ %.1.1, %39 ]
  %.unr = phi i64 [ 1, %.lr.ph.preheader ], [ %40, %39 ]
  %.0200.unr = phi i64 [ 1, %.lr.ph.preheader ], [ %.1.1, %39 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %.lr.ph.epil

.lr.ph.epil:                                      ; preds = %._crit_edge.loopexit.unr-lcssa
  %41 = srem i64 %3, %.unr
  %42 = icmp eq i64 %41, 0
  br i1 %42, label %43, label %._crit_edge

43:                                               ; preds = %.lr.ph.epil
  %44 = add i64 %.0200.unr, -1
  %45 = getelementptr i64, ptr %16, i64 %44
  store i64 %.unr, ptr %45, align 8, !tbaa !3
  %46 = add i64 %.0200.unr, 1
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %43, %.lr.ph.epil, %7
  %.0.lcssa = phi i64 [ 1, %7 ], [ %.1.lcssa.ph, %._crit_edge.loopexit.unr-lcssa ], [ %46, %43 ], [ %.0200.unr, %.lr.ph.epil ]
  %47 = add i64 %.0.lcssa, -1
  %48 = add i64 %.0.lcssa, -2
  %49 = getelementptr i64, ptr %16, i64 %48
  %50 = load i64, ptr %49, align 8, !tbaa !3
  %51 = mul i64 %50, %50
  %52 = icmp eq i64 %51, %3
  %53 = shl i64 %47, 1
  br i1 %52, label %54, label %74

54:                                               ; preds = %._crit_edge
  %55 = add i64 %53, -1
  %56 = sub i64 %53, %.0.lcssa
  %57 = add i64 %56, 1
  %58 = tail call i64 @llvm.smax.i64(i64 %57, i64 0)
  %59 = tail call ptr @malloc(i64 %15)
  %.not216 = icmp slt i32 %12, 1
  br i1 %.not216, label %.preheader197, label %.lr.ph207.preheader

.lr.ph207.preheader:                              ; preds = %54
  %60 = or i64 %14, 1
  %smin221 = tail call i64 @llvm.smin.i64(i64 %14, i64 1)
  %61 = sub nuw nsw i64 %60, %smin221
  %62 = shl nuw nsw i64 %61, 3
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 8 %59, ptr nonnull align 8 %16, i64 %62, i1 false), !tbaa !3
  br label %.preheader197

.preheader197:                                    ; preds = %.lr.ph207.preheader, %54
  %.not217 = icmp ugt i64 %56, 9223372036854775806
  br i1 %.not217, label %.preheader, label %.lr.ph208

.preheader:                                       ; preds = %.lr.ph208, %.preheader197
  br i1 %.not216, label %._crit_edge210, label %._crit_edge210.sink.split

.lr.ph208:                                        ; preds = %.preheader197, %.lr.ph208
  %63 = phi i64 [ %72, %.lr.ph208 ], [ %58, %.preheader197 ]
  %64 = phi i64 [ %65, %.lr.ph208 ], [ 0, %.preheader197 ]
  %65 = add nuw nsw i64 %64, 1
  %66 = sub i64 %48, %64
  %67 = getelementptr i64, ptr %16, i64 %66
  %68 = load i64, ptr %67, align 8, !tbaa !3
  %69 = sdiv i64 %3, %68
  %70 = add i64 %64, %48
  %71 = getelementptr i64, ptr %59, i64 %70
  store i64 %69, ptr %71, align 8, !tbaa !3
  %72 = add nsw i64 %63, -1
  %73 = icmp ugt i64 %63, 1
  br i1 %73, label %.lr.ph208, label %.preheader

74:                                               ; preds = %._crit_edge
  %75 = sub i64 1, %.0.lcssa
  %76 = add i64 %75, %53
  %77 = tail call i64 @llvm.smax.i64(i64 %76, i64 0)
  %78 = tail call ptr @malloc(i64 %15)
  %.not = icmp slt i32 %12, 1
  br i1 %.not, label %.preheader199, label %.lr.ph202.preheader

.lr.ph202.preheader:                              ; preds = %74
  %79 = or i64 %14, 1
  %smin = tail call i64 @llvm.smin.i64(i64 %14, i64 1)
  %80 = sub nuw nsw i64 %79, %smin
  %81 = shl nuw nsw i64 %80, 3
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 8 %78, ptr nonnull align 8 %16, i64 %81, i1 false), !tbaa !3
  br label %.preheader199

.preheader199:                                    ; preds = %.lr.ph202.preheader, %74
  %.not213 = icmp slt i64 %76, 1
  br i1 %.not213, label %.preheader198, label %.lr.ph203.preheader

.lr.ph203.preheader:                              ; preds = %.preheader199
  %xtraiter228 = and i64 %77, 1
  %82 = icmp eq i64 %77, 1
  br i1 %82, label %.preheader198.loopexit.unr-lcssa, label %.lr.ph203.preheader.new

.lr.ph203.preheader.new:                          ; preds = %.lr.ph203.preheader
  %unroll_iter231 = and i64 %77, 9223372036854775806
  br label %.lr.ph203

.preheader198.loopexit.unr-lcssa:                 ; preds = %.lr.ph203, %.lr.ph203.preheader
  %.unr229 = phi i64 [ 0, %.lr.ph203.preheader ], [ %97, %.lr.ph203 ]
  %lcmp.mod230.not = icmp eq i64 %xtraiter228, 0
  br i1 %lcmp.mod230.not, label %.preheader198, label %.lr.ph203.epil

.lr.ph203.epil:                                   ; preds = %.preheader198.loopexit.unr-lcssa
  %83 = sub i64 %48, %.unr229
  %84 = getelementptr i64, ptr %16, i64 %83
  %85 = load i64, ptr %84, align 8, !tbaa !3
  %86 = sdiv i64 %3, %85
  %87 = add i64 %.unr229, %47
  %88 = getelementptr i64, ptr %78, i64 %87
  store i64 %86, ptr %88, align 8, !tbaa !3
  br label %.preheader198

.preheader198:                                    ; preds = %.lr.ph203.epil, %.preheader198.loopexit.unr-lcssa, %.preheader199
  br i1 %.not, label %._crit_edge210, label %._crit_edge210.sink.split

.lr.ph203:                                        ; preds = %.lr.ph203, %.lr.ph203.preheader.new
  %89 = phi i64 [ 0, %.lr.ph203.preheader.new ], [ %97, %.lr.ph203 ]
  %niter232 = phi i64 [ 0, %.lr.ph203.preheader.new ], [ %niter232.next.1, %.lr.ph203 ]
  %90 = or i64 %89, 1
  %91 = sub i64 %48, %89
  %92 = getelementptr i64, ptr %16, i64 %91
  %93 = load i64, ptr %92, align 8, !tbaa !3
  %94 = sdiv i64 %3, %93
  %95 = add i64 %89, %47
  %96 = getelementptr i64, ptr %78, i64 %95
  store i64 %94, ptr %96, align 8, !tbaa !3
  %97 = add nuw nsw i64 %89, 2
  %98 = sub i64 %48, %90
  %99 = getelementptr i64, ptr %16, i64 %98
  %100 = load i64, ptr %99, align 8, !tbaa !3
  %101 = sdiv i64 %3, %100
  %102 = add i64 %90, %47
  %103 = getelementptr i64, ptr %78, i64 %102
  store i64 %101, ptr %103, align 8, !tbaa !3
  %niter232.next.1 = add i64 %niter232, 2
  %niter232.ncmp.1 = icmp eq i64 %niter232.next.1, %unroll_iter231
  br i1 %niter232.ncmp.1, label %.preheader198.loopexit.unr-lcssa, label %.lr.ph203

._crit_edge210.sink.split:                        ; preds = %.preheader198, %.preheader
  %.sink223 = phi ptr [ %59, %.preheader ], [ %78, %.preheader198 ]
  %.2.ph = phi i64 [ %55, %.preheader ], [ %53, %.preheader198 ]
  %104 = or i64 %14, 1
  %smin220 = tail call i64 @llvm.smin.i64(i64 %14, i64 1)
  %105 = sub nuw nsw i64 %104, %smin220
  %106 = shl nuw nsw i64 %105, 3
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %16, ptr align 8 %.sink223, i64 %106, i1 false), !tbaa !3
  br label %._crit_edge210

._crit_edge210:                                   ; preds = %._crit_edge210.sink.split, %.preheader198, %.preheader
  %.sink = phi ptr [ %59, %.preheader ], [ %78, %.preheader198 ], [ %.sink223, %._crit_edge210.sink.split ]
  %.2 = phi i64 [ %55, %.preheader ], [ %53, %.preheader198 ], [ %.2.ph, %._crit_edge210.sink.split ]
  tail call void @free(ptr %.sink)
  %107 = tail call i64 @llvm.smax.i64(i64 %.2, i64 0)
  %108 = shl i64 %107, 3
  %109 = tail call ptr @malloc(i64 %108)
  store ptr %109, ptr %0, align 8, !tbaa !7
  store i64 8, ptr %.repack154, align 8, !tbaa !7
  store i32 20180515, ptr %.repack155, align 8, !tbaa !7
  store i8 1, ptr %.repack156, align 4, !tbaa !7
  store i8 10, ptr %.repack157, align 1, !tbaa !7
  store i8 2, ptr %.repack158, align 2, !tbaa !7
  store i8 0, ptr %.repack159, align 1, !tbaa !7
  store i64 1, ptr %.repack160, align 8, !tbaa !7
  store i64 %107, ptr %.repack160.repack161, align 8, !tbaa !7
  store i64 8, ptr %.repack160.repack162, align 8, !tbaa !7
  %.not215 = icmp slt i64 %.2, 1
  br i1 %.not215, label %.loopexit, label %.lr.ph212.preheader

.lr.ph212.preheader:                              ; preds = %._crit_edge210
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 8 %109, ptr nonnull align 8 %16, i64 %108, i1 false), !tbaa !3
  br label %.loopexit

.loopexit:                                        ; preds = %.lr.ph212.preheader, %._crit_edge210, %5
  ret void
}

define void @_QQmain() local_unnamed_addr {
  %1 = alloca { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, align 8
  %2 = alloca { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, align 8
  %3 = alloca i64, align 8
  %4 = tail call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.f128f5b7529d5a6eca66a3f20f10ebef, i32 66)
  %5 = call i1 @_FortranAioInputInteger(ptr %4, ptr nonnull %3, i32 8)
  %6 = call i32 @_FortranAioEndIoStatement(ptr %4)
  %7 = load i64, ptr %3, align 8, !tbaa !3
  %8 = call i64 @llvm.smax.i64(i64 %7, i64 0)
  %9 = shl i64 %8, 3
  %10 = call ptr @malloc(i64 %9)
  store ptr %10, ptr @_QFEa.0, align 8, !tbaa !7
  %11 = call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.f128f5b7529d5a6eca66a3f20f10ebef, i32 68)
  %.unpack = load ptr, ptr @_QFEa.0, align 8, !tbaa !7
  %12 = load i64, ptr %3, align 8, !tbaa !3
  %13 = call i64 @llvm.smax.i64(i64 %12, i64 0)
  store ptr %.unpack, ptr %1, align 8, !tbaa !7
  %.fca.1.gep111 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 1
  store i64 8, ptr %.fca.1.gep111, align 8, !tbaa !7
  %.fca.2.gep113 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 2
  store i32 20180515, ptr %.fca.2.gep113, align 8, !tbaa !7
  %.fca.3.gep115 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 3
  store i8 1, ptr %.fca.3.gep115, align 4, !tbaa !7
  %.fca.4.gep117 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 4
  store i8 10, ptr %.fca.4.gep117, align 1, !tbaa !7
  %.fca.5.gep119 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 5
  store i8 0, ptr %.fca.5.gep119, align 2, !tbaa !7
  %.fca.6.gep121 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep121, align 1, !tbaa !7
  %.fca.7.0.0.gep123 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 7, i64 0, i64 0
  store i64 1, ptr %.fca.7.0.0.gep123, align 8, !tbaa !7
  %.fca.7.0.1.gep125 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 7, i64 0, i64 1
  store i64 %13, ptr %.fca.7.0.1.gep125, align 8, !tbaa !7
  %.fca.7.0.2.gep127 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 7, i64 0, i64 2
  store i64 8, ptr %.fca.7.0.2.gep127, align 8, !tbaa !7
  %14 = call i1 @_FortranAioInputDescriptor(ptr %11, ptr nonnull %1)
  %15 = call i32 @_FortranAioEndIoStatement(ptr %11)
  %16 = load i64, ptr %3, align 8, !tbaa !3
  %17 = icmp sgt i64 %16, 0
  br i1 %17, label %.lr.ph, label %._crit_edge604

.lr.ph:                                           ; preds = %0
  %.unpack575 = load ptr, ptr @_QFEa.0, align 8, !tbaa !7
  %xtraiter = and i64 %16, 1
  %18 = icmp eq i64 %16, 1
  br i1 %18, label %.preheader591.unr-lcssa, label %.lr.ph.new

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

.preheader591.unr-lcssa.loopexit:                 ; preds = %26
  %19 = add i64 %27, 1
  br label %.preheader591.unr-lcssa

.preheader591.unr-lcssa:                          ; preds = %.preheader591.unr-lcssa.loopexit, %.lr.ph
  %.unr = phi i64 [ 0, %.lr.ph ], [ %19, %.preheader591.unr-lcssa.loopexit ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.preheader591, label %.preheader591.epilog-lcssa

.preheader591.epilog-lcssa:                       ; preds = %.preheader591.unr-lcssa
  %20 = getelementptr i64, ptr %.unpack575, i64 %.unr
  %21 = load i64, ptr %20, align 8, !tbaa !3
  %22 = add i64 %21, -1
  %23 = getelementptr [1000000 x i64], ptr @_QFElist, i64 0, i64 %22
  %24 = load i64, ptr %23, align 8, !tbaa !3
  %25 = add i64 %24, 1
  store i64 %25, ptr %23, align 8, !tbaa !3
  br label %.preheader591

.preheader591:                                    ; preds = %.preheader591.unr-lcssa, %.preheader591.epilog-lcssa
  br i1 %17, label %.lr.ph603, label %._crit_edge604

.lr.ph603:                                        ; preds = %.preheader591
  %.fca.7.0.1.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 7, i64 0, i64 1
  br label %42

26:                                               ; preds = %26, %.lr.ph.new
  %27 = phi i64 [ 1, %.lr.ph.new ], [ %41, %26 ]
  %niter = phi i64 [ 0, %.lr.ph.new ], [ %niter.next.1, %26 ]
  %28 = add nsw i64 %27, -1
  %29 = getelementptr i64, ptr %.unpack575, i64 %28
  %30 = load i64, ptr %29, align 8, !tbaa !3
  %31 = add i64 %30, -1
  %32 = getelementptr [1000000 x i64], ptr @_QFElist, i64 0, i64 %31
  %33 = load i64, ptr %32, align 8, !tbaa !3
  %34 = add i64 %33, 1
  store i64 %34, ptr %32, align 8, !tbaa !3
  %35 = getelementptr i64, ptr %.unpack575, i64 %27
  %36 = load i64, ptr %35, align 8, !tbaa !3
  %37 = add i64 %36, -1
  %38 = getelementptr [1000000 x i64], ptr @_QFElist, i64 0, i64 %37
  %39 = load i64, ptr %38, align 8, !tbaa !3
  %40 = add i64 %39, 1
  store i64 %40, ptr %38, align 8, !tbaa !3
  %41 = add nuw i64 %27, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.preheader591.unr-lcssa.loopexit, label %26

42:                                               ; preds = %.lr.ph603, %.loopexit
  %.0465602 = phi i64 [ 1, %.lr.ph603 ], [ %175, %.loopexit ]
  %.unpack492 = load ptr, ptr @_QFEa.0, align 8, !tbaa !7
  %43 = add i64 %.0465602, -1
  %44 = getelementptr i64, ptr %.unpack492, i64 %43
  call void @_QMdivisormodPalldivisor(ptr nonnull %2, ptr %44)
  %.fca.0.load = load ptr, ptr %2, align 8, !tbaa !7
  %.fca.0.load620 = ptrtoint ptr %.fca.0.load to i64
  %.fca.7.0.1.load = load i64, ptr %.fca.7.0.1.gep, align 8, !tbaa !7
  %.unpack504 = load ptr, ptr @_QFEdiv.0, align 8, !tbaa !7
  %.unpack504623 = ptrtoint ptr %.unpack504 to i64
  %.not = icmp eq ptr %.unpack504, null
  br i1 %.not, label %114, label %45

45:                                               ; preds = %42
  %.unpack511.unpack.unpack513 = load i64, ptr @_QFEdiv.8, align 8, !tbaa !7
  %.not588 = icmp eq i64 %.unpack511.unpack.unpack513, %.fca.7.0.1.load
  br i1 %.not588, label %.preheader, label %61

.preheader:                                       ; preds = %45
  %46 = icmp sgt i64 %.fca.7.0.1.load, 0
  br i1 %46, label %.lr.ph593.preheader, label %._crit_edge

.lr.ph593.preheader:                              ; preds = %.preheader
  %min.iters.check627 = icmp ult i64 %.fca.7.0.1.load, 6
  %47 = sub i64 %.unpack504623, %.fca.0.load620
  %diff.check624 = icmp ult i64 %47, 32
  %or.cond = select i1 %min.iters.check627, i1 true, i1 %diff.check624
  br i1 %or.cond, label %.lr.ph593.preheader657, label %vector.ph628

vector.ph628:                                     ; preds = %.lr.ph593.preheader
  %n.vec630 = and i64 %.fca.7.0.1.load, -4
  br label %vector.body633

vector.body633:                                   ; preds = %vector.body633, %vector.ph628
  %index634 = phi i64 [ 0, %vector.ph628 ], [ %index.next637, %vector.body633 ]
  %48 = getelementptr i64, ptr %.fca.0.load, i64 %index634
  %wide.load635 = load <2 x i64>, ptr %48, align 8, !tbaa !3
  %49 = getelementptr i64, ptr %48, i64 2
  %wide.load636 = load <2 x i64>, ptr %49, align 8, !tbaa !3
  %50 = getelementptr i64, ptr %.unpack504, i64 %index634
  store <2 x i64> %wide.load635, ptr %50, align 8, !tbaa !3
  %51 = getelementptr i64, ptr %50, i64 2
  store <2 x i64> %wide.load636, ptr %51, align 8, !tbaa !3
  %index.next637 = add nuw i64 %index634, 4
  %52 = icmp eq i64 %index.next637, %n.vec630
  br i1 %52, label %middle.block625, label %vector.body633, !llvm.loop !9

middle.block625:                                  ; preds = %vector.body633
  %cmp.n632 = icmp eq i64 %.fca.7.0.1.load, %n.vec630
  br i1 %cmp.n632, label %._crit_edge.thread, label %.lr.ph593.preheader657

.lr.ph593.preheader657:                           ; preds = %.lr.ph593.preheader, %middle.block625
  %.ph658 = phi i64 [ 0, %.lr.ph593.preheader ], [ %n.vec630, %middle.block625 ]
  %53 = xor i64 %.ph658, -1
  %54 = add i64 %.fca.7.0.1.load, %53
  %xtraiter665 = and i64 %.fca.7.0.1.load, 3
  %lcmp.mod666.not = icmp eq i64 %xtraiter665, 0
  br i1 %lcmp.mod666.not, label %.lr.ph593.prol.loopexit, label %.lr.ph593.prol

.lr.ph593.prol:                                   ; preds = %.lr.ph593.preheader657, %.lr.ph593.prol
  %55 = phi i64 [ %58, %.lr.ph593.prol ], [ %.ph658, %.lr.ph593.preheader657 ]
  %prol.iter667 = phi i64 [ %prol.iter667.next, %.lr.ph593.prol ], [ 0, %.lr.ph593.preheader657 ]
  %56 = getelementptr i64, ptr %.fca.0.load, i64 %55
  %57 = load i64, ptr %56, align 8, !tbaa !3
  %58 = add nuw nsw i64 %55, 1
  %59 = getelementptr i64, ptr %.unpack504, i64 %55
  store i64 %57, ptr %59, align 8, !tbaa !3
  %prol.iter667.next = add i64 %prol.iter667, 1
  %prol.iter667.cmp.not = icmp eq i64 %prol.iter667.next, %xtraiter665
  br i1 %prol.iter667.cmp.not, label %.lr.ph593.prol.loopexit, label %.lr.ph593.prol, !llvm.loop !12

.lr.ph593.prol.loopexit:                          ; preds = %.lr.ph593.prol, %.lr.ph593.preheader657
  %.unr668 = phi i64 [ %.ph658, %.lr.ph593.preheader657 ], [ %58, %.lr.ph593.prol ]
  %60 = icmp ult i64 %54, 3
  br i1 %60, label %._crit_edge.thread, label %.lr.ph593

61:                                               ; preds = %45
  %62 = shl i64 %.fca.7.0.1.load, 3
  %63 = call ptr @malloc(i64 %62)
  %64 = icmp sgt i64 %.fca.7.0.1.load, 0
  br i1 %64, label %.lr.ph592.preheader, label %.thread587

.lr.ph592.preheader:                              ; preds = %61
  %65 = ptrtoint ptr %63 to i64
  %min.iters.check642 = icmp ult i64 %.fca.7.0.1.load, 6
  %66 = sub i64 %65, %.fca.0.load620
  %diff.check639 = icmp ult i64 %66, 32
  %or.cond653 = select i1 %min.iters.check642, i1 true, i1 %diff.check639
  br i1 %or.cond653, label %.lr.ph592.preheader659, label %vector.ph643

vector.ph643:                                     ; preds = %.lr.ph592.preheader
  %n.vec645 = and i64 %.fca.7.0.1.load, -4
  br label %vector.body648

vector.body648:                                   ; preds = %vector.body648, %vector.ph643
  %index649 = phi i64 [ 0, %vector.ph643 ], [ %index.next652, %vector.body648 ]
  %67 = getelementptr i64, ptr %.fca.0.load, i64 %index649
  %wide.load650 = load <2 x i64>, ptr %67, align 8, !tbaa !3
  %68 = getelementptr i64, ptr %67, i64 2
  %wide.load651 = load <2 x i64>, ptr %68, align 8, !tbaa !3
  %69 = getelementptr i64, ptr %63, i64 %index649
  store <2 x i64> %wide.load650, ptr %69, align 8, !tbaa !3
  %70 = getelementptr i64, ptr %69, i64 2
  store <2 x i64> %wide.load651, ptr %70, align 8, !tbaa !3
  %index.next652 = add nuw i64 %index649, 4
  %71 = icmp eq i64 %index.next652, %n.vec645
  br i1 %71, label %middle.block640, label %vector.body648, !llvm.loop !14

middle.block640:                                  ; preds = %vector.body648
  %cmp.n647 = icmp eq i64 %.fca.7.0.1.load, %n.vec645
  br i1 %cmp.n647, label %.loopexit589, label %.lr.ph592.preheader659

.lr.ph592.preheader659:                           ; preds = %.lr.ph592.preheader, %middle.block640
  %.ph660 = phi i64 [ 0, %.lr.ph592.preheader ], [ %n.vec645, %middle.block640 ]
  %72 = xor i64 %.ph660, -1
  %73 = add i64 %.fca.7.0.1.load, %72
  %xtraiter662 = and i64 %.fca.7.0.1.load, 3
  %lcmp.mod663.not = icmp eq i64 %xtraiter662, 0
  br i1 %lcmp.mod663.not, label %.lr.ph592.prol.loopexit, label %.lr.ph592.prol

.lr.ph592.prol:                                   ; preds = %.lr.ph592.preheader659, %.lr.ph592.prol
  %74 = phi i64 [ %77, %.lr.ph592.prol ], [ %.ph660, %.lr.ph592.preheader659 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph592.prol ], [ 0, %.lr.ph592.preheader659 ]
  %75 = getelementptr i64, ptr %.fca.0.load, i64 %74
  %76 = load i64, ptr %75, align 8, !tbaa !3
  %77 = add nuw nsw i64 %74, 1
  %78 = getelementptr i64, ptr %63, i64 %74
  store i64 %76, ptr %78, align 8, !tbaa !3
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter662
  br i1 %prol.iter.cmp.not, label %.lr.ph592.prol.loopexit, label %.lr.ph592.prol, !llvm.loop !15

.lr.ph592.prol.loopexit:                          ; preds = %.lr.ph592.prol, %.lr.ph592.preheader659
  %.unr664 = phi i64 [ %.ph660, %.lr.ph592.preheader659 ], [ %77, %.lr.ph592.prol ]
  %79 = icmp ult i64 %73, 3
  br i1 %79, label %.loopexit589, label %.lr.ph592

.lr.ph592:                                        ; preds = %.lr.ph592.prol.loopexit, %.lr.ph592
  %80 = phi i64 [ %95, %.lr.ph592 ], [ %.unr664, %.lr.ph592.prol.loopexit ]
  %81 = getelementptr i64, ptr %.fca.0.load, i64 %80
  %82 = load i64, ptr %81, align 8, !tbaa !3
  %83 = add nuw nsw i64 %80, 1
  %84 = getelementptr i64, ptr %63, i64 %80
  store i64 %82, ptr %84, align 8, !tbaa !3
  %85 = getelementptr i64, ptr %.fca.0.load, i64 %83
  %86 = load i64, ptr %85, align 8, !tbaa !3
  %87 = add nuw nsw i64 %80, 2
  %88 = getelementptr i64, ptr %63, i64 %83
  store i64 %86, ptr %88, align 8, !tbaa !3
  %89 = getelementptr i64, ptr %.fca.0.load, i64 %87
  %90 = load i64, ptr %89, align 8, !tbaa !3
  %91 = add nuw nsw i64 %80, 3
  %92 = getelementptr i64, ptr %63, i64 %87
  store i64 %90, ptr %92, align 8, !tbaa !3
  %93 = getelementptr i64, ptr %.fca.0.load, i64 %91
  %94 = load i64, ptr %93, align 8, !tbaa !3
  %95 = add nuw nsw i64 %80, 4
  %96 = getelementptr i64, ptr %63, i64 %91
  store i64 %94, ptr %96, align 8, !tbaa !3
  %exitcond606.not.3 = icmp eq i64 %95, %.fca.7.0.1.load
  br i1 %exitcond606.not.3, label %.loopexit589, label %.lr.ph592, !llvm.loop !16

.lr.ph593:                                        ; preds = %.lr.ph593.prol.loopexit, %.lr.ph593
  %97 = phi i64 [ %112, %.lr.ph593 ], [ %.unr668, %.lr.ph593.prol.loopexit ]
  %98 = getelementptr i64, ptr %.fca.0.load, i64 %97
  %99 = load i64, ptr %98, align 8, !tbaa !3
  %100 = add nuw nsw i64 %97, 1
  %101 = getelementptr i64, ptr %.unpack504, i64 %97
  store i64 %99, ptr %101, align 8, !tbaa !3
  %102 = getelementptr i64, ptr %.fca.0.load, i64 %100
  %103 = load i64, ptr %102, align 8, !tbaa !3
  %104 = add nuw nsw i64 %97, 2
  %105 = getelementptr i64, ptr %.unpack504, i64 %100
  store i64 %103, ptr %105, align 8, !tbaa !3
  %106 = getelementptr i64, ptr %.fca.0.load, i64 %104
  %107 = load i64, ptr %106, align 8, !tbaa !3
  %108 = add nuw nsw i64 %97, 3
  %109 = getelementptr i64, ptr %.unpack504, i64 %104
  store i64 %107, ptr %109, align 8, !tbaa !3
  %110 = getelementptr i64, ptr %.fca.0.load, i64 %108
  %111 = load i64, ptr %110, align 8, !tbaa !3
  %112 = add nuw nsw i64 %97, 4
  %113 = getelementptr i64, ptr %.unpack504, i64 %108
  store i64 %111, ptr %113, align 8, !tbaa !3
  %exitcond607.not.3 = icmp eq i64 %112, %.fca.7.0.1.load
  br i1 %exitcond607.not.3, label %._crit_edge.thread, label %.lr.ph593, !llvm.loop !17

114:                                              ; preds = %42
  %115 = shl i64 %.fca.7.0.1.load, 3
  %116 = call ptr @malloc(i64 %115)
  %117 = icmp sgt i64 %.fca.7.0.1.load, 0
  br i1 %117, label %.lr.ph595.preheader, label %.loopexit589.thread

.lr.ph595.preheader:                              ; preds = %114
  %118 = ptrtoint ptr %116 to i64
  %min.iters.check = icmp ult i64 %.fca.7.0.1.load, 6
  %119 = sub i64 %118, %.fca.0.load620
  %diff.check = icmp ult i64 %119, 32
  %or.cond654 = select i1 %min.iters.check, i1 true, i1 %diff.check
  br i1 %or.cond654, label %.lr.ph595.preheader655, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph595.preheader
  %n.vec = and i64 %.fca.7.0.1.load, -4
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %120 = getelementptr i64, ptr %.fca.0.load, i64 %index
  %wide.load = load <2 x i64>, ptr %120, align 8, !tbaa !3
  %121 = getelementptr i64, ptr %120, i64 2
  %wide.load621 = load <2 x i64>, ptr %121, align 8, !tbaa !3
  %122 = getelementptr i64, ptr %116, i64 %index
  store <2 x i64> %wide.load, ptr %122, align 8, !tbaa !3
  %123 = getelementptr i64, ptr %122, i64 2
  store <2 x i64> %wide.load621, ptr %123, align 8, !tbaa !3
  %index.next = add nuw i64 %index, 4
  %124 = icmp eq i64 %index.next, %n.vec
  br i1 %124, label %middle.block, label %vector.body, !llvm.loop !18

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %.fca.7.0.1.load, %n.vec
  br i1 %cmp.n, label %.loopexit589, label %.lr.ph595.preheader655

.lr.ph595.preheader655:                           ; preds = %.lr.ph595.preheader, %middle.block
  %.ph656 = phi i64 [ 0, %.lr.ph595.preheader ], [ %n.vec, %middle.block ]
  %125 = xor i64 %.ph656, -1
  %126 = add i64 %.fca.7.0.1.load, %125
  %xtraiter669 = and i64 %.fca.7.0.1.load, 3
  %lcmp.mod670.not = icmp eq i64 %xtraiter669, 0
  br i1 %lcmp.mod670.not, label %.lr.ph595.prol.loopexit, label %.lr.ph595.prol

.lr.ph595.prol:                                   ; preds = %.lr.ph595.preheader655, %.lr.ph595.prol
  %127 = phi i64 [ %130, %.lr.ph595.prol ], [ %.ph656, %.lr.ph595.preheader655 ]
  %prol.iter671 = phi i64 [ %prol.iter671.next, %.lr.ph595.prol ], [ 0, %.lr.ph595.preheader655 ]
  %128 = getelementptr i64, ptr %.fca.0.load, i64 %127
  %129 = load i64, ptr %128, align 8, !tbaa !3
  %130 = add nuw nsw i64 %127, 1
  %131 = getelementptr i64, ptr %116, i64 %127
  store i64 %129, ptr %131, align 8, !tbaa !3
  %prol.iter671.next = add i64 %prol.iter671, 1
  %prol.iter671.cmp.not = icmp eq i64 %prol.iter671.next, %xtraiter669
  br i1 %prol.iter671.cmp.not, label %.lr.ph595.prol.loopexit, label %.lr.ph595.prol, !llvm.loop !19

.lr.ph595.prol.loopexit:                          ; preds = %.lr.ph595.prol, %.lr.ph595.preheader655
  %.unr672 = phi i64 [ %.ph656, %.lr.ph595.preheader655 ], [ %130, %.lr.ph595.prol ]
  %132 = icmp ult i64 %126, 3
  br i1 %132, label %.loopexit589, label %.lr.ph595

.lr.ph595:                                        ; preds = %.lr.ph595.prol.loopexit, %.lr.ph595
  %133 = phi i64 [ %148, %.lr.ph595 ], [ %.unr672, %.lr.ph595.prol.loopexit ]
  %134 = getelementptr i64, ptr %.fca.0.load, i64 %133
  %135 = load i64, ptr %134, align 8, !tbaa !3
  %136 = add nuw nsw i64 %133, 1
  %137 = getelementptr i64, ptr %116, i64 %133
  store i64 %135, ptr %137, align 8, !tbaa !3
  %138 = getelementptr i64, ptr %.fca.0.load, i64 %136
  %139 = load i64, ptr %138, align 8, !tbaa !3
  %140 = add nuw nsw i64 %133, 2
  %141 = getelementptr i64, ptr %116, i64 %136
  store i64 %139, ptr %141, align 8, !tbaa !3
  %142 = getelementptr i64, ptr %.fca.0.load, i64 %140
  %143 = load i64, ptr %142, align 8, !tbaa !3
  %144 = add nuw nsw i64 %133, 3
  %145 = getelementptr i64, ptr %116, i64 %140
  store i64 %143, ptr %145, align 8, !tbaa !3
  %146 = getelementptr i64, ptr %.fca.0.load, i64 %144
  %147 = load i64, ptr %146, align 8, !tbaa !3
  %148 = add nuw nsw i64 %133, 4
  %149 = getelementptr i64, ptr %116, i64 %144
  store i64 %147, ptr %149, align 8, !tbaa !3
  %exitcond608.not.3 = icmp eq i64 %148, %.fca.7.0.1.load
  br i1 %exitcond608.not.3, label %.loopexit589, label %.lr.ph595, !llvm.loop !20

.loopexit589:                                     ; preds = %.lr.ph592.prol.loopexit, %.lr.ph592, %.lr.ph595.prol.loopexit, %.lr.ph595, %middle.block640, %middle.block
  %.ph = phi ptr [ %116, %middle.block ], [ %63, %middle.block640 ], [ %116, %.lr.ph595 ], [ %116, %.lr.ph595.prol.loopexit ], [ %63, %.lr.ph592 ], [ %63, %.lr.ph592.prol.loopexit ]
  br i1 %.not, label %.loopexit589.thread, label %.thread587

.thread587:                                       ; preds = %61, %.loopexit589
  %.ph616 = phi ptr [ %.ph, %.loopexit589 ], [ %63, %61 ]
  call void @free(ptr nonnull %.unpack504)
  br label %.loopexit589.thread

.loopexit589.thread:                              ; preds = %114, %.thread587, %.loopexit589
  %.ph613 = phi ptr [ %.ph616, %.thread587 ], [ %.ph, %.loopexit589 ], [ %116, %114 ]
  store ptr %.ph613, ptr @_QFEdiv.0, align 8, !tbaa !7
  store i64 %.fca.7.0.1.load, ptr @_QFEdiv.8, align 8, !tbaa !7
  br label %._crit_edge

._crit_edge:                                      ; preds = %.preheader, %.loopexit589.thread
  %.not516 = icmp eq ptr %.fca.0.load, null
  br i1 %.not516, label %150, label %._crit_edge.thread

._crit_edge.thread:                               ; preds = %.lr.ph593.prol.loopexit, %.lr.ph593, %middle.block625, %._crit_edge
  call void @free(ptr nonnull %.fca.0.load)
  %.unpack524.unpack.unpack526.pre = load i64, ptr @_QFEdiv.8, align 8, !tbaa !7
  br label %150

150:                                              ; preds = %._crit_edge.thread, %._crit_edge
  %.unpack524.unpack.unpack526 = phi i64 [ %.unpack524.unpack.unpack526.pre, %._crit_edge.thread ], [ %.fca.7.0.1.load, %._crit_edge ]
  %151 = shl i64 %.unpack524.unpack.unpack526, 32
  %sext = add i64 %151, -4294967296
  %152 = icmp sgt i64 %sext, 0
  br i1 %152, label %.lr.ph599, label %._crit_edge600

.lr.ph599:                                        ; preds = %150
  %153 = lshr exact i64 %sext, 32
  %.unpack553 = load ptr, ptr @_QFEdiv.0, align 8, !tbaa !7
  br label %154

154:                                              ; preds = %.lr.ph599, %161
  %.0597 = phi i64 [ 1, %.lr.ph599 ], [ %163, %161 ]
  %.0467596 = phi i64 [ %153, %.lr.ph599 ], [ %162, %161 ]
  %155 = add nsw i64 %.0597, -1
  %156 = getelementptr i64, ptr %.unpack553, i64 %155
  %157 = load i64, ptr %156, align 8, !tbaa !3
  %158 = add i64 %157, -1
  %159 = getelementptr [1000000 x i64], ptr @_QFElist, i64 0, i64 %158
  %160 = load i64, ptr %159, align 8, !tbaa !3
  %.not565 = icmp eq i64 %160, 0
  br i1 %.not565, label %161, label %.loopexit

161:                                              ; preds = %154
  %162 = add nsw i64 %.0467596, -1
  %163 = add nuw nsw i64 %.0597, 1
  %164 = icmp sgt i64 %.0467596, 1
  br i1 %164, label %154, label %._crit_edge600

._crit_edge600:                                   ; preds = %161, %150
  %.unpack529 = load ptr, ptr @_QFEa.0, align 8, !tbaa !7
  %165 = add i64 %.0465602, -1
  %166 = getelementptr i64, ptr %.unpack529, i64 %165
  %167 = load i64, ptr %166, align 8, !tbaa !3
  %168 = add i64 %167, -1
  %169 = getelementptr [1000000 x i64], ptr @_QFElist, i64 0, i64 %168
  %170 = load i64, ptr %169, align 8, !tbaa !3
  %171 = icmp slt i64 %170, 2
  br i1 %171, label %172, label %.loopexit

172:                                              ; preds = %._crit_edge600
  %173 = load i64, ptr @_QFEans, align 8, !tbaa !3
  %174 = add i64 %173, 1
  store i64 %174, ptr @_QFEans, align 8, !tbaa !3
  %.unpack541 = load ptr, ptr @_QFEdiv.0, align 8, !tbaa !7
  call void @free(ptr %.unpack541)
  store ptr null, ptr @_QFEdiv.0, align 8, !tbaa !7
  store i64 0, ptr @_QFEdiv.8, align 8, !tbaa !7
  br label %.loopexit

.loopexit:                                        ; preds = %154, %172, %._crit_edge600
  %175 = add nuw i64 %.0465602, 1
  %exitcond609.not = icmp eq i64 %.0465602, %16
  br i1 %exitcond609.not, label %._crit_edge604, label %42

._crit_edge604:                                   ; preds = %.loopexit, %0, %.preheader591
  %176 = call ptr @_FortranAioBeginExternalListOutput(i32 -1, ptr nonnull @_QQcl.f128f5b7529d5a6eca66a3f20f10ebef, i32 96)
  %177 = load i64, ptr @_QFEans, align 8, !tbaa !3
  %178 = call i1 @_FortranAioOutputInteger64(ptr %176, i64 %177)
  %179 = call i32 @_FortranAioEndIoStatement(ptr %176)
  ret void
}

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

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

declare i32 @_FortranAioEndIoStatement(ptr) local_unnamed_addr

declare i1 @_FortranAioInputDescriptor(ptr, ptr) local_unnamed_addr

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

declare i1 @_FortranAioOutputInteger64(ptr, i64) local_unnamed_addr

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.sqrt.f32(float) #3

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.floor.f32(float) #3

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

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

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

; 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) #5

attributes #0 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" }
attributes #1 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" }
attributes #2 = { nounwind }
attributes #3 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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, !13}
!13 = !{!"llvm.loop.unroll.disable"}
!14 = distinct !{!14, !10, !11}
!15 = distinct !{!15, !13}
!16 = distinct !{!16, !10}
!17 = distinct !{!17, !10}
!18 = distinct !{!18, !10, !11}
!19 = distinct !{!19, !13}
!20 = distinct !{!20, !10}
