; LLVM IR from eyangch/competitive-programming :: USACOtraining/3.2/msquare.ll (Z5ahashRSt6vectorIiSaIiEE)

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

@efact = external dso_local global i32, align 4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #0 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_Z5ahashRSt6vectorIiSaIiEE(ptr noundef nonnull align 8 dereferenceable(24) %0) #1 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca [8 x i8], align 1
  %6 = alloca i8, align 1
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #4
  store i32 0, ptr %3, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #4
  %13 = load i32, ptr @efact, align 4, !tbaa !9
  store i32 %13, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #4
  %14 = getelementptr inbounds [8 x i8], ptr %5, i64 0, i64 0
  %15 = getelementptr inbounds [8 x i8], ptr %5, i64 0, i64 0
  %16 = getelementptr inbounds i8, ptr %15, i64 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %6) #4
  store i8 0, ptr %6, align 1, !tbaa !11
  call void @_ZSt4fillIPbbEvT_S1_RKT0_(ptr noundef %14, ptr noundef %16, ptr noundef nonnull align 1 dereferenceable(1) %6)
  call void @llvm.lifetime.end.p0(i64 1, ptr %6) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  store i32 8, ptr %7, align 4, !tbaa !9
  br label %17

17:                                               ; preds = %61, %1
  %18 = load i32, ptr %7, align 4, !tbaa !9
  %19 = icmp sgt i32 %18, 0
  br i1 %19, label %21, label %20

20:                                               ; preds = %17
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  br label %64

21:                                               ; preds = %17
  %22 = load i32, ptr %7, align 4, !tbaa !9
  %23 = load i32, ptr %4, align 4, !tbaa !9
  %24 = sdiv i32 %23, %22
  store i32 %24, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  %25 = load i32, ptr %7, align 4, !tbaa !9
  %26 = sub nsw i32 8, %25
  store i32 %26, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  %27 = load ptr, ptr %2, align 8, !tbaa !5
  %28 = load i32, ptr %9, align 4, !tbaa !9
  %29 = sext i32 %28 to i64
  %30 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %27, i64 noundef %29) #4
  %31 = load i32, ptr %30, align 4, !tbaa !9
  %32 = sub nsw i32 %31, 1
  store i32 %32, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  store i32 0, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  store i32 0, ptr %12, align 4, !tbaa !9
  br label %33

33:                                               ; preds = %47, %21
  %34 = load i32, ptr %12, align 4, !tbaa !9
  %35 = load i32, ptr %10, align 4, !tbaa !9
  %36 = icmp slt i32 %34, %35
  br i1 %36, label %38, label %37

37:                                               ; preds = %33
  store i32 5, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  br label %50

38:                                               ; preds = %33
  %39 = load i32, ptr %12, align 4, !tbaa !9
  %40 = sext i32 %39 to i64
  %41 = getelementptr inbounds [8 x i8], ptr %5, i64 0, i64 %40
  %42 = load i8, ptr %41, align 1, !tbaa !11, !range !13, !noundef !14
  %43 = trunc i8 %42 to i1
  %44 = zext i1 %43 to i32
  %45 = load i32, ptr %11, align 4, !tbaa !9
  %46 = add nsw i32 %45, %44
  store i32 %46, ptr %11, align 4, !tbaa !9
  br label %47

47:                                               ; preds = %38
  %48 = load i32, ptr %12, align 4, !tbaa !9
  %49 = add nsw i32 %48, 1
  store i32 %49, ptr %12, align 4, !tbaa !9
  br label %33, !llvm.loop !15

50:                                               ; preds = %37
  %51 = load i32, ptr %10, align 4, !tbaa !9
  %52 = load i32, ptr %11, align 4, !tbaa !9
  %53 = sub nsw i32 %51, %52
  %54 = load i32, ptr %4, align 4, !tbaa !9
  %55 = mul nsw i32 %53, %54
  %56 = load i32, ptr %3, align 4, !tbaa !9
  %57 = add nsw i32 %56, %55
  store i32 %57, ptr %3, align 4, !tbaa !9
  %58 = load i32, ptr %10, align 4, !tbaa !9
  %59 = sext i32 %58 to i64
  %60 = getelementptr inbounds [8 x i8], ptr %5, i64 0, i64 %59
  store i8 1, ptr %60, align 1, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  br label %61

61:                                               ; preds = %50
  %62 = load i32, ptr %7, align 4, !tbaa !9
  %63 = add nsw i32 %62, -1
  store i32 %63, ptr %7, align 4, !tbaa !9
  br label %17, !llvm.loop !17

64:                                               ; preds = %20
  %65 = load i32, ptr %3, align 4, !tbaa !9
  store i32 1, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #4
  ret i32 %65
}

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZSt4fillIPbbEvT_S1_RKT0_(ptr noundef, ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) #3

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

attributes #0 = { mustprogress 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 = { mustprogress 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 #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { inlinehint mustprogress 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 #4 = { 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 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{i8 0, i8 2}
!14 = !{}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}


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

