; LLVM IR from tangjz/acm-icpc :: codeforces (496C)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@n = external dso_local global i32, align 4
@m = external dso_local global i32, align 4
@ans = external dso_local global i32, align 4
@s = external dso_local global [101 x [101 x i8]], align 16
@cmp = external dso_local global [101 x i8], align 16
@.str = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [4 x i8], align 1

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main() #0 {
  %1 = alloca i32, align 4
  %2 = alloca i32, align 4
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i8, align 1
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  store i32 0, ptr %1, align 4
  %8 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef @.str, ptr noundef @n, ptr noundef @m)
  call void @llvm.lifetime.start.p0(i64 4, ptr %2) #3
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %9

9:                                                ; preds = %20, %0
  %10 = load i32, ptr %2, align 4, !tbaa !5
  %11 = load i32, ptr @n, align 4, !tbaa !5
  %12 = icmp slt i32 %10, %11
  br i1 %12, label %14, label %13

13:                                               ; preds = %9
  call void @llvm.lifetime.end.p0(i64 4, ptr %2) #3
  br label %23

14:                                               ; preds = %9
  %15 = load i32, ptr %2, align 4, !tbaa !5
  %16 = sext i32 %15 to i64
  %17 = getelementptr inbounds [101 x [101 x i8]], ptr @s, i64 0, i64 %16
  %18 = getelementptr inbounds [101 x i8], ptr %17, i64 0, i64 0
  %19 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef @.str.1, ptr noundef %18)
  br label %20

20:                                               ; preds = %14
  %21 = load i32, ptr %2, align 4, !tbaa !5
  %22 = add nsw i32 %21, 1
  store i32 %22, ptr %2, align 4, !tbaa !5
  br label %9, !llvm.loop !9

23:                                               ; preds = %13
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #3
  store i32 0, ptr %3, align 4, !tbaa !5
  br label %24

24:                                               ; preds = %107, %23
  %25 = load i32, ptr %3, align 4, !tbaa !5
  %26 = load i32, ptr @m, align 4, !tbaa !5
  %27 = icmp slt i32 %25, %26
  br i1 %27, label %29, label %28

28:                                               ; preds = %24
  store i32 5, ptr %4, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #3
  br label %110

29:                                               ; preds = %24
  call void @llvm.lifetime.start.p0(i64 1, ptr %5) #3
  store i8 0, ptr %5, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #3
  store i32 1, ptr %6, align 4, !tbaa !5
  br label %30

30:                                               ; preds = %62, %29
  %31 = load i32, ptr %6, align 4, !tbaa !5
  %32 = load i32, ptr @n, align 4, !tbaa !5
  %33 = icmp slt i32 %31, %32
  br i1 %33, label %35, label %34

34:                                               ; preds = %30
  store i32 8, ptr %4, align 4
  br label %65

35:                                               ; preds = %30
  %36 = load i32, ptr %6, align 4, !tbaa !5
  %37 = sext i32 %36 to i64
  %38 = getelementptr inbounds [101 x i8], ptr @cmp, i64 0, i64 %37
  %39 = load i8, ptr %38, align 1, !tbaa !11, !range !13, !noundef !14
  %40 = trunc i8 %39 to i1
  br i1 %40, label %61, label %41

41:                                               ; preds = %35
  %42 = load i32, ptr %6, align 4, !tbaa !5
  %43 = sext i32 %42 to i64
  %44 = getelementptr inbounds [101 x [101 x i8]], ptr @s, i64 0, i64 %43
  %45 = load i32, ptr %3, align 4, !tbaa !5
  %46 = sext i32 %45 to i64
  %47 = getelementptr inbounds [101 x i8], ptr %44, i64 0, i64 %46
  %48 = load i8, ptr %47, align 1, !tbaa !15
  %49 = sext i8 %48 to i32
  %50 = load i32, ptr %6, align 4, !tbaa !5
  %51 = sub nsw i32 %50, 1
  %52 = sext i32 %51 to i64
  %53 = getelementptr inbounds [101 x [101 x i8]], ptr @s, i64 0, i64 %52
  %54 = load i32, ptr %3, align 4, !tbaa !5
  %55 = sext i32 %54 to i64
  %56 = getelementptr inbounds [101 x i8], ptr %53, i64 0, i64 %55
  %57 = load i8, ptr %56, align 1, !tbaa !15
  %58 = sext i8 %57 to i32
  %59 = icmp slt i32 %49, %58
  br i1 %59, label %60, label %61

