; LLVM IR from VoidRune/Audio-engine :: src/minivorbis.ll (vp_offset_and_mix)

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

%struct.vorbis_look_psy = type { i32, ptr, ptr, ptr, ptr, ptr, ptr, i64, i64, i32, i32, i64, float }
%struct.vorbis_info_psy = type { i32, float, float, [3 x float], float, float, float, [17 x float], i32, float, float, float, i32, i32, i32, [3 x [17 x float]], [40 x float], float, i32, i32, i32, double }

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #1

; Function Attrs: nounwind uwtable
define dso_local void @_vp_offset_and_mix(ptr noundef %0, ptr noundef %1, ptr noundef %2, i32 noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6) #2 {
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca float, align 4
  %18 = alloca float, align 4
  %19 = alloca float, align 4
  %20 = alloca float, align 4
  %21 = alloca float, align 4
  store ptr %0, ptr %8, align 8, !tbaa !5
  store ptr %1, ptr %9, align 8, !tbaa !5
  store ptr %2, ptr %10, align 8, !tbaa !5
  store i32 %3, ptr %11, align 4, !tbaa !9
  store ptr %4, ptr %12, align 8, !tbaa !5
  store ptr %5, ptr %13, align 8, !tbaa !5
  store ptr %6, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #3
  %22 = load ptr, ptr %8, align 8, !tbaa !5
  %23 = getelementptr inbounds %struct.vorbis_look_psy, ptr %22, i32 0, i32 0
  %24 = load i32, ptr %23, align 8, !tbaa !11
  store i32 %24, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #3
  %25 = load ptr, ptr %8, align 8, !tbaa !5
  %26 = getelementptr inbounds %struct.vorbis_look_psy, ptr %25, i32 0, i32 1
  %27 = load ptr, ptr %26, align 8, !tbaa !15
  %28 = getelementptr inbounds %struct.vorbis_info_psy, ptr %27, i32 0, i32 3
  %29 = load i32, ptr %11, align 4, !tbaa !9
  %30 = sext i32 %29 to i64
  %31 = getelementptr inbounds [3 x float], ptr %28, i64 0, i64 %30
  %32 = load float, ptr %31, align 4, !tbaa !16
  store float %32, ptr %20, align 4, !tbaa !16
  %33 = load ptr, ptr %8, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct.vorbis_look_psy, ptr %33, i32 0, i32 12
  %35 = load float, ptr %34, align 8, !tbaa !17
  store float %35, ptr %19, align 4, !tbaa !16
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %36

36:                                               ; preds = %145, %7
  %37 = load i32, ptr %15, align 4, !tbaa !9
  %38 = load i32, ptr %16, align 4, !tbaa !9
  %39 = icmp slt i32 %37, %38
  br i1 %39, label %40, label %148

40:                                               ; preds = %36
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #3
  %41 = load ptr, ptr %9, align 8, !tbaa !5
  %42 = load i32, ptr %15, 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 !16
  %46 = load ptr, ptr %8, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.vorbis_look_psy, ptr %46, i32 0, i32 3
  %48 = load ptr, ptr %47, align 8, !tbaa !18
  %49 = load i32, ptr %11, align 4, !tbaa !9
  %50 = sext i32 %49 to i64
  %51 = getelementptr inbounds ptr, ptr %48, i64 %50
  %52 = load ptr, ptr %51, align 8, !tbaa !5
  %53 = load i32, ptr %15, align 4, !tbaa !9
  %54 = sext i32 %53 to i64
  %55 = getelementptr inbounds float, ptr %52, i64 %54
  %56 = load float, ptr %55, align 4, !tbaa !16
  %57 = fadd float %45, %56
  store float %57, ptr %21, align 4, !tbaa !16
  %58 = load float, ptr %21, align 4, !tbaa !16
  %59 = load ptr, ptr %8, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.vorbis_look_psy, ptr %59, i32 0, i32 1
  %61 = load ptr, ptr %60, align 8, !tbaa !15
  %62 = getelementptr inbounds %struct.vorbis_info_psy, ptr %61, i32 0, i32 9
  %63 = load float, ptr %62, align 4, !tbaa !19
  %64 = fcmp ogt float %58, %63
  br i1 %64, label %65, label %71

