program  Rabbit_Exercise
  implicit none
  integer::N,M
  integer(16)::K
  integer(16),allocatable,dimension(:)::X,A

  integer(16),allocatable,dimension(:)::dE,dE_rep!期待値の差分
  integer,allocatable,dimension(:)::Rep!置換
  integer(16),allocatable,dimension(:)::ANS
  integer::i

  read*,N
  allocate(X(N))
  read*,X
  read*,M,K
  allocate(A(M))
  read*,A

  !期待値差分初期化
  allocate(dE(N-1))
  do i=1,N-1
    dE(i)=X(i+1)-X(i)
  end do

  !一セット分の置換を計算
    !置換初期化
    allocate(Rep(N-1))
    do i=1,N-1
      Rep(i)=i
    end do
    !一セット分の置換
    do i=1,M
      call swap(Rep(A(i)),Rep(A(i)-1))
    end do
  !Kセット分の置換を計算
    Rep=Rep_Pow(N-1,Rep,K)
  allocate(dE_Rep(N-1))
  dE_Rep=0
  do i=1,N-1
    dE_rep(I)=dE(rep(I))
  end do
  allocate(ANS(N))
  ANS(1)=X(1)
  do i=2,N
    ANS(I)=ANS(i-1)+dE_Rep(i-1)
  end do
  print"(I0)",ANS
contains
  
  subroutine swap(x,y)
    integer::x,y
    x=xor(x,y)
    y=xor(x,y)
    x=xor(x,y)
  end subroutine swap

  function Rep_Pow(si,Re,N)result(res)
    integer,intent(in)::si,Re(1:si)
    integer(16)::N
    integer::res(1:si),B(1:si)
    integer::i
    do i=1,si
      res(i)=i
    end do
    B=Re
    do i=1,bit_size(N)
      if(btest(N,i-1))res=rep_mul(si,res,B)
      B=rep_mul(si,B,B)
    end do
  end function
  function rep_mul(si,A,B)result(res)
    integer,intent(in)::si,A(si),B(si)
    integer::res(si)
    integer::i
    do i=1,SI 
      res(i)=A(B(i))
    end do
  end function
end program Rabbit_Exercise
; 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"

@_QFEa.0 = internal unnamed_addr global ptr null
@_QFEa.8 = internal unnamed_addr global i64 0
@_QFEans.0 = internal unnamed_addr global ptr null
@_QFEans.8 = internal unnamed_addr global i64 0
@_QFEde.0 = internal unnamed_addr global ptr null
@_QFEde_rep.0 = internal unnamed_addr global ptr null
@_QFEde_rep.7 = internal unnamed_addr global i64 1
@_QFErep.0 = internal unnamed_addr global ptr null
@_QFEx.0 = internal unnamed_addr global ptr null
@_QFEx.8 = internal unnamed_addr global i64 0
@_QQcl.e0e2b77871d896f7af3b98dc203e25fa = linkonce constant [73 x i8] c"/home/ubuntu/Downloads/TheStack_IR/Collated/Fortran/Source_7786/source.f\00"
@_QQcl.16373402fa3425c6e46827601abb88fa = linkonce constant [76 x i8] c"array left hand side must be allocated when the right hand side is a scalar\00"
@_QQcl.28493029 = 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

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 { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, align 8
  %4 = alloca i32, align 4
  %5 = alloca i128, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = tail call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.e0e2b77871d896f7af3b98dc203e25fa, i32 12)
  %9 = call i1 @_FortranAioInputInteger(ptr %8, ptr nonnull %7, i32 4)
  %10 = call i32 @_FortranAioEndIoStatement(ptr %8)
  %11 = load i32, ptr %7, align 4, !tbaa !3
  %12 = call i32 @llvm.smax.i32(i32 %11, i32 0)
  %13 = zext i32 %12 to i64
  %14 = shl nuw nsw i64 %13, 4
  %15 = call ptr @malloc(i64 %14)
  store ptr %15, ptr @_QFEx.0, align 8, !tbaa !7
  store i64 %13, ptr @_QFEx.8, align 8, !tbaa !7
  %16 = call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.e0e2b77871d896f7af3b98dc203e25fa, i32 14)
  %.unpack = load ptr, ptr @_QFEx.0, align 8, !tbaa !7
  %.unpack1001.unpack.unpack1003 = load i64, ptr @_QFEx.8, align 8, !tbaa !7
  store ptr %.unpack, ptr %3, align 8, !tbaa !7
  %.fca.1.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 1
  store i64 16, ptr %.fca.1.gep, align 8, !tbaa !7
  %.fca.2.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 2
  store i32 20180515, ptr %.fca.2.gep, align 8, !tbaa !7
  %.fca.3.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 3
  store i8 1, ptr %.fca.3.gep, align 4, !tbaa !7
  %.fca.4.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 4
  store i8 11, ptr %.fca.4.gep, align 1, !tbaa !7
  %.fca.5.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 5
  store i8 0, ptr %.fca.5.gep, align 2, !tbaa !7
  %.fca.6.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep, align 1, !tbaa !7
  %.fca.7.0.0.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 7, i64 0, i64 0
  store i64 1, ptr %.fca.7.0.0.gep, align 8, !tbaa !7
  %.fca.7.0.1.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 7, i64 0, i64 1
  store i64 %.unpack1001.unpack.unpack1003, ptr %.fca.7.0.1.gep, align 8, !tbaa !7
  %.fca.7.0.2.gep = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %3, i64 0, i32 7, i64 0, i64 2
  store i64 16, ptr %.fca.7.0.2.gep, align 8, !tbaa !7
  %17 = call i1 @_FortranAioInputDescriptor(ptr %16, ptr nonnull %3)
  %18 = call i32 @_FortranAioEndIoStatement(ptr %16)
  %19 = call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.e0e2b77871d896f7af3b98dc203e25fa, i32 15)
  %20 = call i1 @_FortranAioInputInteger(ptr %19, ptr nonnull %6, i32 4)
  %21 = call i1 @_FortranAioInputInteger(ptr %19, ptr nonnull %5, i32 16)
  %22 = call i32 @_FortranAioEndIoStatement(ptr %19)
  %23 = load i32, ptr %6, align 4, !tbaa !3
  %24 = call i32 @llvm.smax.i32(i32 %23, i32 0)
  %25 = zext i32 %24 to i64
  %26 = shl nuw nsw i64 %25, 4
  %27 = call ptr @malloc(i64 %26)
  store ptr %27, ptr @_QFEa.0, align 8, !tbaa !7
  store i64 %25, ptr @_QFEa.8, align 8, !tbaa !7
  %28 = call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.e0e2b77871d896f7af3b98dc203e25fa, i32 17)
  %.unpack1015 = load ptr, ptr @_QFEa.0, align 8, !tbaa !7
  %.unpack1022.unpack.unpack1024 = load i64, ptr @_QFEa.8, align 8, !tbaa !7
  store ptr %.unpack1015, ptr %2, align 8, !tbaa !7
  %.fca.1.gep130 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 1
  store i64 16, ptr %.fca.1.gep130, align 8, !tbaa !7
  %.fca.2.gep132 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 2
  store i32 20180515, ptr %.fca.2.gep132, align 8, !tbaa !7
  %.fca.3.gep134 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 3
  store i8 1, ptr %.fca.3.gep134, align 4, !tbaa !7
  %.fca.4.gep136 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 4
  store i8 11, ptr %.fca.4.gep136, align 1, !tbaa !7
  %.fca.5.gep138 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 5
  store i8 0, ptr %.fca.5.gep138, align 2, !tbaa !7
  %.fca.6.gep140 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 6
  store i8 0, ptr %.fca.6.gep140, align 1, !tbaa !7
  %.fca.7.0.0.gep142 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 7, i64 0, i64 0
  store i64 1, ptr %.fca.7.0.0.gep142, align 8, !tbaa !7
  %.fca.7.0.1.gep144 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 7, i64 0, i64 1
  store i64 %.unpack1022.unpack.unpack1024, ptr %.fca.7.0.1.gep144, align 8, !tbaa !7
  %.fca.7.0.2.gep146 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %2, i64 0, i32 7, i64 0, i64 2
  store i64 16, ptr %.fca.7.0.2.gep146, align 8, !tbaa !7
  %29 = call i1 @_FortranAioInputDescriptor(ptr %28, ptr nonnull %2)
  %30 = call i32 @_FortranAioEndIoStatement(ptr %28)
  %31 = load i32, ptr %7, align 4, !tbaa !3
  %32 = add i32 %31, -1
  %33 = call i32 @llvm.smax.i32(i32 %32, i32 0)
  %34 = zext i32 %33 to i64
  %35 = shl nuw nsw i64 %34, 4
  %36 = call ptr @malloc(i64 %35)
  store ptr %36, ptr @_QFEde.0, align 8, !tbaa !7
  %37 = sext i32 %32 to i64
  %38 = icmp sgt i32 %32, 0
  br i1 %38, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %0
  %.unpack1238 = load ptr, ptr @_QFEx.0, align 8, !tbaa !7
  br label %39

