; LLVM IR from hao14293/2021-Postgraduate-408 :: Data-Structure/Sort/sorts (Binary_insertSort)

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

%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }

@__const.main.a = external hidden unnamed_addr constant [9 x i32], align 16
@_ZSt4cout = external global %"class.std::basic_ostream", align 8

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main() #0 {
  %1 = alloca i32, align 4
  %2 = alloca [9 x i32], align 16
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  store i32 0, ptr %1, align 4
  call void @llvm.lifetime.start.p0(i64 36, ptr %2) #4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %2, ptr align 16 @__const.main.a, i64 36, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #4
  store i32 9, ptr %3, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #4
  store i32 2, ptr %4, align 4, !tbaa !5
  br label %11

11:                                               ; preds = %75, %0
  %12 = load i32, ptr %4, align 4, !tbaa !5
  %13 = load i32, ptr %3, align 4, !tbaa !5
  %14 = icmp slt i32 %12, %13
  br i1 %14, label %16, label %15

15:                                               ; preds = %11
  store i32 2, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #4
  br label %78

16:                                               ; preds = %11
  %17 = load i32, ptr %4, align 4, !tbaa !5
  %18 = sext i32 %17 to i64
  %19 = getelementptr inbounds [9 x i32], ptr %2, i64 0, i64 %18
  %20 = load i32, ptr %19, align 4, !tbaa !5
  %21 = getelementptr inbounds [9 x i32], ptr %2, i64 0, i64 0
  store i32 %20, ptr %21, align 16, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #4
  store i32 1, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  %22 = load i32, ptr %4, align 4, !tbaa !5
  %23 = sub nsw i32 %22, 1
  store i32 %23, ptr %7, align 4, !tbaa !5
  br label %24

24:                                               ; preds = %46, %16
  %25 = load i32, ptr %6, align 4, !tbaa !5
  %26 = load i32, ptr %7, align 4, !tbaa !5
  %27 = icmp sle i32 %25, %26
  br i1 %27, label %28, label %47

28:                                               ; preds = %24
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #4
  %29 = load i32, ptr %6, align 4, !tbaa !5
  %30 = load i32, ptr %7, align 4, !tbaa !5
  %31 = add nsw i32 %29, %30
  %32 = sdiv i32 %31, 2
  store i32 %32, ptr %8, align 4, !tbaa !5
  %33 = getelementptr inbounds [9 x i32], ptr %2, i64 0, i64 0
  %34 = load i32, ptr %33, align 16, !tbaa !5
  %35 = load i32, ptr %8, align 4, !tbaa !5
  %36 = sext i32 %35 to i64
  %37 = getelementptr inbounds [9 x i32], ptr %2, i64 0, i64 %36
  %38 = load i32, ptr %37, align 4, !tbaa !5
  %39 = icmp slt i32 %34, %38
  br i1 %39, label %40, label %43

40:                                               ; preds = %28
  %41 = load i32, ptr %8, align 4, !tbaa !5
  %42 = sub nsw i32 %41, 1
  store i32 %42, ptr %7, align 4, !tbaa !5
  br label %46

43:                                               ; preds = %28
  %44 = load i32, ptr %8, align 4, !tbaa !5
  %45 = add nsw i32 %44, 1
  store i32 %45, ptr %6, align 4, !tbaa !5
  br label %46

46:                                               ; preds = %43, %40
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #4
  br label %24, !llvm.loop !9

47:                                               ; preds = %24
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  %48 = load i32, ptr %4, align 4, !tbaa !5
  %49 = sub nsw i32 %48, 1
  store i32 %49, ptr %9, align 4, !tbaa !5
  br label %50

50:                                               ; preds = %65, %47
  %51 = load i32, ptr %9, align 4, !tbaa !5
  %52 = load i32, ptr %7, align 4, !tbaa !5
  %53 = add nsw i32 %52, 1
  %54 = icmp sge i32 %51, %53
  br i1 %54, label %56, label %55

55:                                               ; preds = %50
  store i32 7, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  br label %68

56:                                               ; preds = %50
  %57 = load i32, ptr %9, align 4, !tbaa !5
  %58 = sext i32 %57 to i64
  %59 = getelementptr inbounds [9 x i32], ptr %2, i64 0, i64 %58
  %60 = load i32, ptr %59, align 4, !tbaa !5
  %61 = load i32, ptr %9, align 4, !tbaa !5
  %62 = add nsw i32 %61, 1
  %63 = sext i32 %62 to i64
  %64 = getelementptr inbounds [9 x i32], ptr %2, i64 0, i64 %63
  store i32 %60, ptr %64, align 4, !tbaa !5
  br label %65

65:                                               ; preds = %56
  %66 = load i32, ptr %9, align 4, !tbaa !5
  %67 = add nsw i32 %66, -1
  store i32 %67, ptr %9, align 4, !tbaa !5
  br label %50, !llvm.loop !11

68:                                               ; preds = %55
  %69 = getelementptr inbounds [9 x i32], ptr %2, i64 0, i64 0
  %70 = load i32, ptr %69, align 16, !tbaa !5
  %71 = load i32, ptr %7, align 4, !tbaa !5
  %72 = add nsw i32 %71, 1
  %73 = sext i32 %72 to i64
  %74 = getelementptr inbounds [9 x i32], ptr %2, i64 0, i64 %73
  store i32 %70, ptr %74, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #4
  br label %75

75:                                               ; preds = %68
  %76 = load i32, ptr %4, align 4, !tbaa !5
  %77 = add nsw i32 %76, 1
  store i32 %77, ptr %4, align 4, !tbaa !5
  br label %11, !llvm.loop !12

78:                                               ; preds = %15
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  store i32 1, ptr %10, align 4, !tbaa !5
  br label %79