@efact = external dso_local local_unnamed_addr global i32, align 4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_Z5ahashRSt6vectorIiSaIiEE(ptr noundef nonnull align 8 dereferenceable(24) %0) local_unnamed_addr #1 {
  %2 = alloca [8 x i8], align 1
  %3 = alloca i8, align 1
  %4 = load i32, ptr @efact, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) #5
  %5 = getelementptr inbounds i8, ptr %2, i64 8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %3) #5
  store i8 0, ptr %3, align 1, !tbaa !9
  call void @_ZSt4fillIPbbEvT_S1_RKT0_(ptr noundef nonnull %2, ptr noundef nonnull %5, ptr noundef nonnull align 1 dereferenceable(1) %3)
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %3) #5
  %6 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef 0) #5
  %7 = load i32, ptr %6, align 4, !tbaa !5
  %8 = add i32 %7, -1
  %9 = icmp sgt i32 %7, 1
  br i1 %9, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %1
  %wide.trip.count = zext nneg i32 %8 to i64
  %min.iters.check = icmp ult i32 %7, 9
  br i1 %min.iters.check, label %.lr.ph.preheader187, label %vector.ph

.lr.ph.preheader187:                              ; preds = %middle.block, %.lr.ph.preheader
  %indvars.iv.ph = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec, %middle.block ]
  %.01722.ph = phi i32 [ 0, %.lr.ph.preheader ], [ %17, %middle.block ]
  br label %.lr.ph

vector.ph:                                        ; preds = %.lr.ph.preheader
  %n.vec = and i64 %wide.trip.count, 2147483640
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %14, %vector.body ]
  %vec.phi46 = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %15, %vector.body ]
  %10 = getelementptr inbounds [8 x i8], ptr %2, i64 0, i64 %index
  %11 = getelementptr inbounds i8, ptr %10, i64 4
  %wide.load = load <4 x i8>, ptr %10, align 1, !tbaa !9
  %wide.load47 = load <4 x i8>, ptr %11, align 1, !tbaa !9
  %12 = zext <4 x i8> %wide.load to <4 x i32>
  %13 = zext <4 x i8> %wide.load47 to <4 x i32>
  %14 = add <4 x i32> %vec.phi, %12
  %15 = add <4 x i32> %vec.phi46, %13
  %index.next = add nuw i64 %index, 8
  %16 = icmp eq i64 %index.next, %n.vec
  br i1 %16, label %middle.block, label %vector.body, !llvm.loop !11

middle.block:                                     ; preds = %vector.body
  %bin.rdx = add <4 x i32> %15, %14
  %17 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx)
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph.preheader187

._crit_edge:                                      ; preds = %.lr.ph, %middle.block, %1
  %.017.lcssa = phi i32 [ 0, %1 ], [ %17, %middle.block ], [ %177, %.lr.ph ]
  %18 = sext i32 %8 to i64
  %19 = getelementptr inbounds [8 x i8], ptr %2, i64 0, i64 %18
  store i8 1, ptr %19, align 1, !tbaa !9
  %20 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef 1) #5
  %21 = load i32, ptr %20, align 4, !tbaa !5
  %22 = add i32 %21, -1
  %23 = icmp sgt i32 %21, 1
  br i1 %23, label %.lr.ph.preheader.1, label %._crit_edge.1

.lr.ph.preheader.1:                               ; preds = %._crit_edge
  %wide.trip.count.1 = zext nneg i32 %22 to i64
  %min.iters.check50 = icmp ult i32 %21, 9
  br i1 %min.iters.check50, label %.lr.ph.1.preheader, label %vector.ph51

vector.ph51:                                      ; preds = %.lr.ph.preheader.1
  %n.vec53 = and i64 %wide.trip.count.1, 2147483640
  br label %vector.body55

vector.body55:                                    ; preds = %vector.body55, %vector.ph51
  %index56 = phi i64 [ 0, %vector.ph51 ], [ %index.next61, %vector.body55 ]
  %vec.phi57 = phi <4 x i32> [ zeroinitializer, %vector.ph51 ], [ %28, %vector.body55 ]
  %vec.phi58 = phi <4 x i32> [ zeroinitializer, %vector.ph51 ], [ %29, %vector.body55 ]
  %24 = getelementptr inbounds [8 x i8], ptr %2, i64 0, i64 %index56
  %25 = getelementptr inbounds i8, ptr %24, i64 4
  %wide.load59 = load <4 x i8>, ptr %24, align 1, !tbaa !9
  %wide.load60 = load <4 x i8>, ptr %25, align 1, !tbaa !9
  %26 = zext <4 x i8> %wide.load59 to <4 x i32>
  %27 = zext <4 x i8> %wide.load60 to <4 x i32>
  %28 = add <4 x i32> %vec.phi57, %26
  %29 = add <4 x i32> %vec.phi58, %27
  %index.next61 = add nuw i64 %index56, 8
  %30 = icmp eq i64 %index.next61, %n.vec53
  br i1 %30, label %middle.block48, label %vector.body55, !llvm.loop !15

middle.block48:                                   ; preds = %vector.body55
  %bin.rdx62 = add <4 x i32> %29, %28
  %31 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx62)
  %cmp.n63 = icmp eq i64 %n.vec53, %wide.trip.count.1
  br i1 %cmp.n63, label %._crit_edge.1, label %.lr.ph.1.preheader

