; LLVM IR from libxsmm/libxsmm :: samples/nek (stream_update_kernels)

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

@.str = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [85 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [10 x i8], align 1
@__PRETTY_FUNCTION__.stream_update_helmholtz_no_h2_ = external hidden unnamed_addr constant [171 x i8], align 1

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @stream_init(i32 noundef, i64 noundef, ptr noundef, ptr noundef) #2

; 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) #3

; Function Attrs: nounwind uwtable
define dso_local void @stream_update_helmholtz_no_h2_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8) #4 {
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  store ptr %0, ptr %10, align 8, !tbaa !5
  store ptr %1, ptr %11, align 8, !tbaa !5
  store ptr %2, ptr %12, align 8, !tbaa !5
  store ptr %3, ptr %13, align 8, !tbaa !5
  store ptr %4, ptr %14, align 8, !tbaa !5
  store ptr %5, ptr %15, align 8, !tbaa !5
  store ptr %6, ptr %16, align 8, !tbaa !5
  store ptr %7, ptr %17, align 8, !tbaa !5
  store ptr %8, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  store i32 0, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  store i32 0, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  store i32 0, ptr %21, align 4, !tbaa !9
  %22 = load ptr, ptr %18, align 8, !tbaa !5
  %23 = icmp ne ptr null, %22
  br i1 %23, label %24, label %25

24:                                               ; preds = %9
  br label %26

25:                                               ; preds = %9
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 421, ptr noundef @__PRETTY_FUNCTION__.stream_update_helmholtz_no_h2_) #6
  unreachable

26:                                               ; preds = %24
  %27 = load ptr, ptr %17, align 8, !tbaa !5
  %28 = icmp ne ptr null, %27
  br i1 %28, label %29, label %30

29:                                               ; preds = %26
  br label %31

30:                                               ; preds = %26
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.1, i32 noundef 422, ptr noundef @__PRETTY_FUNCTION__.stream_update_helmholtz_no_h2_) #6
  unreachable

31:                                               ; preds = %29
  %32 = load ptr, ptr %18, align 8, !tbaa !5
  %33 = load i32, ptr %32, align 4, !tbaa !9
  %34 = load ptr, ptr %16, align 8, !tbaa !5
  %35 = ptrtoint ptr %34 to i64
  call void @stream_init(i32 noundef %33, i64 noundef %35, ptr noundef %20, ptr noundef %21)
  br label %36

36:                                               ; preds = %81, %31
  %37 = load i32, ptr %19, align 4, !tbaa !9
  %38 = load i32, ptr %20, align 4, !tbaa !9
  %39 = icmp slt i32 %37, %38
  br i1 %39, label %40, label %84

40:                                               ; preds = %36
  %41 = load ptr, ptr %17, align 8, !tbaa !5
  %42 = load double, ptr %41, align 8, !tbaa !11
  %43 = load ptr, ptr %10, align 8, !tbaa !5
  %44 = load i32, ptr %19, align 4, !tbaa !9
  %45 = sext i32 %44 to i64
  %46 = getelementptr inbounds double, ptr %43, i64 %45
  %47 = load double, ptr %46, align 8, !tbaa !11
  %48 = load ptr, ptr %13, align 8, !tbaa !5
  %49 = load i32, ptr %19, align 4, !tbaa !9
  %50 = sext i32 %49 to i64
  %51 = getelementptr inbounds double, ptr %48, i64 %50
  %52 = load double, ptr %51, align 8, !tbaa !11
  %53 = load ptr, ptr %11, align 8, !tbaa !5
  %54 = load i32, ptr %19, align 4, !tbaa !9
  %55 = sext i32 %54 to i64
  %56 = getelementptr inbounds double, ptr %53, i64 %55
  %57 = load double, ptr %56, align 8, !tbaa !11
  %58 = load ptr, ptr %14, align 8, !tbaa !5
  %59 = load i32, ptr %19, align 4, !tbaa !9
  %60 = sext i32 %59 to i64
  %61 = getelementptr inbounds double, ptr %58, i64 %60
  %62 = load double, ptr %61, align 8, !tbaa !11
  %63 = fmul double %57, %62
  %64 = call double @llvm.fmuladd.f64(double %47, double %52, double %63)
  %65 = load ptr, ptr %12, align 8, !tbaa !5
  %66 = load i32, ptr %19, align 4, !tbaa !9
  %67 = sext i32 %66 to i64
  %68 = getelementptr inbounds double, ptr %65, i64 %67
  %69 = load double, ptr %68, align 8, !tbaa !11
  %70 = load ptr, ptr %15, align 8, !tbaa !5
  %71 = load i32, ptr %19, align 4, !tbaa !9
  %72 = sext i32 %71 to i64
  %73 = getelementptr inbounds double, ptr %70, i64 %72
  %74 = load double, ptr %73, align 8, !tbaa !11
  %75 = call double @llvm.fmuladd.f64(double %69, double %74, double %64)
  %76 = fmul double %42, %75
  %77 = load ptr, ptr %16, align 8, !tbaa !5
  %78 = load i32, ptr %19, align 4, !tbaa !9
  %79 = sext i32 %78 to i64
  %80 = getelementptr inbounds double, ptr %77, i64 %79
  store double %76, ptr %80, align 8, !tbaa !11
  br label %81

