; LLVM IR from AlgoGenesis/C :: Sorting Algorithms/Bucket Sort (Program)

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

; Function Attrs: nounwind uwtable
declare dso_local void @insertionSort(ptr noundef, i32 noundef) #0

; 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 nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: nounwind uwtable
define dso_local void @bucketSort(ptr noundef %0, i32 noundef %1) #0 {
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %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
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store i32 %1, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #5
  %16 = call noalias ptr @malloc(i64 noundef 80) #6
  store ptr %16, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #5
  %17 = call noalias ptr @calloc(i64 noundef 10, i64 noundef 4) #7
  store ptr %17, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #5
  store i32 0, ptr %7, align 4, !tbaa !9
  br label %18

18:                                               ; preds = %31, %2
  %19 = load i32, ptr %7, align 4, !tbaa !9
  %20 = icmp slt i32 %19, 10
  br i1 %20, label %22, label %21

21:                                               ; preds = %18
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #5
  br label %34

22:                                               ; preds = %18
  %23 = load i32, ptr %4, align 4, !tbaa !9
  %24 = sext i32 %23 to i64
  %25 = mul i64 %24, 4
  %26 = call noalias ptr @malloc(i64 noundef %25) #6
  %27 = load ptr, ptr %5, align 8, !tbaa !5
  %28 = load i32, ptr %7, align 4, !tbaa !9
  %29 = sext i32 %28 to i64
  %30 = getelementptr inbounds ptr, ptr %27, i64 %29
  store ptr %26, ptr %30, align 8, !tbaa !5
  br label %31

31:                                               ; preds = %22
  %32 = load i32, ptr %7, align 4, !tbaa !9
  %33 = add nsw i32 %32, 1
  store i32 %33, ptr %7, align 4, !tbaa !9
  br label %18, !llvm.loop !11

34:                                               ; preds = %21
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #5
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %35

35:                                               ; preds = %66, %34
  %36 = load i32, ptr %8, align 4, !tbaa !9
  %37 = load i32, ptr %4, align 4, !tbaa !9
  %38 = icmp slt i32 %36, %37
  br i1 %38, label %40, label %39

39:                                               ; preds = %35
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #5
  br label %69

40:                                               ; preds = %35
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #5
  %41 = load ptr, ptr %3, align 8, !tbaa !5
  %42 = load i32, ptr %8, align 4, !tbaa !9
  %43 = sext i32 %42 to i64
  %44 = getelementptr inbounds float, ptr %41, i64 %43
  %45 = load float, ptr %44, align 4, !tbaa !13
  %46 = fmul float 1.000000e+01, %45
  %47 = fptosi float %46 to i32
  store i32 %47, ptr %9, align 4, !tbaa !9
  %48 = load ptr, ptr %3, align 8, !tbaa !5
  %49 = load i32, ptr %8, align 4, !tbaa !9
  %50 = sext i32 %49 to i64
  %51 = getelementptr inbounds float, ptr %48, i64 %50
  %52 = load float, ptr %51, align 4, !tbaa !13
  %53 = load ptr, ptr %5, align 8, !tbaa !5
  %54 = load i32, ptr %9, align 4, !tbaa !9
  %55 = sext i32 %54 to i64
  %56 = getelementptr inbounds ptr, ptr %53, i64 %55
  %57 = load ptr, ptr %56, align 8, !tbaa !5
  %58 = load ptr, ptr %6, align 8, !tbaa !5
  %59 = load i32, ptr %9, align 4, !tbaa !9
  %60 = sext i32 %59 to i64
  %61 = getelementptr inbounds i32, ptr %58, i64 %60
  %62 = load i32, ptr %61, align 4, !tbaa !9
  %63 = add nsw i32 %62, 1
  store i32 %63, ptr %61, align 4, !tbaa !9
  %64 = sext i32 %62 to i64
  %65 = getelementptr inbounds float, ptr %57, i64 %64
  store float %52, ptr %65, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  br label %66

66:                                               ; preds = %40
  %67 = load i32, ptr %8, align 4, !tbaa !9
  %68 = add nsw i32 %67, 1
  store i32 %68, ptr %8, align 4, !tbaa !9
  br label %35, !llvm.loop !15

69:                                               ; preds = %39
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #5
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %70

70:                                               ; preds = %93, %69
  %71 = load i32, ptr %10, align 4, !tbaa !9
  %72 = icmp slt i32 %71, 10
  br i1 %72, label %74, label %73

73:                                               ; preds = %70
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  br label %96

74:                                               ; preds = %70
  %75 = load ptr, ptr %6, align 8, !tbaa !5
  %76 = load i32, ptr %10, align 4, !tbaa !9
  %77 = sext i32 %76 to i64
  %78 = getelementptr inbounds i32, ptr %75, i64 %77
  %79 = load i32, ptr %78, align 4, !tbaa !9
  %80 = icmp sgt i32 %79, 0
  br i1 %80, label %81, label %92

81:                                               ; preds = %74
  %82 = load ptr, ptr %5, align 8, !tbaa !5
  %83 = load i32, ptr %10, align 4, !tbaa !9
  %84 = sext i32 %83 to i64
  %85 = getelementptr inbounds ptr, ptr %82, i64 %84
  %86 = load ptr, ptr %85, align 8, !tbaa !5
  %87 = load ptr, ptr %6, align 8, !tbaa !5
  %88 = load i32, ptr %10, align 4, !tbaa !9
  %89 = sext i32 %88 to i64
  %90 = getelementptr inbounds i32, ptr %87, i64 %89
  %91 = load i32, ptr %90, align 4, !tbaa !9
  call void @insertionSort(ptr noundef %86, i32 noundef %91)
  br label %92

92:                                               ; preds = %81, %74
  br label %93

93:                                               ; preds = %92
  %94 = load i32, ptr %10, align 4, !tbaa !9
  %95 = add nsw i32 %94, 1
  store i32 %95, ptr %10, align 4, !tbaa !9
  br label %70, !llvm.loop !16

96:                                               ; preds = %73
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  store i32 0, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  store i32 0, ptr %12, align 4, !tbaa !9
  br label %97

97:                                               ; preds = %130, %96
  %98 = load i32, ptr %12, align 4, !tbaa !9
  %99 = icmp slt i32 %98, 10
  br i1 %99, label %101, label %100

100:                                              ; preds = %97
  store i32 11, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  br label %133

101:                                              ; preds = %97
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %102

102:                                              ; preds = %126, %101
  %103 = load i32, ptr %14, align 4, !tbaa !9
  %104 = load ptr, ptr %6, align 8, !tbaa !5
  %105 = load i32, ptr %12, align 4, !tbaa !9
  %106 = sext i32 %105 to i64
  %107 = getelementptr inbounds i32, ptr %104, i64 %106
  %108 = load i32, ptr %107, align 4, !tbaa !9
  %109 = icmp slt i32 %103, %108
  br i1 %109, label %111, label %110

110:                                              ; preds = %102
  store i32 14, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  br label %129

111:                                              ; preds = %102
  %112 = load ptr, ptr %5, align 8, !tbaa !5
  %113 = load i32, ptr %12, align 4, !tbaa !9
  %114 = sext i32 %113 to i64
  %115 = getelementptr inbounds ptr, ptr %112, i64 %114
  %116 = load ptr, ptr %115, align 8, !tbaa !5
  %117 = load i32, ptr %14, align 4, !tbaa !9
  %118 = sext i32 %117 to i64
  %119 = getelementptr inbounds float, ptr %116, i64 %118
  %120 = load float, ptr %119, align 4, !tbaa !13
  %121 = load ptr, ptr %3, align 8, !tbaa !5
  %122 = load i32, ptr %11, align 4, !tbaa !9
  %123 = add nsw i32 %122, 1
  store i32 %123, ptr %11, align 4, !tbaa !9
  %124 = sext i32 %122 to i64
  %125 = getelementptr inbounds float, ptr %121, i64 %124
  store float %120, ptr %125, align 4, !tbaa !13
  br label %126