.lr.ph.1.preheader:                               ; preds = %middle.block48, %.lr.ph.preheader.1
  %indvars.iv.1.ph = phi i64 [ 0, %.lr.ph.preheader.1 ], [ %n.vec53, %middle.block48 ]
  %.01722.1.ph = phi i32 [ 0, %.lr.ph.preheader.1 ], [ %31, %middle.block48 ]
  br label %.lr.ph.1

.lr.ph.1:                                         ; preds = %.lr.ph.1.preheader, %.lr.ph.1
  %indvars.iv.1 = phi i64 [ %indvars.iv.next.1, %.lr.ph.1 ], [ %indvars.iv.1.ph, %.lr.ph.1.preheader ]
  %.01722.1 = phi i32 [ %35, %.lr.ph.1 ], [ %.01722.1.ph, %.lr.ph.1.preheader ]
  %32 = getelementptr inbounds [8 x i8], ptr %2, i64 0, i64 %indvars.iv.1
  %33 = load i8, ptr %32, align 1, !tbaa !9, !range !16, !noundef !17
  %34 = zext nneg i8 %33 to i32
  %35 = add nuw nsw i32 %.01722.1, %34
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.1, 1
  %exitcond.1.not = icmp eq i64 %indvars.iv.next.1, %wide.trip.count.1
  br i1 %exitcond.1.not, label %._crit_edge.1, label %.lr.ph.1, !llvm.loop !18

._crit_edge.1:                                    ; preds = %.lr.ph.1, %middle.block48, %._crit_edge
  %.017.lcssa.1 = phi i32 [ 0, %._crit_edge ], [ %31, %middle.block48 ], [ %35, %.lr.ph.1 ]
  %36 = sext i32 %22 to i64
  %37 = getelementptr inbounds [8 x i8], ptr %2, i64 0, i64 %36
  store i8 1, ptr %37, align 1, !tbaa !9
  %38 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef 2) #5
  %39 = load i32, ptr %38, align 4, !tbaa !5
  %40 = add i32 %39, -1
  %41 = icmp sgt i32 %39, 1
  br i1 %41, label %.lr.ph.preheader.2, label %._crit_edge.2

.lr.ph.preheader.2:                               ; preds = %._crit_edge.1
  %wide.trip.count.2 = zext nneg i32 %40 to i64
  %min.iters.check67 = icmp ult i32 %39, 9
  br i1 %min.iters.check67, label %.lr.ph.2.preheader, label %vector.ph68

vector.ph68:                                      ; preds = %.lr.ph.preheader.2
  %n.vec70 = and i64 %wide.trip.count.2, 2147483640
  br label %vector.body72

vector.body72:                                    ; preds = %vector.body72, %vector.ph68
  %index73 = phi i64 [ 0, %vector.ph68 ], [ %index.next78, %vector.body72 ]
  %vec.phi74 = phi <4 x i32> [ zeroinitializer, %vector.ph68 ], [ %46, %vector.body72 ]
  %vec.phi75 = phi <4 x i32> [ zeroinitializer, %vector.ph68 ], [ %47, %vector.body72 ]
  %42 = getelementptr inbounds [8 x i8], ptr %2, i64 0, i64 %index73
  %43 = getelementptr inbounds i8, ptr %42, i64 4
  %wide.load76 = load <4 x i8>, ptr %42, align 1, !tbaa !9
  %wide.load77 = load <4 x i8>, ptr %43, align 1, !tbaa !9
  %44 = zext <4 x i8> %wide.load76 to <4 x i32>
  %45 = zext <4 x i8> %wide.load77 to <4 x i32>
  %46 = add <4 x i32> %vec.phi74, %44
  %47 = add <4 x i32> %vec.phi75, %45
  %index.next78 = add nuw i64 %index73, 8
  %48 = icmp eq i64 %index.next78, %n.vec70
  br i1 %48, label %middle.block65, label %vector.body72, !llvm.loop !19

middle.block65:                                   ; preds = %vector.body72
  %bin.rdx79 = add <4 x i32> %47, %46
  %49 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx79)
  %cmp.n80 = icmp eq i64 %n.vec70, %wide.trip.count.2
  br i1 %cmp.n80, label %._crit_edge.2, label %.lr.ph.2.preheader

.lr.ph.2.preheader:                               ; preds = %middle.block65, %.lr.ph.preheader.2
  %indvars.iv.2.ph = phi i64 [ 0, %.lr.ph.preheader.2 ], [ %n.vec70, %middle.block65 ]
  %.01722.2.ph = phi i32 [ 0, %.lr.ph.preheader.2 ], [ %49, %middle.block65 ]
  br label %.lr.ph.2

.lr.ph.2:                                         ; preds = %.lr.ph.2.preheader, %.lr.ph.2
  %indvars.iv.2 = phi i64 [ %indvars.iv.next.2, %.lr.ph.2 ], [ %indvars.iv.2.ph, %.lr.ph.2.preheader ]
  %.01722.2 = phi i32 [ %53, %.lr.ph.2 ], [ %.01722.2.ph, %.lr.ph.2.preheader ]
  %50 = getelementptr inbounds [8 x i8], ptr %2, i64 0, i64 %indvars.iv.2
  %51 = load i8, ptr %50, align 1, !tbaa !9, !range !16, !noundef !17
  %52 = zext nneg i8 %51 to i32
  %53 = add nuw nsw i32 %.01722.2, %52
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv.2, 1
  %exitcond.2.not = icmp eq i64 %indvars.iv.next.2, %wide.trip.count.2
  br i1 %exitcond.2.not, label %._crit_edge.2, label %.lr.ph.2, !llvm.loop !20