39:                                               ; preds = %.lr.ph, %39
  %indvars.iv = phi i64 [ 1, %.lr.ph ], [ %indvars.iv.next, %39 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %sext = shl i64 %indvars.iv.next, 32
  %40 = ashr exact i64 %sext, 32
  %41 = add nsw i64 %40, -1
  %42 = getelementptr i128, ptr %.unpack1238, i64 %41
  %43 = load i128, ptr %42, align 8, !tbaa !3
  %44 = add nsw i64 %indvars.iv, -1
  %45 = getelementptr i128, ptr %.unpack1238, i64 %44
  %46 = load i128, ptr %45, align 8, !tbaa !3
  %47 = sub i128 %43, %46
  %48 = add nsw i64 %indvars.iv, -1
  %49 = getelementptr i128, ptr %36, i64 %48
  store i128 %47, ptr %49, align 8, !tbaa !3
  %exitcond.not = icmp eq i64 %indvars.iv, %37
  br i1 %exitcond.not, label %._crit_edge, label %39

._crit_edge:                                      ; preds = %39, %0
  %50 = shl nuw nsw i64 %34, 2
  %51 = call ptr @malloc(i64 %50)
  store ptr %51, ptr @_QFErep.0, align 8, !tbaa !7
  br i1 %38, label %.lr.ph1266.preheader, label %._crit_edge1267

.lr.ph1266.preheader:                             ; preds = %._crit_edge
  %min.iters.check = icmp ult i32 %32, 8
  br i1 %min.iters.check, label %.lr.ph1266.preheader1320, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph1266.preheader
  %n.vec = and i64 %37, -8
  %ind.end = or i64 %n.vec, 1
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.ind = phi <4 x i32> [ <i32 1, i32 2, i32 3, i32 4>, %vector.ph ], [ %vec.ind.next, %vector.body ]
  %step.add = add <4 x i32> %vec.ind, <i32 4, i32 4, i32 4, i32 4>
  %52 = getelementptr i32, ptr %51, i64 %index
  store <4 x i32> %vec.ind, ptr %52, align 4, !tbaa !3
  %53 = getelementptr i32, ptr %52, i64 4
  store <4 x i32> %step.add, ptr %53, align 4, !tbaa !3
  %index.next = add nuw i64 %index, 8
  %vec.ind.next = add <4 x i32> %vec.ind, <i32 8, i32 8, i32 8, i32 8>
  %54 = icmp eq i64 %index.next, %n.vec
  br i1 %54, label %middle.block, label %vector.body, !llvm.loop !9

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %37
  br i1 %cmp.n, label %._crit_edge1267, label %.lr.ph1266.preheader1320

.lr.ph1266.preheader1320:                         ; preds = %.lr.ph1266.preheader, %middle.block
  %indvars.iv1286.ph = phi i64 [ 1, %.lr.ph1266.preheader ], [ %ind.end, %middle.block ]
  br label %.lr.ph1266

.lr.ph1266:                                       ; preds = %.lr.ph1266.preheader1320, %.lr.ph1266
  %indvars.iv1286 = phi i64 [ %indvars.iv.next1287, %.lr.ph1266 ], [ %indvars.iv1286.ph, %.lr.ph1266.preheader1320 ]
  %55 = add nsw i64 %indvars.iv1286, -1
  %56 = getelementptr i32, ptr %51, i64 %55
  %57 = trunc i64 %indvars.iv1286 to i32
  store i32 %57, ptr %56, align 4, !tbaa !3
  %indvars.iv.next1287 = add nuw nsw i64 %indvars.iv1286, 1
  %exitcond1289.not = icmp eq i64 %indvars.iv1286, %37
  br i1 %exitcond1289.not, label %._crit_edge1267, label %.lr.ph1266, !llvm.loop !12

._crit_edge1267:                                  ; preds = %.lr.ph1266, %middle.block, %._crit_edge
  %58 = load i32, ptr %6, align 4, !tbaa !3
  %59 = icmp sgt i32 %58, 0
  br i1 %59, label %.lr.ph1269, label %._crit_edge1270

.lr.ph1269:                                       ; preds = %._crit_edge1267
  %60 = zext i32 %58 to i64
  %.unpack1214 = load ptr, ptr @_QFEa.0, align 8, !tbaa !7
  %xtraiter = and i64 %60, 1
  %61 = icmp eq i32 %58, 1
  br i1 %61, label %._crit_edge1270.loopexit.unr-lcssa, label %.lr.ph1269.new

.lr.ph1269.new:                                   ; preds = %.lr.ph1269
  %unroll_iter = and i64 %60, 4294967294
  br label %62

62:                                               ; preds = %62, %.lr.ph1269.new
  %indvars.iv1290 = phi i64 [ 1, %.lr.ph1269.new ], [ %indvars.iv.next1291.1, %62 ]
  %niter = phi i64 [ 0, %.lr.ph1269.new ], [ %niter.next.1, %62 ]
  %63 = add nsw i64 %indvars.iv1290, -1
  %64 = getelementptr i128, ptr %.unpack1214, i64 %63
  %65 = load i128, ptr %64, align 8, !tbaa !3
  %66 = trunc i128 %65 to i64
  %67 = add i64 %66, -1
  %68 = getelementptr i32, ptr %51, i64 %67
  %69 = add i64 %66, -2
  %70 = getelementptr i32, ptr %51, i64 %69
  %71 = load i32, ptr %68, align 4, !tbaa !3
  %72 = load i32, ptr %70, align 4, !tbaa !3
  store i32 %71, ptr %70, align 4, !tbaa !3
  store i32 %72, ptr %68, align 4, !tbaa !3
  %73 = getelementptr i128, ptr %.unpack1214, i64 %indvars.iv1290
  %74 = load i128, ptr %73, align 8, !tbaa !3
  %75 = trunc i128 %74 to i64
  %76 = add i64 %75, -1
  %77 = getelementptr i32, ptr %51, i64 %76
  %78 = add i64 %75, -2
  %79 = getelementptr i32, ptr %51, i64 %78
  %80 = load i32, ptr %77, align 4, !tbaa !3
  %81 = load i32, ptr %79, align 4, !tbaa !3
  store i32 %80, ptr %79, align 4, !tbaa !3
  store i32 %81, ptr %77, align 4, !tbaa !3
  %indvars.iv.next1291.1 = add nuw nsw i64 %indvars.iv1290, 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_edge1270.loopexit.unr-lcssa, label %62

._crit_edge1270.loopexit.unr-lcssa:               ; preds = %62, %.lr.ph1269
  %indvars.iv1290.unr = phi i64 [ 1, %.lr.ph1269 ], [ %indvars.iv.next1291.1, %62 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge1270, label %._crit_edge1270.loopexit.epilog-lcssa

._crit_edge1270.loopexit.epilog-lcssa:            ; preds = %._crit_edge1270.loopexit.unr-lcssa
  %82 = add nsw i64 %indvars.iv1290.unr, -1
  %83 = getelementptr i128, ptr %.unpack1214, i64 %82
  %84 = load i128, ptr %83, align 8, !tbaa !3
  %85 = trunc i128 %84 to i64
  %86 = add i64 %85, -1
  %87 = getelementptr i32, ptr %51, i64 %86
  %88 = add i64 %85, -2
  %89 = getelementptr i32, ptr %51, i64 %88
  %90 = load i32, ptr %87, align 4, !tbaa !3
  %91 = load i32, ptr %89, align 4, !tbaa !3
  store i32 %90, ptr %89, align 4, !tbaa !3
  store i32 %91, ptr %87, align 4, !tbaa !3
  br label %._crit_edge1270

._crit_edge1270:                                  ; preds = %._crit_edge1270.loopexit.epilog-lcssa, %._crit_edge1270.loopexit.unr-lcssa, %._crit_edge1267
  store i32 %32, ptr %4, align 4, !tbaa !3
  %92 = call ptr @llvm.stacksave()
  %93 = alloca i32, i64 %34, align 4
  call void @_QFPrep_pow(ptr nonnull %93, ptr nonnull %4, ptr %51, ptr nonnull %5)
  %.not = icmp eq ptr %51, null
  br i1 %.not, label %96, label %.preheader1263

.preheader1263:                                   ; preds = %._crit_edge1270
  %.not1282 = icmp slt i32 %32, 1
  br i1 %.not1282, label %.loopexit1264, label %.lr.ph1271.preheader

.lr.ph1271.preheader:                             ; preds = %.preheader1263
  %94 = call i64 @llvm.smax.i64(i64 %34, i64 1)
  %95 = shl nuw nsw i64 %94, 2
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %51, ptr nonnull align 4 %93, i64 %95, i1 false), !tbaa !3
  br label %.loopexit1264

96:                                               ; preds = %._crit_edge1270
  %97 = call ptr @malloc(i64 %50)
  %.not1284 = icmp slt i32 %32, 1
  br i1 %.not1284, label %._crit_edge1274, label %.lr.ph1273.preheader

.lr.ph1273.preheader:                             ; preds = %96
  %98 = call i64 @llvm.smax.i64(i64 %34, i64 1)
  %99 = shl nuw nsw i64 %98, 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %97, ptr nonnull align 4 %93, i64 %99, i1 false), !tbaa !3
  br label %._crit_edge1274