65:                                               ; preds = %40
  %66 = load ptr, ptr %8, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.vorbis_look_psy, ptr %66, i32 0, i32 1
  %68 = load ptr, ptr %67, align 8, !tbaa !15
  %69 = getelementptr inbounds %struct.vorbis_info_psy, ptr %68, i32 0, i32 9
  %70 = load float, ptr %69, align 4, !tbaa !19
  store float %70, ptr %21, align 4, !tbaa !16
  br label %71

71:                                               ; preds = %65, %40
  %72 = load float, ptr %21, align 4, !tbaa !16
  %73 = load ptr, ptr %10, align 8, !tbaa !5
  %74 = load i32, ptr %15, align 4, !tbaa !9
  %75 = sext i32 %74 to i64
  %76 = getelementptr inbounds float, ptr %73, i64 %75
  %77 = load float, ptr %76, align 4, !tbaa !16
  %78 = load float, ptr %20, align 4, !tbaa !16
  %79 = fadd float %77, %78
  %80 = fcmp olt float %72, %79
  br i1 %80, label %81, label %89

81:                                               ; preds = %71
  %82 = load ptr, ptr %10, align 8, !tbaa !5
  %83 = load i32, ptr %15, align 4, !tbaa !9
  %84 = sext i32 %83 to i64
  %85 = getelementptr inbounds float, ptr %82, i64 %84
  %86 = load float, ptr %85, align 4, !tbaa !16
  %87 = load float, ptr %20, align 4, !tbaa !16
  %88 = fadd float %86, %87
  br label %91

89:                                               ; preds = %71
  %90 = load float, ptr %21, align 4, !tbaa !16
  br label %91

91:                                               ; preds = %89, %81
  %92 = phi float [ %88, %81 ], [ %90, %89 ]
  %93 = load ptr, ptr %12, align 8, !tbaa !5
  %94 = load i32, ptr %15, align 4, !tbaa !9
  %95 = sext i32 %94 to i64
  %96 = getelementptr inbounds float, ptr %93, i64 %95
  store float %92, ptr %96, align 4, !tbaa !16
  %97 = load i32, ptr %11, align 4, !tbaa !9
  %98 = icmp eq i32 %97, 1
  br i1 %98, label %99, label %144

99:                                               ; preds = %91
  store float 0xC031333340000000, ptr %18, align 4, !tbaa !16
  %100 = load float, ptr %21, align 4, !tbaa !16
  %101 = load ptr, ptr %14, align 8, !tbaa !5
  %102 = load i32, ptr %15, align 4, !tbaa !9
  %103 = sext i32 %102 to i64
  %104 = getelementptr inbounds float, ptr %101, i64 %103
  %105 = load float, ptr %104, align 4, !tbaa !16
  %106 = fsub float %100, %105
  store float %106, ptr %21, align 4, !tbaa !16
  %107 = load float, ptr %21, align 4, !tbaa !16
  %108 = load float, ptr %18, align 4, !tbaa !16
  %109 = fcmp ogt float %107, %108
  br i1 %109, label %110, label %125

110:                                              ; preds = %99
  %111 = load float, ptr %21, align 4, !tbaa !16
  %112 = load float, ptr %18, align 4, !tbaa !16
  %113 = fsub float %111, %112
  %114 = fpext float %113 to double
  %115 = fmul double %114, 5.000000e-03
  %116 = load float, ptr %19, align 4, !tbaa !16
  %117 = fpext float %116 to double
  %118 = fneg double %115
  %119 = call double @llvm.fmuladd.f64(double %118, double %117, double 1.000000e+00)
  %120 = fptrunc double %119 to float
  store float %120, ptr %17, align 4, !tbaa !16
  %121 = load float, ptr %17, align 4, !tbaa !16
  %122 = fcmp olt float %121, 0.000000e+00
  br i1 %122, label %123, label %124

123:                                              ; preds = %110
  store float 0x3F1A36E2E0000000, ptr %17, align 4, !tbaa !16
  br label %124

124:                                              ; preds = %123, %110
  br label %136