._crit_edge.2:                                    ; preds = %.lr.ph.2, %middle.block65, %._crit_edge.1
  %.017.lcssa.2 = phi i32 [ 0, %._crit_edge.1 ], [ %49, %middle.block65 ], [ %53, %.lr.ph.2 ]
  %54 = sext i32 %40 to i64
  %55 = getelementptr inbounds [8 x i8], ptr %2, i64 0, i64 %54
  store i8 1, ptr %55, align 1, !tbaa !9
  %56 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef 3) #5
  %57 = load i32, ptr %56, align 4, !tbaa !5
  %58 = add i32 %57, -1
  %59 = icmp sgt i32 %57, 1
  br i1 %59, label %.lr.ph.preheader.3, label %._crit_edge.3

.lr.ph.preheader.3:                               ; preds = %._crit_edge.2
  %wide.trip.count.3 = zext nneg i32 %58 to i64
  %min.iters.check84 = icmp ult i32 %57, 9
  br i1 %min.iters.check84, label %.lr.ph.3.preheader, label %vector.ph85

vector.ph85:                                      ; preds = %.lr.ph.preheader.3
  %n.vec87 = and i64 %wide.trip.count.3, 2147483640
  br label %vector.body89

vector.body89:                                    ; preds = %vector.body89, %vector.ph85
  %index90 = phi i64 [ 0, %vector.ph85 ], [ %index.next95, %vector.body89 ]
  %vec.phi91 = phi <4 x i32> [ zeroinitializer, %vector.ph85 ], [ %64, %vector.body89 ]
  %vec.phi92 = phi <4 x i32> [ zeroinitializer, %vector.ph85 ], [ %65, %vector.body89 ]
  %60 = getelementptr inbounds [8 x i8], ptr %2, i64 0, i64 %index90
  %61 = getelementptr inbounds i8, ptr %60, i64 4
  %wide.load93 = load <4 x i8>, ptr %60, align 1, !tbaa !9
  %wide.load94 = load <4 x i8>, ptr %61, align 1, !tbaa !9
  %62 = zext <4 x i8> %wide.load93 to <4 x i32>
  %63 = zext <4 x i8> %wide.load94 to <4 x i32>
  %64 = add <4 x i32> %vec.phi91, %62
  %65 = add <4 x i32> %vec.phi92, %63
  %index.next95 = add nuw i64 %index90, 8
  %66 = icmp eq i64 %index.next95, %n.vec87
  br i1 %66, label %middle.block82, label %vector.body89, !llvm.loop !21

middle.block82:                                   ; preds = %vector.body89
  %bin.rdx96 = add <4 x i32> %65, %64
  %67 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx96)
  %cmp.n97 = icmp eq i64 %n.vec87, %wide.trip.count.3
  br i1 %cmp.n97, label %._crit_edge.3, label %.lr.ph.3.preheader

.lr.ph.3.preheader:                               ; preds = %middle.block82, %.lr.ph.preheader.3
  %indvars.iv.3.ph = phi i64 [ 0, %.lr.ph.preheader.3 ], [ %n.vec87, %middle.block82 ]
  %.01722.3.ph = phi i32 [ 0, %.lr.ph.preheader.3 ], [ %67, %middle.block82 ]
  br label %.lr.ph.3

.lr.ph.3:                                         ; preds = %.lr.ph.3.preheader, %.lr.ph.3
  %indvars.iv.3 = phi i64 [ %indvars.iv.next.3, %.lr.ph.3 ], [ %indvars.iv.3.ph, %.lr.ph.3.preheader ]
  %.01722.3 = phi i32 [ %71, %.lr.ph.3 ], [ %.01722.3.ph, %.lr.ph.3.preheader ]
  %68 = getelementptr inbounds [8 x i8], ptr %2, i64 0, i64 %indvars.iv.3
  %69 = load i8, ptr %68, align 1, !tbaa !9, !range !16, !noundef !17
  %70 = zext nneg i8 %69 to i32
  %71 = add nuw nsw i32 %.01722.3, %70
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv.3, 1
  %exitcond.3.not = icmp eq i64 %indvars.iv.next.3, %wide.trip.count.3
  br i1 %exitcond.3.not, label %._crit_edge.3, label %.lr.ph.3, !llvm.loop !22

._crit_edge.3:                                    ; preds = %.lr.ph.3, %middle.block82, %._crit_edge.2
  %.017.lcssa.3 = phi i32 [ 0, %._crit_edge.2 ], [ %67, %middle.block82 ], [ %71, %.lr.ph.3 ]
  %72 = sext i32 %58 to i64
  %73 = getelementptr inbounds [8 x i8], ptr %2, i64 0, i64 %72
  store i8 1, ptr %73, align 1, !tbaa !9
  %74 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef 4) #5
  %75 = load i32, ptr %74, align 4, !tbaa !5
  %76 = add i32 %75, -1
  %77 = icmp sgt i32 %75, 1
  br i1 %77, label %.lr.ph.preheader.4, label %._crit_edge.4