79:                                               ; preds = %90, %78
  %80 = load i32, ptr %10, align 4, !tbaa !5
  %81 = load i32, ptr %3, align 4, !tbaa !5
  %82 = icmp slt i32 %80, %81
  br i1 %82, label %84, label %83

83:                                               ; preds = %79
  store i32 10, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  br label %93

84:                                               ; preds = %79
  %85 = load i32, ptr %10, align 4, !tbaa !5
  %86 = sext i32 %85 to i64
  %87 = getelementptr inbounds [9 x i32], ptr %2, i64 0, i64 %86
  %88 = load i32, ptr %87, align 4, !tbaa !5
  %89 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, i32 noundef %88)
  br label %90

90:                                               ; preds = %84
  %91 = load i32, ptr %10, align 4, !tbaa !5
  %92 = add nsw i32 %91, 1
  store i32 %92, ptr %10, align 4, !tbaa !5
  br label %79, !llvm.loop !13

93:                                               ; preds = %83
  store i32 0, ptr %1, align 4
  store i32 1, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #4
  call void @llvm.lifetime.end.p0(i64 36, ptr %2) #4
  %94 = load i32, ptr %1, align 4
  ret i32 %94
}

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #2

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

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) #3

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

%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }

@__const.main.a = external hidden unnamed_addr constant [9 x i32], align 16
@_ZSt4cout = external global %"class.std::basic_ostream", align 8

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main() local_unnamed_addr #0 {
.lr.ph.preheader:
  %0 = alloca [9 x i32], align 16
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %0) #4
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(36) %0, ptr noundef nonnull align 16 dereferenceable(36) @__const.main.a, i64 36, i1 false)
  %1 = getelementptr inbounds i8, ptr %0, i64 8
  %2 = load i32, ptr %1, align 8, !tbaa !5
  store i32 %2, ptr %0, align 16, !tbaa !5
  br label %.lr.ph

.preheader31:                                     ; preds = %.lr.ph
  %3 = sext i32 %.1 to i64
  %.not30.not35 = icmp slt i32 %.1, 1
  br i1 %.not30.not35, label %.lr.ph37.preheader, label %.lr.ph.preheader.1

.lr.ph37.preheader:                               ; preds = %.preheader31
  %4 = sub nsw i64 1, %3
  %min.iters.check = icmp ult i64 %4, 8
  br i1 %min.iters.check, label %.lr.ph37.preheader187, label %vector.ph

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

vector.ph:                                        ; preds = %.lr.ph37.preheader
  %n.vec = and i64 %4, -8
  %ind.end = sub nsw i64 1, %n.vec
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %offset.idx = sub i64 1, %index
  %5 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %offset.idx
  %6 = getelementptr inbounds i8, ptr %5, i64 -12
  %7 = getelementptr inbounds i8, ptr %5, i64 -28
  %wide.load = load <4 x i32>, ptr %6, align 8, !tbaa !5
  %wide.load63 = load <4 x i32>, ptr %7, align 8, !tbaa !5
  %8 = sub i64 2, %index
  %9 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %8
  %10 = getelementptr inbounds i8, ptr %9, i64 -12
  %11 = getelementptr inbounds i8, ptr %9, i64 -28
  store <4 x i32> %wide.load, ptr %10, align 4, !tbaa !5
  store <4 x i32> %wide.load63, ptr %11, align 4, !tbaa !5
  %index.next = add nuw i64 %index, 8
  %12 = icmp eq i64 %index.next, %n.vec
  br i1 %12, label %middle.block, label %vector.body, !llvm.loop !9

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %4, %n.vec
  br i1 %cmp.n, label %._crit_edge.loopexit, label %.lr.ph37.preheader187

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %.02534 = phi i32 [ %.1, %.lr.ph ], [ 1, %.lr.ph.preheader ]
  %.02633 = phi i32 [ %.127, %.lr.ph ], [ 1, %.lr.ph.preheader ]
  %13 = add nuw nsw i32 %.02534, %.02633
  %14 = lshr i32 %13, 1
  %15 = zext nneg i32 %14 to i64
  %16 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %15
  %17 = load i32, ptr %16, align 4, !tbaa !5
  %18 = icmp slt i32 %2, %17
  %19 = add nsw i32 %14, -1
  %20 = add nuw nsw i32 %14, 1
  %.127 = select i1 %18, i32 %.02633, i32 %20
  %.1 = select i1 %18, i32 %19, i32 %.02534
  %.not = icmp sgt i32 %.127, %.1
  br i1 %.not, label %.preheader31, label %.lr.ph, !llvm.loop !13

._crit_edge.loopexit:                             ; preds = %.lr.ph37, %middle.block
  %.pre = load i32, ptr %0, align 16, !tbaa !5
  br label %.lr.ph.preheader.1

.lr.ph.preheader.1:                               ; preds = %.preheader31, %._crit_edge.loopexit
  %21 = phi i32 [ %.pre, %._crit_edge.loopexit ], [ %2, %.preheader31 ]
  %22 = add nsw i32 %.1, 1
  %23 = zext nneg i32 %22 to i64
  %24 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %23
  store i32 %21, ptr %24, align 4, !tbaa !5
  %25 = getelementptr inbounds i8, ptr %0, i64 12
  %26 = load i32, ptr %25, align 4, !tbaa !5
  store i32 %26, ptr %0, align 16, !tbaa !5
  br label %.lr.ph.1