125:                                              ; preds = %99
  %126 = load float, ptr %21, align 4, !tbaa !16
  %127 = load float, ptr %18, align 4, !tbaa !16
  %128 = fsub float %126, %127
  %129 = fpext float %128 to double
  %130 = fmul double %129, 3.000000e-04
  %131 = load float, ptr %19, align 4, !tbaa !16
  %132 = fpext float %131 to double
  %133 = fneg double %130
  %134 = call double @llvm.fmuladd.f64(double %133, double %132, double 1.000000e+00)
  %135 = fptrunc double %134 to float
  store float %135, ptr %17, align 4, !tbaa !16
  br label %136

136:                                              ; preds = %125, %124
  %137 = load float, ptr %17, align 4, !tbaa !16
  %138 = load ptr, ptr %13, align 8, !tbaa !5
  %139 = load i32, ptr %15, align 4, !tbaa !9
  %140 = sext i32 %139 to i64
  %141 = getelementptr inbounds float, ptr %138, i64 %140
  %142 = load float, ptr %141, align 4, !tbaa !16
  %143 = fmul float %142, %137
  store float %143, ptr %141, align 4, !tbaa !16
  br label %144

144:                                              ; preds = %136, %91
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #3
  br label %145

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

148:                                              ; preds = %36
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  ret void
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { 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 #3 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"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 = !{!12, !10, i64 0}
!12 = !{!"", !10, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !13, i64 56, !13, i64 64, !10, i64 72, !10, i64 76, !13, i64 80, !14, i64 88}
!13 = !{!"long", !7, i64 0}
!14 = !{!"float", !7, i64 0}
!15 = !{!12, !6, i64 8}
!16 = !{!14, !14, i64 0}
!17 = !{!12, !14, i64 88}
!18 = !{!12, !6, i64 24}
!19 = !{!20, !14, i64 108}
!20 = !{!"vorbis_info_psy", !10, i64 0, !14, i64 4, !14, i64 8, !7, i64 12, !14, i64 24, !14, i64 28, !14, i64 32, !7, i64 36, !10, i64 104, !14, i64 108, !14, i64 112, !14, i64 116, !10, i64 120, !10, i64 124, !10, i64 128, !7, i64 132, !7, i64 336, !14, i64 496, !10, i64 500, !10, i64 504, !10, i64 508, !21, i64 512}
!21 = !{!"double", !7, i64 0}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}


; 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: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #0

; Function Attrs: nofree norecurse nosync nounwind memory(read, argmem: readwrite, inaccessiblemem: none) uwtable
define dso_local void @_vp_offset_and_mix(ptr nocapture noundef readonly %0, ptr nocapture noundef readonly %1, ptr nocapture noundef readonly %2, i32 noundef %3, ptr nocapture noundef writeonly %4, ptr nocapture noundef %5, ptr nocapture noundef readonly %6) local_unnamed_addr #1 {
  %8 = load i32, ptr %0, align 8, !tbaa !5
  %9 = getelementptr inbounds i8, ptr %0, i64 8
  %10 = load ptr, ptr %9, align 8, !tbaa !13
  %11 = getelementptr inbounds i8, ptr %10, i64 12
  %12 = sext i32 %3 to i64
  %13 = getelementptr inbounds [3 x float], ptr %11, i64 0, i64 %12
  %14 = load float, ptr %13, align 4, !tbaa !14
  %15 = icmp sgt i32 %8, 0
  br i1 %15, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %7
  %16 = getelementptr inbounds i8, ptr %0, i64 88
  %17 = load float, ptr %16, align 8, !tbaa !15
  %18 = getelementptr inbounds i8, ptr %0, i64 24
  %19 = load ptr, ptr %18, align 8, !tbaa !16
  %20 = getelementptr inbounds ptr, ptr %19, i64 %12
  %21 = load ptr, ptr %20, align 8, !tbaa !17
  %22 = getelementptr i8, ptr %10, i64 108
  %23 = icmp eq i32 %3, 1
  %24 = fpext float %17 to double
  %wide.trip.count53 = zext nneg i32 %8 to i64
  br i1 %23, label %.lr.ph.split.us.preheader, label %.lr.ph.split.preheader

.lr.ph.split.preheader:                           ; preds = %.lr.ph
  %min.iters.check = icmp ult i32 %8, 12
  br i1 %min.iters.check, label %.lr.ph.split.preheader154, label %vector.memcheck