.lr.ph.preheader.4:                               ; preds = %._crit_edge.3
  %wide.trip.count.4 = zext nneg i32 %76 to i64
  %min.iters.check101 = icmp ult i32 %75, 9
  br i1 %min.iters.check101, label %.lr.ph.4.preheader, label %vector.ph102

vector.ph102:                                     ; preds = %.lr.ph.preheader.4
  %n.vec104 = and i64 %wide.trip.count.4, 2147483640
  br label %vector.body106

vector.body106:                                   ; preds = %vector.body106, %vector.ph102
  %index107 = phi i64 [ 0, %vector.ph102 ], [ %index.next112, %vector.body106 ]
  %vec.phi108 = phi <4 x i32> [ zeroinitializer, %vector.ph102 ], [ %82, %vector.body106 ]
  %vec.phi109 = phi <4 x i32> [ zeroinitializer, %vector.ph102 ], [ %83, %vector.body106 ]
  %78 = getelementptr inbounds [8 x i8], ptr %2, i64 0, i64 %index107
  %79 = getelementptr inbounds i8, ptr %78, i64 4
  %wide.load110 = load <4 x i8>, ptr %78, align 1, !tbaa !9
  %wide.load111 = load <4 x i8>, ptr %79, align 1, !tbaa !9
  %80 = zext <4 x i8> %wide.load110 to <4 x i32>
  %81 = zext <4 x i8> %wide.load111 to <4 x i32>
  %82 = add <4 x i32> %vec.phi108, %80
  %83 = add <4 x i32> %vec.phi109, %81
  %index.next112 = add nuw i64 %index107, 8
  %84 = icmp eq i64 %index.next112, %n.vec104
  br i1 %84, label %middle.block99, label %vector.body106, !llvm.loop !23

middle.block99:                                   ; preds = %vector.body106
  %bin.rdx113 = add <4 x i32> %83, %82
  %85 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx113)
  %cmp.n114 = icmp eq i64 %n.vec104, %wide.trip.count.4
  br i1 %cmp.n114, label %._crit_edge.4, label %.lr.ph.4.preheader

.lr.ph.4.preheader:                               ; preds = %middle.block99, %.lr.ph.preheader.4
  %indvars.iv.4.ph = phi i64 [ 0, %.lr.ph.preheader.4 ], [ %n.vec104, %middle.block99 ]
  %.01722.4.ph = phi i32 [ 0, %.lr.ph.preheader.4 ], [ %85, %middle.block99 ]
  br label %.lr.ph.4

.lr.ph.4:                                         ; preds = %.lr.ph.4.preheader, %.lr.ph.4
  %indvars.iv.4 = phi i64 [ %indvars.iv.next.4, %.lr.ph.4 ], [ %indvars.iv.4.ph, %.lr.ph.4.preheader ]
  %.01722.4 = phi i32 [ %89, %.lr.ph.4 ], [ %.01722.4.ph, %.lr.ph.4.preheader ]
  %86 = getelementptr inbounds [8 x i8], ptr %2, i64 0, i64 %indvars.iv.4
  %87 = load i8, ptr %86, align 1, !tbaa !9, !range !16, !noundef !17
  %88 = zext nneg i8 %87 to i32
  %89 = add nuw nsw i32 %.01722.4, %88
  %indvars.iv.next.4 = add nuw nsw i64 %indvars.iv.4, 1
  %exitcond.4.not = icmp eq i64 %indvars.iv.next.4, %wide.trip.count.4
  br i1 %exitcond.4.not, label %._crit_edge.4, label %.lr.ph.4, !llvm.loop !24

._crit_edge.4:                                    ; preds = %.lr.ph.4, %middle.block99, %._crit_edge.3
  %.017.lcssa.4 = phi i32 [ 0, %._crit_edge.3 ], [ %85, %middle.block99 ], [ %89, %.lr.ph.4 ]
  %90 = sext i32 %76 to i64
  %91 = getelementptr inbounds [8 x i8], ptr %2, i64 0, i64 %90
  store i8 1, ptr %91, align 1, !tbaa !9
  %92 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef 5) #5
  %93 = load i32, ptr %92, align 4, !tbaa !5
  %94 = add i32 %93, -1
  %95 = icmp sgt i32 %93, 1
  br i1 %95, label %.lr.ph.preheader.5, label %._crit_edge.5

.lr.ph.preheader.5:                               ; preds = %._crit_edge.4
  %wide.trip.count.5 = zext nneg i32 %94 to i64
  %min.iters.check118 = icmp ult i32 %93, 9
  br i1 %min.iters.check118, label %.lr.ph.5.preheader, label %vector.ph119

vector.ph119:                                     ; preds = %.lr.ph.preheader.5
  %n.vec121 = and i64 %wide.trip.count.5, 2147483640
  br label %vector.body123

