; 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.perf_core_fd = type { [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], i32 }

@.str.7 = external hidden unnamed_addr constant [17 x i8], align 1
@gbl_core_perf_fd = external hidden global %struct.perf_core_fd, align 4

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

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

; Function Attrs: nounwind
declare i32 @sprintf(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) #1

; Function Attrs: nounwind uwtable
define dso_local void @setup_core_ctrs(i32 noundef %0) #0 {
  %2 = alloca i32, align 4
  %3 = alloca [1024 x i8], align 16
  %4 = alloca i32, align 4
  store i32 %0, ptr %2, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1024, ptr %3) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #3
  %5 = getelementptr inbounds [1024 x i8], ptr %3, i64 0, i64 0
  %6 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %5, ptr noundef @.str.7) #3
  store i32 0, ptr %4, align 4, !tbaa !5
  br label %7

7:                                                ; preds = %101, %1
  %8 = load i32, ptr %4, align 4, !tbaa !5
  %9 = icmp slt i32 %8, 28
  br i1 %9, label %10, label %104

10:                                               ; preds = %7
  %11 = load i32, ptr %2, align 4, !tbaa !5
  %12 = icmp eq i32 %11, 0
  br i1 %12, label %13, label %24

13:                                               ; preds = %10
  %14 = getelementptr inbounds [1024 x i8], ptr %3, i64 0, i64 0
  %15 = load i32, ptr %4, align 4, !tbaa !5
  %16 = sext i32 %15 to i64
  %17 = getelementptr inbounds [28 x i32], ptr @gbl_core_perf_fd, i64 0, i64 %16
  %18 = load i32, ptr %4, align 4, !tbaa !5
  call void @evsetup(ptr noundef %14, ptr noundef %17, i32 noundef 60, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef %18)
  %19 = getelementptr inbounds [1024 x i8], ptr %3, i64 0, i64 0
  %20 = load i32, ptr %4, align 4, !tbaa !5
  %21 = sext i32 %20 to i64
  %22 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_core_fd, ptr @gbl_core_perf_fd, i32 0, i32 1), i64 0, i64 %21
  %23 = load i32, ptr %4, align 4, !tbaa !5
  call void @evsetup(ptr noundef %19, ptr noundef %22, i32 noundef 192, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef %23)
  br label %100

24:                                               ; preds = %10
  %25 = load i32, ptr %2, align 4, !tbaa !5
  %26 = icmp eq i32 %25, 1
  br i1 %26, label %27, label %63

27:                                               ; preds = %24
  %28 = getelementptr inbounds [1024 x i8], ptr %3, i64 0, i64 0
  %29 = load i32, ptr %4, align 4, !tbaa !5
  %30 = sext i32 %29 to i64
  %31 = getelementptr inbounds [28 x i32], ptr @gbl_core_perf_fd, i64 0, i64 %30
  %32 = load i32, ptr %4, align 4, !tbaa !5
  call void @evsetup(ptr noundef %28, ptr noundef %31, i32 noundef 60, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef %32)
  %33 = getelementptr inbounds [1024 x i8], ptr %3, i64 0, i64 0
  %34 = load i32, ptr %4, align 4, !tbaa !5
  %35 = sext i32 %34 to i64
  %36 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_core_fd, ptr @gbl_core_perf_fd, i32 0, i32 1), i64 0, i64 %35
  %37 = load i32, ptr %4, align 4, !tbaa !5
  call void @evsetup(ptr noundef %33, ptr noundef %36, i32 noundef 192, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef %37)
  %38 = getelementptr inbounds [1024 x i8], ptr %3, i64 0, i64 0
  %39 = load i32, ptr %4, align 4, !tbaa !5
  %40 = sext i32 %39 to i64
  %41 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_core_fd, ptr @gbl_core_perf_fd, i32 0, i32 2), i64 0, i64 %40
  %42 = load i32, ptr %4, align 4, !tbaa !5
  call void @evsetup(ptr noundef %38, ptr noundef %41, i32 noundef 241, i32 noundef 31, i32 noundef 0, i32 noundef 0, i32 noundef %42)
  %43 = getelementptr inbounds [1024 x i8], ptr %3, i64 0, i64 0
  %44 = load i32, ptr %4, align 4, !tbaa !5
  %45 = sext i32 %44 to i64
  %46 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_core_fd, ptr @gbl_core_perf_fd, i32 0, i32 3), i64 0, i64 %45
  %47 = load i32, ptr %4, align 4, !tbaa !5
  call void @evsetup(ptr noundef %43, ptr noundef %46, i32 noundef 242, i32 noundef 1, i32 noundef 0, i32 noundef 0, i32 noundef %47)
  %48 = getelementptr inbounds [1024 x i8], ptr %3, i64 0, i64 0
  %49 = load i32, ptr %4, align 4, !tbaa !5
  %50 = sext i32 %49 to i64
  %51 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_core_fd, ptr @gbl_core_perf_fd, i32 0, i32 4), i64 0, i64 %50
  %52 = load i32, ptr %4, align 4, !tbaa !5
  call void @evsetup(ptr noundef %48, ptr noundef %51, i32 noundef 242, i32 noundef 2, i32 noundef 0, i32 noundef 0, i32 noundef %52)
  %53 = getelementptr inbounds [1024 x i8], ptr %3, i64 0, i64 0
  %54 = load i32, ptr %4, align 4, !tbaa !5
  %55 = sext i32 %54 to i64
  %56 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_core_fd, ptr @gbl_core_perf_fd, i32 0, i32 5), i64 0, i64 %55
  %57 = load i32, ptr %4, align 4, !tbaa !5
  call void @evsetup(ptr noundef %53, ptr noundef %56, i32 noundef 254, i32 noundef 2, i32 noundef 0, i32 noundef 0, i32 noundef %57)
  %58 = getelementptr inbounds [1024 x i8], ptr %3, i64 0, i64 0
  %59 = load i32, ptr %4, align 4, !tbaa !5
  %60 = sext i32 %59 to i64
  %61 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_core_fd, ptr @gbl_core_perf_fd, i32 0, i32 6), i64 0, i64 %60
  %62 = load i32, ptr %4, align 4, !tbaa !5
  call void @evsetup(ptr noundef %58, ptr noundef %61, i32 noundef 254, i32 noundef 4, i32 noundef 0, i32 noundef 0, i32 noundef %62)
  br label %99

