program sample
    implicit none
    character(100)::s
    integer(8) :: i,j,m,n,a,b
    integer(8),allocatable :: x(:),y(:)
  
    read(*,*) s
    allocate(x(26))
    n=len_trim(s)
    x(:)=0
    do i=1,n
        a=ichar(s(i:i))-96
        x(a)=x(a)+1
    end do
    if(maxval(x)>1)then
        write(*,*)'no'
    else
        write(*,*)'yes'
    end if
  
    stop
end program sample
  


; 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"

@_QFEs = internal global [100 x i8] undef
@_QFEx = internal unnamed_addr global { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] } { ptr null, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64), i32 20180515, i8 1, i8 10, i8 2, i8 0, [1 x [3 x i64]] [[3 x i64] [i64 1, i64 0, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)]] }
@_QQcl.9930c4bd1895b7c032605d93bee7c019 = linkonce constant [73 x i8] c"/home/ubuntu/Downloads/TheStack_IR/Collated/Fortran/Source_7242/source.f\00"
@_QQcl.6E6F = linkonce constant [2 x i8] c"no"
@_QQcl.796573 = linkonce constant [3 x i8] c"yes"
@_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: noreturn
define void @_QQmain() local_unnamed_addr #1 {
  %1 = tail call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.9930c4bd1895b7c032605d93bee7c019, i32 7)
  %2 = tail call i1 @_FortranAioInputAscii(ptr %1, ptr nonnull @_QFEs, i64 100)
  %3 = tail call i32 @_FortranAioEndIoStatement(ptr %1)
  %4 = tail call dereferenceable_or_null(208) ptr @malloc(i64 208)
  store ptr %4, ptr @_QFEx, align 16, !tbaa !3
  store i64 8, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QFEx, i64 0, i32 1), align 8, !tbaa !3
  store i32 20180515, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QFEx, i64 0, i32 2), align 16, !tbaa !3
  store i8 1, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QFEx, i64 0, i32 3), align 4, !tbaa !3
  store i8 10, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QFEx, i64 0, i32 4), align 1, !tbaa !3
  store i8 2, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QFEx, i64 0, i32 5), align 2, !tbaa !3
  store i8 0, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QFEx, i64 0, i32 6), align 1, !tbaa !3
  store i64 1, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QFEx, i64 0, i32 7), align 8, !tbaa !3
  store i64 26, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QFEx, i64 0, i32 7, i64 0, i64 1), align 16, !tbaa !3
  store i64 8, ptr getelementptr inbounds ({ ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, ptr @_QFEx, i64 0, i32 7, i64 0, i64 2), align 8, !tbaa !3
  br label %5

5:                                                ; preds = %0, %5
  %6 = phi i64 [ 99, %0 ], [ %10, %5 ]
  %7 = getelementptr [100 x [1 x i8]], ptr @_QFEs, i64 0, i64 %6
  %8 = load i8, ptr %7, align 1, !tbaa !7
  %9 = icmp eq i8 %8, 32
  %10 = add nsw i64 %6, -1
  %11 = icmp ne i64 %6, 0
  %12 = and i1 %9, %11
  br i1 %12, label %5, label %.preheader

.preheader:                                       ; preds = %5
  %13 = shl i64 %6, 32
  %sext = add i64 %13, 4294967296
  %14 = ashr exact i64 %sext, 32
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(208) %4, i8 0, i64 208, i1 false), !tbaa !7
  %15 = select i1 %9, i64 0, i64 %14
  %16 = icmp sgt i64 %15, 0
  br i1 %16, label %.lr.ph.preheader, label %.lr.ph.i.preheader

.lr.ph.preheader:                                 ; preds = %.preheader
  %xtraiter = and i64 %15, 1
  %17 = icmp eq i64 %15, 1
  br i1 %17, label %.lr.ph.i.preheader.loopexit.unr-lcssa, label %.lr.ph.preheader.new

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

.lr.ph.i.preheader.loopexit.unr-lcssa.loopexit:   ; preds = %.lr.ph
  %18 = add nuw nsw i64 %81, 1
  br label %.lr.ph.i.preheader.loopexit.unr-lcssa

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

.lr.ph.epil:                                      ; preds = %.lr.ph.i.preheader.loopexit.unr-lcssa
  %19 = getelementptr [100 x [1 x i8]], ptr @_QFEs, i64 0, i64 %.unr
  %.unpack123.epil = load i8, ptr %19, align 1, !tbaa !7
  %20 = zext i8 %.unpack123.epil to i64
  %21 = add nsw i64 %20, -97
  %22 = getelementptr i64, ptr %4, i64 %21
  %23 = load i64, ptr %22, align 8, !tbaa !7
  %24 = add i64 %23, 1
  store i64 %24, ptr %22, align 8, !tbaa !7
  br label %.lr.ph.i.preheader.loopexit