.lr.ph.split.preheader154:                        ; preds = %middle.block, %vector.memcheck, %.lr.ph.split.preheader
  %indvars.iv.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.lr.ph.split.preheader ], [ %n.vec, %middle.block ]
  br label %.lr.ph.split

vector.memcheck:                                  ; preds = %.lr.ph.split.preheader
  %25 = shl nuw nsw i64 %wide.trip.count53, 2
  %scevgep = getelementptr i8, ptr %4, i64 %25
  %scevgep57 = getelementptr i8, ptr %1, i64 %25
  %scevgep58 = getelementptr i8, ptr %21, i64 %25
  %scevgep59 = getelementptr i8, ptr %10, i64 112
  %scevgep60 = getelementptr i8, ptr %2, i64 %25
  %bound0 = icmp ugt ptr %scevgep57, %4
  %bound1 = icmp ugt ptr %scevgep, %1
  %found.conflict = and i1 %bound0, %bound1
  %bound061 = icmp ugt ptr %scevgep58, %4
  %bound162 = icmp ult ptr %21, %scevgep
  %found.conflict63 = and i1 %bound061, %bound162
  %conflict.rdx = or i1 %found.conflict, %found.conflict63
  %bound064 = icmp ugt ptr %scevgep59, %4
  %bound165 = icmp ult ptr %22, %scevgep
  %found.conflict66 = and i1 %bound064, %bound165
  %conflict.rdx67 = or i1 %conflict.rdx, %found.conflict66
  %bound068 = icmp ugt ptr %scevgep60, %4
  %bound169 = icmp ugt ptr %scevgep, %2
  %found.conflict70 = and i1 %bound068, %bound169
  %conflict.rdx71 = or i1 %conflict.rdx67, %found.conflict70
  br i1 %conflict.rdx71, label %.lr.ph.split.preheader154, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %wide.trip.count53, 2147483640
  %broadcast.splatinsert79 = insertelement <4 x float> poison, float %14, i64 0
  %broadcast.splat80 = shufflevector <4 x float> %broadcast.splatinsert79, <4 x float> poison, <4 x i32> zeroinitializer
  %26 = load float, ptr %22, align 4, !tbaa !18, !alias.scope !21
  %broadcast.splatinsert75 = insertelement <4 x float> poison, float %26, i64 0
  %broadcast.splat76 = shufflevector <4 x float> %broadcast.splatinsert75, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %27 = getelementptr inbounds float, ptr %1, i64 %index
  %28 = getelementptr inbounds i8, ptr %27, i64 16
  %wide.load = load <4 x float>, ptr %27, align 4, !tbaa !14, !alias.scope !24
  %wide.load72 = load <4 x float>, ptr %28, align 4, !tbaa !14, !alias.scope !24
  %29 = getelementptr inbounds float, ptr %21, i64 %index
  %30 = getelementptr inbounds i8, ptr %29, i64 16
  %wide.load73 = load <4 x float>, ptr %29, align 4, !tbaa !14, !alias.scope !26
  %wide.load74 = load <4 x float>, ptr %30, align 4, !tbaa !14, !alias.scope !26
  %31 = fadd <4 x float> %wide.load, %wide.load73
  %32 = fadd <4 x float> %wide.load72, %wide.load74
  %33 = fcmp ogt <4 x float> %31, %broadcast.splat76
  %34 = fcmp ogt <4 x float> %32, %broadcast.splat76
  %35 = select <4 x i1> %33, <4 x float> %broadcast.splat76, <4 x float> %31
  %36 = select <4 x i1> %34, <4 x float> %broadcast.splat76, <4 x float> %32
  %37 = getelementptr inbounds float, ptr %2, i64 %index
  %38 = getelementptr inbounds i8, ptr %37, i64 16
  %wide.load77 = load <4 x float>, ptr %37, align 4, !tbaa !14, !alias.scope !28
  %wide.load78 = load <4 x float>, ptr %38, align 4, !tbaa !14, !alias.scope !28
  %39 = fadd <4 x float> %broadcast.splat80, %wide.load77
  %40 = fadd <4 x float> %broadcast.splat80, %wide.load78
  %41 = fcmp olt <4 x float> %35, %39
  %42 = fcmp olt <4 x float> %36, %40
  %43 = select <4 x i1> %41, <4 x float> %39, <4 x float> %35
  %44 = select <4 x i1> %42, <4 x float> %40, <4 x float> %36
  %45 = getelementptr inbounds float, ptr %4, i64 %index
  %46 = getelementptr inbounds i8, ptr %45, i64 16
  store <4 x float> %43, ptr %45, align 4, !tbaa !14, !alias.scope !30, !noalias !32
  store <4 x float> %44, ptr %46, align 4, !tbaa !14, !alias.scope !30, !noalias !32
  %index.next = add nuw i64 %index, 8
  %47 = icmp eq i64 %index.next, %n.vec
  br i1 %47, label %middle.block, label %vector.body, !llvm.loop !33

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count53
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph.split.preheader154