126:                                              ; preds = %111
  %127 = load i32, ptr %14, align 4, !tbaa !9
  %128 = add nsw i32 %127, 1
  store i32 %128, ptr %14, align 4, !tbaa !9
  br label %102, !llvm.loop !17

129:                                              ; preds = %110
  br label %130

130:                                              ; preds = %129
  %131 = load i32, ptr %12, align 4, !tbaa !9
  %132 = add nsw i32 %131, 1
  store i32 %132, ptr %12, align 4, !tbaa !9
  br label %97, !llvm.loop !18

133:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %134

134:                                              ; preds = %144, %133
  %135 = load i32, ptr %15, align 4, !tbaa !9
  %136 = icmp slt i32 %135, 10
  br i1 %136, label %138, label %137

137:                                              ; preds = %134
  store i32 17, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  br label %147

138:                                              ; preds = %134
  %139 = load ptr, ptr %5, align 8, !tbaa !5
  %140 = load i32, ptr %15, align 4, !tbaa !9
  %141 = sext i32 %140 to i64
  %142 = getelementptr inbounds ptr, ptr %139, i64 %141
  %143 = load ptr, ptr %142, align 8, !tbaa !5
  call void @free(ptr noundef %143) #5
  br label %144

144:                                              ; preds = %138
  %145 = load i32, ptr %15, align 4, !tbaa !9
  %146 = add nsw i32 %145, 1
  store i32 %146, ptr %15, align 4, !tbaa !9
  br label %134, !llvm.loop !19

147:                                              ; preds = %137
  %148 = load ptr, ptr %5, align 8, !tbaa !5
  call void @free(ptr noundef %148) #5
  %149 = load ptr, ptr %6, align 8, !tbaa !5
  call void @free(ptr noundef %149) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #5
  ret void
}

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #2

; Function Attrs: nounwind allocsize(0,1)
declare noalias ptr @calloc(i64 noundef, i64 noundef) #3

; Function Attrs: nounwind
declare void @free(ptr noundef) #4

attributes #0 = { 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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nounwind allocsize(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 #3 = { nounwind allocsize(0,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 #4 = { 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" }
attributes #5 = { nounwind }
attributes #6 = { nounwind allocsize(0) }
attributes #7 = { nounwind allocsize(0,1) }

!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/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!14, !14, i64 0}
!14 = !{!"float", !7, i64 0}
!15 = distinct !{!15, !12}
!16 = distinct !{!16, !12}
!17 = distinct !{!17, !12}
!18 = distinct !{!18, !12}
!19 = distinct !{!19, !12}


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

; Function Attrs: nounwind uwtable
declare dso_local void @insertionSort(ptr noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local void @bucketSort(ptr nocapture noundef %0, i32 noundef %1) local_unnamed_addr #0 {
.preheader50:
  %2 = tail call noalias dereferenceable_or_null(80) ptr @malloc(i64 noundef 80) #4
  %3 = tail call noalias dereferenceable_or_null(40) ptr @calloc(i64 noundef 10, i64 noundef 4) #5
  %4 = sext i32 %1 to i64
  %5 = shl nsw i64 %4, 2
  %6 = tail call noalias ptr @malloc(i64 noundef %5) #4
  store ptr %6, ptr %2, align 8, !tbaa !5
  %7 = tail call noalias ptr @malloc(i64 noundef %5) #4
  %8 = getelementptr inbounds i8, ptr %2, i64 8
  store ptr %7, ptr %8, align 8, !tbaa !5
  %9 = tail call noalias ptr @malloc(i64 noundef %5) #4
  %10 = getelementptr inbounds i8, ptr %2, i64 16
  store ptr %9, ptr %10, align 8, !tbaa !5
  %11 = tail call noalias ptr @malloc(i64 noundef %5) #4
  %12 = getelementptr inbounds i8, ptr %2, i64 24
  store ptr %11, ptr %12, align 8, !tbaa !5
  %13 = tail call noalias ptr @malloc(i64 noundef %5) #4
  %14 = getelementptr inbounds i8, ptr %2, i64 32
  store ptr %13, ptr %14, align 8, !tbaa !5
  %15 = tail call noalias ptr @malloc(i64 noundef %5) #4
  %16 = getelementptr inbounds i8, ptr %2, i64 40
  store ptr %15, ptr %16, align 8, !tbaa !5
  %17 = tail call noalias ptr @malloc(i64 noundef %5) #4
  %18 = getelementptr inbounds i8, ptr %2, i64 48
  store ptr %17, ptr %18, align 8, !tbaa !5
  %19 = tail call noalias ptr @malloc(i64 noundef %5) #4
  %20 = getelementptr inbounds i8, ptr %2, i64 56
  store ptr %19, ptr %20, align 8, !tbaa !5
  %21 = tail call noalias ptr @malloc(i64 noundef %5) #4
  %22 = getelementptr inbounds i8, ptr %2, i64 64
  store ptr %21, ptr %22, align 8, !tbaa !5
  %23 = tail call noalias ptr @malloc(i64 noundef %5) #4
  %24 = getelementptr inbounds i8, ptr %2, i64 72
  store ptr %23, ptr %24, align 8, !tbaa !5
  %25 = icmp sgt i32 %1, 0
  br i1 %25, label %.lr.ph.preheader, label %.preheader49.thread

.lr.ph.preheader:                                 ; preds = %.preheader50
  %wide.trip.count = zext nneg i32 %1 to i64
  %xtraiter = and i64 %wide.trip.count, 1
  %26 = icmp eq i32 %1, 1
  br i1 %26, label %.preheader49.unr-lcssa, label %.lr.ph.preheader.new

.lr.ph.preheader.new:                             ; preds = %.lr.ph.preheader
  %unroll_iter = and i64 %wide.trip.count, 2147483646
  br label %.lr.ph

.preheader49.unr-lcssa:                           ; preds = %.lr.ph, %.lr.ph.preheader
  %indvars.iv.unr = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next.1, %.lr.ph ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.preheader49, label %.lr.ph.epil

.lr.ph.epil:                                      ; preds = %.preheader49.unr-lcssa
  %27 = getelementptr inbounds float, ptr %0, i64 %indvars.iv.unr
  %28 = load float, ptr %27, align 4, !tbaa !9
  %29 = fmul float %28, 1.000000e+01
  %30 = fptosi float %29 to i32
  %31 = sext i32 %30 to i64
  %32 = getelementptr inbounds ptr, ptr %2, i64 %31
  %33 = load ptr, ptr %32, align 8, !tbaa !5
  %34 = getelementptr inbounds i32, ptr %3, i64 %31
  %35 = load i32, ptr %34, align 4, !tbaa !11
  %36 = add nsw i32 %35, 1
  store i32 %36, ptr %34, align 4, !tbaa !11
  %37 = sext i32 %35 to i64
  %38 = getelementptr inbounds float, ptr %33, i64 %37
  store float %28, ptr %38, align 4, !tbaa !9
  br label %.preheader49

.preheader49:                                     ; preds = %.preheader49.unr-lcssa, %.lr.ph.epil
  %.pre = load i32, ptr %3, align 4, !tbaa !11
  %39 = icmp sgt i32 %.pre, 0
  br i1 %39, label %64, label %.preheader49.thread

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader.new
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader.new ], [ %indvars.iv.next.1, %.lr.ph ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.1, %.lr.ph ]
  %40 = getelementptr inbounds float, ptr %0, i64 %indvars.iv
  %41 = load float, ptr %40, align 4, !tbaa !9
  %42 = fmul float %41, 1.000000e+01
  %43 = fptosi float %42 to i32
  %44 = sext i32 %43 to i64
  %45 = getelementptr inbounds ptr, ptr %2, i64 %44
  %46 = load ptr, ptr %45, align 8, !tbaa !5
  %47 = getelementptr inbounds i32, ptr %3, i64 %44
  %48 = load i32, ptr %47, align 4, !tbaa !11
  %49 = add nsw i32 %48, 1
  store i32 %49, ptr %47, align 4, !tbaa !11
  %50 = sext i32 %48 to i64
  %51 = getelementptr inbounds float, ptr %46, i64 %50
  store float %41, ptr %51, align 4, !tbaa !9
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %52 = getelementptr inbounds float, ptr %0, i64 %indvars.iv.next
  %53 = load float, ptr %52, align 4, !tbaa !9
  %54 = fmul float %53, 1.000000e+01
  %55 = fptosi float %54 to i32
  %56 = sext i32 %55 to i64
  %57 = getelementptr inbounds ptr, ptr %2, i64 %56
  %58 = load ptr, ptr %57, align 8, !tbaa !5
  %59 = getelementptr inbounds i32, ptr %3, i64 %56
  %60 = load i32, ptr %59, align 4, !tbaa !11
  %61 = add nsw i32 %60, 1
  store i32 %61, ptr %59, align 4, !tbaa !11
  %62 = sext i32 %60 to i64
  %63 = getelementptr inbounds float, ptr %58, i64 %62
  store float %53, ptr %63, align 4, !tbaa !9
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.preheader49.unr-lcssa, label %.lr.ph, !llvm.loop !13

