


program main
    implicit none
    integer*8::N,C,i,j,k,ans=0
    integer*8,allocatable::x(:),v(:),sum1(:),sum2(:),dp1(:),dp2(:),dp3(:),dp4(:)
    read(*,*)N,C
    allocate(x(N))
    allocate(v(N))
    allocate(sum1(N))
    allocate(sum2(N))
    allocate(dp1(N))
    allocate(dp2(N))
    allocate(dp3(N))
    allocate(dp4(N))
    do i=1,N
        sum1(i)=0
        sum2(i)=0
        dp1(i)=0
        dp2(i)=0
        dp3(i)=0
        dp4(i)=0
    end do
    do i=1,N
        read(*,*)x(i),v(i)
    end do
    sum1(1)=v(1)
    do i=2,N
        sum1(i)=sum1(i-1)+v(i)
    end do
    sum2(N)=v(N)
    do i=N-1,1,-1
        sum2(i)=sum2(i+1)+v(i)
    end do
    dp1(1)=max(0,sum1(1)-2*x(1))
    dp3(1)=max(0,sum1(1)-x(1))
    do i=2,N
        dp1(i)=max(dp1(i-1),sum1(i)-2*x(i))
        dp3(i)=max(dp3(i-1),sum1(i)-x(i))
    end do
    dp2(N)=max(0,sum2(N)-2*(C-x(N)))
    dp4(N)=max(0,sum2(N)-(C-x(N)))
    do i=N-1,1,-1
        dp2(i)=max(dp2(i+1),sum2(i)-2*(C-x(i)))
        dp4(i)=max(dp4(i+1),sum2(i)-(C-x(i)))
    end do

    ans=max(ans,dp3(N),dp4(1))
    do i=1,N-1
        ans=max(ans,dp1(i)+dp4(i+1))
    end do
    do i=N,2,-1
        ans=max(ans,dp2(i)+dp3(i-1))
    end do
    print*,ans
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"

@_QFEans = internal unnamed_addr global i64 0
@_QFEdp1.0 = internal unnamed_addr global ptr null
@_QFEdp2.0 = internal unnamed_addr global ptr null
@_QFEdp3.0 = internal unnamed_addr global ptr null
@_QFEdp4.0 = internal unnamed_addr global ptr null
@_QFEsum1.0 = internal unnamed_addr global ptr null
@_QFEsum2.0 = internal unnamed_addr global ptr null
@_QFEv.0 = internal unnamed_addr global ptr null
@_QFEx.0 = internal unnamed_addr global ptr null
@_QQcl.ee0b73863e7beef4c0fa5776da442425 = linkonce constant [73 x i8] c"/home/ubuntu/Downloads/TheStack_IR/Collated/Fortran/Source_6068/source.f\00"
@_QQEnvironmentDefaults = local_unnamed_addr constant ptr null

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

define void @_QQmain() local_unnamed_addr {
  %1 = alloca i64, align 8
  %2 = alloca i64, align 8
  %3 = tail call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.ee0b73863e7beef4c0fa5776da442425, i32 8)
  %4 = call i1 @_FortranAioInputInteger(ptr %3, ptr nonnull %2, i32 8)
  %5 = call i1 @_FortranAioInputInteger(ptr %3, ptr nonnull %1, i32 8)
  %6 = call i32 @_FortranAioEndIoStatement(ptr %3)
  %7 = load i64, ptr %2, 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 @_QFEx.0, align 8, !tbaa !7
  %11 = call ptr @malloc(i64 %9)
  store ptr %11, ptr @_QFEv.0, align 8, !tbaa !7
  %12 = call ptr @malloc(i64 %9)
  store ptr %12, ptr @_QFEsum1.0, align 8, !tbaa !7
  %13 = call ptr @malloc(i64 %9)
  store ptr %13, ptr @_QFEsum2.0, align 8, !tbaa !7
  %14 = call ptr @malloc(i64 %9)
  store ptr %14, ptr @_QFEdp1.0, align 8, !tbaa !7
  %15 = call ptr @malloc(i64 %9)
  store ptr %15, ptr @_QFEdp2.0, align 8, !tbaa !7
  %16 = call ptr @malloc(i64 %9)
  store ptr %16, ptr @_QFEdp3.0, align 8, !tbaa !7
  %17 = call ptr @malloc(i64 %9)
  store ptr %17, ptr @_QFEdp4.0, align 8, !tbaa !7
  %18 = icmp sgt i64 %7, 0
  br i1 %18, label %.lr.ph1878.preheader, label %._crit_edge