63:                                               ; preds = %24
  %64 = load i32, ptr %2, align 4, !tbaa !5
  %65 = icmp eq i32 %64, 2
  br i1 %65, label %66, label %97

66:                                               ; preds = %63
  %67 = getelementptr inbounds [1024 x i8], ptr %3, i64 0, i64 0
  %68 = load i32, ptr %4, align 4, !tbaa !5
  %69 = sext i32 %68 to i64
  %70 = getelementptr inbounds [28 x i32], ptr @gbl_core_perf_fd, i64 0, i64 %69
  %71 = load i32, ptr %4, align 4, !tbaa !5
  call void @evsetup(ptr noundef %67, ptr noundef %70, i32 noundef 60, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef %71)
  %72 = getelementptr inbounds [1024 x i8], ptr %3, i64 0, i64 0
  %73 = load i32, ptr %4, align 4, !tbaa !5
  %74 = sext i32 %73 to i64
  %75 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_core_fd, ptr @gbl_core_perf_fd, i32 0, i32 1), i64 0, i64 %74
  %76 = load i32, ptr %4, align 4, !tbaa !5
  call void @evsetup(ptr noundef %72, ptr noundef %75, i32 noundef 192, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef %76)
  %77 = getelementptr inbounds [1024 x i8], ptr %3, i64 0, i64 0
  %78 = load i32, ptr %4, align 4, !tbaa !5
  %79 = sext i32 %78 to i64
  %80 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_core_fd, ptr @gbl_core_perf_fd, i32 0, i32 7), i64 0, i64 %79
  %81 = load i32, ptr %4, align 4, !tbaa !5
  call void @evsetup(ptr noundef %77, ptr noundef %80, i32 noundef 239, i32 noundef 1, i32 noundef 0, i32 noundef 0, i32 noundef %81)
  %82 = getelementptr inbounds [1024 x i8], ptr %3, i64 0, i64 0
  %83 = load i32, ptr %4, align 4, !tbaa !5
  %84 = sext i32 %83 to i64
  %85 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_core_fd, ptr @gbl_core_perf_fd, i32 0, i32 8), i64 0, i64 %84
  %86 = load i32, ptr %4, align 4, !tbaa !5
  call void @evsetup(ptr noundef %82, ptr noundef %85, i32 noundef 239, i32 noundef 2, i32 noundef 0, i32 noundef 0, i32 noundef %86)
  %87 = getelementptr inbounds [1024 x i8], ptr %3, i64 0, i64 0
  %88 = load i32, ptr %4, align 4, !tbaa !5
  %89 = sext i32 %88 to i64
  %90 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_core_fd, ptr @gbl_core_perf_fd, i32 0, i32 9), i64 0, i64 %89
  %91 = load i32, ptr %4, align 4, !tbaa !5
  call void @evsetup(ptr noundef %87, ptr noundef %90, i32 noundef 239, i32 noundef 16, i32 noundef 0, i32 noundef 0, i32 noundef %91)
  %92 = getelementptr inbounds [1024 x i8], ptr %3, i64 0, i64 0
  %93 = load i32, ptr %4, align 4, !tbaa !5
  %94 = sext i32 %93 to i64
  %95 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (%struct.perf_core_fd, ptr @gbl_core_perf_fd, i32 0, i32 10), i64 0, i64 %94
  %96 = load i32, ptr %4, align 4, !tbaa !5
  call void @evsetup(ptr noundef %92, ptr noundef %95, i32 noundef 239, i32 noundef 32, i32 noundef 0, i32 noundef 0, i32 noundef %96)
  br label %98