._crit_edge1274:                                  ; preds = %96, %.lr.ph1273.preheader
  store ptr %97, ptr @_QFErep.0, align 8, !tbaa !7
  br label %.loopexit1264

.loopexit1264:                                    ; preds = %.lr.ph1271.preheader, %.preheader1263, %._crit_edge1274
  call void @llvm.stackrestore(ptr %92)
  %100 = load i32, ptr %7, align 4, !tbaa !3
  %101 = add i32 %100, -1
  %102 = call i32 @llvm.smax.i32(i32 %101, i32 0)
  %103 = zext i32 %102 to i64
  %104 = shl nuw nsw i64 %103, 4
  %105 = call ptr @malloc(i64 %104)
  store ptr %105, ptr @_QFEde_rep.0, align 8, !tbaa !7
  store i64 1, ptr @_QFEde_rep.7, align 8, !tbaa !7
  %.not1078 = icmp eq ptr %105, null
  br i1 %.not1078, label %.loopexit, label %.preheader

.preheader:                                       ; preds = %.loopexit1264
  %.not1283 = icmp slt i32 %101, 1
  br i1 %.not1283, label %._crit_edge1278, label %.loopexit.thread

.loopexit.thread:                                 ; preds = %.preheader
  %106 = call i64 @llvm.smax.i64(i64 %103, i64 1)
  %107 = shl nuw nsw i64 %106, 4
  call void @llvm.memset.p0.i64(ptr nonnull align 8 %105, i8 0, i64 %107, i1 false), !tbaa !3
  br label %.lr.ph1277