.lr.ph1878.preheader:                             ; preds = %0
  %19 = shl nuw i64 %7, 3
  call void @llvm.memset.p0.i64(ptr align 8 %12, i8 0, i64 %19, i1 false), !tbaa !3
  call void @llvm.memset.p0.i64(ptr align 8 %13, i8 0, i64 %19, i1 false), !tbaa !3
  call void @llvm.memset.p0.i64(ptr align 8 %14, i8 0, i64 %19, i1 false), !tbaa !3
  call void @llvm.memset.p0.i64(ptr align 8 %15, i8 0, i64 %19, i1 false), !tbaa !3
  call void @llvm.memset.p0.i64(ptr align 8 %16, i8 0, i64 %19, i1 false), !tbaa !3
  call void @llvm.memset.p0.i64(ptr align 8 %17, i8 0, i64 %19, i1 false), !tbaa !3
  br label %.lr.ph1878

.lr.ph1878:                                       ; preds = %.lr.ph1878.preheader, %.lr.ph1878
  %20 = phi i64 [ %29, %.lr.ph1878 ], [ 1, %.lr.ph1878.preheader ]
  %21 = call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.ee0b73863e7beef4c0fa5776da442425, i32 26)
  %.unpack1780 = load ptr, ptr @_QFEx.0, align 8, !tbaa !7
  %22 = add i64 %20, -1
  %23 = getelementptr i64, ptr %.unpack1780, i64 %22
  %24 = call i1 @_FortranAioInputInteger(ptr %21, ptr %23, i32 8)
  %.unpack1792 = load ptr, ptr @_QFEv.0, align 8, !tbaa !7
  %25 = add i64 %20, -1
  %26 = getelementptr i64, ptr %.unpack1792, i64 %25
  %27 = call i1 @_FortranAioInputInteger(ptr %21, ptr %26, i32 8)
  %28 = call i32 @_FortranAioEndIoStatement(ptr %21)
  %29 = add nuw i64 %20, 1
  %exitcond.not = icmp eq i64 %20, %7
  br i1 %exitcond.not, label %._crit_edge.loopexit, label %.lr.ph1878

._crit_edge.loopexit:                             ; preds = %.lr.ph1878
  %.unpack.pre = load ptr, ptr @_QFEv.0, align 8, !tbaa !7
  %.unpack1321.pre = load ptr, ptr @_QFEsum1.0, align 8, !tbaa !7
  br label %._crit_edge

._crit_edge:                                      ; preds = %0, %._crit_edge.loopexit
  %.unpack1321 = phi ptr [ %.unpack1321.pre, %._crit_edge.loopexit ], [ %12, %0 ]
  %.unpack = phi ptr [ %.unpack.pre, %._crit_edge.loopexit ], [ %11, %0 ]
  %30 = load i64, ptr %.unpack, align 8, !tbaa !3
  store i64 %30, ptr %.unpack1321, align 8, !tbaa !3
  %31 = load i64, ptr %2, align 8, !tbaa !3
  %32 = add i64 %31, -1
  %33 = icmp sgt i64 %32, 0
  br i1 %33, label %.lr.ph1880, label %._crit_edge1881

.lr.ph1880:                                       ; preds = %._crit_edge
  %load_initial1952 = load i64, ptr %.unpack1321, align 8
  %xtraiter = and i64 %32, 1
  %34 = icmp eq i64 %31, 2
  br i1 %34, label %._crit_edge1881.loopexit.unr-lcssa, label %.lr.ph1880.new

.lr.ph1880.new:                                   ; preds = %.lr.ph1880
  %unroll_iter = and i64 %32, -2
  br label %35

35:                                               ; preds = %35, %.lr.ph1880.new
  %store_forwarded1953 = phi i64 [ %load_initial1952, %.lr.ph1880.new ], [ %45, %35 ]
  %36 = phi i64 [ 2, %.lr.ph1880.new ], [ %47, %35 ]
  %niter = phi i64 [ 0, %.lr.ph1880.new ], [ %niter.next.1, %35 ]
  %37 = add i64 %36, -1
  %38 = getelementptr i64, ptr %.unpack, i64 %37
  %39 = load i64, ptr %38, align 8, !tbaa !3
  %40 = add i64 %39, %store_forwarded1953
  %41 = add i64 %36, -1
  %42 = getelementptr i64, ptr %.unpack1321, i64 %41
  store i64 %40, ptr %42, align 8, !tbaa !3
  %43 = getelementptr i64, ptr %.unpack, i64 %36
  %44 = load i64, ptr %43, align 8, !tbaa !3
  %45 = add i64 %44, %40
  %46 = getelementptr i64, ptr %.unpack1321, i64 %36
  store i64 %45, ptr %46, align 8, !tbaa !3
  %47 = add nuw i64 %36, 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_edge1881.loopexit.unr-lcssa, label %35