60:                                               ; preds = %41
  store i8 1, ptr %5, align 1, !tbaa !11
  store i32 8, ptr %4, align 4
  br label %65

61:                                               ; preds = %41, %35
  br label %62

62:                                               ; preds = %61
  %63 = load i32, ptr %6, align 4, !tbaa !5
  %64 = add nsw i32 %63, 1
  store i32 %64, ptr %6, align 4, !tbaa !5
  br label %30, !llvm.loop !16

65:                                               ; preds = %60, %34
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #3
  br label %66

66:                                               ; preds = %65
  %67 = load i8, ptr %5, align 1, !tbaa !11, !range !13, !noundef !14
  %68 = trunc i8 %67 to i1
  br i1 %68, label %69, label %72

69:                                               ; preds = %66
  %70 = load i32, ptr @ans, align 4, !tbaa !5
  %71 = add nsw i32 %70, 1
  store i32 %71, ptr @ans, align 4, !tbaa !5
  br label %106

72:                                               ; preds = %66
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #3
  store i32 1, ptr %7, align 4, !tbaa !5
  br label %73

73:                                               ; preds = %102, %72
  %74 = load i32, ptr %7, align 4, !tbaa !5
  %75 = load i32, ptr @n, align 4, !tbaa !5
  %76 = icmp slt i32 %74, %75
  br i1 %76, label %78, label %77

77:                                               ; preds = %73
  store i32 11, ptr %4, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #3
  br label %105

78:                                               ; preds = %73
  %79 = load i32, ptr %7, align 4, !tbaa !5
  %80 = sext i32 %79 to i64
  %81 = getelementptr inbounds [101 x [101 x i8]], ptr @s, i64 0, i64 %80
  %82 = load i32, ptr %3, align 4, !tbaa !5
  %83 = sext i32 %82 to i64
  %84 = getelementptr inbounds [101 x i8], ptr %81, i64 0, i64 %83
  %85 = load i8, ptr %84, align 1, !tbaa !15
  %86 = sext i8 %85 to i32
  %87 = load i32, ptr %7, align 4, !tbaa !5
  %88 = sub nsw i32 %87, 1
  %89 = sext i32 %88 to i64
  %90 = getelementptr inbounds [101 x [101 x i8]], ptr @s, i64 0, i64 %89
  %91 = load i32, ptr %3, align 4, !tbaa !5
  %92 = sext i32 %91 to i64
  %93 = getelementptr inbounds [101 x i8], ptr %90, i64 0, i64 %92
  %94 = load i8, ptr %93, align 1, !tbaa !15
  %95 = sext i8 %94 to i32
  %96 = icmp sgt i32 %86, %95
  br i1 %96, label %97, label %101

97:                                               ; preds = %78
  %98 = load i32, ptr %7, align 4, !tbaa !5
  %99 = sext i32 %98 to i64
  %100 = getelementptr inbounds [101 x i8], ptr @cmp, i64 0, i64 %99
  store i8 1, ptr %100, align 1, !tbaa !11
  br label %101

101:                                              ; preds = %97, %78
  br label %102

102:                                              ; preds = %101
  %103 = load i32, ptr %7, align 4, !tbaa !5
  %104 = add nsw i32 %103, 1
  store i32 %104, ptr %7, align 4, !tbaa !5
  br label %73, !llvm.loop !17