.loopexit:                                        ; preds = %.loopexit1264
  %108 = call {} @_FortranAReportFatalUserError(ptr nonnull @_QQcl.16373402fa3425c6e46827601abb88fa, ptr nonnull @_QQcl.e0e2b77871d896f7af3b98dc203e25fa, i32 38)
  %.unpack1179.unpack.unpack = load i64, ptr @_QFEde_rep.7, align 8, !tbaa !7
  %109 = icmp slt i32 %101, 1
  %110 = select i1 %109, i64 1, i64 %.unpack1179.unpack.unpack
  store i64 %110, ptr @_QFEde_rep.7, align 8, !tbaa !7
  %.pre = load i32, ptr %7, align 4, !tbaa !3
  %.pre1306 = add i32 %.pre, -1
  %111 = icmp sgt i32 %.pre1306, 0
  br i1 %111, label %.lr.ph1277, label %._crit_edge1278

.lr.ph1277:                                       ; preds = %.loopexit.thread, %.loopexit
  %112 = phi i32 [ %100, %.loopexit.thread ], [ %.pre, %.loopexit ]
  %.unpack1131.unpack.unpack1311 = phi i64 [ 1, %.loopexit.thread ], [ %110, %.loopexit ]
  %.pre-phi1310 = phi i32 [ %101, %.loopexit.thread ], [ %.pre1306, %.loopexit ]
  %113 = zext i32 %.pre-phi1310 to i64
  %.unpack1136 = load ptr, ptr @_QFEde.0, align 8, !tbaa !7
  %.unpack1148 = load ptr, ptr @_QFErep.0, align 8, !tbaa !7
  %xtraiter1322 = and i64 %113, 1
  %114 = icmp eq i32 %.pre-phi1310, 1
  br i1 %114, label %._crit_edge1278.loopexit.unr-lcssa, label %.lr.ph1277.new

.lr.ph1277.new:                                   ; preds = %.lr.ph1277
  %unroll_iter1324 = and i64 %113, 4294967294
  br label %115

115:                                              ; preds = %115, %.lr.ph1277.new
  %indvars.iv1296 = phi i64 [ 1, %.lr.ph1277.new ], [ %indvars.iv.next1297.1, %115 ]
  %niter1325 = phi i64 [ 0, %.lr.ph1277.new ], [ %niter1325.next.1, %115 ]
  %116 = add nsw i64 %indvars.iv1296, -1
  %117 = getelementptr i32, ptr %.unpack1148, i64 %116
  %118 = load i32, ptr %117, align 4, !tbaa !3
  %119 = sext i32 %118 to i64
  %120 = add nsw i64 %119, -1
  %121 = getelementptr i128, ptr %.unpack1136, i64 %120
  %122 = load i128, ptr %121, align 8, !tbaa !3
  %123 = sub i64 %indvars.iv1296, %.unpack1131.unpack.unpack1311
  %124 = getelementptr i128, ptr %105, i64 %123
  store i128 %122, ptr %124, align 8, !tbaa !3
  %indvars.iv.next1297 = add nuw nsw i64 %indvars.iv1296, 1
  %125 = getelementptr i32, ptr %.unpack1148, i64 %indvars.iv1296
  %126 = load i32, ptr %125, align 4, !tbaa !3
  %127 = sext i32 %126 to i64
  %128 = add nsw i64 %127, -1
  %129 = getelementptr i128, ptr %.unpack1136, i64 %128
  %130 = load i128, ptr %129, align 8, !tbaa !3
  %131 = sub i64 %indvars.iv.next1297, %.unpack1131.unpack.unpack1311
  %132 = getelementptr i128, ptr %105, i64 %131
  store i128 %130, ptr %132, align 8, !tbaa !3
  %indvars.iv.next1297.1 = add nuw nsw i64 %indvars.iv1296, 2
  %niter1325.next.1 = add i64 %niter1325, 2
  %niter1325.ncmp.1 = icmp eq i64 %niter1325.next.1, %unroll_iter1324
  br i1 %niter1325.ncmp.1, label %._crit_edge1278.loopexit.unr-lcssa, label %115

._crit_edge1278.loopexit.unr-lcssa:               ; preds = %115, %.lr.ph1277
  %indvars.iv1296.unr = phi i64 [ 1, %.lr.ph1277 ], [ %indvars.iv.next1297.1, %115 ]
  %lcmp.mod1323.not = icmp eq i64 %xtraiter1322, 0
  br i1 %lcmp.mod1323.not, label %._crit_edge1278, label %._crit_edge1278.loopexit.epilog-lcssa