97:                                               ; preds = %63
  br label %98

98:                                               ; preds = %97, %66
  br label %99

99:                                               ; preds = %98, %27
  br label %100

100:                                              ; preds = %99, %13
  br label %101

101:                                              ; preds = %100
  %102 = load i32, ptr %4, align 4, !tbaa !5
  %103 = add nsw i32 %102, 1
  store i32 %103, ptr %4, align 4, !tbaa !5
  br label %7, !llvm.loop !9

104:                                              ; preds = %7
  %105 = load i32, ptr %2, align 4, !tbaa !5
  store i32 %105, ptr getelementptr inbounds (%struct.perf_core_fd, ptr @gbl_core_perf_fd, i32 0, i32 11), align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #3
  call void @llvm.lifetime.end.p0(i64 1024, ptr %3) #3
  ret void
}

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nounwind "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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = !{!12, !6, i64 1232}
!12 = !{!"perf_core_fd", !7, i64 0, !7, i64 112, !7, i64 224, !7, i64 336, !7, i64 448, !7, i64 560, !7, i64 672, !7, i64 784, !7, i64 896, !7, i64 1008, !7, i64 1120, !6, i64 1232}


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

%struct.perf_core_fd = type { [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], [28 x i32], i32 }

@.str.7 = external hidden unnamed_addr constant [17 x i8], align 1
@gbl_core_perf_fd = external hidden global %struct.perf_core_fd, align 4

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

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

; Function Attrs: nofree nounwind
declare noundef i32 @sprintf(ptr noalias nocapture noundef writeonly, ptr nocapture noundef readonly, ...) 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) #1

; Function Attrs: nounwind uwtable
define dso_local void @setup_core_ctrs(i32 noundef %0) local_unnamed_addr #0 {
  %2 = alloca [1024 x i8], align 16
  call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %2) #3
  %3 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %2, ptr noundef nonnull dereferenceable(1) @.str.7) #3
  switch i32 %0, label %.split39.us [
    i32 0, label %.split.us
    i32 1, label %.split.us40
    i32 2, label %.split.us42
  ]

.split.us:                                        ; preds = %1, %.split.us
  %indvars.iv52 = phi i64 [ %indvars.iv.next53, %.split.us ], [ 0, %1 ]
  %4 = getelementptr inbounds [28 x i32], ptr @gbl_core_perf_fd, i64 0, i64 %indvars.iv52
  %5 = trunc nuw nsw i64 %indvars.iv52 to i32
  call void @evsetup(ptr noundef nonnull %2, ptr noundef nonnull %4, i32 noundef 60, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef %5)
  %6 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (i8, ptr @gbl_core_perf_fd, i64 112), i64 0, i64 %indvars.iv52
  call void @evsetup(ptr noundef nonnull %2, ptr noundef nonnull %6, i32 noundef 192, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef %5)
  %indvars.iv.next53 = add nuw nsw i64 %indvars.iv52, 1
  %exitcond55.not = icmp eq i64 %indvars.iv.next53, 28
  br i1 %exitcond55.not, label %.split39.us, label %.split.us, !llvm.loop !5

