[llvm] 34fbf1f - [memprof] Make the AllocSites and CallSites sections optional in YAML (#156226)

via llvm-commits llvm-commits at lists.llvm.org
Sun Aug 31 07:44:07 PDT 2025


Author: Kazu Hirata
Date: 2025-08-31T07:44:02-07:00
New Revision: 34fbf1f0b79750f69d391cf9f778d8bca2ca5f05

URL: https://github.com/llvm/llvm-project/commit/34fbf1f0b79750f69d391cf9f778d8bca2ca5f05
DIFF: https://github.com/llvm/llvm-project/commit/34fbf1f0b79750f69d391cf9f778d8bca2ca5f05.diff

LOG: [memprof] Make the AllocSites and CallSites sections optional in YAML (#156226)

This patch makes the AllocSites and CallSites sections optional in the
YAML format.  This is useful for situations where a function has only
one section.

Added: 
    

Modified: 
    llvm/include/llvm/ProfileData/MemProfYAML.h
    llvm/test/tools/llvm-profdata/memprof-yaml.test

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/ProfileData/MemProfYAML.h b/llvm/include/llvm/ProfileData/MemProfYAML.h
index 87e2f0ea14487..d66e16dda51d6 100644
--- a/llvm/include/llvm/ProfileData/MemProfYAML.h
+++ b/llvm/include/llvm/ProfileData/MemProfYAML.h
@@ -217,8 +217,8 @@ template <> struct MappingTraits<memprof::CallSiteInfo> {
 template <> struct MappingTraits<memprof::GUIDMemProfRecordPair> {
   static void mapping(IO &Io, memprof::GUIDMemProfRecordPair &Pair) {
     Io.mapRequired("GUID", Pair.GUID);
-    Io.mapRequired("AllocSites", Pair.Record.AllocSites);
-    Io.mapRequired("CallSites", Pair.Record.CallSites);
+    Io.mapOptional("AllocSites", Pair.Record.AllocSites);
+    Io.mapOptional("CallSites", Pair.Record.CallSites);
   }
 };
 

diff  --git a/llvm/test/tools/llvm-profdata/memprof-yaml.test b/llvm/test/tools/llvm-profdata/memprof-yaml.test
index 18b073c44531b..6fbfbdb507f27 100644
--- a/llvm/test/tools/llvm-profdata/memprof-yaml.test
+++ b/llvm/test/tools/llvm-profdata/memprof-yaml.test
@@ -13,6 +13,18 @@
 ; RUN: llvm-profdata show --memory %t/memprof-out-v3.indexed > %t/memprof-out-v3.yaml
 ; RUN: 
diff  -b %t/memprof-out-v3.yaml %t/memprof-in-v3.yaml
 
+; Make sure we can ingest a YAML profile containing AllocSites only.
+; That is, CallSites are missing.
+; RUN: llvm-profdata merge --memprof-version=4 %t/memprof-in-alloc-sites-only.yaml -o %t/memprof-out-alloc-sites-only.indexed
+; RUN: llvm-profdata show --memory %t/memprof-out-alloc-sites-only.indexed > %t/memprof-out-alloc-sites-only.yaml
+; RUN: 
diff  -b %t/memprof-out-alloc-sites-only.yaml %t/memprof-in-alloc-sites-only.yaml
+
+; Make sure we can ingest a YAML profile containing CallSites only.
+; That is, AllocSites are missing.
+; RUN: llvm-profdata merge --memprof-version=4 %t/memprof-in-call-sites-only.yaml -o %t/memprof-out-call-sites-only.indexed
+; RUN: llvm-profdata show --memory %t/memprof-out-call-sites-only.indexed > %t/memprof-out-call-sites-only.yaml
+; RUN: 
diff  -b %t/memprof-out-call-sites-only.yaml %t/memprof-in-call-sites-only.yaml
+
 ; memprof-in-no-dap.yaml has empty data access profiles.
 ; RUN: llvm-profdata merge --memprof-version=4 %t/memprof-in-no-dap.yaml -o %t/memprof-out.indexed
 ; RUN: llvm-profdata show --memory %t/memprof-out.indexed > %t/memprof-out-no-dap.yaml
@@ -117,6 +129,58 @@ HeapProfileRecords:
         - { Function: 0x7777777777777777, LineOffset: 77, Column: 70, IsInlineFrame: true }
         - { Function: 0x8888888888888888, LineOffset: 88, Column: 80, IsInlineFrame: false }
 ...
+;--- memprof-in-alloc-sites-only.yaml
+---
+# MemProfSummary:
+#   Total contexts: 2
+#   Total cold contexts: 0
+#   Total hot contexts: 0
+#   Maximum cold context total size: 0
+#   Maximum warm context total size: 666
+#   Maximum hot context total size: 0
+---
+HeapProfileRecords:
+  - GUID:            0xdeadbeef12345678
+    AllocSites:
+      - Callstack:
+          - { Function: 0x1111111111111111, LineOffset: 11, Column: 10, IsInlineFrame: true }
+          - { Function: 0x2222222222222222, LineOffset: 22, Column: 20, IsInlineFrame: false }
+        MemInfoBlock:
+          AllocCount:      111
+          TotalSize:       222
+          TotalLifetime:   333
+          TotalLifetimeAccessDensity: 444
+      - Callstack:
+          - { Function: 0x3333333333333333, LineOffset: 33, Column: 30, IsInlineFrame: false }
+          - { Function: 0x4444444444444444, LineOffset: 44, Column: 40, IsInlineFrame: true }
+        MemInfoBlock:
+          AllocCount:      555
+          TotalSize:       666
+          TotalLifetime:   777
+          TotalLifetimeAccessDensity: 888
+...
+;--- memprof-in-call-sites-only.yaml
+---
+# MemProfSummary:
+#   Total contexts: 0
+#   Total cold contexts: 0
+#   Total hot contexts: 0
+#   Maximum cold context total size: 0
+#   Maximum warm context total size: 0
+#   Maximum hot context total size: 0
+---
+HeapProfileRecords:
+  - GUID:            0xdeadbeef12345678
+    CallSites:
+      - Frames:
+        - { Function: 0x5555555555555555, LineOffset: 55, Column: 50, IsInlineFrame: true }
+        - { Function: 0x6666666666666666, LineOffset: 66, Column: 60, IsInlineFrame: false }
+        CalleeGuids: [ 0x100, 0x200 ]
+      - Frames:
+        - { Function: 0x7777777777777777, LineOffset: 77, Column: 70, IsInlineFrame: true }
+        - { Function: 0x8888888888888888, LineOffset: 88, Column: 80, IsInlineFrame: false }
+        CalleeGuids: [ 0x300 ]
+...
 ;--- memprof-in-no-dap.yaml
 ---
 # MemProfSummary:


        


More information about the llvm-commits mailing list