105:                                              ; preds = %77
  br label %106

106:                                              ; preds = %105, %69
  call void @llvm.lifetime.end.p0(i64 1, ptr %5) #3
  br label %107

107:                                              ; preds = %106
  %108 = load i32, ptr %3, align 4, !tbaa !5
  %109 = add nsw i32 %108, 1
  store i32 %109, ptr %3, align 4, !tbaa !5
  br label %24, !llvm.loop !18

110:                                              ; preds = %28
  %111 = load i32, ptr @ans, align 4, !tbaa !5
  %112 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, i32 noundef %111)
  ret i32 0
}

declare i32 @__isoc99_scanf(ptr noundef, ...) #1

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #2

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #2

declare i32 @printf(ptr noundef, ...) #1

attributes #0 = { mustprogress norecurse uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{i8 0, i8 2}
!14 = !{}
!15 = !{!7, !7, i64 0}
!16 = distinct !{!16, !10}
!17 = distinct !{!17, !10}
!18 = distinct !{!18, !10}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@n = external dso_local global i32, align 4
@m = external dso_local global i32, align 4
@ans = external dso_local local_unnamed_addr global i32, align 4
@s = external dso_local global [101 x [101 x i8]], align 16
@cmp = external dso_local local_unnamed_addr global [101 x i8], align 16
@.str = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [4 x i8], align 1

; Function Attrs: mustprogress nofree norecurse nounwind uwtable
define dso_local noundef i32 @main() local_unnamed_addr #0 {
  %1 = tail call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str, ptr noundef nonnull @n, ptr noundef nonnull @m)
  %2 = load i32, ptr @n, align 4, !tbaa !5
  %3 = icmp sgt i32 %2, 0
  br i1 %3, label %.lr.ph, label %.preheader24

.preheader24:                                     ; preds = %.lr.ph, %0
  %.lcssa = phi i32 [ %2, %0 ], [ %130, %.lr.ph ]
  %4 = load i32, ptr @m, align 4, !tbaa !5
  %ans.promoted = load i32, ptr @ans, align 4, !tbaa !5
  %5 = icmp sgt i32 %4, 0
  %6 = icmp sgt i32 %.lcssa, 1
  %or.cond = and i1 %5, %6
  br i1 %or.cond, label %.preheader.us.us.preheader, label %._crit_edge

.preheader.us.us.preheader:                       ; preds = %.preheader24
  %wide.trip.count54 = zext nneg i32 %4 to i64
  %wide.trip.count = zext nneg i32 %.lcssa to i64
  %7 = add nsw i64 %wide.trip.count, -1
  %min.iters.check = icmp ult i32 %.lcssa, 17
  %n.vec = and i64 %7, -16
  %ind.end = or disjoint i64 %n.vec, 1
  %cmp.n = icmp eq i64 %7, %n.vec
  br label %.preheader.us.us

.preheader.us.us:                                 ; preds = %.preheader.us.us.preheader, %.critedge..loopexit_crit_edge.us.us
  %indvars.iv51 = phi i64 [ 0, %.preheader.us.us.preheader ], [ %indvars.iv.next52, %.critedge..loopexit_crit_edge.us.us ]
  %8 = phi i32 [ %ans.promoted, %.preheader.us.us.preheader ], [ %28, %.critedge..loopexit_crit_edge.us.us ]
  br label %15

scalar.ph:                                        ; preds = %scalar.ph.preheader, %.critedge.us.us
  %9 = phi i8 [ %11, %.critedge.us.us ], [ %.ph, %scalar.ph.preheader ]
  %indvars.iv46 = phi i64 [ %indvars.iv.next47, %.critedge.us.us ], [ %indvars.iv46.ph, %scalar.ph.preheader ]
  %10 = getelementptr inbounds [101 x [101 x i8]], ptr @s, i64 0, i64 %indvars.iv46, i64 %indvars.iv51
  %11 = load i8, ptr %10, align 1, !tbaa !9
  %12 = icmp sgt i8 %11, %9
  br i1 %12, label %13, label %.critedge.us.us