._crit_edge1278.loopexit.epilog-lcssa:            ; preds = %._crit_edge1278.loopexit.unr-lcssa
  %133 = add nsw i64 %indvars.iv1296.unr, -1
  %134 = getelementptr i32, ptr %.unpack1148, i64 %133
  %135 = load i32, ptr %134, align 4, !tbaa !3
  %136 = sext i32 %135 to i64
  %137 = add nsw i64 %136, -1
  %138 = getelementptr i128, ptr %.unpack1136, i64 %137
  %139 = load i128, ptr %138, align 8, !tbaa !3
  %140 = sub i64 %indvars.iv1296.unr, %.unpack1131.unpack.unpack1311
  %141 = getelementptr i128, ptr %105, i64 %140
  store i128 %139, ptr %141, align 8, !tbaa !3
  br label %._crit_edge1278

._crit_edge1278:                                  ; preds = %._crit_edge1278.loopexit.epilog-lcssa, %._crit_edge1278.loopexit.unr-lcssa, %.preheader, %.loopexit
  %142 = phi i32 [ %.pre, %.loopexit ], [ %100, %.preheader ], [ %112, %._crit_edge1278.loopexit.unr-lcssa ], [ %112, %._crit_edge1278.loopexit.epilog-lcssa ]
  %.unpack1131.unpack.unpack1312 = phi i64 [ %110, %.loopexit ], [ 1, %.preheader ], [ %.unpack1131.unpack.unpack1311, %._crit_edge1278.loopexit.unr-lcssa ], [ %.unpack1131.unpack.unpack1311, %._crit_edge1278.loopexit.epilog-lcssa ]
  %143 = call i32 @llvm.smax.i32(i32 %142, i32 0)
  %144 = zext i32 %143 to i64
  %145 = shl nuw nsw i64 %144, 4
  %146 = call ptr @malloc(i64 %145)
  store ptr %146, ptr @_QFEans.0, align 8, !tbaa !7
  store i64 %144, ptr @_QFEans.8, align 8, !tbaa !7
  %.unpack1088 = load ptr, ptr @_QFEx.0, align 8, !tbaa !7
  %147 = load i128, ptr %.unpack1088, align 8, !tbaa !3
  store i128 %147, ptr %146, align 8, !tbaa !3
  %148 = icmp sgt i32 %142, 1
  br i1 %148, label %.lr.ph1280, label %._crit_edge1281

.lr.ph1280:                                       ; preds = %._crit_edge1278
  %149 = zext i32 %142 to i64
  %150 = add nsw i64 %149, -1
  %xtraiter1327 = and i64 %150, 1
  %151 = icmp eq i32 %142, 2
  br i1 %151, label %._crit_edge1281.loopexit.unr-lcssa, label %.lr.ph1280.new

.lr.ph1280.new:                                   ; preds = %.lr.ph1280
  %unroll_iter1329 = and i64 %150, -2
  br label %152

152:                                              ; preds = %152, %.lr.ph1280.new
  %153 = phi i128 [ %147, %.lr.ph1280.new ], [ %163, %152 ]
  %indvars.iv1300 = phi i64 [ 2, %.lr.ph1280.new ], [ %indvars.iv.next1301.1, %152 ]
  %niter1330 = phi i64 [ 0, %.lr.ph1280.new ], [ %niter1330.next.1, %152 ]
  %154 = add nsw i64 %indvars.iv1300, -1
  %155 = sub i64 %154, %.unpack1131.unpack.unpack1312
  %156 = getelementptr i128, ptr %105, i64 %155
  %157 = load i128, ptr %156, align 8, !tbaa !3
  %158 = add i128 %157, %153
  %159 = getelementptr i128, ptr %146, i64 %154
  store i128 %158, ptr %159, align 8, !tbaa !3
  %160 = sub i64 %indvars.iv1300, %.unpack1131.unpack.unpack1312
  %161 = getelementptr i128, ptr %105, i64 %160
  %162 = load i128, ptr %161, align 8, !tbaa !3
  %163 = add i128 %162, %158
  %164 = getelementptr i128, ptr %146, i64 %indvars.iv1300
  store i128 %163, ptr %164, align 8, !tbaa !3
  %indvars.iv.next1301.1 = add nuw nsw i64 %indvars.iv1300, 2
  %niter1330.next.1 = add i64 %niter1330, 2
  %niter1330.ncmp.1 = icmp eq i64 %niter1330.next.1, %unroll_iter1329
  br i1 %niter1330.ncmp.1, label %._crit_edge1281.loopexit.unr-lcssa.loopexit, label %152

._crit_edge1281.loopexit.unr-lcssa.loopexit:      ; preds = %152
  %165 = or i64 %indvars.iv1300, 1
  br label %._crit_edge1281.loopexit.unr-lcssa

._crit_edge1281.loopexit.unr-lcssa:               ; preds = %._crit_edge1281.loopexit.unr-lcssa.loopexit, %.lr.ph1280
  %.unr = phi i128 [ %147, %.lr.ph1280 ], [ %163, %._crit_edge1281.loopexit.unr-lcssa.loopexit ]
  %indvars.iv1300.unr = phi i64 [ 1, %.lr.ph1280 ], [ %165, %._crit_edge1281.loopexit.unr-lcssa.loopexit ]
  %lcmp.mod1328.not = icmp eq i64 %xtraiter1327, 0
  br i1 %lcmp.mod1328.not, label %._crit_edge1281, label %._crit_edge1281.loopexit.epilog-lcssa

._crit_edge1281.loopexit.epilog-lcssa:            ; preds = %._crit_edge1281.loopexit.unr-lcssa
  %166 = sub i64 %indvars.iv1300.unr, %.unpack1131.unpack.unpack1312
  %167 = getelementptr i128, ptr %105, i64 %166
  %168 = load i128, ptr %167, align 8, !tbaa !3
  %169 = add i128 %168, %.unr
  %170 = getelementptr i128, ptr %146, i64 %indvars.iv1300.unr
  store i128 %169, ptr %170, align 8, !tbaa !3
  br label %._crit_edge1281