.lr.ph.1:                                         ; preds = %.lr.ph.1, %.lr.ph.preheader.1
  %.02534.1 = phi i32 [ %.1.1, %.lr.ph.1 ], [ 2, %.lr.ph.preheader.1 ]
  %.02633.1 = phi i32 [ %.127.1, %.lr.ph.1 ], [ 1, %.lr.ph.preheader.1 ]
  %27 = add nuw nsw i32 %.02534.1, %.02633.1
  %28 = lshr i32 %27, 1
  %29 = zext nneg i32 %28 to i64
  %30 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %29
  %31 = load i32, ptr %30, align 4, !tbaa !5
  %32 = icmp slt i32 %26, %31
  %33 = add nsw i32 %28, -1
  %34 = add nuw nsw i32 %28, 1
  %.127.1 = select i1 %32, i32 %.02633.1, i32 %34
  %.1.1 = select i1 %32, i32 %33, i32 %.02534.1
  %.not.1 = icmp sgt i32 %.127.1, %.1.1
  br i1 %.not.1, label %.preheader31.1, label %.lr.ph.1, !llvm.loop !13

.preheader31.1:                                   ; preds = %.lr.ph.1
  %35 = sext i32 %.1.1 to i64
  %.not30.not35.1 = icmp slt i32 %.1.1, 2
  br i1 %.not30.not35.1, label %.lr.ph37.1.preheader, label %.lr.ph.preheader.2

.lr.ph37.1.preheader:                             ; preds = %.preheader31.1
  %36 = sub nsw i64 2, %35
  %min.iters.check69 = icmp ult i64 %36, 8
  br i1 %min.iters.check69, label %.lr.ph37.1.preheader186, label %vector.ph70

vector.ph70:                                      ; preds = %.lr.ph37.1.preheader
  %n.vec72 = and i64 %36, -8
  %ind.end73 = sub nsw i64 2, %n.vec72
  br label %vector.body75

vector.body75:                                    ; preds = %vector.body75, %vector.ph70
  %index76 = phi i64 [ 0, %vector.ph70 ], [ %index.next84, %vector.body75 ]
  %offset.idx77 = sub i64 2, %index76
  %37 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %offset.idx77
  %38 = getelementptr inbounds i8, ptr %37, i64 -12
  %39 = getelementptr inbounds i8, ptr %37, i64 -28
  %wide.load78 = load <4 x i32>, ptr %38, align 4, !tbaa !5
  %wide.load80 = load <4 x i32>, ptr %39, align 4, !tbaa !5
  %40 = sub i64 3, %index76
  %41 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %40
  %42 = getelementptr inbounds i8, ptr %41, i64 -12
  %43 = getelementptr inbounds i8, ptr %41, i64 -28
  store <4 x i32> %wide.load78, ptr %42, align 16, !tbaa !5
  store <4 x i32> %wide.load80, ptr %43, align 16, !tbaa !5
  %index.next84 = add nuw i64 %index76, 8
  %44 = icmp eq i64 %index.next84, %n.vec72
  br i1 %44, label %middle.block67, label %vector.body75, !llvm.loop !14

middle.block67:                                   ; preds = %vector.body75
  %cmp.n85 = icmp eq i64 %36, %n.vec72
  br i1 %cmp.n85, label %._crit_edge.loopexit.1, label %.lr.ph37.1.preheader186

.lr.ph37.1.preheader186:                          ; preds = %middle.block67, %.lr.ph37.1.preheader
  %indvars.iv43.1.ph = phi i64 [ 2, %.lr.ph37.1.preheader ], [ %ind.end73, %middle.block67 ]
  br label %.lr.ph37.1

.lr.ph37.1:                                       ; preds = %.lr.ph37.1.preheader186, %.lr.ph37.1
  %indvars.iv43.1 = phi i64 [ %indvars.iv.next44.1, %.lr.ph37.1 ], [ %indvars.iv43.1.ph, %.lr.ph37.1.preheader186 ]
  %45 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %indvars.iv43.1
  %46 = load i32, ptr %45, align 4, !tbaa !5
  %47 = add nsw i64 %indvars.iv43.1, 1
  %48 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %47
  store i32 %46, ptr %48, align 4, !tbaa !5
  %indvars.iv.next44.1 = add nsw i64 %indvars.iv43.1, -1
  %.not30.not.1 = icmp sgt i64 %indvars.iv.next44.1, %35
  br i1 %.not30.not.1, label %.lr.ph37.1, label %._crit_edge.loopexit.1, !llvm.loop !15

._crit_edge.loopexit.1:                           ; preds = %.lr.ph37.1, %middle.block67
  %.pre57 = load i32, ptr %0, align 16, !tbaa !5
  br label %.lr.ph.preheader.2

.lr.ph.preheader.2:                               ; preds = %.preheader31.1, %._crit_edge.loopexit.1
  %49 = phi i32 [ %.pre57, %._crit_edge.loopexit.1 ], [ %26, %.preheader31.1 ]
  %50 = add nsw i32 %.1.1, 1
  %51 = zext nneg i32 %50 to i64
  %52 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %51
  store i32 %49, ptr %52, align 4, !tbaa !5
  %53 = getelementptr inbounds i8, ptr %0, i64 16
  %54 = load i32, ptr %53, align 16, !tbaa !5
  store i32 %54, ptr %0, align 16, !tbaa !5
  br label %.lr.ph.2

.lr.ph.2:                                         ; preds = %.lr.ph.2, %.lr.ph.preheader.2
  %.02534.2 = phi i32 [ %.1.2, %.lr.ph.2 ], [ 3, %.lr.ph.preheader.2 ]
  %.02633.2 = phi i32 [ %.127.2, %.lr.ph.2 ], [ 1, %.lr.ph.preheader.2 ]
  %55 = add nuw nsw i32 %.02534.2, %.02633.2
  %56 = lshr i32 %55, 1
  %57 = zext nneg i32 %56 to i64
  %58 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %57
  %59 = load i32, ptr %58, align 4, !tbaa !5
  %60 = icmp slt i32 %54, %59
  %61 = add nsw i32 %56, -1
  %62 = add nuw nsw i32 %56, 1
  %.127.2 = select i1 %60, i32 %.02633.2, i32 %62
  %.1.2 = select i1 %60, i32 %61, i32 %.02534.2
  %.not.2 = icmp sgt i32 %.127.2, %.1.2
  br i1 %.not.2, label %.preheader31.2, label %.lr.ph.2, !llvm.loop !13