13:                                               ; preds = %scalar.ph
  %14 = getelementptr inbounds [101 x i8], ptr @cmp, i64 0, i64 %indvars.iv46
  store i8 1, ptr %14, align 1, !tbaa !10
  br label %.critedge.us.us

.critedge.us.us:                                  ; preds = %13, %scalar.ph
  %indvars.iv.next47 = add nuw nsw i64 %indvars.iv46, 1
  %exitcond50.not = icmp eq i64 %indvars.iv.next47, %wide.trip.count
  br i1 %exitcond50.not, label %.critedge..loopexit_crit_edge.us.us, label %scalar.ph, !llvm.loop !12

15:                                               ; preds = %29, %.preheader.us.us
  %indvars.iv43 = phi i64 [ %indvars.iv.next44, %29 ], [ 1, %.preheader.us.us ]
  %16 = getelementptr inbounds [101 x i8], ptr @cmp, i64 0, i64 %indvars.iv43
  %17 = load i8, ptr %16, align 1, !tbaa !10, !range !16, !noundef !17
  %18 = trunc nuw i8 %17 to i1
  br i1 %18, label %29, label %19

19:                                               ; preds = %15
  %20 = getelementptr inbounds [101 x [101 x i8]], ptr @s, i64 0, i64 %indvars.iv43, i64 %indvars.iv51
  %21 = load i8, ptr %20, align 1, !tbaa !9
  %22 = add nsw i64 %indvars.iv43, -1
  %23 = getelementptr inbounds [101 x [101 x i8]], ptr @s, i64 0, i64 %22, i64 %indvars.iv51
  %24 = load i8, ptr %23, align 1, !tbaa !9
  %25 = icmp slt i8 %21, %24
  br i1 %25, label %26, label %29

26:                                               ; preds = %19
  %27 = add nsw i32 %8, 1
  store i32 %27, ptr @ans, align 4, !tbaa !5
  br label %.critedge..loopexit_crit_edge.us.us

.critedge..loopexit_crit_edge.us.us:              ; preds = %.critedge.us.us, %middle.block, %26
  %28 = phi i32 [ %27, %26 ], [ %8, %middle.block ], [ %8, %.critedge.us.us ]
  %indvars.iv.next52 = add nuw nsw i64 %indvars.iv51, 1
  %exitcond55.not = icmp eq i64 %indvars.iv.next52, %wide.trip.count54
  br i1 %exitcond55.not, label %._crit_edge, label %.preheader.us.us, !llvm.loop !18

29:                                               ; preds = %19, %15
  %indvars.iv.next44 = add nuw nsw i64 %indvars.iv43, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next44, %wide.trip.count
  br i1 %exitcond.not, label %..critedge.preheader_crit_edge.us.us, label %15, !llvm.loop !19

..critedge.preheader_crit_edge.us.us:             ; preds = %29
  %.phi.trans.insert = getelementptr inbounds [101 x [101 x i8]], ptr @s, i64 0, i64 0, i64 %indvars.iv51
  %.pre = load i8, ptr %.phi.trans.insert, align 1, !tbaa !9
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

scalar.ph.preheader:                              ; preds = %middle.block, %..critedge.preheader_crit_edge.us.us
  %.ph = phi i8 [ %.pre, %..critedge.preheader_crit_edge.us.us ], [ %76, %middle.block ]
  %indvars.iv46.ph = phi i64 [ 1, %..critedge.preheader_crit_edge.us.us ], [ %ind.end, %middle.block ]
  br label %scalar.ph

vector.ph:                                        ; preds = %..critedge.preheader_crit_edge.us.us
  %vector.recur.init = insertelement <16 x i8> poison, i8 %.pre, i64 15
  br label %vector.body