vector.body123:                                   ; preds = %vector.body123, %vector.ph119
  %index124 = phi i64 [ 0, %vector.ph119 ], [ %index.next129, %vector.body123 ]
  %vec.phi125 = phi <4 x i32> [ zeroinitializer, %vector.ph119 ], [ %100, %vector.body123 ]
  %vec.phi126 = phi <4 x i32> [ zeroinitializer, %vector.ph119 ], [ %101, %vector.body123 ]
  %96 = getelementptr inbounds [8 x i8], ptr %2, i64 0, i64 %index124
  %97 = getelementptr inbounds i8, ptr %96, i64 4
  %wide.load127 = load <4 x i8>, ptr %96, align 1, !tbaa !9
  %wide.load128 = load <4 x i8>, ptr %97, align 1, !tbaa !9
  %98 = zext <4 x i8> %wide.load127 to <4 x i32>
  %99 = zext <4 x i8> %wide.load128 to <4 x i32>
  %100 = add <4 x i32> %vec.phi125, %98
  %101 = add <4 x i32> %vec.phi126, %99
  %index.next129 = add nuw i64 %index124, 8
  %102 = icmp eq i64 %index.next129, %n.vec121
  br i1 %102, label %middle.block116, label %vector.body123, !llvm.loop !25

middle.block116:                                  ; preds = %vector.body123
  %bin.rdx130 = add <4 x i32> %101, %100
  %103 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx130)
  %cmp.n131 = icmp eq i64 %n.vec121, %wide.trip.count.5
  br i1 %cmp.n131, label %._crit_edge.5, label %.lr.ph.5.preheader

.lr.ph.5.preheader:                               ; preds = %middle.block116, %.lr.ph.preheader.5
  %indvars.iv.5.ph = phi i64 [ 0, %.lr.ph.preheader.5 ], [ %n.vec121, %middle.block116 ]
  %.01722.5.ph = phi i32 [ 0, %.lr.ph.preheader.5 ], [ %103, %middle.block116 ]
  br label %.lr.ph.5

.lr.ph.5:                                         ; preds = %.lr.ph.5.preheader, %.lr.ph.5
  %indvars.iv.5 = phi i64 [ %indvars.iv.next.5, %.lr.ph.5 ], [ %indvars.iv.5.ph, %.lr.ph.5.preheader ]
  %.01722.5 = phi i32 [ %107, %.lr.ph.5 ], [ %.01722.5.ph, %.lr.ph.5.preheader ]
  %104 = getelementptr inbounds [8 x i8], ptr %2, i64 0, i64 %indvars.iv.5
  %105 = load i8, ptr %104, align 1, !tbaa !9, !range !16, !noundef !17
  %106 = zext nneg i8 %105 to i32
  %107 = add nuw nsw i32 %.01722.5, %106
  %indvars.iv.next.5 = add nuw nsw i64 %indvars.iv.5, 1
  %exitcond.5.not = icmp eq i64 %indvars.iv.next.5, %wide.trip.count.5
  br i1 %exitcond.5.not, label %._crit_edge.5, label %.lr.ph.5, !llvm.loop !26

._crit_edge.5:                                    ; preds = %.lr.ph.5, %middle.block116, %._crit_edge.4
  %.017.lcssa.5 = phi i32 [ 0, %._crit_edge.4 ], [ %103, %middle.block116 ], [ %107, %.lr.ph.5 ]
  %108 = sext i32 %94 to i64
  %109 = getelementptr inbounds [8 x i8], ptr %2, i64 0, i64 %108
  store i8 1, ptr %109, align 1, !tbaa !9
  %110 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef 6) #5
  %111 = load i32, ptr %110, align 4, !tbaa !5
  %112 = add i32 %111, -1
  %113 = icmp sgt i32 %111, 1
  br i1 %113, label %.lr.ph.preheader.6, label %._crit_edge.6

.lr.ph.preheader.6:                               ; preds = %._crit_edge.5
  %wide.trip.count.6 = zext nneg i32 %112 to i64
  %min.iters.check135 = icmp ult i32 %111, 9
  br i1 %min.iters.check135, label %.lr.ph.6.preheader, label %vector.ph136

vector.ph136:                                     ; preds = %.lr.ph.preheader.6
  %n.vec138 = and i64 %wide.trip.count.6, 2147483640
  br label %vector.body140

vector.body140:                                   ; preds = %vector.body140, %vector.ph136
  %index141 = phi i64 [ 0, %vector.ph136 ], [ %index.next146, %vector.body140 ]
  %vec.phi142 = phi <4 x i32> [ zeroinitializer, %vector.ph136 ], [ %118, %vector.body140 ]
  %vec.phi143 = phi <4 x i32> [ zeroinitializer, %vector.ph136 ], [ %119, %vector.body140 ]
  %114 = getelementptr inbounds [8 x i8], ptr %2, i64 0, i64 %index141
  %115 = getelementptr inbounds i8, ptr %114, i64 4
  %wide.load144 = load <4 x i8>, ptr %114, align 1, !tbaa !9
  %wide.load145 = load <4 x i8>, ptr %115, align 1, !tbaa !9
  %116 = zext <4 x i8> %wide.load144 to <4 x i32>
  %117 = zext <4 x i8> %wide.load145 to <4 x i32>
  %118 = add <4 x i32> %vec.phi142, %116
  %119 = add <4 x i32> %vec.phi143, %117
  %index.next146 = add nuw i64 %index141, 8
  %120 = icmp eq i64 %index.next146, %n.vec138
  br i1 %120, label %middle.block133, label %vector.body140, !llvm.loop !27