.preheader31.2:                                   ; preds = %.lr.ph.2
  %63 = sext i32 %.1.2 to i64
  %.not30.not35.2 = icmp slt i32 %.1.2, 3
  br i1 %.not30.not35.2, label %.lr.ph37.2.preheader, label %.lr.ph.preheader.3

.lr.ph37.2.preheader:                             ; preds = %.preheader31.2
  %64 = sub nsw i64 3, %63
  %min.iters.check88 = icmp ult i64 %64, 8
  br i1 %min.iters.check88, label %.lr.ph37.2.preheader185, label %vector.ph89

vector.ph89:                                      ; preds = %.lr.ph37.2.preheader
  %n.vec91 = and i64 %64, -8
  %ind.end92 = sub nsw i64 3, %n.vec91
  br label %vector.body94

vector.body94:                                    ; preds = %vector.body94, %vector.ph89
  %index95 = phi i64 [ 0, %vector.ph89 ], [ %index.next103, %vector.body94 ]
  %offset.idx96 = sub i64 3, %index95
  %65 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %offset.idx96
  %66 = getelementptr inbounds i8, ptr %65, i64 -12
  %67 = getelementptr inbounds i8, ptr %65, i64 -28
  %wide.load97 = load <4 x i32>, ptr %66, align 16, !tbaa !5
  %wide.load99 = load <4 x i32>, ptr %67, align 16, !tbaa !5
  %68 = sub i64 4, %index95
  %69 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %68
  %70 = getelementptr inbounds i8, ptr %69, i64 -12
  %71 = getelementptr inbounds i8, ptr %69, i64 -28
  store <4 x i32> %wide.load97, ptr %70, align 4, !tbaa !5
  store <4 x i32> %wide.load99, ptr %71, align 4, !tbaa !5
  %index.next103 = add nuw i64 %index95, 8
  %72 = icmp eq i64 %index.next103, %n.vec91
  br i1 %72, label %middle.block86, label %vector.body94, !llvm.loop !16

middle.block86:                                   ; preds = %vector.body94
  %cmp.n104 = icmp eq i64 %64, %n.vec91
  br i1 %cmp.n104, label %._crit_edge.loopexit.2, label %.lr.ph37.2.preheader185

.lr.ph37.2.preheader185:                          ; preds = %middle.block86, %.lr.ph37.2.preheader
  %indvars.iv43.2.ph = phi i64 [ 3, %.lr.ph37.2.preheader ], [ %ind.end92, %middle.block86 ]
  br label %.lr.ph37.2

.lr.ph37.2:                                       ; preds = %.lr.ph37.2.preheader185, %.lr.ph37.2
  %indvars.iv43.2 = phi i64 [ %indvars.iv.next44.2, %.lr.ph37.2 ], [ %indvars.iv43.2.ph, %.lr.ph37.2.preheader185 ]
  %73 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %indvars.iv43.2
  %74 = load i32, ptr %73, align 4, !tbaa !5
  %75 = add nsw i64 %indvars.iv43.2, 1
  %76 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %75
  store i32 %74, ptr %76, align 4, !tbaa !5
  %indvars.iv.next44.2 = add nsw i64 %indvars.iv43.2, -1
  %.not30.not.2 = icmp sgt i64 %indvars.iv.next44.2, %63
  br i1 %.not30.not.2, label %.lr.ph37.2, label %._crit_edge.loopexit.2, !llvm.loop !17

._crit_edge.loopexit.2:                           ; preds = %.lr.ph37.2, %middle.block86
  %.pre58 = load i32, ptr %0, align 16, !tbaa !5
  br label %.lr.ph.preheader.3

.lr.ph.preheader.3:                               ; preds = %.preheader31.2, %._crit_edge.loopexit.2
  %77 = phi i32 [ %.pre58, %._crit_edge.loopexit.2 ], [ %54, %.preheader31.2 ]
  %78 = add nsw i32 %.1.2, 1
  %79 = sext i32 %78 to i64
  %80 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %79
  store i32 %77, ptr %80, align 4, !tbaa !5
  %81 = getelementptr inbounds i8, ptr %0, i64 20
  %82 = load i32, ptr %81, align 4, !tbaa !5
  store i32 %82, ptr %0, align 16, !tbaa !5
  br label %.lr.ph.3

.lr.ph.3:                                         ; preds = %.lr.ph.3, %.lr.ph.preheader.3
  %.02534.3 = phi i32 [ %.1.3, %.lr.ph.3 ], [ 4, %.lr.ph.preheader.3 ]
  %.02633.3 = phi i32 [ %.127.3, %.lr.ph.3 ], [ 1, %.lr.ph.preheader.3 ]
  %83 = add nuw nsw i32 %.02534.3, %.02633.3
  %84 = lshr i32 %83, 1
  %85 = zext nneg i32 %84 to i64
  %86 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %85
  %87 = load i32, ptr %86, align 4, !tbaa !5
  %88 = icmp slt i32 %82, %87
  %89 = add nsw i32 %84, -1
  %90 = add nuw nsw i32 %84, 1
  %.127.3 = select i1 %88, i32 %.02633.3, i32 %90
  %.1.3 = select i1 %88, i32 %89, i32 %.02534.3
  %.not.3 = icmp sgt i32 %.127.3, %.1.3
  br i1 %.not.3, label %.preheader31.3, label %.lr.ph.3, !llvm.loop !13