vector.body:                                      ; preds = %pred.store.continue89, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %pred.store.continue89 ]
  %vector.recur = phi <16 x i8> [ %vector.recur.init, %vector.ph ], [ %92, %pred.store.continue89 ]
  %offset.idx = or disjoint i64 %index, 1
  %30 = or disjoint i64 %index, 2
  %31 = or disjoint i64 %index, 3
  %32 = or disjoint i64 %index, 4
  %33 = or disjoint i64 %index, 5
  %34 = or disjoint i64 %index, 6
  %35 = or disjoint i64 %index, 7
  %36 = or disjoint i64 %index, 8
  %37 = or disjoint i64 %index, 9
  %38 = or disjoint i64 %index, 10
  %39 = or disjoint i64 %index, 11
  %40 = or disjoint i64 %index, 12
  %41 = or disjoint i64 %index, 13
  %42 = or disjoint i64 %index, 14
  %43 = or disjoint i64 %index, 15
  %44 = add i64 %index, 16
  %45 = getelementptr inbounds [101 x [101 x i8]], ptr @s, i64 0, i64 %offset.idx, i64 %indvars.iv51
  %46 = getelementptr inbounds [101 x [101 x i8]], ptr @s, i64 0, i64 %30, i64 %indvars.iv51
  %47 = getelementptr inbounds [101 x [101 x i8]], ptr @s, i64 0, i64 %31, i64 %indvars.iv51
  %48 = getelementptr inbounds [101 x [101 x i8]], ptr @s, i64 0, i64 %32, i64 %indvars.iv51
  %49 = getelementptr inbounds [101 x [101 x i8]], ptr @s, i64 0, i64 %33, i64 %indvars.iv51
  %50 = getelementptr inbounds [101 x [101 x i8]], ptr @s, i64 0, i64 %34, i64 %indvars.iv51
  %51 = getelementptr inbounds [101 x [101 x i8]], ptr @s, i64 0, i64 %35, i64 %indvars.iv51
  %52 = getelementptr inbounds [101 x [101 x i8]], ptr @s, i64 0, i64 %36, i64 %indvars.iv51
  %53 = getelementptr inbounds [101 x [101 x i8]], ptr @s, i64 0, i64 %37, i64 %indvars.iv51
  %54 = getelementptr inbounds [101 x [101 x i8]], ptr @s, i64 0, i64 %38, i64 %indvars.iv51
  %55 = getelementptr inbounds [101 x [101 x i8]], ptr @s, i64 0, i64 %39, i64 %indvars.iv51
  %56 = getelementptr inbounds [101 x [101 x i8]], ptr @s, i64 0, i64 %40, i64 %indvars.iv51
  %57 = getelementptr inbounds [101 x [101 x i8]], ptr @s, i64 0, i64 %41, i64 %indvars.iv51
  %58 = getelementptr inbounds [101 x [101 x i8]], ptr @s, i64 0, i64 %42, i64 %indvars.iv51
  %59 = getelementptr inbounds [101 x [101 x i8]], ptr @s, i64 0, i64 %43, i64 %indvars.iv51
  %60 = getelementptr inbounds [101 x [101 x i8]], ptr @s, i64 0, i64 %44, i64 %indvars.iv51
  %61 = load i8, ptr %45, align 1, !tbaa !9
  %62 = load i8, ptr %46, align 1, !tbaa !9
  %63 = load i8, ptr %47, align 1, !tbaa !9
  %64 = load i8, ptr %48, align 1, !tbaa !9
  %65 = load i8, ptr %49, align 1, !tbaa !9
  %66 = load i8, ptr %50, align 1, !tbaa !9
  %67 = load i8, ptr %51, align 1, !tbaa !9
  %68 = load i8, ptr %52, align 1, !tbaa !9
  %69 = load i8, ptr %53, align 1, !tbaa !9
  %70 = load i8, ptr %54, align 1, !tbaa !9
  %71 = load i8, ptr %55, align 1, !tbaa !9
  %72 = load i8, ptr %56, align 1, !tbaa !9
  %73 = load i8, ptr %57, align 1, !tbaa !9
  %74 = load i8, ptr %58, align 1, !tbaa !9
  %75 = load i8, ptr %59, align 1, !tbaa !9
  %76 = load i8, ptr %60, align 1, !tbaa !9
  %77 = insertelement <16 x i8> poison, i8 %61, i64 0
  %78 = insertelement <16 x i8> %77, i8 %62, i64 1
  %79 = insertelement <16 x i8> %78, i8 %63, i64 2
  %80 = insertelement <16 x i8> %79, i8 %64, i64 3
  %81 = insertelement <16 x i8> %80, i8 %65, i64 4
  %82 = insertelement <16 x i8> %81, i8 %66, i64 5
  %83 = insertelement <16 x i8> %82, i8 %67, i64 6
  %84 = insertelement <16 x i8> %83, i8 %68, i64 7
  %85 = insertelement <16 x i8> %84, i8 %69, i64 8
  %86 = insertelement <16 x i8> %85, i8 %70, i64 9
  %87 = insertelement <16 x i8> %86, i8 %71, i64 10
  %88 = insertelement <16 x i8> %87, i8 %72, i64 11
  %89 = insertelement <16 x i8> %88, i8 %73, i64 12
  %90 = insertelement <16 x i8> %89, i8 %74, i64 13
  %91 = insertelement <16 x i8> %90, i8 %75, i64 14
  %92 = insertelement <16 x i8> %91, i8 %76, i64 15
  %93 = shufflevector <16 x i8> %vector.recur, <16 x i8> %91, <16 x i32> <i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30>
  %94 = icmp sgt <16 x i8> %92, %93
  %95 = extractelement <16 x i1> %94, i64 0
  br i1 %95, label %pred.store.if, label %pred.store.continue