middle.block133:                                  ; preds = %vector.body140
  %bin.rdx147 = add <4 x i32> %119, %118
  %121 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx147)
  %cmp.n148 = icmp eq i64 %n.vec138, %wide.trip.count.6
  br i1 %cmp.n148, label %._crit_edge.6, label %.lr.ph.6.preheader

.lr.ph.6.preheader:                               ; preds = %middle.block133, %.lr.ph.preheader.6
  %indvars.iv.6.ph = phi i64 [ 0, %.lr.ph.preheader.6 ], [ %n.vec138, %middle.block133 ]
  %.01722.6.ph = phi i32 [ 0, %.lr.ph.preheader.6 ], [ %121, %middle.block133 ]
  br label %.lr.ph.6

.lr.ph.6:                                         ; preds = %.lr.ph.6.preheader, %.lr.ph.6
  %indvars.iv.6 = phi i64 [ %indvars.iv.next.6, %.lr.ph.6 ], [ %indvars.iv.6.ph, %.lr.ph.6.preheader ]
  %.01722.6 = phi i32 [ %125, %.lr.ph.6 ], [ %.01722.6.ph, %.lr.ph.6.preheader ]
  %122 = getelementptr inbounds [8 x i8], ptr %2, i64 0, i64 %indvars.iv.6
  %123 = load i8, ptr %122, align 1, !tbaa !9, !range !16, !noundef !17
  %124 = zext nneg i8 %123 to i32
  %125 = add nuw nsw i32 %.01722.6, %124
  %indvars.iv.next.6 = add nuw nsw i64 %indvars.iv.6, 1
  %exitcond.6.not = icmp eq i64 %indvars.iv.next.6, %wide.trip.count.6
  br i1 %exitcond.6.not, label %._crit_edge.6, label %.lr.ph.6, !llvm.loop !28

._crit_edge.6:                                    ; preds = %.lr.ph.6, %middle.block133, %._crit_edge.5
  %.017.lcssa.6 = phi i32 [ 0, %._crit_edge.5 ], [ %121, %middle.block133 ], [ %125, %.lr.ph.6 ]
  %126 = sext i32 %112 to i64
  %127 = getelementptr inbounds [8 x i8], ptr %2, i64 0, i64 %126
  store i8 1, ptr %127, align 1, !tbaa !9
  %128 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef 7) #5
  %129 = load i32, ptr %128, align 4, !tbaa !5
  %130 = add i32 %129, -1
  %131 = icmp sgt i32 %129, 1
  br i1 %131, label %.lr.ph.preheader.7, label %._crit_edge.7

.lr.ph.preheader.7:                               ; preds = %._crit_edge.6
  %wide.trip.count.7 = zext nneg i32 %130 to i64
  %min.iters.check152 = icmp ult i32 %129, 9
  br i1 %min.iters.check152, label %.lr.ph.7.preheader, label %vector.ph153

vector.ph153:                                     ; preds = %.lr.ph.preheader.7
  %n.vec155 = and i64 %wide.trip.count.7, 2147483640
  br label %vector.body157

vector.body157:                                   ; preds = %vector.body157, %vector.ph153
  %index158 = phi i64 [ 0, %vector.ph153 ], [ %index.next163, %vector.body157 ]
  %vec.phi159 = phi <4 x i32> [ zeroinitializer, %vector.ph153 ], [ %136, %vector.body157 ]
  %vec.phi160 = phi <4 x i32> [ zeroinitializer, %vector.ph153 ], [ %137, %vector.body157 ]
  %132 = getelementptr inbounds [8 x i8], ptr %2, i64 0, i64 %index158
  %133 = getelementptr inbounds i8, ptr %132, i64 4
  %wide.load161 = load <4 x i8>, ptr %132, align 1, !tbaa !9
  %wide.load162 = load <4 x i8>, ptr %133, align 1, !tbaa !9
  %134 = zext <4 x i8> %wide.load161 to <4 x i32>
  %135 = zext <4 x i8> %wide.load162 to <4 x i32>
  %136 = add <4 x i32> %vec.phi159, %134
  %137 = add <4 x i32> %vec.phi160, %135
  %index.next163 = add nuw i64 %index158, 8
  %138 = icmp eq i64 %index.next163, %n.vec155
  br i1 %138, label %middle.block150, label %vector.body157, !llvm.loop !29

middle.block150:                                  ; preds = %vector.body157
  %bin.rdx164 = add <4 x i32> %137, %136
  %139 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx164)
  %cmp.n165 = icmp eq i64 %n.vec155, %wide.trip.count.7
  br i1 %cmp.n165, label %._crit_edge.7, label %.lr.ph.7.preheader

.lr.ph.7.preheader:                               ; preds = %middle.block150, %.lr.ph.preheader.7
  %indvars.iv.7.ph = phi i64 [ 0, %.lr.ph.preheader.7 ], [ %n.vec155, %middle.block150 ]
  %.01722.7.ph = phi i32 [ 0, %.lr.ph.preheader.7 ], [ %139, %middle.block150 ]
  br label %.lr.ph.7