.lr.ph.split.us.preheader:                        ; preds = %.lr.ph
  %min.iters.check134 = icmp ult i32 %8, 16
  br i1 %min.iters.check134, label %.lr.ph.split.us.preheader153, label %vector.memcheck81

vector.memcheck81:                                ; preds = %.lr.ph.split.us.preheader
  %48 = shl nuw nsw i64 %wide.trip.count53, 2
  %scevgep82 = getelementptr i8, ptr %4, i64 %48
  %scevgep83 = getelementptr i8, ptr %5, i64 %48
  %scevgep84 = getelementptr i8, ptr %1, i64 %48
  %scevgep85 = getelementptr i8, ptr %21, i64 %48
  %scevgep86 = getelementptr i8, ptr %10, i64 112
  %scevgep87 = getelementptr i8, ptr %2, i64 %48
  %scevgep88 = getelementptr i8, ptr %6, i64 %48
  %bound089 = icmp ugt ptr %scevgep83, %4
  %bound190 = icmp ugt ptr %scevgep82, %5
  %found.conflict91 = and i1 %bound089, %bound190
  %bound092 = icmp ugt ptr %scevgep84, %4
  %bound193 = icmp ugt ptr %scevgep82, %1
  %found.conflict94 = and i1 %bound092, %bound193
  %conflict.rdx95 = or i1 %found.conflict91, %found.conflict94
  %bound096 = icmp ugt ptr %scevgep85, %4
  %bound197 = icmp ult ptr %21, %scevgep82
  %found.conflict98 = and i1 %bound096, %bound197
  %conflict.rdx99 = or i1 %conflict.rdx95, %found.conflict98
  %bound0100 = icmp ugt ptr %scevgep86, %4
  %bound1101 = icmp ult ptr %22, %scevgep82
  %found.conflict102 = and i1 %bound0100, %bound1101
  %conflict.rdx103 = or i1 %conflict.rdx99, %found.conflict102
  %bound0104 = icmp ugt ptr %scevgep87, %4
  %bound1105 = icmp ugt ptr %scevgep82, %2
  %found.conflict106 = and i1 %bound0104, %bound1105
  %conflict.rdx107 = or i1 %conflict.rdx103, %found.conflict106
  %bound0108 = icmp ugt ptr %scevgep88, %4
  %bound1109 = icmp ugt ptr %scevgep82, %6
  %found.conflict110 = and i1 %bound0108, %bound1109
  %conflict.rdx111 = or i1 %conflict.rdx107, %found.conflict110
  %bound0112 = icmp ugt ptr %scevgep84, %5
  %bound1113 = icmp ugt ptr %scevgep83, %1
  %found.conflict114 = and i1 %bound0112, %bound1113
  %conflict.rdx115 = or i1 %conflict.rdx111, %found.conflict114
  %bound0116 = icmp ugt ptr %scevgep85, %5
  %bound1117 = icmp ult ptr %21, %scevgep83
  %found.conflict118 = and i1 %bound0116, %bound1117
  %conflict.rdx119 = or i1 %conflict.rdx115, %found.conflict118
  %bound0120 = icmp ugt ptr %scevgep86, %5
  %bound1121 = icmp ult ptr %22, %scevgep83
  %found.conflict122 = and i1 %bound0120, %bound1121
  %conflict.rdx123 = or i1 %conflict.rdx119, %found.conflict122
  %bound0124 = icmp ugt ptr %scevgep87, %5
  %bound1125 = icmp ugt ptr %scevgep83, %2
  %found.conflict126 = and i1 %bound0124, %bound1125
  %conflict.rdx127 = or i1 %conflict.rdx123, %found.conflict126
  %bound0128 = icmp ugt ptr %scevgep88, %5
  %bound1129 = icmp ugt ptr %scevgep83, %6
  %found.conflict130 = and i1 %bound0128, %bound1129
  %conflict.rdx131 = or i1 %conflict.rdx127, %found.conflict130
  br i1 %conflict.rdx131, label %.lr.ph.split.us.preheader153, label %vector.ph135