pred.store.if:                                    ; preds = %vector.body
  %96 = getelementptr inbounds [101 x i8], ptr @cmp, i64 0, i64 %offset.idx
  store i8 1, ptr %96, align 1, !tbaa !10
  br label %pred.store.continue

pred.store.continue:                              ; preds = %pred.store.if, %vector.body
  %97 = extractelement <16 x i1> %94, i64 1
  br i1 %97, label %pred.store.if60, label %pred.store.continue61

pred.store.if60:                                  ; preds = %pred.store.continue
  %98 = getelementptr inbounds [101 x i8], ptr @cmp, i64 0, i64 %30
  store i8 1, ptr %98, align 2, !tbaa !10
  br label %pred.store.continue61

pred.store.continue61:                            ; preds = %pred.store.if60, %pred.store.continue
  %99 = extractelement <16 x i1> %94, i64 2
  br i1 %99, label %pred.store.if62, label %pred.store.continue63

pred.store.if62:                                  ; preds = %pred.store.continue61
  %100 = getelementptr inbounds [101 x i8], ptr @cmp, i64 0, i64 %31
  store i8 1, ptr %100, align 1, !tbaa !10
  br label %pred.store.continue63

pred.store.continue63:                            ; preds = %pred.store.if62, %pred.store.continue61
  %101 = extractelement <16 x i1> %94, i64 3
  br i1 %101, label %pred.store.if64, label %pred.store.continue65

pred.store.if64:                                  ; preds = %pred.store.continue63
  %102 = getelementptr inbounds [101 x i8], ptr @cmp, i64 0, i64 %32
  store i8 1, ptr %102, align 4, !tbaa !10
  br label %pred.store.continue65

pred.store.continue65:                            ; preds = %pred.store.if64, %pred.store.continue63
  %103 = extractelement <16 x i1> %94, i64 4
  br i1 %103, label %pred.store.if66, label %pred.store.continue67