._crit_edge1281:                                  ; preds = %._crit_edge1281.loopexit.epilog-lcssa, %._crit_edge1281.loopexit.unr-lcssa, %._crit_edge1278
  %171 = call ptr @_FortranAioBeginExternalFormattedOutput(ptr nonnull @_QQcl.28493029, i64 4, ptr null, i32 -1, ptr nonnull @_QQcl.e0e2b77871d896f7af3b98dc203e25fa, i32 47)
  %.unpack1100 = load ptr, ptr @_QFEans.0, align 8, !tbaa !7
  %.unpack1107.unpack.unpack1109 = load i64, ptr @_QFEans.8, align 8, !tbaa !7
  store ptr %.unpack1100, ptr %1, align 8, !tbaa !7
  %.fca.1.gep531 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 1
  store i64 16, ptr %.fca.1.gep531, align 8, !tbaa !7
  %.fca.2.gep533 = 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.gep533, align 8, !tbaa !7
  %.fca.3.gep535 = 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.gep535, align 4, !tbaa !7
  %.fca.4.gep537 = getelementptr inbounds { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr %1, i64 0, i32 4
  store i8 11, ptr %.fca.4.gep537, align 1, !tbaa !7
  %.fca.5.gep539 = 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.gep539, align 2, !tbaa !7
  %.fca.6.gep541 = 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.gep541, align 1, !tbaa !7
  %.fca.7.0.0.gep543 = 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.gep543, align 8, !tbaa !7
  %.fca.7.0.1.gep545 = 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 %.unpack1107.unpack.unpack1109, ptr %.fca.7.0.1.gep545, align 8, !tbaa !7
  %.fca.7.0.2.gep547 = 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 16, ptr %.fca.7.0.2.gep547, align 8, !tbaa !7
  %172 = call i1 @_FortranAioOutputDescriptor(ptr %171, ptr nonnull %1)
  %173 = call i32 @_FortranAioEndIoStatement(ptr %171)
  ret void
}

; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: readwrite)
define void @_QFPswap(ptr nocapture %0, ptr nocapture %1) local_unnamed_addr #1 {
  %3 = load i32, ptr %0, align 4, !tbaa !3
  %4 = load i32, ptr %1, align 4, !tbaa !3
  %5 = xor i32 %4, %3
  store i32 %5, ptr %0, align 4, !tbaa !3
  %6 = load i32, ptr %1, align 4, !tbaa !3
  %7 = xor i32 %6, %5
  store i32 %7, ptr %1, align 4, !tbaa !3
  %8 = load i32, ptr %0, align 4, !tbaa !3
  %9 = xor i32 %8, %7
  store i32 %9, ptr %0, align 4, !tbaa !3
  ret void
}

; Function Attrs: nofree nosync nounwind
define void @_QFPrep_pow(ptr nocapture %0, ptr nocapture readonly %1, ptr nocapture readonly %2, ptr nocapture readonly %3) local_unnamed_addr #2 {
  %5 = load i32, ptr %1, align 4, !tbaa !3
  %6 = sext i32 %5 to i64
  %7 = tail call i64 @llvm.smax.i64(i64 %6, i64 0)
  %8 = alloca i32, i64 %7, align 4
  %9 = icmp sgt i32 %5, 0
  br i1 %9, label %.lr.ph.preheader, label %.preheader14..preheader_crit_edge

.lr.ph.preheader:                                 ; preds = %4
  %min.iters.check = icmp ult i32 %5, 8
  br i1 %min.iters.check, label %.lr.ph.preheader28, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph.preheader
  %n.vec = and i64 %6, -8
  %ind.end = or i64 %n.vec, 1
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.ind = phi <4 x i32> [ <i32 1, i32 2, i32 3, i32 4>, %vector.ph ], [ %vec.ind.next, %vector.body ]
  %step.add = add <4 x i32> %vec.ind, <i32 4, i32 4, i32 4, i32 4>
  %10 = getelementptr i32, ptr %0, i64 %index
  store <4 x i32> %vec.ind, ptr %10, align 4, !tbaa !3
  %11 = getelementptr i32, ptr %10, i64 4
  store <4 x i32> %step.add, ptr %11, align 4, !tbaa !3
  %index.next = add nuw i64 %index, 8
  %vec.ind.next = add <4 x i32> %vec.ind, <i32 8, i32 8, i32 8, i32 8>
  %12 = icmp eq i64 %index.next, %n.vec
  br i1 %12, label %middle.block, label %vector.body, !llvm.loop !13

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %6
  br i1 %cmp.n, label %.preheader14, label %.lr.ph.preheader28

.lr.ph.preheader28:                               ; preds = %.lr.ph.preheader, %middle.block
  %indvars.iv.ph = phi i64 [ 1, %.lr.ph.preheader ], [ %ind.end, %middle.block ]
  br label %.lr.ph

.preheader14:                                     ; preds = %.lr.ph, %middle.block
  %.not19 = icmp slt i32 %5, 1
  br i1 %.not19, label %.preheader14..preheader_crit_edge, label %.lr.ph15.preheader

.preheader14..preheader_crit_edge:                ; preds = %4, %.preheader14
  %.pre = shl nuw nsw i64 %7, 2
  br label %.preheader

.lr.ph15.preheader:                               ; preds = %.preheader14
  %13 = shl nuw nsw i64 %7, 2
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %8, ptr align 4 %2, i64 %13, i1 false), !tbaa !3
  br label %.preheader

.lr.ph:                                           ; preds = %.lr.ph.preheader28, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ %indvars.iv.ph, %.lr.ph.preheader28 ]
  %14 = add nsw i64 %indvars.iv, -1
  %15 = getelementptr i32, ptr %0, i64 %14
  %16 = trunc i64 %indvars.iv to i32
  store i32 %16, ptr %15, align 4, !tbaa !3
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv, %6
  br i1 %exitcond.not, label %.preheader14, label %.lr.ph, !llvm.loop !14

.preheader:                                       ; preds = %.preheader14..preheader_crit_edge, %.lr.ph15.preheader
  %.not1925 = phi i1 [ true, %.preheader14..preheader_crit_edge ], [ false, %.lr.ph15.preheader ]
  %.pre-phi = phi i64 [ %.pre, %.preheader14..preheader_crit_edge ], [ %13, %.lr.ph15.preheader ]
  br label %17

17:                                               ; preds = %.preheader, %._crit_edge18
  %18 = phi i64 [ 128, %.preheader ], [ %92, %._crit_edge18 ]
  %19 = phi i32 [ 1, %.preheader ], [ %91, %._crit_edge18 ]
  %20 = load i128, ptr %3, align 8, !tbaa !3
  %21 = add nsw i32 %19, -1
  %22 = zext i32 %21 to i128
  %23 = shl nuw i128 1, %22
  %24 = and i128 %20, %23
  %.not = icmp eq i128 %24, 0
  br i1 %.not, label %58, label %25