64:                                               ; preds = %.preheader49
  tail call void @insertionSort(ptr noundef %6, i32 noundef %.pre)
  br label %.preheader49.thread

.preheader49.thread:                              ; preds = %.preheader50, %.preheader49, %64
  %65 = phi i1 [ false, %.preheader49 ], [ true, %64 ], [ false, %.preheader50 ]
  %66 = phi i32 [ %.pre, %.preheader49 ], [ %.pre, %64 ], [ 0, %.preheader50 ]
  %67 = getelementptr inbounds i8, ptr %3, i64 4
  %68 = load i32, ptr %67, align 4, !tbaa !11
  %69 = icmp sgt i32 %68, 0
  br i1 %69, label %70, label %71

70:                                               ; preds = %.preheader49.thread
  tail call void @insertionSort(ptr noundef %7, i32 noundef %68)
  br label %71

71:                                               ; preds = %70, %.preheader49.thread
  %72 = getelementptr inbounds i8, ptr %3, i64 8
  %73 = load i32, ptr %72, align 4, !tbaa !11
  %74 = icmp sgt i32 %73, 0
  br i1 %74, label %75, label %76

75:                                               ; preds = %71
  tail call void @insertionSort(ptr noundef %9, i32 noundef %73)
  br label %76

76:                                               ; preds = %75, %71
  %77 = getelementptr inbounds i8, ptr %3, i64 12
  %78 = load i32, ptr %77, align 4, !tbaa !11
  %79 = icmp sgt i32 %78, 0
  br i1 %79, label %80, label %81

80:                                               ; preds = %76
  tail call void @insertionSort(ptr noundef %11, i32 noundef %78)
  br label %81

81:                                               ; preds = %80, %76
  %82 = getelementptr inbounds i8, ptr %3, i64 16
  %83 = load i32, ptr %82, align 4, !tbaa !11
  %84 = icmp sgt i32 %83, 0
  br i1 %84, label %85, label %86

85:                                               ; preds = %81
  tail call void @insertionSort(ptr noundef %13, i32 noundef %83)
  br label %86

86:                                               ; preds = %85, %81
  %87 = getelementptr inbounds i8, ptr %3, i64 20
  %88 = load i32, ptr %87, align 4, !tbaa !11
  %89 = icmp sgt i32 %88, 0
  br i1 %89, label %90, label %91

90:                                               ; preds = %86
  tail call void @insertionSort(ptr noundef %15, i32 noundef %88)
  br label %91

91:                                               ; preds = %90, %86
  %92 = getelementptr inbounds i8, ptr %3, i64 24
  %93 = load i32, ptr %92, align 4, !tbaa !11
  %94 = icmp sgt i32 %93, 0
  br i1 %94, label %95, label %96

95:                                               ; preds = %91
  tail call void @insertionSort(ptr noundef %17, i32 noundef %93)
  br label %96

96:                                               ; preds = %95, %91
  %97 = getelementptr inbounds i8, ptr %3, i64 28
  %98 = load i32, ptr %97, align 4, !tbaa !11
  %99 = icmp sgt i32 %98, 0
  br i1 %99, label %100, label %101

100:                                              ; preds = %96
  tail call void @insertionSort(ptr noundef %19, i32 noundef %98)
  br label %101

101:                                              ; preds = %100, %96
  %102 = getelementptr inbounds i8, ptr %3, i64 32
  %103 = load i32, ptr %102, align 4, !tbaa !11
  %104 = icmp sgt i32 %103, 0
  br i1 %104, label %105, label %106

105:                                              ; preds = %101
  tail call void @insertionSort(ptr noundef %21, i32 noundef %103)
  br label %106

106:                                              ; preds = %105, %101
  %107 = getelementptr inbounds i8, ptr %3, i64 36
  %108 = load i32, ptr %107, align 4, !tbaa !11
  %109 = icmp sgt i32 %108, 0
  br i1 %109, label %110, label %.preheader47.preheader

110:                                              ; preds = %106
  tail call void @insertionSort(ptr noundef %23, i32 noundef %108)
  br label %.preheader47.preheader

.preheader47.preheader:                           ; preds = %110, %106
  br i1 %65, label %.lr.ph56, label %._crit_edge

.lr.ph56:                                         ; preds = %.preheader47.preheader
  %wide.trip.count73 = zext nneg i32 %66 to i64
  %min.iters.check = icmp ult i32 %66, 8
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph56
  %indvars.iv68.ph = phi i64 [ 0, %.lr.ph56 ], [ %n.vec, %middle.block ]
  br label %scalar.ph

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

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %111 = getelementptr inbounds float, ptr %6, i64 %index
  %112 = getelementptr inbounds i8, ptr %111, i64 16
  %wide.load = load <4 x float>, ptr %111, align 4, !tbaa !9
  %wide.load83 = load <4 x float>, ptr %112, align 4, !tbaa !9
  %113 = getelementptr inbounds float, ptr %0, i64 %index
  %114 = getelementptr inbounds i8, ptr %113, i64 16
  store <4 x float> %wide.load, ptr %113, align 4, !tbaa !9
  store <4 x float> %wide.load83, ptr %114, align 4, !tbaa !9
  %index.next = add nuw i64 %index, 8
  %115 = icmp eq i64 %index.next, %n.vec
  br i1 %115, label %middle.block, label %vector.body, !llvm.loop !15

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count73
  br i1 %cmp.n, label %._crit_edge, label %scalar.ph.preheader

._crit_edge:                                      ; preds = %scalar.ph, %middle.block, %.preheader47.preheader
  %.1.lcssa = phi i32 [ 0, %.preheader47.preheader ], [ %66, %middle.block ], [ %66, %scalar.ph ]
  br i1 %69, label %.lr.ph56.1, label %._crit_edge.1

.lr.ph56.1:                                       ; preds = %._crit_edge
  %116 = zext nneg i32 %.1.lcssa to i64
  %wide.trip.count73.1 = zext nneg i32 %68 to i64
  %min.iters.check86 = icmp ult i32 %68, 8
  br i1 %min.iters.check86, label %scalar.ph85.preheader, label %vector.ph87

vector.ph87:                                      ; preds = %.lr.ph56.1
  %n.vec89 = and i64 %wide.trip.count73.1, 2147483640
  %ind.end = add nuw nsw i64 %n.vec89, %116
  %invariant.gep = getelementptr float, ptr %0, i64 %116
  br label %vector.body92