pred.store.if66:                                  ; preds = %pred.store.continue65
  %104 = getelementptr inbounds [101 x i8], ptr @cmp, i64 0, i64 %33
  store i8 1, ptr %104, align 1, !tbaa !10
  br label %pred.store.continue67

pred.store.continue67:                            ; preds = %pred.store.if66, %pred.store.continue65
  %105 = extractelement <16 x i1> %94, i64 5
  br i1 %105, label %pred.store.if68, label %pred.store.continue69

pred.store.if68:                                  ; preds = %pred.store.continue67
  %106 = getelementptr inbounds [101 x i8], ptr @cmp, i64 0, i64 %34
  store i8 1, ptr %106, align 2, !tbaa !10
  br label %pred.store.continue69

pred.store.continue69:                            ; preds = %pred.store.if68, %pred.store.continue67
  %107 = extractelement <16 x i1> %94, i64 6
  br i1 %107, label %pred.store.if70, label %pred.store.continue71

pred.store.if70:                                  ; preds = %pred.store.continue69
  %108 = getelementptr inbounds [101 x i8], ptr @cmp, i64 0, i64 %35
  store i8 1, ptr %108, align 1, !tbaa !10
  br label %pred.store.continue71

pred.store.continue71:                            ; preds = %pred.store.if70, %pred.store.continue69
  %109 = extractelement <16 x i1> %94, i64 7
  br i1 %109, label %pred.store.if72, label %pred.store.continue73

pred.store.if72:                                  ; preds = %pred.store.continue71
  %110 = getelementptr inbounds [101 x i8], ptr @cmp, i64 0, i64 %36
  store i8 1, ptr %110, align 8, !tbaa !10
  br label %pred.store.continue73

pred.store.continue73:                            ; preds = %pred.store.if72, %pred.store.continue71
  %111 = extractelement <16 x i1> %94, i64 8
  br i1 %111, label %pred.store.if74, label %pred.store.continue75

pred.store.if74:                                  ; preds = %pred.store.continue73
  %112 = getelementptr inbounds [101 x i8], ptr @cmp, i64 0, i64 %37
  store i8 1, ptr %112, align 1, !tbaa !10
  br label %pred.store.continue75

pred.store.continue75:                            ; preds = %pred.store.if74, %pred.store.continue73
  %113 = extractelement <16 x i1> %94, i64 9
  br i1 %113, label %pred.store.if76, label %pred.store.continue77

pred.store.if76:                                  ; preds = %pred.store.continue75
  %114 = getelementptr inbounds [101 x i8], ptr @cmp, i64 0, i64 %38
  store i8 1, ptr %114, align 2, !tbaa !10
  br label %pred.store.continue77

pred.store.continue77:                            ; preds = %pred.store.if76, %pred.store.continue75
  %115 = extractelement <16 x i1> %94, i64 10
  br i1 %115, label %pred.store.if78, label %pred.store.continue79

pred.store.if78:                                  ; preds = %pred.store.continue77
  %116 = getelementptr inbounds [101 x i8], ptr @cmp, i64 0, i64 %39
  store i8 1, ptr %116, align 1, !tbaa !10
  br label %pred.store.continue79

pred.store.continue79:                            ; preds = %pred.store.if78, %pred.store.continue77
  %117 = extractelement <16 x i1> %94, i64 11
  br i1 %117, label %pred.store.if80, label %pred.store.continue81

pred.store.if80:                                  ; preds = %pred.store.continue79
  %118 = getelementptr inbounds [101 x i8], ptr @cmp, i64 0, i64 %40
  store i8 1, ptr %118, align 4, !tbaa !10
  br label %pred.store.continue81

pred.store.continue81:                            ; preds = %pred.store.if80, %pred.store.continue79
  %119 = extractelement <16 x i1> %94, i64 12
  br i1 %119, label %pred.store.if82, label %pred.store.continue83

