[llvm] [SDP] Add statistics for global variable annotations (PR #223117)

Aiden Grossman via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 11 20:16:14 PDT 2026


https://github.com/boomanaiden154 created https://github.com/llvm/llvm-project/pull/223117

To debug profile quality problems.

>From 3ba39f75b670e25c23811e7d42b2f0ada34b98f5 Mon Sep 17 00:00:00 2001
From: Aiden Grossman <aidengrossman at google.com>
Date: Sat, 12 Sep 2026 03:15:34 +0000
Subject: [PATCH] [SDP] Add statistics for global variable annotations

To debug profile quality problems.
---
 llvm/lib/Analysis/StaticDataProfileInfo.cpp | 38 +++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/llvm/lib/Analysis/StaticDataProfileInfo.cpp b/llvm/lib/Analysis/StaticDataProfileInfo.cpp
index 5bc85173e0ea5e..e33dfe22b030d4 100644
--- a/llvm/lib/Analysis/StaticDataProfileInfo.cpp
+++ b/llvm/lib/Analysis/StaticDataProfileInfo.cpp
@@ -1,4 +1,5 @@
 #include "llvm/Analysis/StaticDataProfileInfo.h"
+#include "llvm/ADT/Statistic.h"
 #include "llvm/Analysis/ProfileSummaryInfo.h"
 #include "llvm/IR/Constant.h"
 #include "llvm/IR/Constants.h"
@@ -59,6 +60,25 @@ bool IsAnnotationOK(const GlobalVariable &GV) {
 } // namespace memprof
 } // namespace llvm
 
+STATISTIC(NumStaticDataHotFromPGOAndDAP,
+          "Number of global variables annotated as hot because PGO and DAP "
+          "data list them as hot.");
+STATISTIC(
+    NumStaticDataHotFromPGO,
+    "Number of global variables annotated as hot only because of PGO data");
+STATISTIC(NumStaticDataHotFromDAP,
+          "Number of global variables annotated as hot only because DAP data");
+STATISTIC(NumStaticDataLukewarmOrNoneFromPGOAndDAP,
+          "Number of global variables annotated as lukewarm/unknown because "
+          "PGO and DAP data both list them as lukewarm/unknown.");
+STATISTIC(NumStaticDataLukewarmOrNoneFromPGO,
+          "Number of global variables annotated as lukewarm/unknown only "
+          "because of PGO data");
+STATISTIC(NumStaticDataLukewarmOrNoneFromDAP,
+          "Number of global variables annotated as lukewarm/unknown only "
+          "because of DAP data");
+STATISTIC(NumStaticDataCold, "Number of global variables annotated as cold");
+
 void StaticDataProfileInfo::addConstantProfileCount(
     const Constant *C, std::optional<uint64_t> Count) {
   if (!Count) {
@@ -166,12 +186,30 @@ StringRef StaticDataProfileInfo::getConstantSectionPrefix(
       if (HotnessFromDataAccessProf == StaticDataHotness::Hot ||
           HotnessFromPGO == StaticDataHotness::Hot) {
         GlobalVarHotness = StaticDataHotness::Hot;
+        if (HotnessFromDataAccessProf == StaticDataHotness::Hot &&
+            HotnessFromPGO == StaticDataHotness::Hot) {
+          ++NumStaticDataHotFromPGOAndDAP;
+        } else if (HotnessFromPGO == StaticDataHotness::Hot) {
+          ++NumStaticDataHotFromPGO;
+        } else if (HotnessFromDataAccessProf == StaticDataHotness::Hot) {
+          ++NumStaticDataHotFromDAP;
+        }
       } else if (HotnessFromDataAccessProf ==
                      StaticDataHotness::LukewarmOrUnknown ||
                  HotnessFromPGO == StaticDataHotness::LukewarmOrUnknown) {
         GlobalVarHotness = StaticDataHotness::LukewarmOrUnknown;
+        if (HotnessFromDataAccessProf == StaticDataHotness::LukewarmOrUnknown &&
+            HotnessFromPGO == StaticDataHotness::LukewarmOrUnknown) {
+          ++NumStaticDataLukewarmOrNoneFromPGOAndDAP;
+        } else if (HotnessFromPGO == StaticDataHotness::LukewarmOrUnknown) {
+          ++NumStaticDataLukewarmOrNoneFromPGO;
+        } else if (HotnessFromDataAccessProf ==
+                   StaticDataHotness::LukewarmOrUnknown) {
+          ++NumStaticDataLukewarmOrNoneFromDAP;
+        }
       } else {
         GlobalVarHotness = StaticDataHotness::Cold;
+        ++NumStaticDataCold;
       }
       StringRef Prefix = hotnessToStr(GlobalVarHotness);
       LLVM_DEBUG(



More information about the llvm-commits mailing list