._crit_edge1881.loopexit.unr-lcssa:               ; preds = %35, %.lr.ph1880
  %store_forwarded1953.unr = phi i64 [ %load_initial1952, %.lr.ph1880 ], [ %45, %35 ]
  %.unr = phi i64 [ 2, %.lr.ph1880 ], [ %47, %35 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge1881.loopexit, label %._crit_edge1881.loopexit.epilog-lcssa

._crit_edge1881.loopexit.epilog-lcssa:            ; preds = %._crit_edge1881.loopexit.unr-lcssa
  %48 = add i64 %.unr, -1
  %49 = getelementptr i64, ptr %.unpack, i64 %48
  %50 = load i64, ptr %49, align 8, !tbaa !3
  %51 = add i64 %50, %store_forwarded1953.unr
  %52 = add i64 %.unr, -1
  %53 = getelementptr i64, ptr %.unpack1321, i64 %52
  store i64 %51, ptr %53, align 8, !tbaa !3
  br label %._crit_edge1881.loopexit

._crit_edge1881.loopexit:                         ; preds = %._crit_edge1881.loopexit.unr-lcssa, %._crit_edge1881.loopexit.epilog-lcssa
  %.pre = load i64, ptr %2, align 8, !tbaa !3
  br label %._crit_edge1881

._crit_edge1881:                                  ; preds = %._crit_edge1881.loopexit, %._crit_edge
  %54 = phi i64 [ %.pre, %._crit_edge1881.loopexit ], [ %31, %._crit_edge ]
  %55 = add i64 %54, -1
  %56 = getelementptr i64, ptr %.unpack, i64 %55
  %57 = load i64, ptr %56, align 8, !tbaa !3
  %.unpack1345 = load ptr, ptr @_QFEsum2.0, align 8, !tbaa !7
  %58 = add i64 %54, -1
  %59 = getelementptr i64, ptr %.unpack1345, i64 %58
  store i64 %57, ptr %59, align 8, !tbaa !3
  %60 = load i64, ptr %2, align 8, !tbaa !3
  %61 = add i64 %60, -1
  %62 = icmp sgt i64 %61, 0
  br i1 %62, label %.lr.ph1884.preheader, label %._crit_edge1885

.lr.ph1884.preheader:                             ; preds = %._crit_edge1881
  %xtraiter1964 = and i64 %61, 1
  %lcmp.mod1965.not = icmp eq i64 %xtraiter1964, 0
  br i1 %lcmp.mod1965.not, label %.lr.ph1884.prol.loopexit, label %.lr.ph1884.prol

.lr.ph1884.prol:                                  ; preds = %.lr.ph1884.preheader
  %63 = add i64 %60, -1
  %64 = add i64 %60, -1
  %65 = getelementptr i64, ptr %.unpack1345, i64 %64
  %66 = load i64, ptr %65, align 8, !tbaa !3
  %67 = add i64 %60, -2
  %68 = getelementptr i64, ptr %.unpack, i64 %67
  %69 = load i64, ptr %68, align 8, !tbaa !3
  %70 = add i64 %69, %66
  %71 = add i64 %60, -2
  %72 = getelementptr i64, ptr %.unpack1345, i64 %71
  store i64 %70, ptr %72, align 8, !tbaa !3
  %73 = add i64 %60, -2
  br label %.lr.ph1884.prol.loopexit

.lr.ph1884.prol.loopexit:                         ; preds = %.lr.ph1884.prol, %.lr.ph1884.preheader
  %.unr1966 = phi i64 [ %61, %.lr.ph1884.preheader ], [ %73, %.lr.ph1884.prol ]
  %.in1882.unr = phi i64 [ %60, %.lr.ph1884.preheader ], [ %63, %.lr.ph1884.prol ]
  %74 = icmp eq i64 %60, 2
  br i1 %74, label %._crit_edge1885, label %.lr.ph1884

.lr.ph1884:                                       ; preds = %.lr.ph1884.prol.loopexit, %.lr.ph1884
  %75 = phi i64 [ %95, %.lr.ph1884 ], [ %.unr1966, %.lr.ph1884.prol.loopexit ]
  %.in1882 = phi i64 [ %85, %.lr.ph1884 ], [ %.in1882.unr, %.lr.ph1884.prol.loopexit ]
  %76 = add i64 %.in1882, -1
  %77 = getelementptr i64, ptr %.unpack1345, i64 %76
  %78 = load i64, ptr %77, align 8, !tbaa !3
  %79 = add i64 %.in1882, -2
  %80 = getelementptr i64, ptr %.unpack, i64 %79
  %81 = load i64, ptr %80, align 8, !tbaa !3
  %82 = add i64 %81, %78
  %83 = add i64 %.in1882, -2
  %84 = getelementptr i64, ptr %.unpack1345, i64 %83
  store i64 %82, ptr %84, align 8, !tbaa !3
  %85 = add i64 %.in1882, -2
  %86 = add i64 %.in1882, -2
  %87 = getelementptr i64, ptr %.unpack1345, i64 %86
  %88 = load i64, ptr %87, align 8, !tbaa !3
  %89 = add i64 %.in1882, -3
  %90 = getelementptr i64, ptr %.unpack, i64 %89
  %91 = load i64, ptr %90, align 8, !tbaa !3
  %92 = add i64 %91, %88
  %93 = add i64 %.in1882, -3
  %94 = getelementptr i64, ptr %.unpack1345, i64 %93
  store i64 %92, ptr %94, align 8, !tbaa !3
  %95 = add nsw i64 %75, -2
  %.not1912.1 = icmp eq i64 %95, 0
  br i1 %.not1912.1, label %._crit_edge1885, label %.lr.ph1884

._crit_edge1885:                                  ; preds = %.lr.ph1884.prol.loopexit, %.lr.ph1884, %._crit_edge1881
  %96 = load i64, ptr %.unpack1321, align 8, !tbaa !3
  %.unpack1369 = load ptr, ptr @_QFEx.0, align 8, !tbaa !7
  %97 = load i64, ptr %.unpack1369, align 8, !tbaa !3
  %98 = shl i64 %97, 1
  %99 = sub i64 %96, %98
  %100 = call i64 @llvm.smax.i64(i64 %99, i64 0)
  %.unpack1381 = load ptr, ptr @_QFEdp1.0, align 8, !tbaa !7
  store i64 %100, ptr %.unpack1381, align 8, !tbaa !3
  %101 = load i64, ptr %.unpack1321, align 8, !tbaa !3
  %102 = load i64, ptr %.unpack1369, align 8, !tbaa !3
  %103 = sub i64 %101, %102
  %104 = call i64 @llvm.smax.i64(i64 %103, i64 0)
  %.unpack1417 = load ptr, ptr @_QFEdp3.0, align 8, !tbaa !7
  store i64 %104, ptr %.unpack1417, align 8, !tbaa !3
  %105 = load i64, ptr %2, align 8, !tbaa !3
  %106 = add i64 %105, -1
  %107 = icmp sgt i64 %106, 0
  br i1 %107, label %.lr.ph1887.lver.check, label %._crit_edge1888

.lr.ph1887.lver.check:                            ; preds = %._crit_edge1885
  %108 = shl i64 %105, 3
  %uglygep = getelementptr i8, ptr %.unpack1381, i64 %108
  %uglygep1947 = getelementptr i8, ptr %.unpack1417, i64 %108
  %bound0 = icmp ult ptr %.unpack1381, %uglygep1947
  %bound1 = icmp ult ptr %.unpack1417, %uglygep
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %.lr.ph1887.lver.orig, label %.lr.ph1887.ph

.lr.ph1887.lver.orig:                             ; preds = %.lr.ph1887.lver.check, %.lr.ph1887.lver.orig
  %109 = phi i64 [ %133, %.lr.ph1887.lver.orig ], [ 2, %.lr.ph1887.lver.check ]
  %110 = add i64 %109, -2
  %111 = getelementptr i64, ptr %.unpack1381, i64 %110
  %112 = load i64, ptr %111, align 8, !tbaa !3
  %113 = add i64 %109, -1
  %114 = getelementptr i64, ptr %.unpack1321, i64 %113
  %115 = load i64, ptr %114, align 8, !tbaa !3
  %116 = add i64 %109, -1
  %117 = getelementptr i64, ptr %.unpack1369, i64 %116
  %118 = load i64, ptr %117, align 8, !tbaa !3
  %119 = shl i64 %118, 1
  %120 = sub i64 %115, %119
  %121 = call i64 @llvm.smax.i64(i64 %112, i64 %120)
  %122 = add i64 %109, -1
  %123 = getelementptr i64, ptr %.unpack1381, i64 %122
  store i64 %121, ptr %123, align 8, !tbaa !3
  %124 = add i64 %109, -2
  %125 = getelementptr i64, ptr %.unpack1417, i64 %124
  %126 = load i64, ptr %125, align 8, !tbaa !3
  %127 = load i64, ptr %114, align 8, !tbaa !3
  %128 = load i64, ptr %117, align 8, !tbaa !3
  %129 = sub i64 %127, %128
  %130 = call i64 @llvm.smax.i64(i64 %126, i64 %129)
  %131 = add i64 %109, -1
  %132 = getelementptr i64, ptr %.unpack1417, i64 %131
  store i64 %130, ptr %132, align 8, !tbaa !3
  %133 = add nuw i64 %109, 1
  %exitcond1900.not.lver.orig = icmp eq i64 %109, %105
  br i1 %exitcond1900.not.lver.orig, label %._crit_edge1888.loopexit, label %.lr.ph1887.lver.orig

.lr.ph1887.ph:                                    ; preds = %.lr.ph1887.lver.check
  %load_initial = load i64, ptr %.unpack1381, align 8
  %load_initial1949 = load i64, ptr %.unpack1417, align 8
  br label %.lr.ph1887

.lr.ph1887:                                       ; preds = %.lr.ph1887.ph, %.lr.ph1887
  %store_forwarded1950 = phi i64 [ %load_initial1949, %.lr.ph1887.ph ], [ %149, %.lr.ph1887 ]
  %store_forwarded = phi i64 [ %load_initial, %.lr.ph1887.ph ], [ %143, %.lr.ph1887 ]
  %134 = phi i64 [ 2, %.lr.ph1887.ph ], [ %152, %.lr.ph1887 ]
  %135 = add i64 %134, -1
  %136 = getelementptr i64, ptr %.unpack1321, i64 %135
  %137 = load i64, ptr %136, align 8, !tbaa !3
  %138 = add i64 %134, -1
  %139 = getelementptr i64, ptr %.unpack1369, i64 %138
  %140 = load i64, ptr %139, align 8, !tbaa !3
  %141 = shl i64 %140, 1
  %142 = sub i64 %137, %141
  %143 = call i64 @llvm.smax.i64(i64 %store_forwarded, i64 %142)
  %144 = add i64 %134, -1
  %145 = getelementptr i64, ptr %.unpack1381, i64 %144
  store i64 %143, ptr %145, align 8, !tbaa !3
  %146 = load i64, ptr %136, align 8, !tbaa !3
  %147 = load i64, ptr %139, align 8, !tbaa !3
  %148 = sub i64 %146, %147
  %149 = call i64 @llvm.smax.i64(i64 %store_forwarded1950, i64 %148)
  %150 = add i64 %134, -1
  %151 = getelementptr i64, ptr %.unpack1417, i64 %150
  store i64 %149, ptr %151, align 8, !tbaa !3
  %152 = add nuw i64 %134, 1
  %exitcond1900.not = icmp eq i64 %134, %105
  br i1 %exitcond1900.not, label %._crit_edge1888.loopexit, label %.lr.ph1887

._crit_edge1888.loopexit:                         ; preds = %.lr.ph1887, %.lr.ph1887.lver.orig
  %.pre1906 = load i64, ptr %2, align 8, !tbaa !3
  br label %._crit_edge1888

._crit_edge1888:                                  ; preds = %._crit_edge1888.loopexit, %._crit_edge1885
  %153 = phi i64 [ %.pre1906, %._crit_edge1888.loopexit ], [ %105, %._crit_edge1885 ]
  %154 = add i64 %153, -1
  %155 = getelementptr i64, ptr %.unpack1345, i64 %154
  %156 = load i64, ptr %155, align 8, !tbaa !3
  %157 = load i64, ptr %1, align 8, !tbaa !3
  %158 = add i64 %153, -1
  %159 = getelementptr i64, ptr %.unpack1369, i64 %158
  %160 = load i64, ptr %159, align 8, !tbaa !3
  %.neg1453 = sub i64 %160, %157
  %.neg1454 = shl i64 %.neg1453, 1
  %161 = add i64 %.neg1454, %156
  %162 = call i64 @llvm.smax.i64(i64 %161, i64 0)
  %.unpack1455 = load ptr, ptr @_QFEdp2.0, align 8, !tbaa !7
  %163 = add i64 %153, -1
  %164 = getelementptr i64, ptr %.unpack1455, i64 %163
  store i64 %162, ptr %164, align 8, !tbaa !3
  %165 = load i64, ptr %2, align 8, !tbaa !3
  %166 = add i64 %165, -1
  %167 = getelementptr i64, ptr %.unpack1345, i64 %166
  %168 = load i64, ptr %167, align 8, !tbaa !3
  %169 = load i64, ptr %1, align 8, !tbaa !3
  %170 = add i64 %165, -1
  %171 = getelementptr i64, ptr %.unpack1369, i64 %170
  %172 = load i64, ptr %171, align 8, !tbaa !3
  %.neg1491 = sub i64 %168, %169
  %173 = add i64 %.neg1491, %172
  %174 = call i64 @llvm.smax.i64(i64 %173, i64 0)
  %.unpack1492 = load ptr, ptr @_QFEdp4.0, align 8, !tbaa !7
  %175 = add i64 %165, -1
  %176 = getelementptr i64, ptr %.unpack1492, i64 %175
  store i64 %174, ptr %176, align 8, !tbaa !3
  %177 = load i64, ptr %2, align 8, !tbaa !3
  %178 = add i64 %177, -1
  %179 = icmp sgt i64 %178, 0
  br i1 %179, label %.lr.ph1891, label %._crit_edge1892

.lr.ph1891:                                       ; preds = %._crit_edge1888, %.lr.ph1891
  %180 = phi i64 [ %206, %.lr.ph1891 ], [ %178, %._crit_edge1888 ]
  %.in15051889 = phi i64 [ %181, %.lr.ph1891 ], [ %177, %._crit_edge1888 ]
  %181 = add i64 %.in15051889, -1
  %182 = add i64 %.in15051889, -1
  %183 = getelementptr i64, ptr %.unpack1455, i64 %182
  %184 = load i64, ptr %183, align 8, !tbaa !3
  %185 = add i64 %.in15051889, -2
  %186 = getelementptr i64, ptr %.unpack1345, i64 %185
  %187 = load i64, ptr %186, align 8, !tbaa !3
  %188 = load i64, ptr %1, align 8, !tbaa !3
  %189 = add i64 %.in15051889, -2
  %190 = getelementptr i64, ptr %.unpack1369, i64 %189
  %191 = load i64, ptr %190, align 8, !tbaa !3
  %.neg1617 = sub i64 %191, %188
  %.neg1618 = shl i64 %.neg1617, 1
  %192 = add i64 %.neg1618, %187
  %193 = call i64 @llvm.smax.i64(i64 %184, i64 %192)
  %194 = add i64 %.in15051889, -2
  %195 = getelementptr i64, ptr %.unpack1455, i64 %194
  store i64 %193, ptr %195, align 8, !tbaa !3
  %196 = add i64 %.in15051889, -1
  %197 = getelementptr i64, ptr %.unpack1492, i64 %196
  %198 = load i64, ptr %197, align 8, !tbaa !3
  %199 = load i64, ptr %186, align 8, !tbaa !3
  %200 = load i64, ptr %1, align 8, !tbaa !3
  %201 = load i64, ptr %190, align 8, !tbaa !3
  %.neg1655 = sub i64 %199, %200
  %202 = add i64 %.neg1655, %201
  %203 = call i64 @llvm.smax.i64(i64 %198, i64 %202)
  %204 = add i64 %.in15051889, -2
  %205 = getelementptr i64, ptr %.unpack1492, i64 %204
  store i64 %203, ptr %205, align 8, !tbaa !3
  %206 = add nsw i64 %180, -1
  %.not1911 = icmp eq i64 %206, 0
  br i1 %.not1911, label %._crit_edge1892.loopexit, label %.lr.ph1891

._crit_edge1892.loopexit:                         ; preds = %.lr.ph1891
  %.pre1907 = load i64, ptr %2, align 8, !tbaa !3
  %.pre1908 = add i64 %.pre1907, -1
  br label %._crit_edge1892

._crit_edge1892:                                  ; preds = %._crit_edge1892.loopexit, %._crit_edge1888
  %.pre-phi = phi i64 [ %.pre1908, %._crit_edge1892.loopexit ], [ %178, %._crit_edge1888 ]
  %207 = phi i64 [ %.pre1907, %._crit_edge1892.loopexit ], [ %177, %._crit_edge1888 ]
  %208 = load i64, ptr @_QFEans, align 8, !tbaa !3
  %209 = add i64 %207, -1
  %210 = getelementptr i64, ptr %.unpack1417, i64 %209
  %211 = load i64, ptr %210, align 8, !tbaa !3
  %212 = load i64, ptr %.unpack1492, align 8, !tbaa !3
  %213 = call i64 @llvm.smax.i64(i64 %208, i64 %211)
  %214 = call i64 @llvm.smax.i64(i64 %213, i64 %212)
  %215 = icmp sgt i64 %.pre-phi, 0
  br i1 %215, label %.lr.ph1895.preheader, label %.sink.split

.lr.ph1895.preheader:                             ; preds = %._crit_edge1892
  %216 = add i64 %207, -1
  %min.iters.check = icmp ult i64 %216, 4
  br i1 %min.iters.check, label %.lr.ph1895.preheader1958, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph1895.preheader
  %n.vec = and i64 %216, -4
  %ind.end = or i64 %n.vec, 1
  %minmax.ident.splatinsert = insertelement <2 x i64> poison, i64 %214, i64 0
  %minmax.ident.splat = shufflevector <2 x i64> %minmax.ident.splatinsert, <2 x i64> poison, <2 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <2 x i64> [ %minmax.ident.splat, %vector.ph ], [ %224, %vector.body ]
  %vec.phi1914 = phi <2 x i64> [ %minmax.ident.splat, %vector.ph ], [ %225, %vector.body ]
  %217 = getelementptr i64, ptr %.unpack1381, i64 %index
  %wide.load = load <2 x i64>, ptr %217, align 8, !tbaa !3
  %218 = getelementptr i64, ptr %217, i64 2
  %wide.load1915 = load <2 x i64>, ptr %218, align 8, !tbaa !3
  %219 = or i64 %index, 1
  %220 = getelementptr i64, ptr %.unpack1492, i64 %219
  %wide.load1916 = load <2 x i64>, ptr %220, align 8, !tbaa !3
  %221 = getelementptr i64, ptr %220, i64 2
  %wide.load1917 = load <2 x i64>, ptr %221, align 8, !tbaa !3
  %222 = add <2 x i64> %wide.load1916, %wide.load
  %223 = add <2 x i64> %wide.load1917, %wide.load1915
  %224 = call <2 x i64> @llvm.smax.v2i64(<2 x i64> %vec.phi, <2 x i64> %222)
  %225 = call <2 x i64> @llvm.smax.v2i64(<2 x i64> %vec.phi1914, <2 x i64> %223)
  %index.next = add nuw i64 %index, 4
  %226 = icmp eq i64 %index.next, %n.vec
  br i1 %226, label %middle.block, label %vector.body, !llvm.loop !9

middle.block:                                     ; preds = %vector.body
  %rdx.minmax.select = call <2 x i64> @llvm.smax.v2i64(<2 x i64> %224, <2 x i64> %225)
  %227 = call i64 @llvm.vector.reduce.smax.v2i64(<2 x i64> %rdx.minmax.select)
  %cmp.n = icmp eq i64 %216, %n.vec
  br i1 %cmp.n, label %.preheader, label %.lr.ph1895.preheader1958

.lr.ph1895.preheader1958:                         ; preds = %.lr.ph1895.preheader, %middle.block
  %.ph1959 = phi i64 [ 1, %.lr.ph1895.preheader ], [ %ind.end, %middle.block ]
  %storemerge1893.ph = phi i64 [ %214, %.lr.ph1895.preheader ], [ %227, %middle.block ]
  br label %.lr.ph1895

.preheader:                                       ; preds = %.lr.ph1895, %middle.block
  %.lcssa1913 = phi i64 [ %227, %middle.block ], [ %254, %.lr.ph1895 ]
  store i64 %.lcssa1913, ptr @_QFEans, align 8, !tbaa !3
  br i1 %215, label %.lr.ph1896, label %268

.lr.ph1896:                                       ; preds = %.preheader
  %min.iters.check1920 = icmp ult i64 %.pre-phi, 4
  br i1 %min.iters.check1920, label %scalar.ph1919.preheader, label %vector.ph1921

vector.ph1921:                                    ; preds = %.lr.ph1896
  %n.vec1923 = and i64 %.pre-phi, -4
  %ind.end1924 = and i64 %.pre-phi, 3
  %ind.end1926 = sub i64 %207, %n.vec1923
  %minmax.ident.splatinsert1933 = insertelement <2 x i64> poison, i64 %.lcssa1913, i64 0
  %minmax.ident.splat1934 = shufflevector <2 x i64> %minmax.ident.splatinsert1933, <2 x i64> poison, <2 x i32> zeroinitializer
  br label %vector.body1929

vector.body1929:                                  ; preds = %vector.body1929, %vector.ph1921
  %index1930 = phi i64 [ 0, %vector.ph1921 ], [ %index.next1943, %vector.body1929 ]
  %vec.phi1931 = phi <2 x i64> [ %minmax.ident.splat1934, %vector.ph1921 ], [ %242, %vector.body1929 ]
  %vec.phi1932 = phi <2 x i64> [ %minmax.ident.splat1934, %vector.ph1921 ], [ %243, %vector.body1929 ]
  %offset.idx1935 = sub i64 %207, %index1930
  %228 = add i64 %offset.idx1935, -1
  %229 = getelementptr i64, ptr %.unpack1455, i64 %228
  %230 = getelementptr i64, ptr %229, i64 -1
  %wide.load1936 = load <2 x i64>, ptr %230, align 8, !tbaa !3
  %231 = getelementptr i64, ptr %229, i64 -2
  %232 = getelementptr i64, ptr %231, i64 -1
  %wide.load1937 = load <2 x i64>, ptr %232, align 8, !tbaa !3
  %233 = add i64 %offset.idx1935, -2
  %234 = getelementptr i64, ptr %.unpack1417, i64 %233
  %235 = getelementptr i64, ptr %234, i64 -1
  %wide.load1939 = load <2 x i64>, ptr %235, align 8, !tbaa !3
  %236 = getelementptr i64, ptr %234, i64 -2
  %237 = getelementptr i64, ptr %236, i64 -1
  %wide.load1941 = load <2 x i64>, ptr %237, align 8, !tbaa !3
  %238 = add <2 x i64> %wide.load1939, %wide.load1936
  %239 = shufflevector <2 x i64> %238, <2 x i64> poison, <2 x i32> <i32 1, i32 0>
  %240 = add <2 x i64> %wide.load1941, %wide.load1937
  %241 = shufflevector <2 x i64> %240, <2 x i64> poison, <2 x i32> <i32 1, i32 0>
  %242 = call <2 x i64> @llvm.smax.v2i64(<2 x i64> %vec.phi1931, <2 x i64> %239)
  %243 = call <2 x i64> @llvm.smax.v2i64(<2 x i64> %vec.phi1932, <2 x i64> %241)
  %index.next1943 = add nuw i64 %index1930, 4
  %244 = icmp eq i64 %index.next1943, %n.vec1923
  br i1 %244, label %middle.block1918, label %vector.body1929, !llvm.loop !12

middle.block1918:                                 ; preds = %vector.body1929
  %rdx.minmax.select1945 = call <2 x i64> @llvm.smax.v2i64(<2 x i64> %242, <2 x i64> %243)
  %245 = call i64 @llvm.vector.reduce.smax.v2i64(<2 x i64> %rdx.minmax.select1945)
  %cmp.n1928 = icmp eq i64 %.pre-phi, %n.vec1923
  br i1 %cmp.n1928, label %.sink.split, label %scalar.ph1919.preheader

scalar.ph1919.preheader:                          ; preds = %.lr.ph1896, %middle.block1918
  %.ph = phi i64 [ %.pre-phi, %.lr.ph1896 ], [ %ind.end1924, %middle.block1918 ]
  %.ph1954 = phi i64 [ %207, %.lr.ph1896 ], [ %ind.end1926, %middle.block1918 ]
  %.ph1955 = phi i64 [ %.lcssa1913, %.lr.ph1896 ], [ %245, %middle.block1918 ]
  br label %scalar.ph1919

.lr.ph1895:                                       ; preds = %.lr.ph1895.preheader1958, %.lr.ph1895
  %246 = phi i64 [ %250, %.lr.ph1895 ], [ %.ph1959, %.lr.ph1895.preheader1958 ]
  %storemerge1893 = phi i64 [ %254, %.lr.ph1895 ], [ %storemerge1893.ph, %.lr.ph1895.preheader1958 ]
  %247 = add i64 %246, -1
  %248 = getelementptr i64, ptr %.unpack1381, i64 %247
  %249 = load i64, ptr %248, align 8, !tbaa !3
  %250 = add nuw i64 %246, 1
  %251 = getelementptr i64, ptr %.unpack1492, i64 %246
  %252 = load i64, ptr %251, align 8, !tbaa !3
  %253 = add i64 %252, %249
  %254 = call i64 @llvm.smax.i64(i64 %storemerge1893, i64 %253)
  %exitcond1901.not = icmp eq i64 %250, %207
  br i1 %exitcond1901.not, label %.preheader, label %.lr.ph1895, !llvm.loop !13

scalar.ph1919:                                    ; preds = %scalar.ph1919.preheader, %scalar.ph1919
  %255 = phi i64 [ %267, %scalar.ph1919 ], [ %.ph, %scalar.ph1919.preheader ]
  %256 = phi i64 [ %266, %scalar.ph1919 ], [ %.ph1954, %scalar.ph1919.preheader ]
  %257 = phi i64 [ %265, %scalar.ph1919 ], [ %.ph1955, %scalar.ph1919.preheader ]
  %258 = add i64 %256, -1
  %259 = getelementptr i64, ptr %.unpack1455, i64 %258
  %260 = load i64, ptr %259, align 8, !tbaa !3
  %261 = add i64 %256, -2
  %262 = getelementptr i64, ptr %.unpack1417, i64 %261
  %263 = load i64, ptr %262, align 8, !tbaa !3
  %264 = add i64 %263, %260
  %265 = call i64 @llvm.smax.i64(i64 %257, i64 %264)
  %266 = add i64 %256, -1
  %267 = add nsw i64 %255, -1
  %.not = icmp eq i64 %267, 0
  br i1 %.not, label %.sink.split, label %scalar.ph1919, !llvm.loop !14

.sink.split:                                      ; preds = %scalar.ph1919, %middle.block1918, %._crit_edge1892
  %.sink = phi i64 [ %214, %._crit_edge1892 ], [ %245, %middle.block1918 ], [ %265, %scalar.ph1919 ]
  store i64 %.sink, ptr @_QFEans, align 8, !tbaa !3
  br label %268

268:                                              ; preds = %.sink.split, %.preheader
  %269 = call ptr @_FortranAioBeginExternalListOutput(i32 -1, ptr nonnull @_QQcl.ee0b73863e7beef4c0fa5776da442425, i32 56)
  %270 = load i64, ptr @_QFEans, align 8, !tbaa !3
  %271 = call i1 @_FortranAioOutputInteger64(ptr %269, i64 %270)
  %272 = call i32 @_FortranAioEndIoStatement(ptr %269)
  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 ptr @_FortranAioBeginExternalListOutput(i32, ptr, i32) local_unnamed_addr

declare i1 @_FortranAioOutputInteger64(ptr, i64) local_unnamed_addr

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x i64> @llvm.smax.v2i64(<2 x i64>, <2 x i64>) #1

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(none)
declare i64 @llvm.vector.reduce.smax.v2i64(<2 x i64>) #3

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

!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, !10, !11}
!13 = distinct !{!13, !11, !10}
!14 = distinct !{!14, !11, !10}
