[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