.preheader31.3:                                   ; preds = %.lr.ph.3
  %91 = sext i32 %.1.3 to i64
  %.not30.not35.3 = icmp slt i32 %.1.3, 4
  br i1 %.not30.not35.3, label %.lr.ph37.3.preheader, label %.lr.ph.preheader.4

.lr.ph37.3.preheader:                             ; preds = %.preheader31.3
  %92 = sub nsw i64 4, %91
  %min.iters.check107 = icmp ult i64 %92, 8
  br i1 %min.iters.check107, label %.lr.ph37.3.preheader184, label %vector.ph108

vector.ph108:                                     ; preds = %.lr.ph37.3.preheader
  %n.vec110 = and i64 %92, -8
  %ind.end111 = sub nsw i64 4, %n.vec110
  br label %vector.body113

vector.body113:                                   ; preds = %vector.body113, %vector.ph108
  %index114 = phi i64 [ 0, %vector.ph108 ], [ %index.next122, %vector.body113 ]
  %offset.idx115 = sub i64 4, %index114
  %93 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %offset.idx115
  %94 = getelementptr inbounds i8, ptr %93, i64 -12
  %95 = getelementptr inbounds i8, ptr %93, i64 -28
  %wide.load116 = load <4 x i32>, ptr %94, align 4, !tbaa !5
  %wide.load118 = load <4 x i32>, ptr %95, align 4, !tbaa !5
  %96 = sub i64 5, %index114
  %97 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %96
  %98 = getelementptr inbounds i8, ptr %97, i64 -12
  %99 = getelementptr inbounds i8, ptr %97, i64 -28
  store <4 x i32> %wide.load116, ptr %98, align 8, !tbaa !5
  store <4 x i32> %wide.load118, ptr %99, align 8, !tbaa !5
  %index.next122 = add nuw i64 %index114, 8
  %100 = icmp eq i64 %index.next122, %n.vec110
  br i1 %100, label %middle.block105, label %vector.body113, !llvm.loop !18

middle.block105:                                  ; preds = %vector.body113
  %cmp.n123 = icmp eq i64 %92, %n.vec110
  br i1 %cmp.n123, label %._crit_edge.loopexit.3, label %.lr.ph37.3.preheader184

.lr.ph37.3.preheader184:                          ; preds = %middle.block105, %.lr.ph37.3.preheader
  %indvars.iv43.3.ph = phi i64 [ 4, %.lr.ph37.3.preheader ], [ %ind.end111, %middle.block105 ]
  br label %.lr.ph37.3

.lr.ph37.3:                                       ; preds = %.lr.ph37.3.preheader184, %.lr.ph37.3
  %indvars.iv43.3 = phi i64 [ %indvars.iv.next44.3, %.lr.ph37.3 ], [ %indvars.iv43.3.ph, %.lr.ph37.3.preheader184 ]
  %101 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %indvars.iv43.3
  %102 = load i32, ptr %101, align 4, !tbaa !5
  %103 = add nsw i64 %indvars.iv43.3, 1
  %104 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %103
  store i32 %102, ptr %104, align 4, !tbaa !5
  %indvars.iv.next44.3 = add nsw i64 %indvars.iv43.3, -1
  %.not30.not.3 = icmp sgt i64 %indvars.iv.next44.3, %91
  br i1 %.not30.not.3, label %.lr.ph37.3, label %._crit_edge.loopexit.3, !llvm.loop !19

._crit_edge.loopexit.3:                           ; preds = %.lr.ph37.3, %middle.block105
  %.pre59 = load i32, ptr %0, align 16, !tbaa !5
  br label %.lr.ph.preheader.4

.lr.ph.preheader.4:                               ; preds = %.preheader31.3, %._crit_edge.loopexit.3
  %105 = phi i32 [ %.pre59, %._crit_edge.loopexit.3 ], [ %82, %.preheader31.3 ]
  %106 = add nsw i32 %.1.3, 1
  %107 = sext i32 %106 to i64
  %108 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %107
  store i32 %105, ptr %108, align 4, !tbaa !5
  %109 = getelementptr inbounds i8, ptr %0, i64 24
  %110 = load i32, ptr %109, align 8, !tbaa !5
  store i32 %110, ptr %0, align 16, !tbaa !5
  br label %.lr.ph.4

.lr.ph.4:                                         ; preds = %.lr.ph.4, %.lr.ph.preheader.4
  %.02534.4 = phi i32 [ %.1.4, %.lr.ph.4 ], [ 5, %.lr.ph.preheader.4 ]
  %.02633.4 = phi i32 [ %.127.4, %.lr.ph.4 ], [ 1, %.lr.ph.preheader.4 ]
  %111 = add nuw nsw i32 %.02534.4, %.02633.4
  %112 = lshr i32 %111, 1
  %113 = zext nneg i32 %112 to i64
  %114 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %113
  %115 = load i32, ptr %114, align 4, !tbaa !5
  %116 = icmp slt i32 %110, %115
  %117 = add nsw i32 %112, -1
  %118 = add nuw nsw i32 %112, 1
  %.127.4 = select i1 %116, i32 %.02633.4, i32 %118
  %.1.4 = select i1 %116, i32 %117, i32 %.02534.4
  %.not.4 = icmp sgt i32 %.127.4, %.1.4
  br i1 %.not.4, label %.preheader31.4, label %.lr.ph.4, !llvm.loop !13

.preheader31.4:                                   ; preds = %.lr.ph.4
  %119 = sext i32 %.1.4 to i64
  %.not30.not35.4 = icmp slt i32 %.1.4, 5
  br i1 %.not30.not35.4, label %.lr.ph37.4.preheader, label %.lr.ph.preheader.5