.lr.ph.i.preheader.loopexit:                      ; preds = %.lr.ph.i.preheader.loopexit.unr-lcssa, %.lr.ph.epil
  %.pre = load i64, ptr %4, align 8, !tbaa !7
  %.phi.trans.insert = getelementptr i8, ptr %4, i64 8
  %.pre140 = load i64, ptr %.phi.trans.insert, align 8, !tbaa !7
  %.phi.trans.insert141 = getelementptr i8, ptr %4, i64 16
  %.pre142 = load i64, ptr %.phi.trans.insert141, align 8, !tbaa !7
  %.phi.trans.insert143 = getelementptr i8, ptr %4, i64 24
  %.pre144 = load i64, ptr %.phi.trans.insert143, align 8, !tbaa !7
  %.phi.trans.insert145 = getelementptr i8, ptr %4, i64 32
  %.pre146 = load i64, ptr %.phi.trans.insert145, align 8, !tbaa !7
  %.phi.trans.insert147 = getelementptr i8, ptr %4, i64 40
  %.pre148 = load i64, ptr %.phi.trans.insert147, align 8, !tbaa !7
  %.phi.trans.insert149 = getelementptr i8, ptr %4, i64 48
  %.pre150 = load i64, ptr %.phi.trans.insert149, align 8, !tbaa !7
  %.phi.trans.insert151 = getelementptr i8, ptr %4, i64 56
  %.pre152 = load i64, ptr %.phi.trans.insert151, align 8, !tbaa !7
  %.phi.trans.insert153 = getelementptr i8, ptr %4, i64 64
  %.pre154 = load i64, ptr %.phi.trans.insert153, align 8, !tbaa !7
  %.phi.trans.insert155 = getelementptr i8, ptr %4, i64 72
  %.pre156 = load i64, ptr %.phi.trans.insert155, align 8, !tbaa !7
  %.phi.trans.insert157 = getelementptr i8, ptr %4, i64 80
  %.pre158 = load i64, ptr %.phi.trans.insert157, align 8, !tbaa !7
  %.phi.trans.insert159 = getelementptr i8, ptr %4, i64 88
  %.pre160 = load i64, ptr %.phi.trans.insert159, align 8, !tbaa !7
  %.phi.trans.insert161 = getelementptr i8, ptr %4, i64 96
  %.pre162 = load i64, ptr %.phi.trans.insert161, align 8, !tbaa !7
  %.phi.trans.insert163 = getelementptr i8, ptr %4, i64 104
  %.pre164 = load i64, ptr %.phi.trans.insert163, align 8, !tbaa !7
  %.phi.trans.insert165 = getelementptr i8, ptr %4, i64 112
  %.pre166 = load i64, ptr %.phi.trans.insert165, align 8, !tbaa !7
  %.phi.trans.insert167 = getelementptr i8, ptr %4, i64 120
  %.pre168 = load i64, ptr %.phi.trans.insert167, align 8, !tbaa !7
  %.phi.trans.insert169 = getelementptr i8, ptr %4, i64 128
  %.pre170 = load i64, ptr %.phi.trans.insert169, align 8, !tbaa !7
  %.phi.trans.insert171 = getelementptr i8, ptr %4, i64 136
  %.pre172 = load i64, ptr %.phi.trans.insert171, align 8, !tbaa !7
  %.phi.trans.insert173 = getelementptr i8, ptr %4, i64 144
  %.pre174 = load i64, ptr %.phi.trans.insert173, align 8, !tbaa !7
  %.phi.trans.insert175 = getelementptr i8, ptr %4, i64 152
  %.pre176 = load i64, ptr %.phi.trans.insert175, align 8, !tbaa !7
  %.phi.trans.insert177 = getelementptr i8, ptr %4, i64 160
  %.pre178 = load i64, ptr %.phi.trans.insert177, align 8, !tbaa !7
  %.phi.trans.insert179 = getelementptr i8, ptr %4, i64 168
  %.pre180 = load i64, ptr %.phi.trans.insert179, align 8, !tbaa !7
  %.phi.trans.insert181 = getelementptr i8, ptr %4, i64 176
  %.pre182 = load i64, ptr %.phi.trans.insert181, align 8, !tbaa !7
  %.phi.trans.insert183 = getelementptr i8, ptr %4, i64 184
  %.pre184 = load i64, ptr %.phi.trans.insert183, align 8, !tbaa !7
  %.phi.trans.insert185 = getelementptr i8, ptr %4, i64 192
  %.pre186 = load i64, ptr %.phi.trans.insert185, align 8, !tbaa !7
  %.phi.trans.insert187 = getelementptr i8, ptr %4, i64 200
  %.pre188 = load i64, ptr %.phi.trans.insert187, align 8, !tbaa !7
  br label %.lr.ph.i.preheader