vector.body92:                                    ; preds = %vector.body92, %vector.ph87
  %index93 = phi i64 [ 0, %vector.ph87 ], [ %index.next96, %vector.body92 ]
  %117 = getelementptr inbounds float, ptr %7, i64 %index93
  %118 = getelementptr inbounds i8, ptr %117, i64 16
  %wide.load94 = load <4 x float>, ptr %117, align 4, !tbaa !9
  %wide.load95 = load <4 x float>, ptr %118, align 4, !tbaa !9
  %gep = getelementptr float, ptr %invariant.gep, i64 %index93
  %119 = getelementptr inbounds i8, ptr %gep, i64 16
  store <4 x float> %wide.load94, ptr %gep, align 4, !tbaa !9
  store <4 x float> %wide.load95, ptr %119, align 4, !tbaa !9
  %index.next96 = add nuw i64 %index93, 8
  %120 = icmp eq i64 %index.next96, %n.vec89
  br i1 %120, label %middle.block84, label %vector.body92, !llvm.loop !18

middle.block84:                                   ; preds = %vector.body92
  %cmp.n97 = icmp eq i64 %n.vec89, %wide.trip.count73.1
  br i1 %cmp.n97, label %._crit_edge.loopexit.1, label %scalar.ph85.preheader

scalar.ph85.preheader:                            ; preds = %middle.block84, %.lr.ph56.1
  %indvars.iv68.1.ph = phi i64 [ %116, %.lr.ph56.1 ], [ %ind.end, %middle.block84 ]
  %indvars.iv66.1.ph = phi i64 [ 0, %.lr.ph56.1 ], [ %n.vec89, %middle.block84 ]
  br label %scalar.ph85

scalar.ph85:                                      ; preds = %scalar.ph85.preheader, %scalar.ph85
  %indvars.iv68.1 = phi i64 [ %indvars.iv.next69.1, %scalar.ph85 ], [ %indvars.iv68.1.ph, %scalar.ph85.preheader ]
  %indvars.iv66.1 = phi i64 [ %indvars.iv.next67.1, %scalar.ph85 ], [ %indvars.iv66.1.ph, %scalar.ph85.preheader ]
  %121 = getelementptr inbounds float, ptr %7, i64 %indvars.iv66.1
  %122 = load float, ptr %121, align 4, !tbaa !9
  %indvars.iv.next69.1 = add nuw nsw i64 %indvars.iv68.1, 1
  %123 = getelementptr inbounds float, ptr %0, i64 %indvars.iv68.1
  store float %122, ptr %123, align 4, !tbaa !9
  %indvars.iv.next67.1 = add nuw nsw i64 %indvars.iv66.1, 1
  %exitcond74.1.not = icmp eq i64 %indvars.iv.next67.1, %wide.trip.count73.1
  br i1 %exitcond74.1.not, label %._crit_edge.loopexit.1, label %scalar.ph85, !llvm.loop !19

._crit_edge.loopexit.1:                           ; preds = %scalar.ph85, %middle.block84
  %indvars.iv.next69.1.lcssa = phi i64 [ %ind.end, %middle.block84 ], [ %indvars.iv.next69.1, %scalar.ph85 ]
  %124 = trunc nsw i64 %indvars.iv.next69.1.lcssa to i32
  br label %._crit_edge.1

._crit_edge.1:                                    ; preds = %._crit_edge.loopexit.1, %._crit_edge
  %.1.lcssa.1 = phi i32 [ %.1.lcssa, %._crit_edge ], [ %124, %._crit_edge.loopexit.1 ]
  br i1 %74, label %.lr.ph56.2, label %._crit_edge.2

.lr.ph56.2:                                       ; preds = %._crit_edge.1
  %125 = sext i32 %.1.lcssa.1 to i64
  %wide.trip.count73.2 = zext nneg i32 %73 to i64
  %min.iters.check100 = icmp ult i32 %73, 8
  br i1 %min.iters.check100, label %scalar.ph99.preheader, label %vector.ph101

vector.ph101:                                     ; preds = %.lr.ph56.2
  %n.vec103 = and i64 %wide.trip.count73.2, 2147483640
  %ind.end104 = add nsw i64 %n.vec103, %125
  %invariant.gep242 = getelementptr float, ptr %0, i64 %125
  br label %vector.body107

vector.body107:                                   ; preds = %vector.body107, %vector.ph101
  %index108 = phi i64 [ 0, %vector.ph101 ], [ %index.next112, %vector.body107 ]
  %126 = getelementptr inbounds float, ptr %9, i64 %index108
  %127 = getelementptr inbounds i8, ptr %126, i64 16
  %wide.load110 = load <4 x float>, ptr %126, align 4, !tbaa !9
  %wide.load111 = load <4 x float>, ptr %127, align 4, !tbaa !9
  %gep243 = getelementptr float, ptr %invariant.gep242, i64 %index108
  %128 = getelementptr inbounds i8, ptr %gep243, i64 16
  store <4 x float> %wide.load110, ptr %gep243, align 4, !tbaa !9
  store <4 x float> %wide.load111, ptr %128, align 4, !tbaa !9
  %index.next112 = add nuw i64 %index108, 8
  %129 = icmp eq i64 %index.next112, %n.vec103
  br i1 %129, label %middle.block98, label %vector.body107, !llvm.loop !20

middle.block98:                                   ; preds = %vector.body107
  %cmp.n113 = icmp eq i64 %n.vec103, %wide.trip.count73.2
  br i1 %cmp.n113, label %._crit_edge.loopexit.2, label %scalar.ph99.preheader

scalar.ph99.preheader:                            ; preds = %middle.block98, %.lr.ph56.2
  %indvars.iv68.2.ph = phi i64 [ %125, %.lr.ph56.2 ], [ %ind.end104, %middle.block98 ]
  %indvars.iv66.2.ph = phi i64 [ 0, %.lr.ph56.2 ], [ %n.vec103, %middle.block98 ]
  br label %scalar.ph99

scalar.ph99:                                      ; preds = %scalar.ph99.preheader, %scalar.ph99
  %indvars.iv68.2 = phi i64 [ %indvars.iv.next69.2, %scalar.ph99 ], [ %indvars.iv68.2.ph, %scalar.ph99.preheader ]
  %indvars.iv66.2 = phi i64 [ %indvars.iv.next67.2, %scalar.ph99 ], [ %indvars.iv66.2.ph, %scalar.ph99.preheader ]
  %130 = getelementptr inbounds float, ptr %9, i64 %indvars.iv66.2
  %131 = load float, ptr %130, align 4, !tbaa !9
  %indvars.iv.next69.2 = add nsw i64 %indvars.iv68.2, 1
  %132 = getelementptr inbounds float, ptr %0, i64 %indvars.iv68.2
  store float %131, ptr %132, align 4, !tbaa !9
  %indvars.iv.next67.2 = add nuw nsw i64 %indvars.iv66.2, 1
  %exitcond74.2.not = icmp eq i64 %indvars.iv.next67.2, %wide.trip.count73.2
  br i1 %exitcond74.2.not, label %._crit_edge.loopexit.2, label %scalar.ph99, !llvm.loop !21

._crit_edge.loopexit.2:                           ; preds = %scalar.ph99, %middle.block98
  %indvars.iv.next69.2.lcssa = phi i64 [ %ind.end104, %middle.block98 ], [ %indvars.iv.next69.2, %scalar.ph99 ]
  %133 = trunc nsw i64 %indvars.iv.next69.2.lcssa to i32
  br label %._crit_edge.2

._crit_edge.2:                                    ; preds = %._crit_edge.loopexit.2, %._crit_edge.1
  %.1.lcssa.2 = phi i32 [ %.1.lcssa.1, %._crit_edge.1 ], [ %133, %._crit_edge.loopexit.2 ]
  br i1 %79, label %.lr.ph56.3, label %._crit_edge.3

.lr.ph56.3:                                       ; preds = %._crit_edge.2
  %134 = sext i32 %.1.lcssa.2 to i64
  %wide.trip.count73.3 = zext nneg i32 %78 to i64
  %min.iters.check116 = icmp ult i32 %78, 8
  br i1 %min.iters.check116, label %scalar.ph115.preheader, label %vector.ph117