25:                                               ; preds = %17
  %26 = load i32, ptr %1, align 4, !tbaa !3
  %27 = tail call i32 @llvm.smax.i32(i32 %26, i32 0)
  %28 = zext i32 %27 to i64
  %29 = tail call ptr @llvm.stacksave()
  %30 = alloca i32, i64 %28, align 4
  %31 = load i32, ptr %1, align 4, !tbaa !3
  %32 = icmp sgt i32 %31, 0
  br i1 %32, label %.lr.ph.preheader.i, label %_QFPrep_mul.exit

.lr.ph.preheader.i:                               ; preds = %25
  %33 = zext i32 %31 to i64
  %xtraiter = and i64 %33, 1
  %34 = icmp eq i32 %31, 1
  br i1 %34, label %_QFPrep_mul.exit.loopexit.unr-lcssa, label %.lr.ph.preheader.i.new

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

.lr.ph.i:                                         ; preds = %.lr.ph.i, %.lr.ph.preheader.i.new
  %indvars.iv.i = phi i64 [ 1, %.lr.ph.preheader.i.new ], [ %indvars.iv.next.i.1, %.lr.ph.i ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.i.new ], [ %niter.next.1, %.lr.ph.i ]
  %35 = add nsw i64 %indvars.iv.i, -1
  %36 = getelementptr i32, ptr %8, i64 %35
  %37 = load i32, ptr %36, align 4, !tbaa !3
  %38 = sext i32 %37 to i64
  %39 = add nsw i64 %38, -1
  %40 = getelementptr i32, ptr %0, i64 %39
  %41 = load i32, ptr %40, align 4, !tbaa !3
  %42 = getelementptr i32, ptr %30, i64 %35
  store i32 %41, ptr %42, align 4, !tbaa !3
  %43 = getelementptr i32, ptr %8, i64 %indvars.iv.i
  %44 = load i32, ptr %43, align 4, !tbaa !3
  %45 = sext i32 %44 to i64
  %46 = add nsw i64 %45, -1
  %47 = getelementptr i32, ptr %0, i64 %46
  %48 = load i32, ptr %47, align 4, !tbaa !3
  %49 = getelementptr i32, ptr %30, i64 %indvars.iv.i
  store i32 %48, ptr %49, align 4, !tbaa !3
  %indvars.iv.next.i.1 = add nuw nsw i64 %indvars.iv.i, 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 %_QFPrep_mul.exit.loopexit.unr-lcssa, label %.lr.ph.i

_QFPrep_mul.exit.loopexit.unr-lcssa:              ; preds = %.lr.ph.i, %.lr.ph.preheader.i
  %indvars.iv.i.unr = phi i64 [ 1, %.lr.ph.preheader.i ], [ %indvars.iv.next.i.1, %.lr.ph.i ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %_QFPrep_mul.exit, label %.lr.ph.i.epil

.lr.ph.i.epil:                                    ; preds = %_QFPrep_mul.exit.loopexit.unr-lcssa
  %50 = add nsw i64 %indvars.iv.i.unr, -1
  %51 = getelementptr i32, ptr %8, i64 %50
  %52 = load i32, ptr %51, align 4, !tbaa !3
  %53 = sext i32 %52 to i64
  %54 = add nsw i64 %53, -1
  %55 = getelementptr i32, ptr %0, i64 %54
  %56 = load i32, ptr %55, align 4, !tbaa !3
  %57 = getelementptr i32, ptr %30, i64 %50
  store i32 %56, ptr %57, align 4, !tbaa !3
  br label %_QFPrep_mul.exit

_QFPrep_mul.exit:                                 ; preds = %.lr.ph.i.epil, %_QFPrep_mul.exit.loopexit.unr-lcssa, %25
  br i1 %.not1925, label %._crit_edge, label %.lr.ph16.preheader

.lr.ph16.preheader:                               ; preds = %_QFPrep_mul.exit
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %0, ptr nonnull align 4 %30, i64 %.pre-phi, i1 false), !tbaa !3
  br label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph16.preheader, %_QFPrep_mul.exit
  tail call void @llvm.stackrestore(ptr %29)
  br label %58

58:                                               ; preds = %._crit_edge, %17
  %59 = load i32, ptr %1, align 4, !tbaa !3
  %60 = tail call i32 @llvm.smax.i32(i32 %59, i32 0)
  %61 = zext i32 %60 to i64
  %62 = tail call ptr @llvm.stacksave()
  %63 = alloca i32, i64 %61, align 4
  %64 = load i32, ptr %1, align 4, !tbaa !3
  %65 = icmp sgt i32 %64, 0
  br i1 %65, label %.lr.ph.preheader.i8, label %_QFPrep_mul.exit13

.lr.ph.preheader.i8:                              ; preds = %58
  %66 = zext i32 %64 to i64
  %xtraiter29 = and i64 %66, 1
  %67 = icmp eq i32 %64, 1
  br i1 %67, label %_QFPrep_mul.exit13.loopexit.unr-lcssa, label %.lr.ph.preheader.i8.new

.lr.ph.preheader.i8.new:                          ; preds = %.lr.ph.preheader.i8
  %unroll_iter31 = and i64 %66, 4294967294
  br label %.lr.ph.i12