.lr.ph.7:                                         ; preds = %.lr.ph.7.preheader, %.lr.ph.7
  %indvars.iv.7 = phi i64 [ %indvars.iv.next.7, %.lr.ph.7 ], [ %indvars.iv.7.ph, %.lr.ph.7.preheader ]
  %.01722.7 = phi i32 [ %143, %.lr.ph.7 ], [ %.01722.7.ph, %.lr.ph.7.preheader ]
  %140 = getelementptr inbounds [8 x i8], ptr %2, i64 0, i64 %indvars.iv.7
  %141 = load i8, ptr %140, align 1, !tbaa !9, !range !16, !noundef !17
  %142 = zext nneg i8 %141 to i32
  %143 = add nuw nsw i32 %.01722.7, %142
  %indvars.iv.next.7 = add nuw nsw i64 %indvars.iv.7, 1
  %exitcond.7.not = icmp eq i64 %indvars.iv.next.7, %wide.trip.count.7
  br i1 %exitcond.7.not, label %._crit_edge.7, label %.lr.ph.7, !llvm.loop !30

._crit_edge.7:                                    ; preds = %.lr.ph.7, %middle.block150, %._crit_edge.6
  %.017.lcssa.7 = phi i32 [ 0, %._crit_edge.6 ], [ %139, %middle.block150 ], [ %143, %.lr.ph.7 ]
  %144 = sub nsw i32 %112, %.017.lcssa.6
  %145 = sdiv i32 %4, 40320
  %146 = mul nsw i32 %144, %145
  %147 = sub nsw i32 %94, %.017.lcssa.5
  %148 = sdiv i32 %4, 20160
  %149 = mul nsw i32 %147, %148
  %150 = sub nsw i32 %76, %.017.lcssa.4
  %151 = sdiv i32 %4, 6720
  %152 = mul nsw i32 %150, %151
  %153 = sub nsw i32 %58, %.017.lcssa.3
  %154 = sdiv i32 %4, 1680
  %155 = mul nsw i32 %153, %154
  %156 = sub nsw i32 %40, %.017.lcssa.2
  %157 = sdiv i32 %4, 336
  %158 = mul nsw i32 %156, %157
  %159 = sub nsw i32 %22, %.017.lcssa.1
  %160 = sdiv i32 %4, 56
  %161 = mul nsw i32 %159, %160
  %162 = sub nsw i32 %8, %.017.lcssa
  %163 = sdiv i32 %4, 8
  %164 = mul nsw i32 %162, %163
  %165 = add nsw i32 %161, %164
  %166 = add nsw i32 %158, %165
  %167 = add nsw i32 %155, %166
  %168 = add nsw i32 %152, %167
  %169 = add nsw i32 %149, %168
  %170 = add nsw i32 %146, %169
  %171 = sub nsw i32 %130, %.017.lcssa.7
  %172 = mul nsw i32 %171, %145
  %173 = add nsw i32 %172, %170
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #5
  ret i32 %173

.lr.ph:                                           ; preds = %.lr.ph.preheader187, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ %indvars.iv.ph, %.lr.ph.preheader187 ]
  %.01722 = phi i32 [ %177, %.lr.ph ], [ %.01722.ph, %.lr.ph.preheader187 ]
  %174 = getelementptr inbounds [8 x i8], ptr %2, i64 0, i64 %indvars.iv
  %175 = load i8, ptr %174, align 1, !tbaa !9, !range !16, !noundef !17
  %176 = zext nneg i8 %175 to i32
  %177 = add nuw nsw i32 %.01722, %176
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !31
}

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZSt4fillIPbbEvT_S1_RKT0_(ptr noundef, ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #3

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.vector.reduce.add.v4i32(<4 x i32>) #4

attributes #0 = { mustprogress 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 = { mustprogress 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 #2 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { inlinehint mustprogress 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 #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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 = !{!10, !10, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = distinct !{!11, !12, !13, !14}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!"llvm.loop.isvectorized", i32 1}
!14 = !{!"llvm.loop.unroll.runtime.disable"}
!15 = distinct !{!15, !12, !13, !14}
!16 = !{i8 0, i8 2}
!17 = !{}
!18 = distinct !{!18, !12, !14, !13}
!19 = distinct !{!19, !12, !13, !14}
!20 = distinct !{!20, !12, !14, !13}
!21 = distinct !{!21, !12, !13, !14}
!22 = distinct !{!22, !12, !14, !13}
!23 = distinct !{!23, !12, !13, !14}
!24 = distinct !{!24, !12, !14, !13}
!25 = distinct !{!25, !12, !13, !14}
!26 = distinct !{!26, !12, !14, !13}
!27 = distinct !{!27, !12, !13, !14}
!28 = distinct !{!28, !12, !14, !13}
!29 = distinct !{!29, !12, !13, !14}
!30 = distinct !{!30, !12, !14, !13}
!31 = distinct !{!31, !12, !14, !13}


; Effective O3 passes: CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,ReassociatePass,SROAPass,SimplifyCFGPass