81:                                               ; preds = %40
  %82 = load i32, ptr %19, align 4, !tbaa !9
  %83 = add nsw i32 %82, 1
  store i32 %83, ptr %19, align 4, !tbaa !9
  br label %36, !llvm.loop !13

84:                                               ; preds = %36
  br label %85

85:                                               ; preds = %130, %84
  %86 = load i32, ptr %19, align 4, !tbaa !9
  %87 = load i32, ptr %21, align 4, !tbaa !9
  %88 = icmp slt i32 %86, %87
  br i1 %88, label %89, label %133

89:                                               ; preds = %85
  %90 = load ptr, ptr %17, align 8, !tbaa !5
  %91 = load double, ptr %90, align 8, !tbaa !11
  %92 = load ptr, ptr %10, align 8, !tbaa !5
  %93 = load i32, ptr %19, align 4, !tbaa !9
  %94 = sext i32 %93 to i64
  %95 = getelementptr inbounds double, ptr %92, i64 %94
  %96 = load double, ptr %95, align 8, !tbaa !11
  %97 = load ptr, ptr %13, align 8, !tbaa !5
  %98 = load i32, ptr %19, align 4, !tbaa !9
  %99 = sext i32 %98 to i64
  %100 = getelementptr inbounds double, ptr %97, i64 %99
  %101 = load double, ptr %100, align 8, !tbaa !11
  %102 = load ptr, ptr %11, align 8, !tbaa !5
  %103 = load i32, ptr %19, align 4, !tbaa !9
  %104 = sext i32 %103 to i64
  %105 = getelementptr inbounds double, ptr %102, i64 %104
  %106 = load double, ptr %105, align 8, !tbaa !11
  %107 = load ptr, ptr %14, align 8, !tbaa !5
  %108 = load i32, ptr %19, align 4, !tbaa !9
  %109 = sext i32 %108 to i64
  %110 = getelementptr inbounds double, ptr %107, i64 %109
  %111 = load double, ptr %110, align 8, !tbaa !11
  %112 = fmul double %106, %111
  %113 = call double @llvm.fmuladd.f64(double %96, double %101, double %112)
  %114 = load ptr, ptr %12, align 8, !tbaa !5
  %115 = load i32, ptr %19, align 4, !tbaa !9
  %116 = sext i32 %115 to i64
  %117 = getelementptr inbounds double, ptr %114, i64 %116
  %118 = load double, ptr %117, align 8, !tbaa !11
  %119 = load ptr, ptr %15, align 8, !tbaa !5
  %120 = load i32, ptr %19, align 4, !tbaa !9
  %121 = sext i32 %120 to i64
  %122 = getelementptr inbounds double, ptr %119, i64 %121
  %123 = load double, ptr %122, align 8, !tbaa !11
  %124 = call double @llvm.fmuladd.f64(double %118, double %123, double %113)
  %125 = fmul double %91, %124
  %126 = load ptr, ptr %16, align 8, !tbaa !5
  %127 = load i32, ptr %19, align 4, !tbaa !9
  %128 = sext i32 %127 to i64
  %129 = getelementptr inbounds double, ptr %126, i64 %128
  store double %125, ptr %129, align 8, !tbaa !11
  br label %130

130:                                              ; preds = %89
  %131 = load i32, ptr %19, align 4, !tbaa !9
  %132 = add nsw i32 %131, 1
  store i32 %132, ptr %19, align 4, !tbaa !9
  br label %85, !llvm.loop !15

133:                                              ; preds = %85
  br label %134

134:                                              ; preds = %180, %133
  %135 = load i32, ptr %19, align 4, !tbaa !9
  %136 = load ptr, ptr %18, align 8, !tbaa !5
  %137 = load i32, ptr %136, align 4, !tbaa !9
  %138 = icmp slt i32 %135, %137
  br i1 %138, label %139, label %183

139:                                              ; preds = %134
  %140 = load ptr, ptr %17, align 8, !tbaa !5
  %141 = load double, ptr %140, align 8, !tbaa !11
  %142 = load ptr, ptr %10, align 8, !tbaa !5
  %143 = load i32, ptr %19, align 4, !tbaa !9
  %144 = sext i32 %143 to i64
  %145 = getelementptr inbounds double, ptr %142, i64 %144
  %146 = load double, ptr %145, align 8, !tbaa !11
  %147 = load ptr, ptr %13, align 8, !tbaa !5
  %148 = load i32, ptr %19, align 4, !tbaa !9
  %149 = sext i32 %148 to i64
  %150 = getelementptr inbounds double, ptr %147, i64 %149
  %151 = load double, ptr %150, align 8, !tbaa !11
  %152 = load ptr, ptr %11, align 8, !tbaa !5
  %153 = load i32, ptr %19, align 4, !tbaa !9
  %154 = sext i32 %153 to i64
  %155 = getelementptr inbounds double, ptr %152, i64 %154
  %156 = load double, ptr %155, align 8, !tbaa !11
  %157 = load ptr, ptr %14, align 8, !tbaa !5
  %158 = load i32, ptr %19, align 4, !tbaa !9
  %159 = sext i32 %158 to i64
  %160 = getelementptr inbounds double, ptr %157, i64 %159
  %161 = load double, ptr %160, align 8, !tbaa !11
  %162 = fmul double %156, %161
  %163 = call double @llvm.fmuladd.f64(double %146, double %151, double %162)
  %164 = load ptr, ptr %12, align 8, !tbaa !5
  %165 = load i32, ptr %19, align 4, !tbaa !9
  %166 = sext i32 %165 to i64
  %167 = getelementptr inbounds double, ptr %164, i64 %166
  %168 = load double, ptr %167, align 8, !tbaa !11
  %169 = load ptr, ptr %15, align 8, !tbaa !5
  %170 = load i32, ptr %19, align 4, !tbaa !9
  %171 = sext i32 %170 to i64
  %172 = getelementptr inbounds double, ptr %169, i64 %171
  %173 = load double, ptr %172, align 8, !tbaa !11
  %174 = call double @llvm.fmuladd.f64(double %168, double %173, double %163)
  %175 = fmul double %141, %174
  %176 = load ptr, ptr %16, align 8, !tbaa !5
  %177 = load i32, ptr %19, align 4, !tbaa !9
  %178 = sext i32 %177 to i64
  %179 = getelementptr inbounds double, ptr %176, i64 %178
  store double %175, ptr %179, align 8, !tbaa !11
  br label %180