.split.us40:                                      ; preds = %1, %.split.us40
  %indvars.iv48 = phi i64 [ %indvars.iv.next49, %.split.us40 ], [ 0, %1 ]
  %7 = getelementptr inbounds [28 x i32], ptr @gbl_core_perf_fd, i64 0, i64 %indvars.iv48
  %8 = trunc nuw nsw i64 %indvars.iv48 to i32
  call void @evsetup(ptr noundef nonnull %2, ptr noundef nonnull %7, i32 noundef 60, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef %8)
  %9 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (i8, ptr @gbl_core_perf_fd, i64 112), i64 0, i64 %indvars.iv48
  call void @evsetup(ptr noundef nonnull %2, ptr noundef nonnull %9, i32 noundef 192, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef %8)
  %10 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (i8, ptr @gbl_core_perf_fd, i64 224), i64 0, i64 %indvars.iv48
  call void @evsetup(ptr noundef nonnull %2, ptr noundef nonnull %10, i32 noundef 241, i32 noundef 31, i32 noundef 0, i32 noundef 0, i32 noundef %8)
  %11 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (i8, ptr @gbl_core_perf_fd, i64 336), i64 0, i64 %indvars.iv48
  call void @evsetup(ptr noundef nonnull %2, ptr noundef nonnull %11, i32 noundef 242, i32 noundef 1, i32 noundef 0, i32 noundef 0, i32 noundef %8)
  %12 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (i8, ptr @gbl_core_perf_fd, i64 448), i64 0, i64 %indvars.iv48
  call void @evsetup(ptr noundef nonnull %2, ptr noundef nonnull %12, i32 noundef 242, i32 noundef 2, i32 noundef 0, i32 noundef 0, i32 noundef %8)
  %13 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (i8, ptr @gbl_core_perf_fd, i64 560), i64 0, i64 %indvars.iv48
  call void @evsetup(ptr noundef nonnull %2, ptr noundef nonnull %13, i32 noundef 254, i32 noundef 2, i32 noundef 0, i32 noundef 0, i32 noundef %8)
  %14 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (i8, ptr @gbl_core_perf_fd, i64 672), i64 0, i64 %indvars.iv48
  call void @evsetup(ptr noundef nonnull %2, ptr noundef nonnull %14, i32 noundef 254, i32 noundef 4, i32 noundef 0, i32 noundef 0, i32 noundef %8)
  %indvars.iv.next49 = add nuw nsw i64 %indvars.iv48, 1
  %exitcond51.not = icmp eq i64 %indvars.iv.next49, 28
  br i1 %exitcond51.not, label %.split39.us, label %.split.us40, !llvm.loop !5

.split.us42:                                      ; preds = %1, %.split.us42
  %indvars.iv = phi i64 [ %indvars.iv.next, %.split.us42 ], [ 0, %1 ]
  %15 = getelementptr inbounds [28 x i32], ptr @gbl_core_perf_fd, i64 0, i64 %indvars.iv
  %16 = trunc nuw nsw i64 %indvars.iv to i32
  call void @evsetup(ptr noundef nonnull %2, ptr noundef nonnull %15, i32 noundef 60, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef %16)
  %17 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (i8, ptr @gbl_core_perf_fd, i64 112), i64 0, i64 %indvars.iv
  call void @evsetup(ptr noundef nonnull %2, ptr noundef nonnull %17, i32 noundef 192, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef %16)
  %18 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (i8, ptr @gbl_core_perf_fd, i64 784), i64 0, i64 %indvars.iv
  call void @evsetup(ptr noundef nonnull %2, ptr noundef nonnull %18, i32 noundef 239, i32 noundef 1, i32 noundef 0, i32 noundef 0, i32 noundef %16)
  %19 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (i8, ptr @gbl_core_perf_fd, i64 896), i64 0, i64 %indvars.iv
  call void @evsetup(ptr noundef nonnull %2, ptr noundef nonnull %19, i32 noundef 239, i32 noundef 2, i32 noundef 0, i32 noundef 0, i32 noundef %16)
  %20 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (i8, ptr @gbl_core_perf_fd, i64 1008), i64 0, i64 %indvars.iv
  call void @evsetup(ptr noundef nonnull %2, ptr noundef nonnull %20, i32 noundef 239, i32 noundef 16, i32 noundef 0, i32 noundef 0, i32 noundef %16)
  %21 = getelementptr inbounds [28 x i32], ptr getelementptr inbounds (i8, ptr @gbl_core_perf_fd, i64 1120), i64 0, i64 %indvars.iv
  call void @evsetup(ptr noundef nonnull %2, ptr noundef nonnull %21, i32 noundef 239, i32 noundef 32, i32 noundef 0, i32 noundef 0, i32 noundef %16)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, 28
  br i1 %exitcond.not, label %.split39.us, label %.split.us42, !llvm.loop !5

.split39.us:                                      ; preds = %.split.us42, %.split.us40, %.split.us, %1
  store i32 %0, ptr getelementptr inbounds (i8, ptr @gbl_core_perf_fd, i64 1232), align 4, !tbaa !7
  call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %2) #3
  ret void
}

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #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 = distinct !{!5, !6}
!6 = !{!"llvm.loop.mustprogress"}
!7 = !{!8, !11, i64 1232}
!8 = !{!"perf_core_fd", !9, i64 0, !9, i64 112, !9, i64 224, !9, i64 336, !9, i64 448, !9, i64 560, !9, i64 672, !9, i64 784, !9, i64 896, !9, i64 1008, !9, i64 1120, !11, i64 1232}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C/C++ TBAA"}
!11 = !{!"int", !9, i64 0}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,SROAPass,SimplifyCFGPass