vector.ph117:                                     ; preds = %.lr.ph56.3
  %n.vec119 = and i64 %wide.trip.count73.3, 2147483640
  %ind.end120 = add nsw i64 %n.vec119, %134
  %invariant.gep244 = getelementptr float, ptr %0, i64 %134
  br label %vector.body123

vector.body123:                                   ; preds = %vector.body123, %vector.ph117
  %index124 = phi i64 [ 0, %vector.ph117 ], [ %index.next128, %vector.body123 ]
  %135 = getelementptr inbounds float, ptr %11, i64 %index124
  %136 = getelementptr inbounds i8, ptr %135, i64 16
  %wide.load126 = load <4 x float>, ptr %135, align 4, !tbaa !9
  %wide.load127 = load <4 x float>, ptr %136, align 4, !tbaa !9
  %gep245 = getelementptr float, ptr %invariant.gep244, i64 %index124
  %137 = getelementptr inbounds i8, ptr %gep245, i64 16
  store <4 x float> %wide.load126, ptr %gep245, align 4, !tbaa !9
  store <4 x float> %wide.load127, ptr %137, align 4, !tbaa !9
  %index.next128 = add nuw i64 %index124, 8
  %138 = icmp eq i64 %index.next128, %n.vec119
  br i1 %138, label %middle.block114, label %vector.body123, !llvm.loop !22

middle.block114:                                  ; preds = %vector.body123
  %cmp.n129 = icmp eq i64 %n.vec119, %wide.trip.count73.3
  br i1 %cmp.n129, label %._crit_edge.loopexit.3, label %scalar.ph115.preheader

scalar.ph115.preheader:                           ; preds = %middle.block114, %.lr.ph56.3
  %indvars.iv68.3.ph = phi i64 [ %134, %.lr.ph56.3 ], [ %ind.end120, %middle.block114 ]
  %indvars.iv66.3.ph = phi i64 [ 0, %.lr.ph56.3 ], [ %n.vec119, %middle.block114 ]
  br label %scalar.ph115

scalar.ph115:                                     ; preds = %scalar.ph115.preheader, %scalar.ph115
  %indvars.iv68.3 = phi i64 [ %indvars.iv.next69.3, %scalar.ph115 ], [ %indvars.iv68.3.ph, %scalar.ph115.preheader ]
  %indvars.iv66.3 = phi i64 [ %indvars.iv.next67.3, %scalar.ph115 ], [ %indvars.iv66.3.ph, %scalar.ph115.preheader ]
  %139 = getelementptr inbounds float, ptr %11, i64 %indvars.iv66.3
  %140 = load float, ptr %139, align 4, !tbaa !9
  %indvars.iv.next69.3 = add nsw i64 %indvars.iv68.3, 1
  %141 = getelementptr inbounds float, ptr %0, i64 %indvars.iv68.3
  store float %140, ptr %141, align 4, !tbaa !9
  %indvars.iv.next67.3 = add nuw nsw i64 %indvars.iv66.3, 1
  %exitcond74.3.not = icmp eq i64 %indvars.iv.next67.3, %wide.trip.count73.3
  br i1 %exitcond74.3.not, label %._crit_edge.loopexit.3, label %scalar.ph115, !llvm.loop !23

._crit_edge.loopexit.3:                           ; preds = %scalar.ph115, %middle.block114
  %indvars.iv.next69.3.lcssa = phi i64 [ %ind.end120, %middle.block114 ], [ %indvars.iv.next69.3, %scalar.ph115 ]
  %142 = trunc nsw i64 %indvars.iv.next69.3.lcssa to i32
  br label %._crit_edge.3

._crit_edge.3:                                    ; preds = %._crit_edge.loopexit.3, %._crit_edge.2
  %.1.lcssa.3 = phi i32 [ %.1.lcssa.2, %._crit_edge.2 ], [ %142, %._crit_edge.loopexit.3 ]
  br i1 %84, label %.lr.ph56.4, label %._crit_edge.4

.lr.ph56.4:                                       ; preds = %._crit_edge.3
  %143 = sext i32 %.1.lcssa.3 to i64
  %wide.trip.count73.4 = zext nneg i32 %83 to i64
  %min.iters.check132 = icmp ult i32 %83, 8
  br i1 %min.iters.check132, label %scalar.ph131.preheader, label %vector.ph133

vector.ph133:                                     ; preds = %.lr.ph56.4
  %n.vec135 = and i64 %wide.trip.count73.4, 2147483640
  %ind.end136 = add nsw i64 %n.vec135, %143
  %invariant.gep246 = getelementptr float, ptr %0, i64 %143
  br label %vector.body139

vector.body139:                                   ; preds = %vector.body139, %vector.ph133
  %index140 = phi i64 [ 0, %vector.ph133 ], [ %index.next144, %vector.body139 ]
  %144 = getelementptr inbounds float, ptr %13, i64 %index140
  %145 = getelementptr inbounds i8, ptr %144, i64 16
  %wide.load142 = load <4 x float>, ptr %144, align 4, !tbaa !9
  %wide.load143 = load <4 x float>, ptr %145, align 4, !tbaa !9
  %gep247 = getelementptr float, ptr %invariant.gep246, i64 %index140
  %146 = getelementptr inbounds i8, ptr %gep247, i64 16
  store <4 x float> %wide.load142, ptr %gep247, align 4, !tbaa !9
  store <4 x float> %wide.load143, ptr %146, align 4, !tbaa !9
  %index.next144 = add nuw i64 %index140, 8
  %147 = icmp eq i64 %index.next144, %n.vec135
  br i1 %147, label %middle.block130, label %vector.body139, !llvm.loop !24

middle.block130:                                  ; preds = %vector.body139
  %cmp.n145 = icmp eq i64 %n.vec135, %wide.trip.count73.4
  br i1 %cmp.n145, label %._crit_edge.loopexit.4, label %scalar.ph131.preheader

scalar.ph131.preheader:                           ; preds = %middle.block130, %.lr.ph56.4
  %indvars.iv68.4.ph = phi i64 [ %143, %.lr.ph56.4 ], [ %ind.end136, %middle.block130 ]
  %indvars.iv66.4.ph = phi i64 [ 0, %.lr.ph56.4 ], [ %n.vec135, %middle.block130 ]
  br label %scalar.ph131

scalar.ph131:                                     ; preds = %scalar.ph131.preheader, %scalar.ph131
  %indvars.iv68.4 = phi i64 [ %indvars.iv.next69.4, %scalar.ph131 ], [ %indvars.iv68.4.ph, %scalar.ph131.preheader ]
  %indvars.iv66.4 = phi i64 [ %indvars.iv.next67.4, %scalar.ph131 ], [ %indvars.iv66.4.ph, %scalar.ph131.preheader ]
  %148 = getelementptr inbounds float, ptr %13, i64 %indvars.iv66.4
  %149 = load float, ptr %148, align 4, !tbaa !9
  %indvars.iv.next69.4 = add nsw i64 %indvars.iv68.4, 1
  %150 = getelementptr inbounds float, ptr %0, i64 %indvars.iv68.4
  store float %149, ptr %150, align 4, !tbaa !9
  %indvars.iv.next67.4 = add nuw nsw i64 %indvars.iv66.4, 1
  %exitcond74.4.not = icmp eq i64 %indvars.iv.next67.4, %wide.trip.count73.4
  br i1 %exitcond74.4.not, label %._crit_edge.loopexit.4, label %scalar.ph131, !llvm.loop !25

._crit_edge.loopexit.4:                           ; preds = %scalar.ph131, %middle.block130
  %indvars.iv.next69.4.lcssa = phi i64 [ %ind.end136, %middle.block130 ], [ %indvars.iv.next69.4, %scalar.ph131 ]
  %151 = trunc nsw i64 %indvars.iv.next69.4.lcssa to i32
  br label %._crit_edge.4