pred.store.if82:                                  ; preds = %pred.store.continue81
  %120 = getelementptr inbounds [101 x i8], ptr @cmp, i64 0, i64 %41
  store i8 1, ptr %120, align 1, !tbaa !10
  br label %pred.store.continue83

pred.store.continue83:                            ; preds = %pred.store.if82, %pred.store.continue81
  %121 = extractelement <16 x i1> %94, i64 13
  br i1 %121, label %pred.store.if84, label %pred.store.continue85

pred.store.if84:                                  ; preds = %pred.store.continue83
  %122 = getelementptr inbounds [101 x i8], ptr @cmp, i64 0, i64 %42
  store i8 1, ptr %122, align 2, !tbaa !10
  br label %pred.store.continue85

pred.store.continue85:                            ; preds = %pred.store.if84, %pred.store.continue83
  %123 = extractelement <16 x i1> %94, i64 14
  br i1 %123, label %pred.store.if86, label %pred.store.continue87

pred.store.if86:                                  ; preds = %pred.store.continue85
  %124 = getelementptr inbounds [101 x i8], ptr @cmp, i64 0, i64 %43
  store i8 1, ptr %124, align 1, !tbaa !10
  br label %pred.store.continue87

pred.store.continue87:                            ; preds = %pred.store.if86, %pred.store.continue85
  %125 = extractelement <16 x i1> %94, i64 15
  br i1 %125, label %pred.store.if88, label %pred.store.continue89

pred.store.if88:                                  ; preds = %pred.store.continue87
  %126 = getelementptr inbounds [101 x i8], ptr @cmp, i64 0, i64 %44
  store i8 1, ptr %126, align 16, !tbaa !10
  br label %pred.store.continue89

pred.store.continue89:                            ; preds = %pred.store.if88, %pred.store.continue87
  %index.next = add nuw i64 %index, 16
  %127 = icmp eq i64 %index.next, %n.vec
  br i1 %127, label %middle.block, label %vector.body, !llvm.loop !20

middle.block:                                     ; preds = %pred.store.continue89
  br i1 %cmp.n, label %.critedge..loopexit_crit_edge.us.us, label %scalar.ph.preheader

.lr.ph:                                           ; preds = %0, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ 0, %0 ]
  %128 = getelementptr inbounds [101 x [101 x i8]], ptr @s, i64 0, i64 %indvars.iv
  %129 = tail call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.1, ptr noundef nonnull %128)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %130 = load i32, ptr @n, align 4, !tbaa !5
  %131 = sext i32 %130 to i64
  %132 = icmp slt i64 %indvars.iv.next, %131
  br i1 %132, label %.lr.ph, label %.preheader24, !llvm.loop !21

._crit_edge:                                      ; preds = %.critedge..loopexit_crit_edge.us.us, %.preheader24
  %133 = phi i32 [ %ans.promoted, %.preheader24 ], [ %28, %.critedge..loopexit_crit_edge.us.us ]
  %134 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2, i32 noundef %133)
  ret i32 0
}

; Function Attrs: nofree nounwind
declare noundef i32 @__isoc99_scanf(ptr nocapture noundef readonly, ...) local_unnamed_addr #1

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #1

attributes #0 = { mustprogress nofree norecurse nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!7, !7, i64 0}
!10 = !{!11, !11, i64 0}
!11 = !{!"bool", !7, i64 0}
!12 = distinct !{!12, !13, !14, !15}
!13 = !{!"llvm.loop.mustprogress"}
!14 = !{!"llvm.loop.unroll.runtime.disable"}
!15 = !{!"llvm.loop.isvectorized", i32 1}
!16 = !{i8 0, i8 2}
!17 = !{}
!18 = distinct !{!18, !13}
!19 = distinct !{!19, !13}
!20 = distinct !{!20, !13, !15, !14}
!21 = distinct !{!21, !13}


; Effective O3 passes: BDCEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass