[clang] [clang][bytecode] Make memory output of Program::dump more accurate (PR #188925)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Mar 27 01:34:39 PDT 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Timm Baeder (tbaederr)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/188925.diff
1 Files Affected:
- (modified) clang/lib/AST/ByteCode/Disasm.cpp (+36-2)
``````````diff
diff --git a/clang/lib/AST/ByteCode/Disasm.cpp b/clang/lib/AST/ByteCode/Disasm.cpp
index 5fd15f8a2f0d1..6bb78bb45719c 100644
--- a/clang/lib/AST/ByteCode/Disasm.cpp
+++ b/clang/lib/AST/ByteCode/Disasm.cpp
@@ -313,6 +313,23 @@ static const char *primTypeToString(PrimType T) {
llvm_unreachable("Unhandled PrimType");
}
+static std::string formatBytes(size_t B) {
+ std::string Result;
+ llvm::raw_string_ostream SS(Result);
+
+ if (B < (1u << 10u))
+ SS << B << " B";
+ else if (B < (1u << 20u))
+ SS << llvm::formatv("{0:F2}", B / 1024.) << " KB";
+ else if (B < (1u << 30u))
+ SS << llvm::formatv("{0:F2}", B / 1024. / 1024.) << " MB";
+ else if (B < (static_cast<size_t>(1) << 40u))
+ SS << llvm::formatv("{0:F2}", B / 1024. / 1024. / 1024.) << " GB";
+ else
+ SS << B << " B";
+ return Result;
+}
+
LLVM_DUMP_METHOD void Program::dump(llvm::raw_ostream &OS) const {
{
ColorScope SC(OS, true, {llvm::raw_ostream::BRIGHT_RED, true});
@@ -321,8 +338,25 @@ LLVM_DUMP_METHOD void Program::dump(llvm::raw_ostream &OS) const {
{
ColorScope SC(OS, true, {llvm::raw_ostream::WHITE, true});
- OS << "Total memory : " << Allocator.getTotalMemory() << " bytes\n";
- OS << "Global Variables: " << Globals.size() << "\n";
+ size_t Bytes = 0;
+ Bytes += Allocator.getTotalMemory();
+ // All the maps.
+ Bytes += GlobalIndices.getMemorySize();
+ Bytes += Records.getMemorySize();
+ Bytes += DummyVariables.getMemorySize();
+
+ // All Records.
+ for (const Record *R : Records.values()) {
+ Bytes += sizeof(Record) + R->BaseMap.getMemorySize() +
+ R->VirtualBaseMap.getMemorySize();
+ Bytes += R->Fields.capacity_in_bytes() + R->Bases.capacity_in_bytes() +
+ R->VirtualBases.capacity_in_bytes();
+ }
+
+ // Globals are allocated via the allocator, so already counted.
+
+ OS << "Total memory : " << formatBytes(Bytes) << '\n';
+ OS << "Global Variables: " << Globals.size() << '\n';
}
unsigned GI = 0;
for (const Global *G : Globals) {
``````````
</details>
https://github.com/llvm/llvm-project/pull/188925
More information about the cfe-commits
mailing list