._crit_edge.4:                                    ; preds = %._crit_edge.loopexit.4, %._crit_edge.3
  %.1.lcssa.4 = phi i32 [ %.1.lcssa.3, %._crit_edge.3 ], [ %151, %._crit_edge.loopexit.4 ]
  br i1 %89, label %.lr.ph56.5, label %._crit_edge.5

.lr.ph56.5:                                       ; preds = %._crit_edge.4
  %152 = sext i32 %.1.lcssa.4 to i64
  %wide.trip.count73.5 = zext nneg i32 %88 to i64
  %min.iters.check148 = icmp ult i32 %88, 8
  br i1 %min.iters.check148, label %scalar.ph147.preheader, label %vector.ph149

vector.ph149:                                     ; preds = %.lr.ph56.5
  %n.vec151 = and i64 %wide.trip.count73.5, 2147483640
  %ind.end152 = add nsw i64 %n.vec151, %152
  %invariant.gep248 = getelementptr float, ptr %0, i64 %152
  br label %vector.body155

vector.body155:                                   ; preds = %vector.body155, %vector.ph149
  %index156 = phi i64 [ 0, %vector.ph149 ], [ %index.next160, %vector.body155 ]
  %153 = getelementptr inbounds float, ptr %15, i64 %index156
  %154 = getelementptr inbounds i8, ptr %153, i64 16
  %wide.load158 = load <4 x float>, ptr %153, align 4, !tbaa !9
  %wide.load159 = load <4 x float>, ptr %154, align 4, !tbaa !9
  %gep249 = getelementptr float, ptr %invariant.gep248, i64 %index156
  %155 = getelementptr inbounds i8, ptr %gep249, i64 16
  store <4 x float> %wide.load158, ptr %gep249, align 4, !tbaa !9
  store <4 x float> %wide.load159, ptr %155, align 4, !tbaa !9
  %index.next160 = add nuw i64 %index156, 8
  %156 = icmp eq i64 %index.next160, %n.vec151
  br i1 %156, label %middle.block146, label %vector.body155, !llvm.loop !26

middle.block146:                                  ; preds = %vector.body155
  %cmp.n161 = icmp eq i64 %n.vec151, %wide.trip.count73.5
  br i1 %cmp.n161, label %._crit_edge.loopexit.5, label %scalar.ph147.preheader

scalar.ph147.preheader:                           ; preds = %middle.block146, %.lr.ph56.5
  %indvars.iv68.5.ph = phi i64 [ %152, %.lr.ph56.5 ], [ %ind.end152, %middle.block146 ]
  %indvars.iv66.5.ph = phi i64 [ 0, %.lr.ph56.5 ], [ %n.vec151, %middle.block146 ]
  br label %scalar.ph147

scalar.ph147:                                     ; preds = %scalar.ph147.preheader, %scalar.ph147
  %indvars.iv68.5 = phi i64 [ %indvars.iv.next69.5, %scalar.ph147 ], [ %indvars.iv68.5.ph, %scalar.ph147.preheader ]
  %indvars.iv66.5 = phi i64 [ %indvars.iv.next67.5, %scalar.ph147 ], [ %indvars.iv66.5.ph, %scalar.ph147.preheader ]
  %157 = getelementptr inbounds float, ptr %15, i64 %indvars.iv66.5
  %158 = load float, ptr %157, align 4, !tbaa !9
  %indvars.iv.next69.5 = add nsw i64 %indvars.iv68.5, 1
  %159 = getelementptr inbounds float, ptr %0, i64 %indvars.iv68.5
  store float %158, ptr %159, align 4, !tbaa !9
  %indvars.iv.next67.5 = add nuw nsw i64 %indvars.iv66.5, 1
  %exitcond74.5.not = icmp eq i64 %indvars.iv.next67.5, %wide.trip.count73.5
  br i1 %exitcond74.5.not, label %._crit_edge.loopexit.5, label %scalar.ph147, !llvm.loop !27

._crit_edge.loopexit.5:                           ; preds = %scalar.ph147, %middle.block146
  %indvars.iv.next69.5.lcssa = phi i64 [ %ind.end152, %middle.block146 ], [ %indvars.iv.next69.5, %scalar.ph147 ]
  %160 = trunc nsw i64 %indvars.iv.next69.5.lcssa to i32
  br label %._crit_edge.5

._crit_edge.5:                                    ; preds = %._crit_edge.loopexit.5, %._crit_edge.4
  %.1.lcssa.5 = phi i32 [ %.1.lcssa.4, %._crit_edge.4 ], [ %160, %._crit_edge.loopexit.5 ]
  br i1 %94, label %.lr.ph56.6, label %._crit_edge.6

.lr.ph56.6:                                       ; preds = %._crit_edge.5
  %161 = sext i32 %.1.lcssa.5 to i64
  %wide.trip.count73.6 = zext nneg i32 %93 to i64
  %min.iters.check164 = icmp ult i32 %93, 8
  br i1 %min.iters.check164, label %scalar.ph163.preheader, label %vector.ph165

vector.ph165:                                     ; preds = %.lr.ph56.6
  %n.vec167 = and i64 %wide.trip.count73.6, 2147483640
  %ind.end168 = add nsw i64 %n.vec167, %161
  %invariant.gep250 = getelementptr float, ptr %0, i64 %161
  br label %vector.body171

vector.body171:                                   ; preds = %vector.body171, %vector.ph165
  %index172 = phi i64 [ 0, %vector.ph165 ], [ %index.next176, %vector.body171 ]
  %162 = getelementptr inbounds float, ptr %17, i64 %index172
  %163 = getelementptr inbounds i8, ptr %162, i64 16
  %wide.load174 = load <4 x float>, ptr %162, align 4, !tbaa !9
  %wide.load175 = load <4 x float>, ptr %163, align 4, !tbaa !9
  %gep251 = getelementptr float, ptr %invariant.gep250, i64 %index172
  %164 = getelementptr inbounds i8, ptr %gep251, i64 16
  store <4 x float> %wide.load174, ptr %gep251, align 4, !tbaa !9
  store <4 x float> %wide.load175, ptr %164, align 4, !tbaa !9
  %index.next176 = add nuw i64 %index172, 8
  %165 = icmp eq i64 %index.next176, %n.vec167
  br i1 %165, label %middle.block162, label %vector.body171, !llvm.loop !28

middle.block162:                                  ; preds = %vector.body171
  %cmp.n177 = icmp eq i64 %n.vec167, %wide.trip.count73.6
  br i1 %cmp.n177, label %._crit_edge.loopexit.6, label %scalar.ph163.preheader

scalar.ph163.preheader:                           ; preds = %middle.block162, %.lr.ph56.6
  %indvars.iv68.6.ph = phi i64 [ %161, %.lr.ph56.6 ], [ %ind.end168, %middle.block162 ]
  %indvars.iv66.6.ph = phi i64 [ 0, %.lr.ph56.6 ], [ %n.vec167, %middle.block162 ]
  br label %scalar.ph163

scalar.ph163:                                     ; preds = %scalar.ph163.preheader, %scalar.ph163
  %indvars.iv68.6 = phi i64 [ %indvars.iv.next69.6, %scalar.ph163 ], [ %indvars.iv68.6.ph, %scalar.ph163.preheader ]
  %indvars.iv66.6 = phi i64 [ %indvars.iv.next67.6, %scalar.ph163 ], [ %indvars.iv66.6.ph, %scalar.ph163.preheader ]
  %166 = getelementptr inbounds float, ptr %17, i64 %indvars.iv66.6
  %167 = load float, ptr %166, align 4, !tbaa !9
  %indvars.iv.next69.6 = add nsw i64 %indvars.iv68.6, 1
  %168 = getelementptr inbounds float, ptr %0, i64 %indvars.iv68.6
  store float %167, ptr %168, align 4, !tbaa !9
  %indvars.iv.next67.6 = add nuw nsw i64 %indvars.iv66.6, 1
  %exitcond74.6.not = icmp eq i64 %indvars.iv.next67.6, %wide.trip.count73.6
  br i1 %exitcond74.6.not, label %._crit_edge.loopexit.6, label %scalar.ph163, !llvm.loop !29