.lr.ph37.4.preheader:                             ; preds = %.preheader31.4
  %120 = sub nsw i64 5, %119
  %min.iters.check126 = icmp ult i64 %120, 8
  br i1 %min.iters.check126, label %.lr.ph37.4.preheader183, label %vector.ph127

vector.ph127:                                     ; preds = %.lr.ph37.4.preheader
  %n.vec129 = and i64 %120, -8
  %ind.end130 = sub nsw i64 5, %n.vec129
  br label %vector.body132

vector.body132:                                   ; preds = %vector.body132, %vector.ph127
  %index133 = phi i64 [ 0, %vector.ph127 ], [ %index.next141, %vector.body132 ]
  %offset.idx134 = sub i64 5, %index133
  %121 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %offset.idx134
  %122 = getelementptr inbounds i8, ptr %121, i64 -12
  %123 = getelementptr inbounds i8, ptr %121, i64 -28
  %wide.load135 = load <4 x i32>, ptr %122, align 8, !tbaa !5
  %wide.load137 = load <4 x i32>, ptr %123, align 8, !tbaa !5
  %124 = sub i64 6, %index133
  %125 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %124
  %126 = getelementptr inbounds i8, ptr %125, i64 -12
  %127 = getelementptr inbounds i8, ptr %125, i64 -28
  store <4 x i32> %wide.load135, ptr %126, align 4, !tbaa !5
  store <4 x i32> %wide.load137, ptr %127, align 4, !tbaa !5
  %index.next141 = add nuw i64 %index133, 8
  %128 = icmp eq i64 %index.next141, %n.vec129
  br i1 %128, label %middle.block124, label %vector.body132, !llvm.loop !20

middle.block124:                                  ; preds = %vector.body132
  %cmp.n142 = icmp eq i64 %120, %n.vec129
  br i1 %cmp.n142, label %._crit_edge.loopexit.4, label %.lr.ph37.4.preheader183

.lr.ph37.4.preheader183:                          ; preds = %middle.block124, %.lr.ph37.4.preheader
  %indvars.iv43.4.ph = phi i64 [ 5, %.lr.ph37.4.preheader ], [ %ind.end130, %middle.block124 ]
  br label %.lr.ph37.4

.lr.ph37.4:                                       ; preds = %.lr.ph37.4.preheader183, %.lr.ph37.4
  %indvars.iv43.4 = phi i64 [ %indvars.iv.next44.4, %.lr.ph37.4 ], [ %indvars.iv43.4.ph, %.lr.ph37.4.preheader183 ]
  %129 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %indvars.iv43.4
  %130 = load i32, ptr %129, align 4, !tbaa !5
  %131 = add nsw i64 %indvars.iv43.4, 1
  %132 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %131
  store i32 %130, ptr %132, align 4, !tbaa !5
  %indvars.iv.next44.4 = add nsw i64 %indvars.iv43.4, -1
  %.not30.not.4 = icmp sgt i64 %indvars.iv.next44.4, %119
  br i1 %.not30.not.4, label %.lr.ph37.4, label %._crit_edge.loopexit.4, !llvm.loop !21

._crit_edge.loopexit.4:                           ; preds = %.lr.ph37.4, %middle.block124
  %.pre60 = load i32, ptr %0, align 16, !tbaa !5
  br label %.lr.ph.preheader.5

.lr.ph.preheader.5:                               ; preds = %.preheader31.4, %._crit_edge.loopexit.4
  %133 = phi i32 [ %.pre60, %._crit_edge.loopexit.4 ], [ %110, %.preheader31.4 ]
  %134 = add nsw i32 %.1.4, 1
  %135 = sext i32 %134 to i64
  %136 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %135
  store i32 %133, ptr %136, align 4, !tbaa !5
  %137 = getelementptr inbounds i8, ptr %0, i64 28
  %138 = load i32, ptr %137, align 4, !tbaa !5
  store i32 %138, ptr %0, align 16, !tbaa !5
  br label %.lr.ph.5

.lr.ph.5:                                         ; preds = %.lr.ph.5, %.lr.ph.preheader.5
  %.02534.5 = phi i32 [ %.1.5, %.lr.ph.5 ], [ 6, %.lr.ph.preheader.5 ]
  %.02633.5 = phi i32 [ %.127.5, %.lr.ph.5 ], [ 1, %.lr.ph.preheader.5 ]
  %139 = add nuw nsw i32 %.02534.5, %.02633.5
  %140 = lshr i32 %139, 1
  %141 = zext nneg i32 %140 to i64
  %142 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %141
  %143 = load i32, ptr %142, align 4, !tbaa !5
  %144 = icmp slt i32 %138, %143
  %145 = add nsw i32 %140, -1
  %146 = add nuw nsw i32 %140, 1
  %.127.5 = select i1 %144, i32 %.02633.5, i32 %146
  %.1.5 = select i1 %144, i32 %145, i32 %.02534.5
  %.not.5 = icmp sgt i32 %.127.5, %.1.5
  br i1 %.not.5, label %.preheader31.5, label %.lr.ph.5, !llvm.loop !13

.preheader31.5:                                   ; preds = %.lr.ph.5
  %147 = sext i32 %.1.5 to i64
  %.not30.not35.5 = icmp slt i32 %.1.5, 6
  br i1 %.not30.not35.5, label %.lr.ph37.5.preheader, label %.lr.ph.preheader.6

.lr.ph37.5.preheader:                             ; preds = %.preheader31.5
  %148 = sub nsw i64 6, %147
  %min.iters.check145 = icmp ult i64 %148, 8
  br i1 %min.iters.check145, label %.lr.ph37.5.preheader182, label %vector.ph146

vector.ph146:                                     ; preds = %.lr.ph37.5.preheader
  %n.vec148 = and i64 %148, -8
  %ind.end149 = sub nsw i64 6, %n.vec148
  br label %vector.body151

vector.body151:                                   ; preds = %vector.body151, %vector.ph146
  %index152 = phi i64 [ 0, %vector.ph146 ], [ %index.next160, %vector.body151 ]
  %offset.idx153 = sub i64 6, %index152
  %149 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %offset.idx153
  %150 = getelementptr inbounds i8, ptr %149, i64 -12
  %151 = getelementptr inbounds i8, ptr %149, i64 -28
  %wide.load154 = load <4 x i32>, ptr %150, align 4, !tbaa !5
  %wide.load156 = load <4 x i32>, ptr %151, align 4, !tbaa !5
  %152 = sub i64 7, %index152
  %153 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %152
  %154 = getelementptr inbounds i8, ptr %153, i64 -12
  %155 = getelementptr inbounds i8, ptr %153, i64 -28
  store <4 x i32> %wide.load154, ptr %154, align 16, !tbaa !5
  store <4 x i32> %wide.load156, ptr %155, align 16, !tbaa !5
  %index.next160 = add nuw i64 %index152, 8
  %156 = icmp eq i64 %index.next160, %n.vec148
  br i1 %156, label %middle.block143, label %vector.body151, !llvm.loop !22

middle.block143:                                  ; preds = %vector.body151
  %cmp.n161 = icmp eq i64 %148, %n.vec148
  br i1 %cmp.n161, label %._crit_edge.loopexit.5, label %.lr.ph37.5.preheader182

.lr.ph37.5.preheader182:                          ; preds = %middle.block143, %.lr.ph37.5.preheader
  %indvars.iv43.5.ph = phi i64 [ 6, %.lr.ph37.5.preheader ], [ %ind.end149, %middle.block143 ]
  br label %.lr.ph37.5

.lr.ph37.5:                                       ; preds = %.lr.ph37.5.preheader182, %.lr.ph37.5
  %indvars.iv43.5 = phi i64 [ %indvars.iv.next44.5, %.lr.ph37.5 ], [ %indvars.iv43.5.ph, %.lr.ph37.5.preheader182 ]
  %157 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %indvars.iv43.5
  %158 = load i32, ptr %157, align 4, !tbaa !5
  %159 = add nsw i64 %indvars.iv43.5, 1
  %160 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %159
  store i32 %158, ptr %160, align 4, !tbaa !5
  %indvars.iv.next44.5 = add nsw i64 %indvars.iv43.5, -1
  %.not30.not.5 = icmp sgt i64 %indvars.iv.next44.5, %147
  br i1 %.not30.not.5, label %.lr.ph37.5, label %._crit_edge.loopexit.5, !llvm.loop !23

._crit_edge.loopexit.5:                           ; preds = %.lr.ph37.5, %middle.block143
  %.pre61 = load i32, ptr %0, align 16, !tbaa !5
  br label %.lr.ph.preheader.6

.lr.ph.preheader.6:                               ; preds = %.preheader31.5, %._crit_edge.loopexit.5
  %161 = phi i32 [ %.pre61, %._crit_edge.loopexit.5 ], [ %138, %.preheader31.5 ]
  %162 = add nsw i32 %.1.5, 1
  %163 = sext i32 %162 to i64
  %164 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %163
  store i32 %161, ptr %164, align 4, !tbaa !5
  %165 = getelementptr inbounds i8, ptr %0, i64 32
  %166 = load i32, ptr %165, align 16, !tbaa !5
  store i32 %166, ptr %0, align 16, !tbaa !5
  br label %.lr.ph.6

.lr.ph.6:                                         ; preds = %.lr.ph.6, %.lr.ph.preheader.6
  %.02534.6 = phi i32 [ %.1.6, %.lr.ph.6 ], [ 7, %.lr.ph.preheader.6 ]
  %.02633.6 = phi i32 [ %.127.6, %.lr.ph.6 ], [ 1, %.lr.ph.preheader.6 ]
  %167 = add nuw nsw i32 %.02534.6, %.02633.6
  %168 = lshr i32 %167, 1
  %169 = zext nneg i32 %168 to i64
  %170 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %169
  %171 = load i32, ptr %170, align 4, !tbaa !5
  %172 = icmp slt i32 %166, %171
  %173 = add nsw i32 %168, -1
  %174 = add nuw nsw i32 %168, 1
  %.127.6 = select i1 %172, i32 %.02633.6, i32 %174
  %.1.6 = select i1 %172, i32 %173, i32 %.02534.6
  %.not.6 = icmp sgt i32 %.127.6, %.1.6
  br i1 %.not.6, label %.preheader31.6, label %.lr.ph.6, !llvm.loop !13

.preheader31.6:                                   ; preds = %.lr.ph.6
  %175 = sext i32 %.1.6 to i64
  %.not30.not35.6 = icmp slt i32 %.1.6, 7
  br i1 %.not30.not35.6, label %.lr.ph37.6.preheader, label %._crit_edge.6

.lr.ph37.6.preheader:                             ; preds = %.preheader31.6
  %176 = sub nsw i64 7, %175
  %min.iters.check164 = icmp ult i64 %176, 8
  br i1 %min.iters.check164, label %.lr.ph37.6.preheader181, label %vector.ph165

vector.ph165:                                     ; preds = %.lr.ph37.6.preheader
  %n.vec167 = and i64 %176, -8
  %ind.end168 = sub nsw i64 7, %n.vec167
  br label %vector.body170