180:                                              ; preds = %139
  %181 = load i32, ptr %19, align 4, !tbaa !9
  %182 = add nsw i32 %181, 1
  store i32 %182, ptr %19, align 4, !tbaa !9
  br label %134, !llvm.loop !16

183:                                              ; preds = %134
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  ret void
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { noreturn 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 #2 = { inlinehint 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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { 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 #5 = { nounwind }
attributes #6 = { noreturn 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, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}


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

@.str = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [85 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [10 x i8], align 1
@__PRETTY_FUNCTION__.stream_update_helmholtz_no_h2_ = external hidden unnamed_addr constant [171 x i8], align 1

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @stream_init(i32 noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

; Function Attrs: nounwind uwtable
define dso_local void @stream_update_helmholtz_no_h2_(ptr nocapture noundef readonly %0, ptr nocapture noundef readonly %1, ptr nocapture noundef readonly %2, ptr nocapture noundef readonly %3, ptr nocapture noundef readonly %4, ptr nocapture noundef readonly %5, ptr noundef %6, ptr noundef readonly %7, ptr noundef readonly %8) local_unnamed_addr #4 {
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #6
  store i32 0, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #6
  store i32 0, ptr %11, align 4, !tbaa !5
  %.not = icmp eq ptr %8, null
  br i1 %.not, label %12, label %13

12:                                               ; preds = %9
  tail call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 421, ptr noundef nonnull @__PRETTY_FUNCTION__.stream_update_helmholtz_no_h2_) #7
  unreachable

13:                                               ; preds = %9
  %.not57 = icmp eq ptr %7, null
  br i1 %.not57, label %14, label %15

14:                                               ; preds = %13
  tail call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, i32 noundef 422, ptr noundef nonnull @__PRETTY_FUNCTION__.stream_update_helmholtz_no_h2_) #7
  unreachable

15:                                               ; preds = %13
  %16 = load i32, ptr %8, align 4, !tbaa !5
  %17 = ptrtoint ptr %6 to i64
  call void @stream_init(i32 noundef %16, i64 noundef %17, ptr noundef nonnull %10, ptr noundef nonnull %11)
  %18 = load i32, ptr %10, align 4, !tbaa !5
  %19 = icmp sgt i32 %18, 0
  br i1 %19, label %.lr.ph.preheader, label %.preheader58

.lr.ph.preheader:                                 ; preds = %15
  %wide.trip.count = zext nneg i32 %18 to i64
  %min.iters.check = icmp ult i32 %18, 14
  br i1 %min.iters.check, label %.lr.ph.preheader238, label %vector.memcheck

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

vector.memcheck:                                  ; preds = %.lr.ph.preheader
  %20 = shl nuw nsw i64 %wide.trip.count, 3
  %scevgep = getelementptr i8, ptr %6, i64 %20
  %scevgep75 = getelementptr i8, ptr %7, i64 8
  %scevgep76 = getelementptr i8, ptr %0, i64 %20
  %scevgep77 = getelementptr i8, ptr %3, i64 %20
  %scevgep78 = getelementptr i8, ptr %1, i64 %20
  %scevgep79 = getelementptr i8, ptr %4, i64 %20
  %scevgep80 = getelementptr i8, ptr %2, i64 %20
  %scevgep81 = getelementptr i8, ptr %5, i64 %20
  %bound0 = icmp ugt ptr %scevgep75, %6
  %bound1 = icmp ugt ptr %scevgep, %7
  %found.conflict = and i1 %bound0, %bound1
  %bound082 = icmp ugt ptr %scevgep76, %6
  %bound183 = icmp ugt ptr %scevgep, %0
  %found.conflict84 = and i1 %bound082, %bound183
  %conflict.rdx = or i1 %found.conflict, %found.conflict84
  %bound085 = icmp ugt ptr %scevgep77, %6
  %bound186 = icmp ugt ptr %scevgep, %3
  %found.conflict87 = and i1 %bound085, %bound186
  %conflict.rdx88 = or i1 %conflict.rdx, %found.conflict87
  %bound089 = icmp ugt ptr %scevgep78, %6
  %bound190 = icmp ugt ptr %scevgep, %1
  %found.conflict91 = and i1 %bound089, %bound190
  %conflict.rdx92 = or i1 %conflict.rdx88, %found.conflict91
  %bound093 = icmp ugt ptr %scevgep79, %6
  %bound194 = icmp ugt ptr %scevgep, %4
  %found.conflict95 = and i1 %bound093, %bound194
  %conflict.rdx96 = or i1 %conflict.rdx92, %found.conflict95
  %bound097 = icmp ugt ptr %scevgep80, %6
  %bound198 = icmp ugt ptr %scevgep, %2
  %found.conflict99 = and i1 %bound097, %bound198
  %conflict.rdx100 = or i1 %conflict.rdx96, %found.conflict99
  %bound0101 = icmp ugt ptr %scevgep81, %6
  %bound1102 = icmp ugt ptr %scevgep, %5
  %found.conflict103 = and i1 %bound0101, %bound1102
  %conflict.rdx104 = or i1 %conflict.rdx100, %found.conflict103
  br i1 %conflict.rdx104, label %.lr.ph.preheader238, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %wide.trip.count, 2147483646
  %21 = load double, ptr %7, align 8, !tbaa !9, !alias.scope !11
  %broadcast.splatinsert = insertelement <2 x double> poison, double %21, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %22 = getelementptr inbounds double, ptr %0, i64 %index
  %wide.load = load <2 x double>, ptr %22, align 8, !tbaa !9, !alias.scope !14
  %23 = getelementptr inbounds double, ptr %3, i64 %index
  %wide.load105 = load <2 x double>, ptr %23, align 8, !tbaa !9, !alias.scope !16
  %24 = getelementptr inbounds double, ptr %1, i64 %index
  %wide.load106 = load <2 x double>, ptr %24, align 8, !tbaa !9, !alias.scope !18
  %25 = getelementptr inbounds double, ptr %4, i64 %index
  %wide.load107 = load <2 x double>, ptr %25, align 8, !tbaa !9, !alias.scope !20
  %26 = fmul <2 x double> %wide.load106, %wide.load107
  %27 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load, <2 x double> %wide.load105, <2 x double> %26)
  %28 = getelementptr inbounds double, ptr %2, i64 %index
  %wide.load108 = load <2 x double>, ptr %28, align 8, !tbaa !9, !alias.scope !22
  %29 = getelementptr inbounds double, ptr %5, i64 %index
  %wide.load109 = load <2 x double>, ptr %29, align 8, !tbaa !9, !alias.scope !24
  %30 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load108, <2 x double> %wide.load109, <2 x double> %27)
  %31 = fmul <2 x double> %broadcast.splat, %30
  %32 = getelementptr inbounds double, ptr %6, i64 %index
  store <2 x double> %31, ptr %32, align 8, !tbaa !9, !alias.scope !26, !noalias !28
  %index.next = add nuw i64 %index, 2
  %33 = icmp eq i64 %index.next, %n.vec
  br i1 %33, label %middle.block, label %vector.body, !llvm.loop !29

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count
  br i1 %cmp.n, label %.preheader58, label %.lr.ph.preheader238

.preheader58:                                     ; preds = %.lr.ph, %middle.block, %15
  %.0.lcssa = phi i32 [ 0, %15 ], [ %18, %middle.block ], [ %18, %.lr.ph ]
  %34 = load i32, ptr %11, align 4, !tbaa !5
  %35 = icmp slt i32 %.0.lcssa, %34
  br i1 %35, label %.lr.ph61.preheader, label %.preheader

.lr.ph61.preheader:                               ; preds = %.preheader58
  %36 = zext nneg i32 %.0.lcssa to i64
  %wide.trip.count70 = zext i32 %34 to i64
  %37 = sub nsw i64 %wide.trip.count70, %36
  %min.iters.check155 = icmp ult i64 %37, 14
  br i1 %min.iters.check155, label %.lr.ph61.preheader237, label %vector.memcheck110

.lr.ph61.preheader237:                            ; preds = %middle.block153, %vector.memcheck110, %.lr.ph61.preheader
  %indvars.iv67.ph = phi i64 [ %36, %vector.memcheck110 ], [ %36, %.lr.ph61.preheader ], [ %ind.end, %middle.block153 ]
  br label %.lr.ph61

vector.memcheck110:                               ; preds = %.lr.ph61.preheader
  %38 = shl nuw nsw i64 %36, 3
  %scevgep111 = getelementptr i8, ptr %6, i64 %38
  %39 = shl nuw nsw i64 %wide.trip.count70, 3
  %scevgep112 = getelementptr i8, ptr %6, i64 %39
  %scevgep113 = getelementptr i8, ptr %7, i64 8
  %scevgep114 = getelementptr i8, ptr %0, i64 %38
  %scevgep115 = getelementptr i8, ptr %0, i64 %39
  %scevgep116 = getelementptr i8, ptr %3, i64 %38
  %scevgep117 = getelementptr i8, ptr %3, i64 %39
  %scevgep118 = getelementptr i8, ptr %1, i64 %38
  %scevgep119 = getelementptr i8, ptr %1, i64 %39
  %scevgep120 = getelementptr i8, ptr %4, i64 %38
  %scevgep121 = getelementptr i8, ptr %4, i64 %39
  %scevgep122 = getelementptr i8, ptr %2, i64 %38
  %scevgep123 = getelementptr i8, ptr %2, i64 %39
  %scevgep124 = getelementptr i8, ptr %5, i64 %38
  %scevgep125 = getelementptr i8, ptr %5, i64 %39
  %bound0126 = icmp ult ptr %scevgep111, %scevgep113
  %bound1127 = icmp ugt ptr %scevgep112, %7
  %found.conflict128 = and i1 %bound0126, %bound1127
  %bound0129 = icmp ult ptr %scevgep111, %scevgep115
  %bound1130 = icmp ult ptr %scevgep114, %scevgep112
  %found.conflict131 = and i1 %bound0129, %bound1130
  %conflict.rdx132 = or i1 %found.conflict128, %found.conflict131
  %bound0133 = icmp ult ptr %scevgep111, %scevgep117
  %bound1134 = icmp ult ptr %scevgep116, %scevgep112
  %found.conflict135 = and i1 %bound0133, %bound1134
  %conflict.rdx136 = or i1 %conflict.rdx132, %found.conflict135
  %bound0137 = icmp ult ptr %scevgep111, %scevgep119
  %bound1138 = icmp ult ptr %scevgep118, %scevgep112
  %found.conflict139 = and i1 %bound0137, %bound1138
  %conflict.rdx140 = or i1 %conflict.rdx136, %found.conflict139
  %bound0141 = icmp ult ptr %scevgep111, %scevgep121
  %bound1142 = icmp ult ptr %scevgep120, %scevgep112
  %found.conflict143 = and i1 %bound0141, %bound1142
  %conflict.rdx144 = or i1 %conflict.rdx140, %found.conflict143
  %bound0145 = icmp ult ptr %scevgep111, %scevgep123
  %bound1146 = icmp ult ptr %scevgep122, %scevgep112
  %found.conflict147 = and i1 %bound0145, %bound1146
  %conflict.rdx148 = or i1 %conflict.rdx144, %found.conflict147
  %bound0149 = icmp ult ptr %scevgep111, %scevgep125
  %bound1150 = icmp ult ptr %scevgep124, %scevgep112
  %found.conflict151 = and i1 %bound0149, %bound1150
  %conflict.rdx152 = or i1 %conflict.rdx148, %found.conflict151
  br i1 %conflict.rdx152, label %.lr.ph61.preheader237, label %vector.ph156