._crit_edge.loopexit.6:                           ; preds = %scalar.ph163, %middle.block162
  %indvars.iv.next69.6.lcssa = phi i64 [ %ind.end168, %middle.block162 ], [ %indvars.iv.next69.6, %scalar.ph163 ]
  %169 = trunc nsw i64 %indvars.iv.next69.6.lcssa to i32
  br label %._crit_edge.6

._crit_edge.6:                                    ; preds = %._crit_edge.loopexit.6, %._crit_edge.5
  %.1.lcssa.6 = phi i32 [ %.1.lcssa.5, %._crit_edge.5 ], [ %169, %._crit_edge.loopexit.6 ]
  br i1 %99, label %.lr.ph56.7, label %._crit_edge.7

.lr.ph56.7:                                       ; preds = %._crit_edge.6
  %170 = sext i32 %.1.lcssa.6 to i64
  %wide.trip.count73.7 = zext nneg i32 %98 to i64
  %min.iters.check180 = icmp ult i32 %98, 8
  br i1 %min.iters.check180, label %scalar.ph179.preheader, label %vector.ph181

vector.ph181:                                     ; preds = %.lr.ph56.7
  %n.vec183 = and i64 %wide.trip.count73.7, 2147483640
  %ind.end184 = add nsw i64 %n.vec183, %170
  %invariant.gep252 = getelementptr float, ptr %0, i64 %170
  br label %vector.body187

vector.body187:                                   ; preds = %vector.body187, %vector.ph181
  %index188 = phi i64 [ 0, %vector.ph181 ], [ %index.next192, %vector.body187 ]
  %171 = getelementptr inbounds float, ptr %19, i64 %index188
  %172 = getelementptr inbounds i8, ptr %171, i64 16
  %wide.load190 = load <4 x float>, ptr %171, align 4, !tbaa !9
  %wide.load191 = load <4 x float>, ptr %172, align 4, !tbaa !9
  %gep253 = getelementptr float, ptr %invariant.gep252, i64 %index188
  %173 = getelementptr inbounds i8, ptr %gep253, i64 16
  store <4 x float> %wide.load190, ptr %gep253, align 4, !tbaa !9
  store <4 x float> %wide.load191, ptr %173, align 4, !tbaa !9
  %index.next192 = add nuw i64 %index188, 8
  %174 = icmp eq i64 %index.next192, %n.vec183
  br i1 %174, label %middle.block178, label %vector.body187, !llvm.loop !30

middle.block178:                                  ; preds = %vector.body187
  %cmp.n193 = icmp eq i64 %n.vec183, %wide.trip.count73.7
  br i1 %cmp.n193, label %._crit_edge.loopexit.7, label %scalar.ph179.preheader

scalar.ph179.preheader:                           ; preds = %middle.block178, %.lr.ph56.7
  %indvars.iv68.7.ph = phi i64 [ %170, %.lr.ph56.7 ], [ %ind.end184, %middle.block178 ]
  %indvars.iv66.7.ph = phi i64 [ 0, %.lr.ph56.7 ], [ %n.vec183, %middle.block178 ]
  br label %scalar.ph179

scalar.ph179:                                     ; preds = %scalar.ph179.preheader, %scalar.ph179
  %indvars.iv68.7 = phi i64 [ %indvars.iv.next69.7, %scalar.ph179 ], [ %indvars.iv68.7.ph, %scalar.ph179.preheader ]
  %indvars.iv66.7 = phi i64 [ %indvars.iv.next67.7, %scalar.ph179 ], [ %indvars.iv66.7.ph, %scalar.ph179.preheader ]
  %175 = getelementptr inbounds float, ptr %19, i64 %indvars.iv66.7
  %176 = load float, ptr %175, align 4, !tbaa !9
  %indvars.iv.next69.7 = add nsw i64 %indvars.iv68.7, 1
  %177 = getelementptr inbounds float, ptr %0, i64 %indvars.iv68.7
  store float %176, ptr %177, align 4, !tbaa !9
  %indvars.iv.next67.7 = add nuw nsw i64 %indvars.iv66.7, 1
  %exitcond74.7.not = icmp eq i64 %indvars.iv.next67.7, %wide.trip.count73.7
  br i1 %exitcond74.7.not, label %._crit_edge.loopexit.7, label %scalar.ph179, !llvm.loop !31

._crit_edge.loopexit.7:                           ; preds = %scalar.ph179, %middle.block178
  %indvars.iv.next69.7.lcssa = phi i64 [ %ind.end184, %middle.block178 ], [ %indvars.iv.next69.7, %scalar.ph179 ]
  %178 = trunc nsw i64 %indvars.iv.next69.7.lcssa to i32
  br label %._crit_edge.7

._crit_edge.7:                                    ; preds = %._crit_edge.loopexit.7, %._crit_edge.6
  %.1.lcssa.7 = phi i32 [ %.1.lcssa.6, %._crit_edge.6 ], [ %178, %._crit_edge.loopexit.7 ]
  br i1 %104, label %.lr.ph56.8, label %._crit_edge.8

.lr.ph56.8:                                       ; preds = %._crit_edge.7
  %179 = sext i32 %.1.lcssa.7 to i64
  %wide.trip.count73.8 = zext nneg i32 %103 to i64
  %min.iters.check196 = icmp ult i32 %103, 8
  br i1 %min.iters.check196, label %scalar.ph195.preheader, label %vector.ph197

vector.ph197:                                     ; preds = %.lr.ph56.8
  %n.vec199 = and i64 %wide.trip.count73.8, 2147483640
  %ind.end200 = add nsw i64 %n.vec199, %179
  %invariant.gep254 = getelementptr float, ptr %0, i64 %179
  br label %vector.body203

vector.body203:                                   ; preds = %vector.body203, %vector.ph197
  %index204 = phi i64 [ 0, %vector.ph197 ], [ %index.next208, %vector.body203 ]
  %180 = getelementptr inbounds float, ptr %21, i64 %index204
  %181 = getelementptr inbounds i8, ptr %180, i64 16
  %wide.load206 = load <4 x float>, ptr %180, align 4, !tbaa !9
  %wide.load207 = load <4 x float>, ptr %181, align 4, !tbaa !9
  %gep255 = getelementptr float, ptr %invariant.gep254, i64 %index204
  %182 = getelementptr inbounds i8, ptr %gep255, i64 16
  store <4 x float> %wide.load206, ptr %gep255, align 4, !tbaa !9
  store <4 x float> %wide.load207, ptr %182, align 4, !tbaa !9
  %index.next208 = add nuw i64 %index204, 8
  %183 = icmp eq i64 %index.next208, %n.vec199
  br i1 %183, label %middle.block194, label %vector.body203, !llvm.loop !32

middle.block194:                                  ; preds = %vector.body203
  %cmp.n209 = icmp eq i64 %n.vec199, %wide.trip.count73.8
  br i1 %cmp.n209, label %._crit_edge.loopexit.8, label %scalar.ph195.preheader

scalar.ph195.preheader:                           ; preds = %middle.block194, %.lr.ph56.8
  %indvars.iv68.8.ph = phi i64 [ %179, %.lr.ph56.8 ], [ %ind.end200, %middle.block194 ]
  %indvars.iv66.8.ph = phi i64 [ 0, %.lr.ph56.8 ], [ %n.vec199, %middle.block194 ]
  br label %scalar.ph195