vector.ph135:                                     ; preds = %vector.memcheck81
  %n.vec137 = and i64 %wide.trip.count53, 2147483644
  %broadcast.splatinsert144 = insertelement <4 x float> poison, float %14, i64 0
  %broadcast.splat145 = shufflevector <4 x float> %broadcast.splatinsert144, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert147 = insertelement <4 x double> poison, double %24, i64 0
  %broadcast.splat148 = shufflevector <4 x double> %broadcast.splatinsert147, <4 x double> poison, <4 x i32> zeroinitializer
  %49 = load float, ptr %22, align 4, !tbaa !18, !alias.scope !37
  %broadcast.splatinsert = insertelement <4 x float> poison, float %49, i64 0
  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body139

vector.body139:                                   ; preds = %vector.body139, %vector.ph135
  %index140 = phi i64 [ 0, %vector.ph135 ], [ %index.next151, %vector.body139 ]
  %50 = getelementptr inbounds float, ptr %1, i64 %index140
  %wide.load141 = load <4 x float>, ptr %50, align 4, !tbaa !14, !alias.scope !40
  %51 = getelementptr inbounds float, ptr %21, i64 %index140
  %wide.load142 = load <4 x float>, ptr %51, align 4, !tbaa !14, !alias.scope !42
  %52 = fadd <4 x float> %wide.load141, %wide.load142
  %53 = fcmp ogt <4 x float> %52, %broadcast.splat
  %54 = select <4 x i1> %53, <4 x float> %broadcast.splat, <4 x float> %52
  %55 = getelementptr inbounds float, ptr %2, i64 %index140
  %wide.load143 = load <4 x float>, ptr %55, align 4, !tbaa !14, !alias.scope !44
  %56 = fadd <4 x float> %broadcast.splat145, %wide.load143
  %57 = fcmp olt <4 x float> %54, %56
  %58 = select <4 x i1> %57, <4 x float> %56, <4 x float> %54
  %59 = getelementptr inbounds float, ptr %4, i64 %index140
  store <4 x float> %58, ptr %59, align 4, !tbaa !14, !alias.scope !46, !noalias !48
  %60 = getelementptr inbounds float, ptr %6, i64 %index140
  %wide.load146 = load <4 x float>, ptr %60, align 4, !tbaa !14, !alias.scope !51
  %61 = fsub <4 x float> %54, %wide.load146
  %62 = fcmp ogt <4 x float> %61, <float 0xC031333340000000, float 0xC031333340000000, float 0xC031333340000000, float 0xC031333340000000>
  %63 = fadd <4 x float> %61, <float 0x4031333340000000, float 0x4031333340000000, float 0x4031333340000000, float 0x4031333340000000>
  %64 = fpext <4 x float> %63 to <4 x double>
  %65 = fmul <4 x double> %64, <double -3.000000e-04, double -3.000000e-04, double -3.000000e-04, double -3.000000e-04>
  %66 = tail call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %65, <4 x double> %broadcast.splat148, <4 x double> <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>)
  %67 = fptrunc <4 x double> %66 to <4 x float>
  %68 = fmul <4 x double> %64, <double -5.000000e-03, double -5.000000e-03, double -5.000000e-03, double -5.000000e-03>
  %69 = tail call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %68, <4 x double> %broadcast.splat148, <4 x double> <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>)
  %70 = fptrunc <4 x double> %69 to <4 x float>
  %71 = fcmp uge <4 x float> %70, zeroinitializer
  %72 = select <4 x i1> %62, <4 x i1> %71, <4 x i1> zeroinitializer
  %predphi = select <4 x i1> %72, <4 x float> %70, <4 x float> <float 0x3F1A36E2E0000000, float 0x3F1A36E2E0000000, float 0x3F1A36E2E0000000, float 0x3F1A36E2E0000000>
  %predphi149 = select <4 x i1> %62, <4 x float> %predphi, <4 x float> %67
  %73 = getelementptr inbounds float, ptr %5, i64 %index140
  %wide.load150 = load <4 x float>, ptr %73, align 4, !tbaa !14, !alias.scope !52, !noalias !53
  %74 = fmul <4 x float> %predphi149, %wide.load150
  store <4 x float> %74, ptr %73, align 4, !tbaa !14, !alias.scope !52, !noalias !53
  %index.next151 = add nuw i64 %index140, 4
  %75 = icmp eq i64 %index.next151, %n.vec137
  br i1 %75, label %middle.block132, label %vector.body139, !llvm.loop !54

