-
Notifications
You must be signed in to change notification settings - Fork 15.3k
[memprof] Update YAML traits for writer purposes #118720
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
For Frames, we prefer the inline notation for the brevity. For PortableMemInfoBlock, we go through all member fields and print out those that are populated.
|
@llvm/pr-subscribers-pgo Author: Kazu Hirata (kazutakahirata) ChangesFor Frames, we prefer the inline notation for the brevity. For PortableMemInfoBlock, we go through all member fields and print Full diff: https://github.com/llvm/llvm-project/pull/118720.diff 2 Files Affected:
diff --git a/llvm/include/llvm/ProfileData/MemProf.h b/llvm/include/llvm/ProfileData/MemProf.h
index fe017913f6de24..88666087007c91 100644
--- a/llvm/include/llvm/ProfileData/MemProf.h
+++ b/llvm/include/llvm/ProfileData/MemProf.h
@@ -1177,6 +1177,11 @@ template <> struct MappingTraits<memprof::Frame> {
(void)Column;
(void)IsInlineFrame;
}
+
+ // Request the inline notation for brevity:
+ //
+ // { Function: 123, LineOffset: 11, Column: 10; IsInlineFrame: true }
+ static const bool flow = true;
};
template <> struct CustomMappingTraits<memprof::PortableMemInfoBlock> {
@@ -1201,8 +1206,13 @@ template <> struct CustomMappingTraits<memprof::PortableMemInfoBlock> {
Io.setError("Key is not a valid validation event");
}
- static void output(IO &Io, memprof::PortableMemInfoBlock &VI) {
- llvm_unreachable("To be implemented");
+ static void output(IO &Io, memprof::PortableMemInfoBlock &MIB) {
+ auto Schema = MIB.getSchema();
+#define MIBEntryDef(NameTag, Name, Type) \
+ if (Schema.test(llvm::to_underlying(memprof::Meta::Name))) \
+ Io.mapRequired(#Name, MIB.Name);
+#include "llvm/ProfileData/MIBEntryDef.inc"
+#undef MIBEntryDef
}
};
diff --git a/llvm/unittests/ProfileData/MemProfTest.cpp b/llvm/unittests/ProfileData/MemProfTest.cpp
index 2f8589bbfbb962..0f3af93b096852 100644
--- a/llvm/unittests/ProfileData/MemProfTest.cpp
+++ b/llvm/unittests/ProfileData/MemProfTest.cpp
@@ -807,4 +807,38 @@ TEST(MemProf, YAMLParser) {
EXPECT_THAT(Record.CallSiteIds,
ElementsAre(hashCallStack(CS3), hashCallStack(CS4)));
}
+
+TEST(MemProf, YAMLWriterFrame) {
+ Frame F(12, 34, 56, true);
+
+ std::string Out;
+ llvm::raw_string_ostream OS(Out);
+ llvm::yaml::Output Yout(OS);
+ Yout << F;
+ EXPECT_EQ(Out, R"YAML(---
+{ Function: 12, LineOffset: 34, Column: 56, Inline: true }
+...
+)YAML");
+}
+
+TEST(MemProf, YAMLWriterMIB) {
+ MemInfoBlock MIB;
+ MIB.AllocCount = 111;
+ MIB.TotalSize = 222;
+ MIB.TotalLifetime = 333;
+ MIB.TotalLifetimeAccessDensity = 444;
+ PortableMemInfoBlock PMIB(MIB, llvm::memprof::getHotColdSchema());
+
+ std::string Out;
+ llvm::raw_string_ostream OS(Out);
+ llvm::yaml::Output Yout(OS);
+ Yout << PMIB;
+ EXPECT_EQ(Out, R"YAML(---
+AllocCount: 111
+TotalSize: 222
+TotalLifetime: 333
+TotalLifetimeAccessDensity: 444
+...
+)YAML");
+}
} // namespace
|
|
@kazutakahirata, this seems to fail to build on macOS, can you take a look? |
|
Reverted for now as this has been breaking macOS builds for 8+ hours |
For Frames, we prefer the inline notation for the brevity. For PortableMemInfoBlock, we go through all member fields and print out those that are populated. This iteration works around the unavailability of ScalarTraits<uintptr_t> on macOS.
|
Great thanks! Would also be good if you could keep an eye out for build failures from the build bots. I think https://lab.llvm.org/buildbot/#/builders/190 and https://lab.llvm.org/buildbot/#/builders/23/builds/5491 should send emails, Green Dragon unfortunately doesn't at the moment :( |
For Frames, we prefer the inline notation for the brevity.
For PortableMemInfoBlock, we go through all member fields and print
out those that are populated.