scalar.ph195:                                     ; preds = %scalar.ph195.preheader, %scalar.ph195
  %indvars.iv68.8 = phi i64 [ %indvars.iv.next69.8, %scalar.ph195 ], [ %indvars.iv68.8.ph, %scalar.ph195.preheader ]
  %indvars.iv66.8 = phi i64 [ %indvars.iv.next67.8, %scalar.ph195 ], [ %indvars.iv66.8.ph, %scalar.ph195.preheader ]
  %184 = getelementptr inbounds float, ptr %21, i64 %indvars.iv66.8
  %185 = load float, ptr %184, align 4, !tbaa !9
  %indvars.iv.next69.8 = add nsw i64 %indvars.iv68.8, 1
  %186 = getelementptr inbounds float, ptr %0, i64 %indvars.iv68.8
  store float %185, ptr %186, align 4, !tbaa !9
  %indvars.iv.next67.8 = add nuw nsw i64 %indvars.iv66.8, 1
  %exitcond74.8.not = icmp eq i64 %indvars.iv.next67.8, %wide.trip.count73.8
  br i1 %exitcond74.8.not, label %._crit_edge.loopexit.8, label %scalar.ph195, !llvm.loop !33

._crit_edge.loopexit.8:                           ; preds = %scalar.ph195, %middle.block194
  %indvars.iv.next69.8.lcssa = phi i64 [ %ind.end200, %middle.block194 ], [ %indvars.iv.next69.8, %scalar.ph195 ]
  %187 = trunc nsw i64 %indvars.iv.next69.8.lcssa to i32
  br label %._crit_edge.8

._crit_edge.8:                                    ; preds = %._crit_edge.loopexit.8, %._crit_edge.7
  %.1.lcssa.8 = phi i32 [ %.1.lcssa.7, %._crit_edge.7 ], [ %187, %._crit_edge.loopexit.8 ]
  br i1 %109, label %.lr.ph56.9, label %._crit_edge.9

.lr.ph56.9:                                       ; preds = %._crit_edge.8
  %188 = sext i32 %.1.lcssa.8 to i64
  %wide.trip.count73.9 = zext nneg i32 %108 to i64
  %min.iters.check212 = icmp ult i32 %108, 8
  br i1 %min.iters.check212, label %scalar.ph211.preheader, label %vector.ph213

vector.ph213:                                     ; preds = %.lr.ph56.9
  %n.vec215 = and i64 %wide.trip.count73.9, 2147483640
  %ind.end216 = add nsw i64 %n.vec215, %188
  %invariant.gep256 = getelementptr float, ptr %0, i64 %188
  br label %vector.body219

vector.body219:                                   ; preds = %vector.body219, %vector.ph213
  %index220 = phi i64 [ 0, %vector.ph213 ], [ %index.next224, %vector.body219 ]
  %189 = getelementptr inbounds float, ptr %23, i64 %index220
  %190 = getelementptr inbounds i8, ptr %189, i64 16
  %wide.load222 = load <4 x float>, ptr %189, align 4, !tbaa !9
  %wide.load223 = load <4 x float>, ptr %190, align 4, !tbaa !9
  %gep257 = getelementptr float, ptr %invariant.gep256, i64 %index220
  %191 = getelementptr inbounds i8, ptr %gep257, i64 16
  store <4 x float> %wide.load222, ptr %gep257, align 4, !tbaa !9
  store <4 x float> %wide.load223, ptr %191, align 4, !tbaa !9
  %index.next224 = add nuw i64 %index220, 8
  %192 = icmp eq i64 %index.next224, %n.vec215
  br i1 %192, label %middle.block210, label %vector.body219, !llvm.loop !34

middle.block210:                                  ; preds = %vector.body219
  %cmp.n225 = icmp eq i64 %n.vec215, %wide.trip.count73.9
  br i1 %cmp.n225, label %._crit_edge.9, label %scalar.ph211.preheader

scalar.ph211.preheader:                           ; preds = %middle.block210, %.lr.ph56.9
  %indvars.iv68.9.ph = phi i64 [ %188, %.lr.ph56.9 ], [ %ind.end216, %middle.block210 ]
  %indvars.iv66.9.ph = phi i64 [ 0, %.lr.ph56.9 ], [ %n.vec215, %middle.block210 ]
  br label %scalar.ph211

scalar.ph211:                                     ; preds = %scalar.ph211.preheader, %scalar.ph211
  %indvars.iv68.9 = phi i64 [ %indvars.iv.next69.9, %scalar.ph211 ], [ %indvars.iv68.9.ph, %scalar.ph211.preheader ]
  %indvars.iv66.9 = phi i64 [ %indvars.iv.next67.9, %scalar.ph211 ], [ %indvars.iv66.9.ph, %scalar.ph211.preheader ]
  %193 = getelementptr inbounds float, ptr %23, i64 %indvars.iv66.9
  %194 = load float, ptr %193, align 4, !tbaa !9
  %indvars.iv.next69.9 = add nsw i64 %indvars.iv68.9, 1
  %195 = getelementptr inbounds float, ptr %0, i64 %indvars.iv68.9
  store float %194, ptr %195, align 4, !tbaa !9
  %indvars.iv.next67.9 = add nuw nsw i64 %indvars.iv66.9, 1
  %exitcond74.9.not = icmp eq i64 %indvars.iv.next67.9, %wide.trip.count73.9
  br i1 %exitcond74.9.not, label %._crit_edge.9, label %scalar.ph211, !llvm.loop !35

._crit_edge.9:                                    ; preds = %scalar.ph211, %middle.block210, %._crit_edge.8
  tail call void @free(ptr noundef %6) #6
  tail call void @free(ptr noundef %7) #6
  tail call void @free(ptr noundef %9) #6
  tail call void @free(ptr noundef %11) #6
  tail call void @free(ptr noundef %13) #6
  tail call void @free(ptr noundef %15) #6
  tail call void @free(ptr noundef %17) #6
  tail call void @free(ptr noundef %19) #6
  tail call void @free(ptr noundef %21) #6
  tail call void @free(ptr noundef %23) #6
  tail call void @free(ptr noundef %2) #6
  tail call void @free(ptr noundef %3) #6
  ret void

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv68 = phi i64 [ %indvars.iv.next69, %scalar.ph ], [ %indvars.iv68.ph, %scalar.ph.preheader ]
  %196 = getelementptr inbounds float, ptr %6, i64 %indvars.iv68
  %197 = load float, ptr %196, align 4, !tbaa !9
  %indvars.iv.next69 = add nuw nsw i64 %indvars.iv68, 1
  %198 = getelementptr inbounds float, ptr %0, i64 %indvars.iv68
  store float %197, ptr %198, align 4, !tbaa !9
  %exitcond74.not = icmp eq i64 %indvars.iv.next69, %wide.trip.count73
  br i1 %exitcond74.not, label %._crit_edge, label %scalar.ph, !llvm.loop !36
}

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

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

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #3

attributes #0 = { 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 nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "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 nofree nounwind willreturn allockind("alloc,zeroed") allocsize(0,1) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "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 #3 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "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 allocsize(0) }
attributes #5 = { nounwind allocsize(0,1) }
attributes #6 = { 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/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"float", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14, !16, !17}
!16 = !{!"llvm.loop.isvectorized", i32 1}
!17 = !{!"llvm.loop.unroll.runtime.disable"}
!18 = distinct !{!18, !14, !16, !17}
!19 = distinct !{!19, !14, !17, !16}
!20 = distinct !{!20, !14, !16, !17}
!21 = distinct !{!21, !14, !17, !16}
!22 = distinct !{!22, !14, !16, !17}
!23 = distinct !{!23, !14, !17, !16}
!24 = distinct !{!24, !14, !16, !17}
!25 = distinct !{!25, !14, !17, !16}
!26 = distinct !{!26, !14, !16, !17}
!27 = distinct !{!27, !14, !17, !16}
!28 = distinct !{!28, !14, !16, !17}
!29 = distinct !{!29, !14, !17, !16}
!30 = distinct !{!30, !14, !16, !17}
!31 = distinct !{!31, !14, !17, !16}
!32 = distinct !{!32, !14, !16, !17}
!33 = distinct !{!33, !14, !17, !16}
!34 = distinct !{!34, !14, !16, !17}
!35 = distinct !{!35, !14, !17, !16}
!36 = distinct !{!36, !14, !17, !16}


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