middle.block132:                                  ; preds = %vector.body139
  %cmp.n152 = icmp eq i64 %n.vec137, %wide.trip.count53
  br i1 %cmp.n152, label %._crit_edge, label %.lr.ph.split.us.preheader153

.lr.ph.split.us.preheader153:                     ; preds = %middle.block132, %vector.memcheck81, %.lr.ph.split.us.preheader
  %indvars.iv50.ph = phi i64 [ 0, %vector.memcheck81 ], [ 0, %.lr.ph.split.us.preheader ], [ %n.vec137, %middle.block132 ]
  br label %.lr.ph.split.us

.lr.ph.split.us:                                  ; preds = %.lr.ph.split.us.preheader153, %105
  %indvars.iv50 = phi i64 [ %indvars.iv.next51, %105 ], [ %indvars.iv50.ph, %.lr.ph.split.us.preheader153 ]
  %76 = getelementptr inbounds float, ptr %1, i64 %indvars.iv50
  %77 = load float, ptr %76, align 4, !tbaa !14
  %78 = getelementptr inbounds float, ptr %21, i64 %indvars.iv50
  %79 = load float, ptr %78, align 4, !tbaa !14
  %80 = fadd float %77, %79
  %81 = load float, ptr %22, align 4, !tbaa !18
  %82 = fcmp ogt float %80, %81
  %.0.us = select i1 %82, float %81, float %80
  %83 = getelementptr inbounds float, ptr %2, i64 %indvars.iv50
  %84 = load float, ptr %83, align 4, !tbaa !14
  %85 = fadd float %14, %84
  %86 = fcmp olt float %.0.us, %85
  %87 = select i1 %86, float %85, float %.0.us
  %88 = getelementptr inbounds float, ptr %4, i64 %indvars.iv50
  store float %87, ptr %88, align 4, !tbaa !14
  %89 = getelementptr inbounds float, ptr %6, i64 %indvars.iv50
  %90 = load float, ptr %89, align 4, !tbaa !14
  %91 = fsub float %.0.us, %90
  %92 = fcmp ogt float %91, 0xC031333340000000
  %93 = fadd float %91, 0x4031333340000000
  %94 = fpext float %93 to double
  br i1 %92, label %99, label %95

95:                                               ; preds = %.lr.ph.split.us
  %96 = fmul double %94, -3.000000e-04
  %97 = tail call double @llvm.fmuladd.f64(double %96, double %24, double 1.000000e+00)
  %98 = fptrunc double %97 to float
  br label %105

99:                                               ; preds = %.lr.ph.split.us
  %100 = fmul double %94, -5.000000e-03
  %101 = tail call double @llvm.fmuladd.f64(double %100, double %24, double 1.000000e+00)
  %102 = fptrunc double %101 to float
  %103 = fcmp olt float %102, 0.000000e+00
  br i1 %103, label %104, label %105

104:                                              ; preds = %99
  br label %105

105:                                              ; preds = %104, %99, %95
  %.041.us = phi float [ 0x3F1A36E2E0000000, %104 ], [ %102, %99 ], [ %98, %95 ]
  %106 = getelementptr inbounds float, ptr %5, i64 %indvars.iv50
  %107 = load float, ptr %106, align 4, !tbaa !14
  %108 = fmul float %.041.us, %107
  store float %108, ptr %106, align 4, !tbaa !14
  %indvars.iv.next51 = add nuw nsw i64 %indvars.iv50, 1
  %exitcond54.not = icmp eq i64 %indvars.iv.next51, %wide.trip.count53
  br i1 %exitcond54.not, label %._crit_edge, label %.lr.ph.split.us, !llvm.loop !55

