[llvm-branch-commits] [llvm] [ctx_prof] Add support for ICP (PR #105469)
Snehasish Kumar via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon Aug 26 22:57:34 PDT 2024
================
@@ -456,3 +463,170 @@ declare void @_ZN5Base35func3Ev(ptr)
// 1 call instruction from the entry block.
EXPECT_EQ(F->front().size(), OrigEntryBBSize + 4);
}
+
+using namespace llvm::ctx_profile;
+
+class ContextManager final {
+ std::vector<std::unique_ptr<char[]>> Nodes;
+ std::map<GUID, const ContextNode *> Roots;
+
+public:
+ ContextNode *createNode(GUID Guid, uint32_t NrCounters, uint32_t NrCallsites,
+ ContextNode *Next = nullptr) {
+ auto AllocSize = ContextNode::getAllocSize(NrCounters, NrCallsites);
+ auto *Mem = Nodes.emplace_back(std::make_unique<char[]>(AllocSize)).get();
+ std::memset(Mem, 0, AllocSize);
----------------
snehasish wrote:
I think you don't need the memset here.
The make_unique above will zero initialize the memory. See the documentation at https://en.cppreference.com/w/cpp/memory/unique_ptr/make_unique
"2) Constructs an array of the given dynamic size. The array elements are value-initialized. This overload participates in overload resolution only if T is an array of unknown bound."
Also most (all?) implementations of placement new will zero out the memory before constructing the object as far as I remember.
https://github.com/llvm/llvm-project/pull/105469
More information about the llvm-branch-commits
mailing list