vector.body170:                                   ; preds = %vector.body170, %vector.ph165
  %index171 = phi i64 [ 0, %vector.ph165 ], [ %index.next179, %vector.body170 ]
  %offset.idx172 = sub i64 7, %index171
  %177 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %offset.idx172
  %178 = getelementptr inbounds i8, ptr %177, i64 -12
  %179 = getelementptr inbounds i8, ptr %177, i64 -28
  %wide.load173 = load <4 x i32>, ptr %178, align 16, !tbaa !5
  %wide.load175 = load <4 x i32>, ptr %179, align 16, !tbaa !5
  %180 = sub i64 8, %index171
  %181 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %180
  %182 = getelementptr inbounds i8, ptr %181, i64 -12
  %183 = getelementptr inbounds i8, ptr %181, i64 -28
  store <4 x i32> %wide.load173, ptr %182, align 4, !tbaa !5
  store <4 x i32> %wide.load175, ptr %183, align 4, !tbaa !5
  %index.next179 = add nuw i64 %index171, 8
  %184 = icmp eq i64 %index.next179, %n.vec167
  br i1 %184, label %middle.block162, label %vector.body170, !llvm.loop !24

middle.block162:                                  ; preds = %vector.body170
  %cmp.n180 = icmp eq i64 %176, %n.vec167
  br i1 %cmp.n180, label %._crit_edge.loopexit.6, label %.lr.ph37.6.preheader181

.lr.ph37.6.preheader181:                          ; preds = %middle.block162, %.lr.ph37.6.preheader
  %indvars.iv43.6.ph = phi i64 [ 7, %.lr.ph37.6.preheader ], [ %ind.end168, %middle.block162 ]
  br label %.lr.ph37.6

.lr.ph37.6:                                       ; preds = %.lr.ph37.6.preheader181, %.lr.ph37.6
  %indvars.iv43.6 = phi i64 [ %indvars.iv.next44.6, %.lr.ph37.6 ], [ %indvars.iv43.6.ph, %.lr.ph37.6.preheader181 ]
  %185 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %indvars.iv43.6
  %186 = load i32, ptr %185, align 4, !tbaa !5
  %187 = add nsw i64 %indvars.iv43.6, 1
  %188 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %187
  store i32 %186, ptr %188, align 4, !tbaa !5
  %indvars.iv.next44.6 = add nsw i64 %indvars.iv43.6, -1
  %.not30.not.6 = icmp sgt i64 %indvars.iv.next44.6, %175
  br i1 %.not30.not.6, label %.lr.ph37.6, label %._crit_edge.loopexit.6, !llvm.loop !25

._crit_edge.loopexit.6:                           ; preds = %.lr.ph37.6, %middle.block162
  %.pre62 = load i32, ptr %0, align 16, !tbaa !5
  br label %._crit_edge.6

._crit_edge.6:                                    ; preds = %._crit_edge.loopexit.6, %.preheader31.6
  %189 = phi i32 [ %.pre62, %._crit_edge.loopexit.6 ], [ %166, %.preheader31.6 ]
  %190 = add nsw i32 %.1.6, 1
  %191 = sext i32 %190 to i64
  %192 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %191
  store i32 %189, ptr %192, align 4, !tbaa !5
  %193 = getelementptr inbounds i8, ptr %0, i64 4
  %194 = load i32, ptr %193, align 4, !tbaa !5
  %195 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, i32 noundef %194)
  %196 = load i32, ptr %1, align 8, !tbaa !5
  %197 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, i32 noundef %196)
  %198 = load i32, ptr %25, align 4, !tbaa !5
  %199 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, i32 noundef %198)
  %200 = load i32, ptr %53, align 16, !tbaa !5
  %201 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, i32 noundef %200)
  %202 = load i32, ptr %81, align 4, !tbaa !5
  %203 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, i32 noundef %202)
  %204 = load i32, ptr %109, align 8, !tbaa !5
  %205 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, i32 noundef %204)
  %206 = load i32, ptr %137, align 4, !tbaa !5
  %207 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, i32 noundef %206)
  %208 = load i32, ptr %165, align 16, !tbaa !5
  %209 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, i32 noundef %208)
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %0) #4
  ret i32 0

.lr.ph37:                                         ; preds = %.lr.ph37.preheader187, %.lr.ph37
  %indvars.iv43 = phi i64 [ %indvars.iv.next44, %.lr.ph37 ], [ %indvars.iv43.ph, %.lr.ph37.preheader187 ]
  %210 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %indvars.iv43
  %211 = load i32, ptr %210, align 4, !tbaa !5
  %212 = add nsw i64 %indvars.iv43, 1
  %213 = getelementptr inbounds [9 x i32], ptr %0, i64 0, i64 %212
  store i32 %211, ptr %213, align 4, !tbaa !5
  %indvars.iv.next44 = add nsw i64 %indvars.iv43, -1
  %.not30.not = icmp sgt i64 %indvars.iv.next44, %3
  br i1 %.not30.not, label %.lr.ph37, label %._crit_edge.loopexit, !llvm.loop !26
}

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #2

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

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) local_unnamed_addr #3

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 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { "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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = distinct !{!9, !10, !11, !12}
!10 = !{!"llvm.loop.mustprogress"}
!11 = !{!"llvm.loop.isvectorized", i32 1}
!12 = !{!"llvm.loop.unroll.runtime.disable"}
!13 = distinct !{!13, !10}
!14 = distinct !{!14, !10, !11, !12}
!15 = distinct !{!15, !10, !12, !11}
!16 = distinct !{!16, !10, !11, !12}
!17 = distinct !{!17, !10, !12, !11}
!18 = distinct !{!18, !10, !11, !12}
!19 = distinct !{!19, !10, !12, !11}
!20 = distinct !{!20, !10, !11, !12}
!21 = distinct !{!21, !10, !12, !11}
!22 = distinct !{!22, !10, !11, !12}
!23 = distinct !{!23, !10, !12, !11}
!24 = distinct !{!24, !10, !11, !12}
!25 = distinct !{!25, !10, !12, !11}
!26 = distinct !{!26, !10, !12, !11}


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