.lr.ph.i.preheader:                               ; preds = %.lr.ph.i.preheader.loopexit, %.preheader
  %25 = phi i64 [ %.pre188, %.lr.ph.i.preheader.loopexit ], [ 0, %.preheader ]
  %26 = phi i64 [ %.pre186, %.lr.ph.i.preheader.loopexit ], [ 0, %.preheader ]
  %27 = phi i64 [ %.pre184, %.lr.ph.i.preheader.loopexit ], [ 0, %.preheader ]
  %28 = phi i64 [ %.pre182, %.lr.ph.i.preheader.loopexit ], [ 0, %.preheader ]
  %29 = phi i64 [ %.pre180, %.lr.ph.i.preheader.loopexit ], [ 0, %.preheader ]
  %30 = phi i64 [ %.pre178, %.lr.ph.i.preheader.loopexit ], [ 0, %.preheader ]
  %31 = phi i64 [ %.pre176, %.lr.ph.i.preheader.loopexit ], [ 0, %.preheader ]
  %32 = phi i64 [ %.pre174, %.lr.ph.i.preheader.loopexit ], [ 0, %.preheader ]
  %33 = phi i64 [ %.pre172, %.lr.ph.i.preheader.loopexit ], [ 0, %.preheader ]
  %34 = phi i64 [ %.pre170, %.lr.ph.i.preheader.loopexit ], [ 0, %.preheader ]
  %35 = phi i64 [ %.pre168, %.lr.ph.i.preheader.loopexit ], [ 0, %.preheader ]
  %36 = phi i64 [ %.pre166, %.lr.ph.i.preheader.loopexit ], [ 0, %.preheader ]
  %37 = phi i64 [ %.pre164, %.lr.ph.i.preheader.loopexit ], [ 0, %.preheader ]
  %38 = phi i64 [ %.pre162, %.lr.ph.i.preheader.loopexit ], [ 0, %.preheader ]
  %39 = phi i64 [ %.pre160, %.lr.ph.i.preheader.loopexit ], [ 0, %.preheader ]
  %40 = phi i64 [ %.pre158, %.lr.ph.i.preheader.loopexit ], [ 0, %.preheader ]
  %41 = phi i64 [ %.pre156, %.lr.ph.i.preheader.loopexit ], [ 0, %.preheader ]
  %42 = phi i64 [ %.pre154, %.lr.ph.i.preheader.loopexit ], [ 0, %.preheader ]
  %43 = phi i64 [ %.pre152, %.lr.ph.i.preheader.loopexit ], [ 0, %.preheader ]
  %44 = phi i64 [ %.pre150, %.lr.ph.i.preheader.loopexit ], [ 0, %.preheader ]
  %45 = phi i64 [ %.pre148, %.lr.ph.i.preheader.loopexit ], [ 0, %.preheader ]
  %46 = phi i64 [ %.pre146, %.lr.ph.i.preheader.loopexit ], [ 0, %.preheader ]
  %47 = phi i64 [ %.pre144, %.lr.ph.i.preheader.loopexit ], [ 0, %.preheader ]
  %48 = phi i64 [ %.pre142, %.lr.ph.i.preheader.loopexit ], [ 0, %.preheader ]
  %49 = phi i64 [ %.pre140, %.lr.ph.i.preheader.loopexit ], [ 0, %.preheader ]
  %50 = phi i64 [ %.pre, %.lr.ph.i.preheader.loopexit ], [ 0, %.preheader ]
  %51 = tail call i64 @llvm.smax.i64(i64 %49, i64 %50)
  %52 = tail call i64 @llvm.smax.i64(i64 %48, i64 %51)
  %53 = tail call i64 @llvm.smax.i64(i64 %47, i64 %52)
  %54 = tail call i64 @llvm.smax.i64(i64 %46, i64 %53)
  %55 = tail call i64 @llvm.smax.i64(i64 %45, i64 %54)
  %56 = tail call i64 @llvm.smax.i64(i64 %44, i64 %55)
  %57 = tail call i64 @llvm.smax.i64(i64 %43, i64 %56)
  %58 = tail call i64 @llvm.smax.i64(i64 %42, i64 %57)
  %59 = tail call i64 @llvm.smax.i64(i64 %41, i64 %58)
  %60 = tail call i64 @llvm.smax.i64(i64 %40, i64 %59)
  %61 = tail call i64 @llvm.smax.i64(i64 %39, i64 %60)
  %62 = tail call i64 @llvm.smax.i64(i64 %38, i64 %61)
  %63 = tail call i64 @llvm.smax.i64(i64 %37, i64 %62)
  %64 = tail call i64 @llvm.smax.i64(i64 %36, i64 %63)
  %65 = tail call i64 @llvm.smax.i64(i64 %35, i64 %64)
  %66 = tail call i64 @llvm.smax.i64(i64 %34, i64 %65)
  %67 = tail call i64 @llvm.smax.i64(i64 %33, i64 %66)
  %68 = tail call i64 @llvm.smax.i64(i64 %32, i64 %67)
  %69 = tail call i64 @llvm.smax.i64(i64 %31, i64 %68)
  %70 = tail call i64 @llvm.smax.i64(i64 %30, i64 %69)
  %71 = tail call i64 @llvm.smax.i64(i64 %29, i64 %70)
  %72 = tail call i64 @llvm.smax.i64(i64 %28, i64 %71)
  %73 = tail call i64 @llvm.smax.i64(i64 %27, i64 %72)
  %74 = tail call i64 @llvm.smax.i64(i64 %26, i64 %73)
  %75 = tail call i64 @llvm.smax.i64(i64 %25, i64 %74)
  %76 = icmp sgt i64 %75, 1
  %. = select i1 %76, i32 16, i32 18
  %.192 = select i1 %76, i64 2, i64 3
  %_QQcl.6E6F._QQcl.796573 = select i1 %76, ptr @_QQcl.6E6F, ptr @_QQcl.796573
  %77 = tail call ptr @_FortranAioBeginExternalListOutput(i32 -1, ptr nonnull @_QQcl.9930c4bd1895b7c032605d93bee7c019, i32 %.)
  %78 = tail call i1 @_FortranAioOutputAscii(ptr %77, ptr nonnull %_QQcl.6E6F._QQcl.796573, i64 %.192)
  %79 = tail call i32 @_FortranAioEndIoStatement(ptr %77)
  %80 = tail call {} @_FortranAStopStatement(i32 0, i1 false, i1 false)
  unreachable

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader.new
  %81 = phi i64 [ 1, %.lr.ph.preheader.new ], [ %95, %.lr.ph ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.1, %.lr.ph ]
  %82 = add nsw i64 %81, -1
  %83 = getelementptr [100 x [1 x i8]], ptr @_QFEs, i64 0, i64 %82
  %.unpack123 = load i8, ptr %83, align 1, !tbaa !7
  %84 = zext i8 %.unpack123 to i64
  %85 = add nsw i64 %84, -97
  %86 = getelementptr i64, ptr %4, i64 %85
  %87 = load i64, ptr %86, align 8, !tbaa !7
  %88 = add i64 %87, 1
  store i64 %88, ptr %86, align 8, !tbaa !7
  %89 = getelementptr [100 x [1 x i8]], ptr @_QFEs, i64 0, i64 %81
  %.unpack123.1 = load i8, ptr %89, align 1, !tbaa !7
  %90 = zext i8 %.unpack123.1 to i64
  %91 = add nsw i64 %90, -97
  %92 = getelementptr i64, ptr %4, i64 %91
  %93 = load i64, ptr %92, align 8, !tbaa !7
  %94 = add i64 %93, 1
  store i64 %94, ptr %92, align 8, !tbaa !7
  %95 = add nuw nsw i64 %81, 2
  %niter.next.1 = add nuw i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.lr.ph.i.preheader.loopexit.unr-lcssa.loopexit, label %.lr.ph
}

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

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

declare i32 @_FortranAioEndIoStatement(ptr) local_unnamed_addr

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

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

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

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

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

attributes #0 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" }
attributes #1 = { noreturn }
attributes #2 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { 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 = !{!"descriptor member", !5, i64 0}
!5 = !{!"any access", !6, i64 0}
!6 = !{!"Flang Type TBAA Root"}
!7 = !{!8, !8, i64 0}
!8 = !{!"any data access", !5, i64 0}