vector.ph156:                                     ; preds = %vector.memcheck110
  %n.vec158 = and i64 %37, -2
  %ind.end = add nsw i64 %n.vec158, %36
  %40 = load double, ptr %7, align 8, !tbaa !9, !alias.scope !33
  %broadcast.splatinsert168 = insertelement <2 x double> poison, double %40, i64 0
  %broadcast.splat169 = shufflevector <2 x double> %broadcast.splatinsert168, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body160

vector.body160:                                   ; preds = %vector.body160, %vector.ph156
  %index161 = phi i64 [ 0, %vector.ph156 ], [ %index.next170, %vector.body160 ]
  %offset.idx = add i64 %index161, %36
  %41 = getelementptr inbounds double, ptr %0, i64 %offset.idx
  %wide.load162 = load <2 x double>, ptr %41, align 8, !tbaa !9, !alias.scope !36
  %42 = getelementptr inbounds double, ptr %3, i64 %offset.idx
  %wide.load163 = load <2 x double>, ptr %42, align 8, !tbaa !9, !alias.scope !38
  %43 = getelementptr inbounds double, ptr %1, i64 %offset.idx
  %wide.load164 = load <2 x double>, ptr %43, align 8, !tbaa !9, !alias.scope !40
  %44 = getelementptr inbounds double, ptr %4, i64 %offset.idx
  %wide.load165 = load <2 x double>, ptr %44, align 8, !tbaa !9, !alias.scope !42
  %45 = fmul <2 x double> %wide.load164, %wide.load165
  %46 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load162, <2 x double> %wide.load163, <2 x double> %45)
  %47 = getelementptr inbounds double, ptr %2, i64 %offset.idx
  %wide.load166 = load <2 x double>, ptr %47, align 8, !tbaa !9, !alias.scope !44
  %48 = getelementptr inbounds double, ptr %5, i64 %offset.idx
  %wide.load167 = load <2 x double>, ptr %48, align 8, !tbaa !9, !alias.scope !46
  %49 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load166, <2 x double> %wide.load167, <2 x double> %46)
  %50 = fmul <2 x double> %broadcast.splat169, %49
  %51 = getelementptr inbounds double, ptr %6, i64 %offset.idx
  store <2 x double> %50, ptr %51, align 8, !tbaa !9, !alias.scope !48, !noalias !50
  %index.next170 = add nuw i64 %index161, 2
  %52 = icmp eq i64 %index.next170, %n.vec158
  br i1 %52, label %middle.block153, label %vector.body160, !llvm.loop !51

middle.block153:                                  ; preds = %vector.body160
  %cmp.n171 = icmp eq i64 %37, %n.vec158
  br i1 %cmp.n171, label %.preheader, label %.lr.ph61.preheader237

.lr.ph:                                           ; preds = %.lr.ph.preheader238, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ %indvars.iv.ph, %.lr.ph.preheader238 ]
  %53 = load double, ptr %7, align 8, !tbaa !9
  %54 = getelementptr inbounds double, ptr %0, i64 %indvars.iv
  %55 = load double, ptr %54, align 8, !tbaa !9
  %56 = getelementptr inbounds double, ptr %3, i64 %indvars.iv
  %57 = load double, ptr %56, align 8, !tbaa !9
  %58 = getelementptr inbounds double, ptr %1, i64 %indvars.iv
  %59 = load double, ptr %58, align 8, !tbaa !9
  %60 = getelementptr inbounds double, ptr %4, i64 %indvars.iv
  %61 = load double, ptr %60, align 8, !tbaa !9
  %62 = fmul double %59, %61
  %63 = call double @llvm.fmuladd.f64(double %55, double %57, double %62)
  %64 = getelementptr inbounds double, ptr %2, i64 %indvars.iv
  %65 = load double, ptr %64, align 8, !tbaa !9
  %66 = getelementptr inbounds double, ptr %5, i64 %indvars.iv
  %67 = load double, ptr %66, align 8, !tbaa !9
  %68 = call double @llvm.fmuladd.f64(double %65, double %67, double %63)
  %69 = fmul double %53, %68
  %70 = getelementptr inbounds double, ptr %6, i64 %indvars.iv
  store double %69, ptr %70, align 8, !tbaa !9
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %.preheader58, label %.lr.ph, !llvm.loop !52

.preheader:                                       ; preds = %.lr.ph61, %middle.block153, %.preheader58
  %.1.lcssa = phi i32 [ %.0.lcssa, %.preheader58 ], [ %34, %middle.block153 ], [ %34, %.lr.ph61 ]
  %71 = load i32, ptr %8, align 4, !tbaa !5
  %72 = icmp slt i32 %.1.lcssa, %71
  br i1 %72, label %.lr.ph64.preheader, label %._crit_edge

.lr.ph64.preheader:                               ; preds = %.preheader
  %73 = zext i32 %.1.lcssa to i64
  %74 = xor i32 %.1.lcssa, -1
  %75 = add i32 %71, %74
  %76 = zext i32 %75 to i64
  %77 = add nuw nsw i64 %76, 1
  %min.iters.check217 = icmp ult i32 %75, 15
  br i1 %min.iters.check217, label %.lr.ph64.preheader236, label %vector.memcheck172

.lr.ph64.preheader236:                            ; preds = %middle.block215, %vector.memcheck172, %.lr.ph64.preheader
  %indvars.iv72.ph = phi i64 [ %73, %vector.memcheck172 ], [ %73, %.lr.ph64.preheader ], [ %ind.end221, %middle.block215 ]
  br label %.lr.ph64

vector.memcheck172:                               ; preds = %.lr.ph64.preheader
  %78 = shl nuw nsw i64 %73, 3
  %scevgep173 = getelementptr i8, ptr %6, i64 %78
  %79 = xor i32 %.1.lcssa, -1
  %80 = add i32 %71, %79
  %81 = zext i32 %80 to i64
  %82 = add nuw nsw i64 %73, %81
  %83 = shl nuw nsw i64 %82, 3
  %84 = add nuw nsw i64 %83, 8
  %scevgep174 = getelementptr i8, ptr %6, i64 %84
  %scevgep175 = getelementptr i8, ptr %7, i64 8
  %scevgep176 = getelementptr i8, ptr %0, i64 %78
  %scevgep177 = getelementptr i8, ptr %0, i64 %84
  %scevgep178 = getelementptr i8, ptr %3, i64 %78
  %scevgep179 = getelementptr i8, ptr %3, i64 %84
  %scevgep180 = getelementptr i8, ptr %1, i64 %78
  %scevgep181 = getelementptr i8, ptr %1, i64 %84
  %scevgep182 = getelementptr i8, ptr %4, i64 %78
  %scevgep183 = getelementptr i8, ptr %4, i64 %84
  %scevgep184 = getelementptr i8, ptr %2, i64 %78
  %scevgep185 = getelementptr i8, ptr %2, i64 %84
  %scevgep186 = getelementptr i8, ptr %5, i64 %78
  %scevgep187 = getelementptr i8, ptr %5, i64 %84
  %bound0188 = icmp ult ptr %scevgep173, %scevgep175
  %bound1189 = icmp ugt ptr %scevgep174, %7
  %found.conflict190 = and i1 %bound0188, %bound1189
  %bound0191 = icmp ult ptr %scevgep173, %scevgep177
  %bound1192 = icmp ult ptr %scevgep176, %scevgep174
  %found.conflict193 = and i1 %bound0191, %bound1192
  %conflict.rdx194 = or i1 %found.conflict190, %found.conflict193
  %bound0195 = icmp ult ptr %scevgep173, %scevgep179
  %bound1196 = icmp ult ptr %scevgep178, %scevgep174
  %found.conflict197 = and i1 %bound0195, %bound1196
  %conflict.rdx198 = or i1 %conflict.rdx194, %found.conflict197
  %bound0199 = icmp ult ptr %scevgep173, %scevgep181
  %bound1200 = icmp ult ptr %scevgep180, %scevgep174
  %found.conflict201 = and i1 %bound0199, %bound1200
  %conflict.rdx202 = or i1 %conflict.rdx198, %found.conflict201
  %bound0203 = icmp ult ptr %scevgep173, %scevgep183
  %bound1204 = icmp ult ptr %scevgep182, %scevgep174
  %found.conflict205 = and i1 %bound0203, %bound1204
  %conflict.rdx206 = or i1 %conflict.rdx202, %found.conflict205
  %bound0207 = icmp ult ptr %scevgep173, %scevgep185
  %bound1208 = icmp ult ptr %scevgep184, %scevgep174
  %found.conflict209 = and i1 %bound0207, %bound1208
  %conflict.rdx210 = or i1 %conflict.rdx206, %found.conflict209
  %bound0211 = icmp ult ptr %scevgep173, %scevgep187
  %bound1212 = icmp ult ptr %scevgep186, %scevgep174
  %found.conflict213 = and i1 %bound0211, %bound1212
  %conflict.rdx214 = or i1 %conflict.rdx210, %found.conflict213
  br i1 %conflict.rdx214, label %.lr.ph64.preheader236, label %vector.ph218

vector.ph218:                                     ; preds = %vector.memcheck172
  %n.vec220 = and i64 %77, 8589934590
  %ind.end221 = add nuw nsw i64 %n.vec220, %73
  %85 = load double, ptr %7, align 8, !tbaa !9, !alias.scope !53
  %broadcast.splatinsert232 = insertelement <2 x double> poison, double %85, i64 0
  %broadcast.splat233 = shufflevector <2 x double> %broadcast.splatinsert232, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body223

vector.body223:                                   ; preds = %vector.body223, %vector.ph218
  %index224 = phi i64 [ 0, %vector.ph218 ], [ %index.next234, %vector.body223 ]
  %offset.idx225 = add i64 %index224, %73
  %86 = getelementptr inbounds double, ptr %0, i64 %offset.idx225
  %wide.load226 = load <2 x double>, ptr %86, align 8, !tbaa !9, !alias.scope !56
  %87 = getelementptr inbounds double, ptr %3, i64 %offset.idx225
  %wide.load227 = load <2 x double>, ptr %87, align 8, !tbaa !9, !alias.scope !58
  %88 = getelementptr inbounds double, ptr %1, i64 %offset.idx225
  %wide.load228 = load <2 x double>, ptr %88, align 8, !tbaa !9, !alias.scope !60
  %89 = getelementptr inbounds double, ptr %4, i64 %offset.idx225
  %wide.load229 = load <2 x double>, ptr %89, align 8, !tbaa !9, !alias.scope !62
  %90 = fmul <2 x double> %wide.load228, %wide.load229
  %91 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load226, <2 x double> %wide.load227, <2 x double> %90)
  %92 = getelementptr inbounds double, ptr %2, i64 %offset.idx225
  %wide.load230 = load <2 x double>, ptr %92, align 8, !tbaa !9, !alias.scope !64
  %93 = getelementptr inbounds double, ptr %5, i64 %offset.idx225
  %wide.load231 = load <2 x double>, ptr %93, align 8, !tbaa !9, !alias.scope !66
  %94 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load230, <2 x double> %wide.load231, <2 x double> %91)
  %95 = fmul <2 x double> %broadcast.splat233, %94
  %96 = getelementptr inbounds double, ptr %6, i64 %offset.idx225
  store <2 x double> %95, ptr %96, align 8, !tbaa !9, !alias.scope !68, !noalias !70
  %index.next234 = add nuw i64 %index224, 2
  %97 = icmp eq i64 %index.next234, %n.vec220
  br i1 %97, label %middle.block215, label %vector.body223, !llvm.loop !71

middle.block215:                                  ; preds = %vector.body223
  %cmp.n235 = icmp eq i64 %77, %n.vec220
  br i1 %cmp.n235, label %._crit_edge, label %.lr.ph64.preheader236

.lr.ph61:                                         ; preds = %.lr.ph61.preheader237, %.lr.ph61
  %indvars.iv67 = phi i64 [ %indvars.iv.next68, %.lr.ph61 ], [ %indvars.iv67.ph, %.lr.ph61.preheader237 ]
  %98 = load double, ptr %7, align 8, !tbaa !9
  %99 = getelementptr inbounds double, ptr %0, i64 %indvars.iv67
  %100 = load double, ptr %99, align 8, !tbaa !9
  %101 = getelementptr inbounds double, ptr %3, i64 %indvars.iv67
  %102 = load double, ptr %101, align 8, !tbaa !9
  %103 = getelementptr inbounds double, ptr %1, i64 %indvars.iv67
  %104 = load double, ptr %103, align 8, !tbaa !9
  %105 = getelementptr inbounds double, ptr %4, i64 %indvars.iv67
  %106 = load double, ptr %105, align 8, !tbaa !9
  %107 = fmul double %104, %106
  %108 = call double @llvm.fmuladd.f64(double %100, double %102, double %107)
  %109 = getelementptr inbounds double, ptr %2, i64 %indvars.iv67
  %110 = load double, ptr %109, align 8, !tbaa !9
  %111 = getelementptr inbounds double, ptr %5, i64 %indvars.iv67
  %112 = load double, ptr %111, align 8, !tbaa !9
  %113 = call double @llvm.fmuladd.f64(double %110, double %112, double %108)
  %114 = fmul double %98, %113
  %115 = getelementptr inbounds double, ptr %6, i64 %indvars.iv67
  store double %114, ptr %115, align 8, !tbaa !9
  %indvars.iv.next68 = add nuw nsw i64 %indvars.iv67, 1
  %exitcond71.not = icmp eq i64 %indvars.iv.next68, %wide.trip.count70
  br i1 %exitcond71.not, label %.preheader, label %.lr.ph61, !llvm.loop !72

.lr.ph64:                                         ; preds = %.lr.ph64.preheader236, %.lr.ph64
  %indvars.iv72 = phi i64 [ %indvars.iv.next73, %.lr.ph64 ], [ %indvars.iv72.ph, %.lr.ph64.preheader236 ]
  %116 = load double, ptr %7, align 8, !tbaa !9
  %117 = getelementptr inbounds double, ptr %0, i64 %indvars.iv72
  %118 = load double, ptr %117, align 8, !tbaa !9
  %119 = getelementptr inbounds double, ptr %3, i64 %indvars.iv72
  %120 = load double, ptr %119, align 8, !tbaa !9
  %121 = getelementptr inbounds double, ptr %1, i64 %indvars.iv72
  %122 = load double, ptr %121, align 8, !tbaa !9
  %123 = getelementptr inbounds double, ptr %4, i64 %indvars.iv72
  %124 = load double, ptr %123, align 8, !tbaa !9
  %125 = fmul double %122, %124
  %126 = call double @llvm.fmuladd.f64(double %118, double %120, double %125)
  %127 = getelementptr inbounds double, ptr %2, i64 %indvars.iv72
  %128 = load double, ptr %127, align 8, !tbaa !9
  %129 = getelementptr inbounds double, ptr %5, i64 %indvars.iv72
  %130 = load double, ptr %129, align 8, !tbaa !9
  %131 = call double @llvm.fmuladd.f64(double %128, double %130, double %126)
  %132 = fmul double %116, %131
  %133 = getelementptr inbounds double, ptr %6, i64 %indvars.iv72
  store double %132, ptr %133, align 8, !tbaa !9
  %indvars.iv.next73 = add nuw nsw i64 %indvars.iv72, 1
  %134 = trunc nuw i64 %indvars.iv.next73 to i32
  %135 = icmp sgt i32 %71, %134
  br i1 %135, label %.lr.ph64, label %._crit_edge, !llvm.loop !73

._crit_edge:                                      ; preds = %.lr.ph64, %middle.block215, %.preheader
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #6
  ret void
}

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { noreturn 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 #2 = { inlinehint 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 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { 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 #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { nounwind }
attributes #7 = { noreturn 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/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = !{!12}
!12 = distinct !{!12, !13}
!13 = distinct !{!13, !"LVerDomain"}
!14 = !{!15}
!15 = distinct !{!15, !13}
!16 = !{!17}
!17 = distinct !{!17, !13}
!18 = !{!19}
!19 = distinct !{!19, !13}
!20 = !{!21}
!21 = distinct !{!21, !13}
!22 = !{!23}
!23 = distinct !{!23, !13}
!24 = !{!25}
!25 = distinct !{!25, !13}
!26 = !{!27}
!27 = distinct !{!27, !13}
!28 = !{!12, !15, !17, !19, !21, !23, !25}
!29 = distinct !{!29, !30, !31, !32}
!30 = !{!"llvm.loop.mustprogress"}
!31 = !{!"llvm.loop.isvectorized", i32 1}
!32 = !{!"llvm.loop.unroll.runtime.disable"}
!33 = !{!34}
!34 = distinct !{!34, !35}
!35 = distinct !{!35, !"LVerDomain"}
!36 = !{!37}
!37 = distinct !{!37, !35}
!38 = !{!39}
!39 = distinct !{!39, !35}
!40 = !{!41}
!41 = distinct !{!41, !35}
!42 = !{!43}
!43 = distinct !{!43, !35}
!44 = !{!45}
!45 = distinct !{!45, !35}
!46 = !{!47}
!47 = distinct !{!47, !35}
!48 = !{!49}
!49 = distinct !{!49, !35}
!50 = !{!34, !37, !39, !41, !43, !45, !47}
!51 = distinct !{!51, !30, !31, !32}
!52 = distinct !{!52, !30, !31}
!53 = !{!54}
!54 = distinct !{!54, !55}
!55 = distinct !{!55, !"LVerDomain"}
!56 = !{!57}
!57 = distinct !{!57, !55}
!58 = !{!59}
!59 = distinct !{!59, !55}
!60 = !{!61}
!61 = distinct !{!61, !55}
!62 = !{!63}
!63 = distinct !{!63, !55}
!64 = !{!65}
!65 = distinct !{!65, !55}
!66 = !{!67}
!67 = distinct !{!67, !55}
!68 = !{!69}
!69 = distinct !{!69, !55}
!70 = !{!54, !57, !59, !61, !63, !65, !67}
!71 = distinct !{!71, !30, !31, !32}
!72 = distinct !{!72, !30, !31}
!73 = distinct !{!73, !30, !31}


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