.lr.ph.i12:                                       ; preds = %.lr.ph.i12, %.lr.ph.preheader.i8.new
  %indvars.iv.i9 = phi i64 [ 1, %.lr.ph.preheader.i8.new ], [ %indvars.iv.next.i10.1, %.lr.ph.i12 ]
  %niter32 = phi i64 [ 0, %.lr.ph.preheader.i8.new ], [ %niter32.next.1, %.lr.ph.i12 ]
  %68 = add nsw i64 %indvars.iv.i9, -1
  %69 = getelementptr i32, ptr %8, i64 %68
  %70 = load i32, ptr %69, align 4, !tbaa !3
  %71 = sext i32 %70 to i64
  %72 = add nsw i64 %71, -1
  %73 = getelementptr i32, ptr %8, i64 %72
  %74 = load i32, ptr %73, align 4, !tbaa !3
  %75 = getelementptr i32, ptr %63, i64 %68
  store i32 %74, ptr %75, align 4, !tbaa !3
  %76 = getelementptr i32, ptr %8, i64 %indvars.iv.i9
  %77 = load i32, ptr %76, align 4, !tbaa !3
  %78 = sext i32 %77 to i64
  %79 = add nsw i64 %78, -1
  %80 = getelementptr i32, ptr %8, i64 %79
  %81 = load i32, ptr %80, align 4, !tbaa !3
  %82 = getelementptr i32, ptr %63, i64 %indvars.iv.i9
  store i32 %81, ptr %82, align 4, !tbaa !3
  %indvars.iv.next.i10.1 = add nuw nsw i64 %indvars.iv.i9, 2
  %niter32.next.1 = add i64 %niter32, 2
  %niter32.ncmp.1 = icmp eq i64 %niter32.next.1, %unroll_iter31
  br i1 %niter32.ncmp.1, label %_QFPrep_mul.exit13.loopexit.unr-lcssa, label %.lr.ph.i12

_QFPrep_mul.exit13.loopexit.unr-lcssa:            ; preds = %.lr.ph.i12, %.lr.ph.preheader.i8
  %indvars.iv.i9.unr = phi i64 [ 1, %.lr.ph.preheader.i8 ], [ %indvars.iv.next.i10.1, %.lr.ph.i12 ]
  %lcmp.mod30.not = icmp eq i64 %xtraiter29, 0
  br i1 %lcmp.mod30.not, label %_QFPrep_mul.exit13, label %.lr.ph.i12.epil

.lr.ph.i12.epil:                                  ; preds = %_QFPrep_mul.exit13.loopexit.unr-lcssa
  %83 = add nsw i64 %indvars.iv.i9.unr, -1
  %84 = getelementptr i32, ptr %8, i64 %83
  %85 = load i32, ptr %84, align 4, !tbaa !3
  %86 = sext i32 %85 to i64
  %87 = add nsw i64 %86, -1
  %88 = getelementptr i32, ptr %8, i64 %87
  %89 = load i32, ptr %88, align 4, !tbaa !3
  %90 = getelementptr i32, ptr %63, i64 %83
  store i32 %89, ptr %90, align 4, !tbaa !3
  br label %_QFPrep_mul.exit13

_QFPrep_mul.exit13:                               ; preds = %.lr.ph.i12.epil, %_QFPrep_mul.exit13.loopexit.unr-lcssa, %58
  br i1 %.not1925, label %._crit_edge18, label %.lr.ph17.preheader

.lr.ph17.preheader:                               ; preds = %_QFPrep_mul.exit13
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %8, ptr nonnull align 4 %63, i64 %.pre-phi, i1 false), !tbaa !3
  br label %._crit_edge18

._crit_edge18:                                    ; preds = %.lr.ph17.preheader, %_QFPrep_mul.exit13
  tail call void @llvm.stackrestore(ptr %62)
  %91 = add nuw nsw i32 %19, 1
  %92 = add nsw i64 %18, -1
  %.not23 = icmp eq i64 %92, 0
  br i1 %.not23, label %93, label %17

93:                                               ; preds = %._crit_edge18
  ret void
}

; Function Attrs: nofree norecurse nosync nounwind memory(argmem: readwrite)
define void @_QFPrep_mul(ptr nocapture writeonly %0, ptr nocapture readonly %1, ptr nocapture readonly %2, ptr nocapture readonly %3) local_unnamed_addr #3 {
  %5 = load i32, ptr %1, align 4, !tbaa !3
  %6 = icmp sgt i32 %5, 0
  br i1 %6, label %.lr.ph.preheader, label %._crit_edge

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

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

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader.new
  %indvars.iv = phi i64 [ 1, %.lr.ph.preheader.new ], [ %indvars.iv.next.1, %.lr.ph ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.1, %.lr.ph ]
  %9 = add nsw i64 %indvars.iv, -1
  %10 = getelementptr i32, ptr %3, i64 %9
  %11 = load i32, ptr %10, align 4, !tbaa !3
  %12 = sext i32 %11 to i64
  %13 = add nsw i64 %12, -1
  %14 = getelementptr i32, ptr %2, i64 %13
  %15 = load i32, ptr %14, align 4, !tbaa !3
  %16 = getelementptr i32, ptr %0, i64 %9
  store i32 %15, ptr %16, align 4, !tbaa !3
  %17 = getelementptr i32, ptr %3, i64 %indvars.iv
  %18 = load i32, ptr %17, align 4, !tbaa !3
  %19 = sext i32 %18 to i64
  %20 = add nsw i64 %19, -1
  %21 = getelementptr i32, ptr %2, i64 %20
  %22 = load i32, ptr %21, align 4, !tbaa !3
  %23 = getelementptr i32, ptr %0, i64 %indvars.iv
  store i32 %22, ptr %23, align 4, !tbaa !3
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 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.loopexit, label %.lr.ph

._crit_edge.loopexit.unr-lcssa.loopexit:          ; preds = %.lr.ph
  %24 = add nuw nsw i64 %indvars.iv, 1
  br label %._crit_edge.loopexit.unr-lcssa

._crit_edge.loopexit.unr-lcssa:                   ; preds = %._crit_edge.loopexit.unr-lcssa.loopexit, %.lr.ph.preheader
  %indvars.iv.unr = phi i64 [ 0, %.lr.ph.preheader ], [ %24, %._crit_edge.loopexit.unr-lcssa.loopexit ]
  %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
  %25 = getelementptr i32, ptr %3, i64 %indvars.iv.unr
  %26 = load i32, ptr %25, align 4, !tbaa !3
  %27 = sext i32 %26 to i64
  %28 = add nsw i64 %27, -1
  %29 = getelementptr i32, ptr %2, i64 %28
  %30 = load i32, ptr %29, align 4, !tbaa !3
  %31 = getelementptr i32, ptr %0, i64 %indvars.iv.unr
  store i32 %30, ptr %31, align 4, !tbaa !3
  br label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph.epil, %._crit_edge.loopexit.unr-lcssa, %4
  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

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

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

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

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

declare i1 @_FortranAioOutputDescriptor(ptr, ptr) local_unnamed_addr

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

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

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

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

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

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

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