.lr.ph.split:                                     ; preds = %.lr.ph.split.preheader154, %.lr.ph.split
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph.split ], [ %indvars.iv.ph, %.lr.ph.split.preheader154 ]
  %109 = getelementptr inbounds float, ptr %1, i64 %indvars.iv
  %110 = load float, ptr %109, align 4, !tbaa !14
  %111 = getelementptr inbounds float, ptr %21, i64 %indvars.iv
  %112 = load float, ptr %111, align 4, !tbaa !14
  %113 = fadd float %110, %112
  %114 = load float, ptr %22, align 4, !tbaa !18
  %115 = fcmp ogt float %113, %114
  %.0 = select i1 %115, float %114, float %113
  %116 = getelementptr inbounds float, ptr %2, i64 %indvars.iv
  %117 = load float, ptr %116, align 4, !tbaa !14
  %118 = fadd float %14, %117
  %119 = fcmp olt float %.0, %118
  %120 = select i1 %119, float %118, float %.0
  %121 = getelementptr inbounds float, ptr %4, i64 %indvars.iv
  store float %120, ptr %121, align 4, !tbaa !14
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count53
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph.split, !llvm.loop !56

._crit_edge:                                      ; preds = %.lr.ph.split, %105, %middle.block, %middle.block132, %7
  ret void
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x double> @llvm.fmuladd.v4f64(<4 x double>, <4 x double>, <4 x double>) #2

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

!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, !7, i64 0}
!6 = !{!"", !7, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !11, i64 56, !11, i64 64, !7, i64 72, !7, i64 76, !11, i64 80, !12, i64 88}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"long", !8, i64 0}
!12 = !{!"float", !8, i64 0}
!13 = !{!6, !10, i64 8}
!14 = !{!12, !12, i64 0}
!15 = !{!6, !12, i64 88}
!16 = !{!6, !10, i64 24}
!17 = !{!10, !10, i64 0}
!18 = !{!19, !12, i64 108}
!19 = !{!"vorbis_info_psy", !7, i64 0, !12, i64 4, !12, i64 8, !8, i64 12, !12, i64 24, !12, i64 28, !12, i64 32, !8, i64 36, !7, i64 104, !12, i64 108, !12, i64 112, !12, i64 116, !7, i64 120, !7, i64 124, !7, i64 128, !8, i64 132, !8, i64 336, !12, i64 496, !7, i64 500, !7, i64 504, !7, i64 508, !20, i64 512}
!20 = !{!"double", !8, i64 0}
!21 = !{!22}
!22 = distinct !{!22, !23}
!23 = distinct !{!23, !"LVerDomain"}
!24 = !{!25}
!25 = distinct !{!25, !23}
!26 = !{!27}
!27 = distinct !{!27, !23}
!28 = !{!29}
!29 = distinct !{!29, !23}
!30 = !{!31}
!31 = distinct !{!31, !23}
!32 = !{!25, !27, !22, !29}
!33 = distinct !{!33, !34, !35, !36}
!34 = !{!"llvm.loop.mustprogress"}
!35 = !{!"llvm.loop.isvectorized", i32 1}
!36 = !{!"llvm.loop.unroll.runtime.disable"}
!37 = !{!38}
!38 = distinct !{!38, !39}
!39 = distinct !{!39, !"LVerDomain"}
!40 = !{!41}
!41 = distinct !{!41, !39}
!42 = !{!43}
!43 = distinct !{!43, !39}
!44 = !{!45}
!45 = distinct !{!45, !39}
!46 = !{!47}
!47 = distinct !{!47, !39}
!48 = !{!49, !41, !43, !38, !45, !50}
!49 = distinct !{!49, !39}
!50 = distinct !{!50, !39}
!51 = !{!50}
!52 = !{!49}
!53 = !{!41, !43, !38, !45, !50}
!54 = distinct !{!54, !34, !35, !36}
!55 = distinct !{!55, !34, !35}
!56 = distinct !{!56, !34, !35}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass