; LLVM IR from libxsmm/libxsmm :: samples/external_aux (perf_counter_markers)

; 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.llc_victims = type { double, double, double, double, double, double, double, double, double, double }
%struct.ctrs_uncore = type { [6 x i64], [6 x i64], [6 x i64], [6 x i64], [6 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], [28 x i64], i32 }

@.str.10 = external hidden unnamed_addr constant [54 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: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

declare i32 @printf(ptr noundef, ...) #1

; Function Attrs: nounwind uwtable
define dso_local void @get_llc_victim_bw_uncore_ctrs(ptr noundef %0, double noundef %1, ptr noundef %2) #2 {
  %4 = alloca ptr, align 8
  %5 = alloca double, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i64, align 8
  %8 = alloca i64, align 8
  %9 = alloca i64, align 8
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store double %1, ptr %5, align 8, !tbaa !9
  store ptr %2, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #3
  store i64 0, ptr %7, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #3
  store i64 0, ptr %8, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #3
  store i64 0, ptr %9, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #3
  store i64 0, ptr %10, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #3
  store i64 0, ptr %11, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #3
  store i64 0, ptr %12, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #3
  store i32 0, ptr %13, align 4, !tbaa !13
  %15 = load ptr, ptr %6, align 8, !tbaa !5
  %16 = getelementptr inbounds %struct.llc_victims, ptr %15, i32 0, i32 0
  store double 0.000000e+00, ptr %16, align 8, !tbaa !15
  %17 = load ptr, ptr %6, align 8, !tbaa !5
  %18 = getelementptr inbounds %struct.llc_victims, ptr %17, i32 0, i32 1
  store double 0.000000e+00, ptr %18, align 8, !tbaa !17
  %19 = load ptr, ptr %6, align 8, !tbaa !5
  %20 = getelementptr inbounds %struct.llc_victims, ptr %19, i32 0, i32 2
  store double 0.000000e+00, ptr %20, align 8, !tbaa !18
  %21 = load ptr, ptr %6, align 8, !tbaa !5
  %22 = getelementptr inbounds %struct.llc_victims, ptr %21, i32 0, i32 3
  store double 0.000000e+00, ptr %22, align 8, !tbaa !19
  %23 = load ptr, ptr %6, align 8, !tbaa !5
  %24 = getelementptr inbounds %struct.llc_victims, ptr %23, i32 0, i32 4
  store double 0.000000e+00, ptr %24, align 8, !tbaa !20
  %25 = load ptr, ptr %6, align 8, !tbaa !5
  %26 = getelementptr inbounds %struct.llc_victims, ptr %25, i32 0, i32 5
  store double 0.000000e+00, ptr %26, align 8, !tbaa !21
  %27 = load ptr, ptr %6, align 8, !tbaa !5
  %28 = getelementptr inbounds %struct.llc_victims, ptr %27, i32 0, i32 6
  store double 0.000000e+00, ptr %28, align 8, !tbaa !22
  %29 = load ptr, ptr %6, align 8, !tbaa !5
  %30 = getelementptr inbounds %struct.llc_victims, ptr %29, i32 0, i32 7
  store double 0.000000e+00, ptr %30, align 8, !tbaa !23
  %31 = load ptr, ptr %6, align 8, !tbaa !5
  %32 = getelementptr inbounds %struct.llc_victims, ptr %31, i32 0, i32 8
  store double 0.000000e+00, ptr %32, align 8, !tbaa !24
  %33 = load ptr, ptr %6, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct.llc_victims, ptr %33, i32 0, i32 9
  store double 0.000000e+00, ptr %34, align 8, !tbaa !25
  %35 = load ptr, ptr %4, align 8, !tbaa !5
  %36 = getelementptr inbounds %struct.ctrs_uncore, ptr %35, i32 0, i32 32
  %37 = load i32, ptr %36, align 8, !tbaa !26
  %38 = icmp ne i32 %37, 3
  br i1 %38, label %39, label %41

39:                                               ; preds = %3
  %40 = call i32 (ptr, ...) @printf(ptr noundef @.str.10)
  store i32 1, ptr %14, align 4
  br label %166

41:                                               ; preds = %3
  store i32 0, ptr %13, align 4, !tbaa !13
  br label %42

42:                                               ; preds = %100, %41
  %43 = load i32, ptr %13, align 4, !tbaa !13
  %44 = icmp slt i32 %43, 28
  br i1 %44, label %45, label %103

45:                                               ; preds = %42
  %46 = load ptr, ptr %4, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.ctrs_uncore, ptr %46, i32 0, i32 15
  %48 = load i32, ptr %13, align 4, !tbaa !13
  %49 = sext i32 %48 to i64
  %50 = getelementptr inbounds [28 x i64], ptr %47, i64 0, i64 %49
  %51 = load i64, ptr %50, align 8, !tbaa !11
  %52 = mul i64 %51, 64
  %53 = load i64, ptr %7, align 8, !tbaa !11
  %54 = add i64 %53, %52
  store i64 %54, ptr %7, align 8, !tbaa !11
  %55 = load ptr, ptr %4, align 8, !tbaa !5
  %56 = getelementptr inbounds %struct.ctrs_uncore, ptr %55, i32 0, i32 16
  %57 = load i32, ptr %13, align 4, !tbaa !13
  %58 = sext i32 %57 to i64
  %59 = getelementptr inbounds [28 x i64], ptr %56, i64 0, i64 %58
  %60 = load i64, ptr %59, align 8, !tbaa !11
  %61 = mul i64 %60, 64
  %62 = load i64, ptr %8, align 8, !tbaa !11
  %63 = add i64 %62, %61
  store i64 %63, ptr %8, align 8, !tbaa !11
  %64 = load ptr, ptr %4, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.ctrs_uncore, ptr %64, i32 0, i32 17
  %66 = load i32, ptr %13, align 4, !tbaa !13
  %67 = sext i32 %66 to i64
  %68 = getelementptr inbounds [28 x i64], ptr %65, i64 0, i64 %67
  %69 = load i64, ptr %68, align 8, !tbaa !11
  %70 = mul i64 %69, 64
  %71 = load i64, ptr %9, align 8, !tbaa !11
  %72 = add i64 %71, %70
  store i64 %72, ptr %9, align 8, !tbaa !11
  %73 = load ptr, ptr %4, align 8, !tbaa !5
  %74 = getelementptr inbounds %struct.ctrs_uncore, ptr %73, i32 0, i32 18
  %75 = load i32, ptr %13, align 4, !tbaa !13
  %76 = sext i32 %75 to i64
  %77 = getelementptr inbounds [28 x i64], ptr %74, i64 0, i64 %76
  %78 = load i64, ptr %77, align 8, !tbaa !11
  %79 = mul i64 %78, 64
  %80 = load i64, ptr %10, align 8, !tbaa !11
  %81 = add i64 %80, %79
  store i64 %81, ptr %10, align 8, !tbaa !11
  %82 = load ptr, ptr %4, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.ctrs_uncore, ptr %82, i32 0, i32 19
  %84 = load i32, ptr %13, align 4, !tbaa !13
  %85 = sext i32 %84 to i64
  %86 = getelementptr inbounds [28 x i64], ptr %83, i64 0, i64 %85
  %87 = load i64, ptr %86, align 8, !tbaa !11
  %88 = mul i64 %87, 64
  %89 = load i64, ptr %11, align 8, !tbaa !11
  %90 = add i64 %89, %88
  store i64 %90, ptr %11, align 8, !tbaa !11
  %91 = load ptr, ptr %4, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.ctrs_uncore, ptr %91, i32 0, i32 20
  %93 = load i32, ptr %13, align 4, !tbaa !13
  %94 = sext i32 %93 to i64
  %95 = getelementptr inbounds [28 x i64], ptr %92, i64 0, i64 %94
  %96 = load i64, ptr %95, align 8, !tbaa !11
  %97 = mul i64 %96, 64
  %98 = load i64, ptr %12, align 8, !tbaa !11
  %99 = add i64 %98, %97
  store i64 %99, ptr %12, align 8, !tbaa !11
  br label %100

100:                                              ; preds = %45
  %101 = load i32, ptr %13, align 4, !tbaa !13
  %102 = add nsw i32 %101, 1
  store i32 %102, ptr %13, align 4, !tbaa !13
  br label %42, !llvm.loop !28

103:                                              ; preds = %42
  %104 = load i64, ptr %7, align 8, !tbaa !11
  %105 = uitofp i64 %104 to double
  %106 = load double, ptr %5, align 8, !tbaa !9
  %107 = fdiv double %105, %106
  %108 = fdiv double %107, 0x41D0000000000000
  %109 = load ptr, ptr %6, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.llc_victims, ptr %109, i32 0, i32 0
  store double %108, ptr %110, align 8, !tbaa !15
  %111 = load i64, ptr %8, align 8, !tbaa !11
  %112 = uitofp i64 %111 to double
  %113 = load double, ptr %5, align 8, !tbaa !9
  %114 = fdiv double %112, %113
  %115 = fdiv double %114, 0x41D0000000000000
  %116 = load ptr, ptr %6, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.llc_victims, ptr %116, i32 0, i32 1
  store double %115, ptr %117, align 8, !tbaa !17
  %118 = load i64, ptr %9, align 8, !tbaa !11
  %119 = uitofp i64 %118 to double
  %120 = load double, ptr %5, align 8, !tbaa !9
  %121 = fdiv double %119, %120
  %122 = fdiv double %121, 0x41D0000000000000
  %123 = load ptr, ptr %6, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.llc_victims, ptr %123, i32 0, i32 2
  store double %122, ptr %124, align 8, !tbaa !18
  %125 = load i64, ptr %10, align 8, !tbaa !11
  %126 = uitofp i64 %125 to double
  %127 = load double, ptr %5, align 8, !tbaa !9
  %128 = fdiv double %126, %127
  %129 = fdiv double %128, 0x41D0000000000000
  %130 = load ptr, ptr %6, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.llc_victims, ptr %130, i32 0, i32 3
  store double %129, ptr %131, align 8, !tbaa !19
  %132 = load i64, ptr %11, align 8, !tbaa !11
  %133 = uitofp i64 %132 to double
  %134 = load double, ptr %5, align 8, !tbaa !9
  %135 = fdiv double %133, %134
  %136 = fdiv double %135, 0x41D0000000000000
  %137 = load ptr, ptr %6, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.llc_victims, ptr %137, i32 0, i32 4
  store double %136, ptr %138, align 8, !tbaa !20
  %139 = load i64, ptr %12, align 8, !tbaa !11
  %140 = uitofp i64 %139 to double
  %141 = load double, ptr %5, align 8, !tbaa !9
  %142 = fdiv double %140, %141
  %143 = fdiv double %142, 0x41D0000000000000
  %144 = load ptr, ptr %6, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.llc_victims, ptr %144, i32 0, i32 5
  store double %143, ptr %145, align 8, !tbaa !21
  %146 = load i64, ptr %9, align 8, !tbaa !11
  %147 = udiv i64 %146, 64
  %148 = uitofp i64 %147 to double
  %149 = load ptr, ptr %6, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.llc_victims, ptr %149, i32 0, i32 6
  store double %148, ptr %150, align 8, !tbaa !22
  %151 = load i64, ptr %10, align 8, !tbaa !11
  %152 = udiv i64 %151, 64
  %153 = uitofp i64 %152 to double
  %154 = load ptr, ptr %6, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.llc_victims, ptr %154, i32 0, i32 7
  store double %153, ptr %155, align 8, !tbaa !23
  %156 = load i64, ptr %11, align 8, !tbaa !11
  %157 = udiv i64 %156, 64
  %158 = uitofp i64 %157 to double
  %159 = load ptr, ptr %6, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.llc_victims, ptr %159, i32 0, i32 8
  store double %158, ptr %160, align 8, !tbaa !24
  %161 = load i64, ptr %12, align 8, !tbaa !11
  %162 = udiv i64 %161, 64
  %163 = uitofp i64 %162 to double
  %164 = load ptr, ptr %6, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.llc_victims, ptr %164, i32 0, i32 9
  store double %163, ptr %165, align 8, !tbaa !25
  store i32 0, ptr %14, align 4
  br label %166

166:                                              ; preds = %103, %39
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #3
  %167 = load i32, ptr %14, align 4
  switch i32 %167, label %169 [
    i32 0, label %168
    i32 1, label %168
  ]

168:                                              ; preds = %166, %166
  ret void

169:                                              ; preds = %166
  unreachable
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #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 #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 = !{!"double", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = !{!16, !10, i64 0}
!16 = !{!"llc_victims", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72}
!17 = !{!16, !10, i64 8}
!18 = !{!16, !10, i64 16}
!19 = !{!16, !10, i64 24}
!20 = !{!16, !10, i64 32}
!21 = !{!16, !10, i64 40}
!22 = !{!16, !10, i64 48}
!23 = !{!16, !10, i64 56}
!24 = !{!16, !10, i64 64}
!25 = !{!16, !10, i64 72}
!26 = !{!27, !14, i64 6288}
!27 = !{!"ctrs_uncore", !7, i64 0, !7, i64 48, !7, i64 96, !7, i64 144, !7, i64 192, !7, i64 240, !7, i64 464, !7, i64 688, !7, i64 912, !7, i64 1136, !7, i64 1360, !7, i64 1584, !7, i64 1808, !7, i64 2032, !7, i64 2256, !7, i64 2480, !7, i64 2704, !7, i64 2928, !7, i64 3152, !7, i64 3376, !7, i64 3600, !7, i64 3824, !7, i64 4048, !7, i64 4272, !7, i64 4496, !7, i64 4720, !7, i64 4944, !7, i64 5168, !7, i64 5392, !7, i64 5616, !7, i64 5840, !7, i64 6064, !14, i64 6288}
!28 = distinct !{!28, !29}
!29 = !{!"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"

@.str.10 = external hidden unnamed_addr constant [54 x i8], align 1

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #0

; Function Attrs: nofree nounwind uwtable
define dso_local void @get_llc_victim_bw_uncore_ctrs(ptr nocapture noundef readonly %0, double noundef %1, ptr nocapture noundef writeonly %2) local_unnamed_addr #1 {
  %4 = getelementptr inbounds i8, ptr %2, i64 16
  %5 = getelementptr inbounds i8, ptr %2, i64 32
  %6 = getelementptr inbounds i8, ptr %2, i64 48
  %7 = getelementptr inbounds i8, ptr %2, i64 64
  %8 = getelementptr inbounds i8, ptr %0, i64 6288
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(80) %2, i8 0, i64 80, i1 false)
  %9 = load i32, ptr %8, align 8, !tbaa !5
  %.not = icmp eq i32 %9, 3
  br i1 %.not, label %vector.body, label %199

vector.body:                                      ; preds = %3
  %10 = getelementptr inbounds i8, ptr %0, i64 3600
  %11 = getelementptr inbounds i8, ptr %0, i64 3376
  %12 = getelementptr inbounds i8, ptr %0, i64 3152
  %13 = getelementptr inbounds i8, ptr %0, i64 2928
  %14 = getelementptr inbounds i8, ptr %0, i64 2704
  %15 = getelementptr inbounds i8, ptr %0, i64 2480
  %16 = getelementptr inbounds i8, ptr %0, i64 2496
  %wide.load = load <2 x i64>, ptr %15, align 8, !tbaa !10
  %wide.load96 = load <2 x i64>, ptr %16, align 8, !tbaa !10
  %17 = getelementptr inbounds i8, ptr %0, i64 2720
  %wide.load97 = load <2 x i64>, ptr %14, align 8, !tbaa !10
  %wide.load98 = load <2 x i64>, ptr %17, align 8, !tbaa !10
  %18 = getelementptr inbounds i8, ptr %0, i64 2944
  %wide.load99 = load <2 x i64>, ptr %13, align 8, !tbaa !10
  %wide.load100 = load <2 x i64>, ptr %18, align 8, !tbaa !10
  %19 = getelementptr inbounds i8, ptr %0, i64 3168
  %wide.load101 = load <2 x i64>, ptr %12, align 8, !tbaa !10
  %wide.load102 = load <2 x i64>, ptr %19, align 8, !tbaa !10
  %20 = getelementptr inbounds i8, ptr %0, i64 3392
  %wide.load103 = load <2 x i64>, ptr %11, align 8, !tbaa !10
  %wide.load104 = load <2 x i64>, ptr %20, align 8, !tbaa !10
  %21 = getelementptr inbounds i8, ptr %0, i64 3616
  %wide.load105 = load <2 x i64>, ptr %10, align 8, !tbaa !10
  %wide.load106 = load <2 x i64>, ptr %21, align 8, !tbaa !10
  %22 = getelementptr inbounds i8, ptr %0, i64 2512
  %23 = getelementptr inbounds i8, ptr %0, i64 2528
  %wide.load.1 = load <2 x i64>, ptr %22, align 8, !tbaa !10
  %wide.load96.1 = load <2 x i64>, ptr %23, align 8, !tbaa !10
  %24 = add <2 x i64> %wide.load.1, %wide.load
  %25 = add <2 x i64> %wide.load96.1, %wide.load96
  %26 = getelementptr inbounds i8, ptr %0, i64 2736
  %27 = getelementptr inbounds i8, ptr %0, i64 2752
  %wide.load97.1 = load <2 x i64>, ptr %26, align 8, !tbaa !10
  %wide.load98.1 = load <2 x i64>, ptr %27, align 8, !tbaa !10
  %28 = add <2 x i64> %wide.load97.1, %wide.load97
  %29 = add <2 x i64> %wide.load98.1, %wide.load98
  %30 = getelementptr inbounds i8, ptr %0, i64 2960
  %31 = getelementptr inbounds i8, ptr %0, i64 2976
  %wide.load99.1 = load <2 x i64>, ptr %30, align 8, !tbaa !10
  %wide.load100.1 = load <2 x i64>, ptr %31, align 8, !tbaa !10
  %32 = add <2 x i64> %wide.load99.1, %wide.load99
  %33 = add <2 x i64> %wide.load100.1, %wide.load100
  %34 = getelementptr inbounds i8, ptr %0, i64 3184
  %35 = getelementptr inbounds i8, ptr %0, i64 3200
  %wide.load101.1 = load <2 x i64>, ptr %34, align 8, !tbaa !10
  %wide.load102.1 = load <2 x i64>, ptr %35, align 8, !tbaa !10
  %36 = add <2 x i64> %wide.load101.1, %wide.load101
  %37 = add <2 x i64> %wide.load102.1, %wide.load102
  %38 = getelementptr inbounds i8, ptr %0, i64 3408
  %39 = getelementptr inbounds i8, ptr %0, i64 3424
  %wide.load103.1 = load <2 x i64>, ptr %38, align 8, !tbaa !10
  %wide.load104.1 = load <2 x i64>, ptr %39, align 8, !tbaa !10
  %40 = add <2 x i64> %wide.load103.1, %wide.load103
  %41 = add <2 x i64> %wide.load104.1, %wide.load104
  %42 = getelementptr inbounds i8, ptr %0, i64 3632
  %43 = getelementptr inbounds i8, ptr %0, i64 3648
  %wide.load105.1 = load <2 x i64>, ptr %42, align 8, !tbaa !10
  %wide.load106.1 = load <2 x i64>, ptr %43, align 8, !tbaa !10
  %44 = add <2 x i64> %wide.load105.1, %wide.load105
  %45 = add <2 x i64> %wide.load106.1, %wide.load106
  %46 = getelementptr inbounds i8, ptr %0, i64 2544
  %47 = getelementptr inbounds i8, ptr %0, i64 2560
  %wide.load.2 = load <2 x i64>, ptr %46, align 8, !tbaa !10
  %wide.load96.2 = load <2 x i64>, ptr %47, align 8, !tbaa !10
  %48 = add <2 x i64> %wide.load.2, %24
  %49 = add <2 x i64> %wide.load96.2, %25
  %50 = getelementptr inbounds i8, ptr %0, i64 2768
  %51 = getelementptr inbounds i8, ptr %0, i64 2784
  %wide.load97.2 = load <2 x i64>, ptr %50, align 8, !tbaa !10
  %wide.load98.2 = load <2 x i64>, ptr %51, align 8, !tbaa !10
  %52 = add <2 x i64> %wide.load97.2, %28
  %53 = add <2 x i64> %wide.load98.2, %29
  %54 = getelementptr inbounds i8, ptr %0, i64 2992
  %55 = getelementptr inbounds i8, ptr %0, i64 3008
  %wide.load99.2 = load <2 x i64>, ptr %54, align 8, !tbaa !10
  %wide.load100.2 = load <2 x i64>, ptr %55, align 8, !tbaa !10
  %56 = add <2 x i64> %wide.load99.2, %32
  %57 = add <2 x i64> %wide.load100.2, %33
  %58 = getelementptr inbounds i8, ptr %0, i64 3216
  %59 = getelementptr inbounds i8, ptr %0, i64 3232
  %wide.load101.2 = load <2 x i64>, ptr %58, align 8, !tbaa !10
  %wide.load102.2 = load <2 x i64>, ptr %59, align 8, !tbaa !10
  %60 = add <2 x i64> %wide.load101.2, %36
  %61 = add <2 x i64> %wide.load102.2, %37
  %62 = getelementptr inbounds i8, ptr %0, i64 3440
  %63 = getelementptr inbounds i8, ptr %0, i64 3456
  %wide.load103.2 = load <2 x i64>, ptr %62, align 8, !tbaa !10
  %wide.load104.2 = load <2 x i64>, ptr %63, align 8, !tbaa !10
  %64 = add <2 x i64> %wide.load103.2, %40
  %65 = add <2 x i64> %wide.load104.2, %41
  %66 = getelementptr inbounds i8, ptr %0, i64 3664
  %67 = getelementptr inbounds i8, ptr %0, i64 3680
  %wide.load105.2 = load <2 x i64>, ptr %66, align 8, !tbaa !10
  %wide.load106.2 = load <2 x i64>, ptr %67, align 8, !tbaa !10
  %68 = add <2 x i64> %wide.load105.2, %44
  %69 = add <2 x i64> %wide.load106.2, %45
  %70 = getelementptr inbounds i8, ptr %0, i64 2576
  %71 = getelementptr inbounds i8, ptr %0, i64 2592
  %wide.load.3 = load <2 x i64>, ptr %70, align 8, !tbaa !10
  %wide.load96.3 = load <2 x i64>, ptr %71, align 8, !tbaa !10
  %72 = add <2 x i64> %wide.load.3, %48
  %73 = add <2 x i64> %wide.load96.3, %49
  %74 = getelementptr inbounds i8, ptr %0, i64 2800
  %75 = getelementptr inbounds i8, ptr %0, i64 2816
  %wide.load97.3 = load <2 x i64>, ptr %74, align 8, !tbaa !10
  %wide.load98.3 = load <2 x i64>, ptr %75, align 8, !tbaa !10
  %76 = add <2 x i64> %wide.load97.3, %52
  %77 = add <2 x i64> %wide.load98.3, %53
  %78 = getelementptr inbounds i8, ptr %0, i64 3024
  %79 = getelementptr inbounds i8, ptr %0, i64 3040
  %wide.load99.3 = load <2 x i64>, ptr %78, align 8, !tbaa !10
  %wide.load100.3 = load <2 x i64>, ptr %79, align 8, !tbaa !10
  %80 = add <2 x i64> %wide.load99.3, %56
  %81 = add <2 x i64> %wide.load100.3, %57
  %82 = getelementptr inbounds i8, ptr %0, i64 3248
  %83 = getelementptr inbounds i8, ptr %0, i64 3264
  %wide.load101.3 = load <2 x i64>, ptr %82, align 8, !tbaa !10
  %wide.load102.3 = load <2 x i64>, ptr %83, align 8, !tbaa !10
  %84 = add <2 x i64> %wide.load101.3, %60
  %85 = add <2 x i64> %wide.load102.3, %61
  %86 = getelementptr inbounds i8, ptr %0, i64 3472
  %87 = getelementptr inbounds i8, ptr %0, i64 3488
  %wide.load103.3 = load <2 x i64>, ptr %86, align 8, !tbaa !10
  %wide.load104.3 = load <2 x i64>, ptr %87, align 8, !tbaa !10
  %88 = add <2 x i64> %wide.load103.3, %64
  %89 = add <2 x i64> %wide.load104.3, %65
  %90 = getelementptr inbounds i8, ptr %0, i64 3696
  %91 = getelementptr inbounds i8, ptr %0, i64 3712
  %wide.load105.3 = load <2 x i64>, ptr %90, align 8, !tbaa !10
  %wide.load106.3 = load <2 x i64>, ptr %91, align 8, !tbaa !10
  %92 = add <2 x i64> %wide.load105.3, %68
  %93 = add <2 x i64> %wide.load106.3, %69
  %94 = getelementptr inbounds i8, ptr %0, i64 2608
  %95 = getelementptr inbounds i8, ptr %0, i64 2624
  %wide.load.4 = load <2 x i64>, ptr %94, align 8, !tbaa !10
  %wide.load96.4 = load <2 x i64>, ptr %95, align 8, !tbaa !10
  %96 = add <2 x i64> %wide.load.4, %72
  %97 = add <2 x i64> %wide.load96.4, %73
  %98 = getelementptr inbounds i8, ptr %0, i64 2832
  %99 = getelementptr inbounds i8, ptr %0, i64 2848
  %wide.load97.4 = load <2 x i64>, ptr %98, align 8, !tbaa !10
  %wide.load98.4 = load <2 x i64>, ptr %99, align 8, !tbaa !10
  %100 = add <2 x i64> %wide.load97.4, %76
  %101 = add <2 x i64> %wide.load98.4, %77
  %102 = getelementptr inbounds i8, ptr %0, i64 3056
  %103 = getelementptr inbounds i8, ptr %0, i64 3072
  %wide.load99.4 = load <2 x i64>, ptr %102, align 8, !tbaa !10
  %wide.load100.4 = load <2 x i64>, ptr %103, align 8, !tbaa !10
  %104 = add <2 x i64> %wide.load99.4, %80
  %105 = add <2 x i64> %wide.load100.4, %81
  %106 = getelementptr inbounds i8, ptr %0, i64 3280
  %107 = getelementptr inbounds i8, ptr %0, i64 3296
  %wide.load101.4 = load <2 x i64>, ptr %106, align 8, !tbaa !10
  %wide.load102.4 = load <2 x i64>, ptr %107, align 8, !tbaa !10
  %108 = add <2 x i64> %wide.load101.4, %84
  %109 = add <2 x i64> %wide.load102.4, %85
  %110 = getelementptr inbounds i8, ptr %0, i64 3504
  %111 = getelementptr inbounds i8, ptr %0, i64 3520
  %wide.load103.4 = load <2 x i64>, ptr %110, align 8, !tbaa !10
  %wide.load104.4 = load <2 x i64>, ptr %111, align 8, !tbaa !10
  %112 = add <2 x i64> %wide.load103.4, %88
  %113 = add <2 x i64> %wide.load104.4, %89
  %114 = getelementptr inbounds i8, ptr %0, i64 3728
  %115 = getelementptr inbounds i8, ptr %0, i64 3744
  %wide.load105.4 = load <2 x i64>, ptr %114, align 8, !tbaa !10
  %wide.load106.4 = load <2 x i64>, ptr %115, align 8, !tbaa !10
  %116 = add <2 x i64> %wide.load105.4, %92
  %117 = add <2 x i64> %wide.load106.4, %93
  %118 = getelementptr inbounds i8, ptr %0, i64 2640
  %119 = getelementptr inbounds i8, ptr %0, i64 2656
  %wide.load.5 = load <2 x i64>, ptr %118, align 8, !tbaa !10
  %wide.load96.5 = load <2 x i64>, ptr %119, align 8, !tbaa !10
  %120 = add <2 x i64> %wide.load.5, %96
  %121 = add <2 x i64> %wide.load96.5, %97
  %122 = getelementptr inbounds i8, ptr %0, i64 2864
  %123 = getelementptr inbounds i8, ptr %0, i64 2880
  %wide.load97.5 = load <2 x i64>, ptr %122, align 8, !tbaa !10
  %wide.load98.5 = load <2 x i64>, ptr %123, align 8, !tbaa !10
  %124 = add <2 x i64> %wide.load97.5, %100
  %125 = add <2 x i64> %wide.load98.5, %101
  %126 = getelementptr inbounds i8, ptr %0, i64 3088
  %127 = getelementptr inbounds i8, ptr %0, i64 3104
  %wide.load99.5 = load <2 x i64>, ptr %126, align 8, !tbaa !10
  %wide.load100.5 = load <2 x i64>, ptr %127, align 8, !tbaa !10
  %128 = add <2 x i64> %wide.load99.5, %104
  %129 = add <2 x i64> %wide.load100.5, %105
  %130 = getelementptr inbounds i8, ptr %0, i64 3312
  %131 = getelementptr inbounds i8, ptr %0, i64 3328
  %wide.load101.5 = load <2 x i64>, ptr %130, align 8, !tbaa !10
  %wide.load102.5 = load <2 x i64>, ptr %131, align 8, !tbaa !10
  %132 = add <2 x i64> %wide.load101.5, %108
  %133 = add <2 x i64> %wide.load102.5, %109
  %134 = getelementptr inbounds i8, ptr %0, i64 3536
  %135 = getelementptr inbounds i8, ptr %0, i64 3552
  %wide.load103.5 = load <2 x i64>, ptr %134, align 8, !tbaa !10
  %wide.load104.5 = load <2 x i64>, ptr %135, align 8, !tbaa !10
  %136 = add <2 x i64> %wide.load103.5, %112
  %137 = add <2 x i64> %wide.load104.5, %113
  %138 = getelementptr inbounds i8, ptr %0, i64 3760
  %139 = getelementptr inbounds i8, ptr %0, i64 3776
  %wide.load105.5 = load <2 x i64>, ptr %138, align 8, !tbaa !10
  %wide.load106.5 = load <2 x i64>, ptr %139, align 8, !tbaa !10
  %140 = add <2 x i64> %wide.load105.5, %116
  %141 = add <2 x i64> %wide.load106.5, %117
  %142 = getelementptr inbounds i8, ptr %0, i64 2672
  %143 = getelementptr inbounds i8, ptr %0, i64 2688
  %wide.load.6 = load <2 x i64>, ptr %142, align 8, !tbaa !10
  %wide.load96.6 = load <2 x i64>, ptr %143, align 8, !tbaa !10
  %144 = add <2 x i64> %wide.load.6, %120
  %145 = add <2 x i64> %wide.load96.6, %121
  %146 = getelementptr inbounds i8, ptr %0, i64 2896
  %147 = getelementptr inbounds i8, ptr %0, i64 2912
  %wide.load97.6 = load <2 x i64>, ptr %146, align 8, !tbaa !10
  %wide.load98.6 = load <2 x i64>, ptr %147, align 8, !tbaa !10
  %148 = add <2 x i64> %wide.load97.6, %124
  %149 = add <2 x i64> %wide.load98.6, %125
  %150 = getelementptr inbounds i8, ptr %0, i64 3120
  %151 = getelementptr inbounds i8, ptr %0, i64 3136
  %wide.load99.6 = load <2 x i64>, ptr %150, align 8, !tbaa !10
  %wide.load100.6 = load <2 x i64>, ptr %151, align 8, !tbaa !10
  %152 = add <2 x i64> %wide.load99.6, %128
  %153 = add <2 x i64> %wide.load100.6, %129
  %154 = getelementptr inbounds i8, ptr %0, i64 3344
  %155 = getelementptr inbounds i8, ptr %0, i64 3360
  %wide.load101.6 = load <2 x i64>, ptr %154, align 8, !tbaa !10
  %wide.load102.6 = load <2 x i64>, ptr %155, align 8, !tbaa !10
  %156 = add <2 x i64> %wide.load101.6, %132
  %157 = add <2 x i64> %wide.load102.6, %133
  %158 = getelementptr inbounds i8, ptr %0, i64 3568
  %159 = getelementptr inbounds i8, ptr %0, i64 3584
  %wide.load103.6 = load <2 x i64>, ptr %158, align 8, !tbaa !10
  %wide.load104.6 = load <2 x i64>, ptr %159, align 8, !tbaa !10
  %160 = add <2 x i64> %wide.load103.6, %136
  %161 = add <2 x i64> %wide.load104.6, %137
  %162 = getelementptr inbounds i8, ptr %0, i64 3792
  %163 = getelementptr inbounds i8, ptr %0, i64 3808
  %wide.load105.6 = load <2 x i64>, ptr %162, align 8, !tbaa !10
  %wide.load106.6 = load <2 x i64>, ptr %163, align 8, !tbaa !10
  %164 = add <2 x i64> %wide.load105.6, %140
  %165 = add <2 x i64> %wide.load106.6, %141
  %166 = add <2 x i64> %165, %164
  %bin.rdx = shl <2 x i64> %166, <i64 6, i64 6>
  %167 = tail call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %bin.rdx)
  %168 = add <2 x i64> %161, %160
  %bin.rdx107 = shl <2 x i64> %168, <i64 6, i64 6>
  %169 = tail call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %bin.rdx107)
  %170 = add <2 x i64> %157, %156
  %bin.rdx108 = shl <2 x i64> %170, <i64 6, i64 6>
  %171 = tail call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %bin.rdx108)
  %172 = add <2 x i64> %153, %152
  %bin.rdx109 = shl <2 x i64> %172, <i64 6, i64 6>
  %173 = tail call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %bin.rdx109)
  %174 = add <2 x i64> %149, %148
  %bin.rdx110 = shl <2 x i64> %174, <i64 6, i64 6>
  %175 = tail call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %bin.rdx110)
  %176 = add <2 x i64> %145, %144
  %bin.rdx111 = shl <2 x i64> %176, <i64 6, i64 6>
  %177 = tail call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %bin.rdx111)
  %178 = insertelement <2 x i64> poison, i64 %177, i64 0
  %179 = insertelement <2 x i64> %178, i64 %175, i64 1
  %180 = uitofp <2 x i64> %179 to <2 x double>
  %181 = insertelement <2 x double> poison, double %1, i64 0
  %182 = shufflevector <2 x double> %181, <2 x double> poison, <2 x i32> zeroinitializer
  %183 = fdiv <2 x double> %180, %182
  %184 = fmul <2 x double> %183, <double 0x3E10000000000000, double 0x3E10000000000000>
  store <2 x double> %184, ptr %2, align 8, !tbaa !12
  %185 = insertelement <2 x i64> poison, i64 %173, i64 0
  %186 = insertelement <2 x i64> %185, i64 %171, i64 1
  %187 = uitofp <2 x i64> %186 to <2 x double>
  %188 = fdiv <2 x double> %187, %182
  %189 = fmul <2 x double> %188, <double 0x3E10000000000000, double 0x3E10000000000000>
  store <2 x double> %189, ptr %4, align 8, !tbaa !12
  %190 = insertelement <2 x i64> poison, i64 %169, i64 0
  %191 = insertelement <2 x i64> %190, i64 %167, i64 1
  %192 = uitofp <2 x i64> %191 to <2 x double>
  %193 = fdiv <2 x double> %192, %182
  %194 = fmul <2 x double> %193, <double 0x3E10000000000000, double 0x3E10000000000000>
  store <2 x double> %194, ptr %5, align 8, !tbaa !12
  %195 = lshr exact <2 x i64> %186, <i64 6, i64 6>
  %196 = uitofp nneg <2 x i64> %195 to <2 x double>
  store <2 x double> %196, ptr %6, align 8, !tbaa !12
  %197 = lshr exact <2 x i64> %191, <i64 6, i64 6>
  %198 = uitofp nneg <2 x i64> %197 to <2 x double>
  store <2 x double> %198, ptr %7, align 8, !tbaa !12
  br label %201

199:                                              ; preds = %3
  %200 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10)
  br label %201

201:                                              ; preds = %vector.body, %199
  ret void
}

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.vector.reduce.add.v2i64(<2 x i64>) #3

attributes #0 = { nofree 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 #1 = { nofree 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 #2 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { 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, !9, i64 6288}
!6 = !{!"ctrs_uncore", !7, i64 0, !7, i64 48, !7, i64 96, !7, i64 144, !7, i64 192, !7, i64 240, !7, i64 464, !7, i64 688, !7, i64 912, !7, i64 1136, !7, i64 1360, !7, i64 1584, !7, i64 1808, !7, i64 2032, !7, i64 2256, !7, i64 2480, !7, i64 2704, !7, i64 2928, !7, i64 3152, !7, i64 3376, !7, i64 3600, !7, i64 3824, !7, i64 4048, !7, i64 4272, !7, i64 4496, !7, i64 4720, !7, i64 4944, !7, i64 5168, !7, i64 5392, !7, i64 5616, !7, i64 5840, !7, i64 6064, !9, i64 6288}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!"int", !7, i64 0}
!10 = !{!11, !11, i64 0}
!11 = !{!"long", !7, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"double", !7, i64 0}


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