[llvm] 03bf59d - Revert "[MemProf] Context disambiguation cloning pass [patch 2/3]"
Teresa Johnson via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 21 14:38:29 PDT 2023
Author: Teresa Johnson
Date: 2023-04-21T14:37:42-07:00
New Revision: 03bf59d275a16815dc5a2e3f279815554f7cd0ca
URL: https://github.com/llvm/llvm-project/commit/03bf59d275a16815dc5a2e3f279815554f7cd0ca
DIFF: https://github.com/llvm/llvm-project/commit/03bf59d275a16815dc5a2e3f279815554f7cd0ca.diff
LOG: Revert "[MemProf] Context disambiguation cloning pass [patch 2/3]"
This reverts commit d0649a6ad8be778abf7569f502148d577f8bc6f1.
Reverting due to a number of bot failures that need investigation.
Added:
Modified:
llvm/include/llvm/IR/ModuleSummaryIndex.h
llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp
llvm/test/ThinLTO/X86/memprof-basic.ll
llvm/test/ThinLTO/X86/memprof-duplicate-context-ids.ll
llvm/test/ThinLTO/X86/memprof-indirectcall.ll
llvm/test/ThinLTO/X86/memprof-inlined.ll
llvm/test/Transforms/MemProfContextDisambiguation/basic.ll
llvm/test/Transforms/MemProfContextDisambiguation/duplicate-context-ids.ll
llvm/test/Transforms/MemProfContextDisambiguation/indirectcall.ll
llvm/test/Transforms/MemProfContextDisambiguation/inlined.ll
Removed:
################################################################################
diff --git a/llvm/include/llvm/IR/ModuleSummaryIndex.h b/llvm/include/llvm/IR/ModuleSummaryIndex.h
index c540fa5b4ba14..39f44791921aa 100644
--- a/llvm/include/llvm/IR/ModuleSummaryIndex.h
+++ b/llvm/include/llvm/IR/ModuleSummaryIndex.h
@@ -341,12 +341,7 @@ inline raw_ostream &operator<<(raw_ostream &OS, const CallsiteInfo &SNI) {
// Values should be powers of two so that they can be ORed, in particular to
// track allocations that have
diff erent behavior with
diff erent calling
// contexts.
-enum class AllocationType : uint8_t {
- None = 0,
- NotCold = 1,
- Cold = 2,
- All = 3 // This should always be set to the OR of all values.
-};
+enum class AllocationType : uint8_t { None = 0, NotCold = 1, Cold = 2 };
/// Summary of a single MIB in a memprof metadata on allocations.
struct MIBInfo {
diff --git a/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp b/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp
index 3fbf47d2852c6..f9ad2d30d07b9 100644
--- a/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp
+++ b/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp
@@ -67,6 +67,22 @@ static cl::opt<bool>
VerifyNodes("memprof-verify-nodes", cl::init(false), cl::Hidden,
cl::desc("Perform frequent verification checks on nodes."));
+inline bool hasSingleAllocType(uint8_t AllocTypes) {
+ switch (AllocTypes) {
+ case (uint8_t)AllocationType::Cold:
+ case (uint8_t)AllocationType::NotCold:
+ return true;
+ break;
+ case (uint8_t)AllocationType::None:
+ assert(false);
+ break;
+ default:
+ return false;
+ break;
+ }
+ llvm_unreachable("invalid alloc type");
+}
+
/// CRTP base for graphs built from either IR or ThinLTO summary index.
///
/// The graph represents the call contexts in all memprof metadata on allocation
@@ -91,10 +107,6 @@ class CallsiteContextGraph {
/// Main entry point to perform analysis and transformations on graph.
bool process();
- /// Perform cloning on the graph necessary to uniquely identify the allocation
- /// behavior of an allocation based on its context.
- void identifyClones();
-
void dump() const;
void print(raw_ostream &OS) const;
@@ -202,15 +214,16 @@ class CallsiteContextGraph {
ContextNode(bool IsAllocation, CallInfo C)
: IsAllocation(IsAllocation), Call(C) {}
- void addClone(ContextNode *Clone) {
+ std::unique_ptr<ContextNode> clone() {
+ auto Clone = std::make_unique<ContextNode>(IsAllocation, Call);
if (CloneOf) {
- CloneOf->Clones.push_back(Clone);
+ CloneOf->Clones.push_back(Clone.get());
Clone->CloneOf = CloneOf;
} else {
- Clones.push_back(Clone);
- assert(!Clone->CloneOf);
+ Clones.push_back(Clone.get());
Clone->CloneOf = this;
}
+ return Clone;
}
ContextNode *getOrigNode() {
@@ -279,10 +292,6 @@ class CallsiteContextGraph {
}
};
- /// Helper to remove callee edges that have allocation type None (due to not
- /// carrying any context ids) after transformations.
- void removeNoneTypeCalleeEdges(ContextNode *Node);
-
protected:
/// Get a list of nodes corresponding to the stack ids in the given callsite
/// context.
@@ -394,40 +403,6 @@ class CallsiteContextGraph {
/// unioning their recorded alloc types.
uint8_t computeAllocType(DenseSet<uint32_t> &ContextIds);
- /// Returns the alloction type of the intersection of the contexts of two
- /// nodes (based on their provided context id sets), optimized for the case
- /// when Node1Ids is smaller than Node2Ids.
- uint8_t intersectAllocTypesImpl(const DenseSet<uint32_t> &Node1Ids,
- const DenseSet<uint32_t> &Node2Ids);
-
- /// Returns the alloction type of the intersection of the contexts of two
- /// nodes (based on their provided context id sets).
- uint8_t intersectAllocTypes(const DenseSet<uint32_t> &Node1Ids,
- const DenseSet<uint32_t> &Node2Ids);
-
- /// Create a clone of Edge's callee and move Edge to that new callee node,
- /// performing the necessary context id and allocation type updates.
- /// If callee's caller edge iterator is supplied, it is updated when removing
- /// the edge from that list.
- ContextNode *
- moveEdgeToNewCalleeClone(const std::shared_ptr<ContextEdge> &Edge,
- EdgeIter *CallerEdgeI = nullptr);
-
- /// Change the callee of Edge to existing callee clone NewCallee, performing
- /// the necessary context id and allocation type updates.
- /// If callee's caller edge iterator is supplied, it is updated when removing
- /// the edge from that list.
- void moveEdgeToExistingCalleeClone(const std::shared_ptr<ContextEdge> &Edge,
- ContextNode *NewCallee,
- EdgeIter *CallerEdgeI = nullptr,
- bool NewClone = false);
-
- /// Recursively perform cloning on the graph for the given Node and its
- /// callers, in order to uniquely identify the allocation behavior of an
- /// allocation given its context.
- void identifyClones(ContextNode *Node,
- DenseSet<const ContextNode *> &Visited);
-
/// Map from each context ID to the AllocationType assigned to that context.
std::map<uint32_t, AllocationType> ContextIdToAllocationType;
@@ -568,28 +543,6 @@ AllocationType allocTypeToUse(uint8_t AllocTypes) {
return (AllocationType)AllocTypes;
}
-// Helper to check if the alloc types for all edges recorded in the
-// InAllocTypes vector match the alloc types for all edges in the Edges
-// vector.
-template <typename DerivedCCG, typename FuncTy, typename CallTy>
-bool allocTypesMatch(
- const std::vector<uint8_t> &InAllocTypes,
- const std::vector<std::shared_ptr<ContextEdge<DerivedCCG, FuncTy, CallTy>>>
- &Edges) {
- return std::equal(
- InAllocTypes.begin(), InAllocTypes.end(), Edges.begin(),
- [](const uint8_t &l,
- const std::shared_ptr<ContextEdge<DerivedCCG, FuncTy, CallTy>> &r) {
- // Can share if one of the edges is None type - don't
- // care about the type along that edge as it doesn't
- // exist for those context ids.
- if (l == (uint8_t)AllocationType::None ||
- r->AllocTypes == (uint8_t)AllocationType::None)
- return true;
- return allocTypeToUse(l) == allocTypeToUse(r->AllocTypes);
- });
-}
-
} // end anonymous namespace
template <typename DerivedCCG, typename FuncTy, typename CallTy>
@@ -654,20 +607,6 @@ void CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextNode::
Caller->CalleeEdges.push_back(Edge);
}
-template <typename DerivedCCG, typename FuncTy, typename CallTy>
-void CallsiteContextGraph<
- DerivedCCG, FuncTy, CallTy>::removeNoneTypeCalleeEdges(ContextNode *Node) {
- for (auto EI = Node->CalleeEdges.begin(); EI != Node->CalleeEdges.end();) {
- auto Edge = *EI;
- if (Edge->AllocTypes == (uint8_t)AllocationType::None) {
- assert(Edge->ContextIds.empty());
- Edge->Callee->eraseCallerEdge(Edge.get());
- EI = Node->CalleeEdges.erase(EI);
- } else
- ++EI;
- }
-}
-
template <typename DerivedCCG, typename FuncTy, typename CallTy>
typename CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextEdge *
CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextNode::
@@ -727,33 +666,6 @@ uint8_t CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::computeAllocType(
return AllocType;
}
-template <typename DerivedCCG, typename FuncTy, typename CallTy>
-uint8_t
-CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::intersectAllocTypesImpl(
- const DenseSet<uint32_t> &Node1Ids, const DenseSet<uint32_t> &Node2Ids) {
- uint8_t BothTypes =
- (uint8_t)AllocationType::Cold | (uint8_t)AllocationType::NotCold;
- uint8_t AllocType = (uint8_t)AllocationType::None;
- for (auto Id : Node1Ids) {
- if (!Node2Ids.count(Id))
- continue;
- AllocType |= (uint8_t)ContextIdToAllocationType[Id];
- // Bail early if alloc type reached both, no further refinement.
- if (AllocType == BothTypes)
- return AllocType;
- }
- return AllocType;
-}
-
-template <typename DerivedCCG, typename FuncTy, typename CallTy>
-uint8_t CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::intersectAllocTypes(
- const DenseSet<uint32_t> &Node1Ids, const DenseSet<uint32_t> &Node2Ids) {
- if (Node1Ids.size() < Node2Ids.size())
- return intersectAllocTypesImpl(Node1Ids, Node2Ids);
- else
- return intersectAllocTypesImpl(Node2Ids, Node1Ids);
-}
-
template <typename DerivedCCG, typename FuncTy, typename CallTy>
typename CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextNode *
CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::addAllocNode(
@@ -1209,7 +1121,7 @@ void CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::updateStackNodes() {
// not fully matching stack contexts. To do this, subtract any context ids
// found in caller nodes of the last node found above.
if (Ids.back() != getLastStackId(Call)) {
- for (const auto &PE : CurNode->CallerEdges) {
+ for (const auto &PE : LastNode->CallerEdges) {
set_subtract(StackSequenceContextIds, PE->getContextIds());
if (StackSequenceContextIds.empty())
break;
@@ -1660,8 +1572,7 @@ static void checkEdge(
}
template <typename DerivedCCG, typename FuncTy, typename CallTy>
-static void checkNode(const ContextNode<DerivedCCG, FuncTy, CallTy> *Node,
- bool CheckEdges = false) {
+static void checkNode(const ContextNode<DerivedCCG, FuncTy, CallTy> *Node) {
if (Node->isRemoved())
return;
// Node's context ids should be the union of both its callee and caller edge
@@ -1673,8 +1584,6 @@ static void checkNode(const ContextNode<DerivedCCG, FuncTy, CallTy> *Node,
DenseSet<uint32_t> CallerEdgeContextIds(FirstEdge->ContextIds);
for (; EI != Node->CallerEdges.end(); EI++) {
const auto &Edge = *EI;
- if (CheckEdges)
- checkEdge<DerivedCCG, FuncTy, CallTy>(Edge);
set_union(CallerEdgeContextIds, Edge->ContextIds);
}
// Node can have more context ids than callers if some contexts terminate at
@@ -1689,8 +1598,6 @@ static void checkNode(const ContextNode<DerivedCCG, FuncTy, CallTy> *Node,
DenseSet<uint32_t> CalleeEdgeContextIds(FirstEdge->ContextIds);
for (; EI != Node->CalleeEdges.end(); EI++) {
const auto &Edge = *EI;
- if (CheckEdges)
- checkEdge<DerivedCCG, FuncTy, CallTy>(Edge);
set_union(CalleeEdgeContextIds, Edge->ContextIds);
}
assert(Node->ContextIds == CalleeEdgeContextIds);
@@ -1853,276 +1760,6 @@ void CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::exportToDot(
DotFilePathPrefix + "ccg." + Label + ".dot");
}
-template <typename DerivedCCG, typename FuncTy, typename CallTy>
-ContextNode<DerivedCCG, FuncTy, CallTy> *
-CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::moveEdgeToNewCalleeClone(
- const std::shared_ptr<ContextEdge> &Edge, EdgeIter *CallerEdgeI) {
- ContextNode *Node = Edge->Callee;
- NodeOwner.push_back(
- std::make_unique<ContextNode>(Node->IsAllocation, Node->Call));
- ContextNode *Clone = NodeOwner.back().get();
- Node->addClone(Clone);
- assert(NodeToCallingFunc.count(Node));
- NodeToCallingFunc[Clone] = NodeToCallingFunc[Node];
- moveEdgeToExistingCalleeClone(Edge, Clone, CallerEdgeI, /*NewClone=*/true);
- return Clone;
-}
-
-template <typename DerivedCCG, typename FuncTy, typename CallTy>
-void CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::
- moveEdgeToExistingCalleeClone(const std::shared_ptr<ContextEdge> &Edge,
- ContextNode *NewCallee, EdgeIter *CallerEdgeI,
- bool NewClone) {
- // NewCallee and Edge's current callee must be clones of the same original
- // node (Edge's current callee may be the original node too).
- assert(NewCallee->getOrigNode() == Edge->Callee->getOrigNode());
- auto &EdgeContextIds = Edge->getContextIds();
- ContextNode *OldCallee = Edge->Callee;
- if (CallerEdgeI)
- *CallerEdgeI = OldCallee->CallerEdges.erase(*CallerEdgeI);
- else
- OldCallee->eraseCallerEdge(Edge.get());
- Edge->Callee = NewCallee;
- NewCallee->CallerEdges.push_back(Edge);
- // Don't need to update Edge's context ids since we are simply reconnecting
- // it.
- set_subtract(OldCallee->ContextIds, EdgeContextIds);
- NewCallee->ContextIds.insert(EdgeContextIds.begin(), EdgeContextIds.end());
- NewCallee->AllocTypes |= Edge->AllocTypes;
- OldCallee->AllocTypes = computeAllocType(OldCallee->ContextIds);
- // OldCallee alloc type should be None iff its context id set is now empty.
- assert((OldCallee->AllocTypes == (uint8_t)AllocationType::None) ==
- OldCallee->ContextIds.empty());
- // Now walk the old callee node's callee edges and move Edge's context ids
- // over to the corresponding edge into the clone (which is created here if
- // this is a newly created clone).
- for (auto &OldCalleeEdge : OldCallee->CalleeEdges) {
- // The context ids moving to the new callee are the subset of this edge's
- // context ids and the context ids on the caller edge being moved.
- DenseSet<uint32_t> EdgeContextIdsToMove =
- set_intersection(OldCalleeEdge->getContextIds(), EdgeContextIds);
- set_subtract(OldCalleeEdge->getContextIds(), EdgeContextIdsToMove);
- OldCalleeEdge->AllocTypes =
- computeAllocType(OldCalleeEdge->getContextIds());
- if (!NewClone) {
- // Update context ids / alloc type on corresponding edge to NewCallee.
- // There is a chance this may not exist if we are reusing an existing
- // clone, specifically during function assignment, where we would have
- // removed none type edges after creating the clone. If we can't find
- // a corresponding edge there, fall through to the cloning below.
- if (auto *NewCalleeEdge =
- NewCallee->findEdgeFromCallee(OldCalleeEdge->Callee)) {
- NewCalleeEdge->getContextIds().insert(EdgeContextIdsToMove.begin(),
- EdgeContextIdsToMove.end());
- NewCalleeEdge->AllocTypes |= computeAllocType(EdgeContextIdsToMove);
- continue;
- }
- }
- auto NewEdge = std::make_shared<ContextEdge>(
- OldCalleeEdge->Callee, NewCallee,
- computeAllocType(EdgeContextIdsToMove), EdgeContextIdsToMove);
- NewCallee->CalleeEdges.push_back(NewEdge);
- NewEdge->Callee->CallerEdges.push_back(NewEdge);
- }
- if (VerifyCCG) {
- checkNode<DerivedCCG, FuncTy, CallTy>(OldCallee);
- checkNode<DerivedCCG, FuncTy, CallTy>(NewCallee);
- for (const auto &OldCalleeEdge : OldCallee->CalleeEdges)
- checkNode<DerivedCCG, FuncTy, CallTy>(OldCalleeEdge->Callee);
- for (const auto &NewCalleeEdge : NewCallee->CalleeEdges)
- checkNode<DerivedCCG, FuncTy, CallTy>(NewCalleeEdge->Callee);
- }
-}
-
-template <typename DerivedCCG, typename FuncTy, typename CallTy>
-void CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::identifyClones() {
- DenseSet<const ContextNode *> Visited;
- for (auto &Entry : AllocationCallToContextNodeMap)
- identifyClones(Entry.second, Visited);
-}
-
-template <typename DerivedCCG, typename FuncTy, typename CallTy>
-void CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::identifyClones(
- ContextNode *Node, DenseSet<const ContextNode *> &Visited) {
- if (VerifyNodes)
- checkNode<DerivedCCG, FuncTy, CallTy>(Node, /*CheckEdges=*/true);
- assert(!Node->CloneOf);
-
- // If Node as a null call, then either it wasn't found in the module (regular
- // LTO) or summary index (ThinLTO), or there were other conditions blocking
- // cloning (e.g. recursion, calls multiple targets, etc).
- // Do this here so that we don't try to recursively clone callers below, which
- // isn't useful at least for this node.
- if (!Node->hasCall())
- return;
-
-#ifndef NDEBUG
- auto Insert =
-#endif
- Visited.insert(Node);
- // We should not have visited this node yet.
- assert(Insert.second);
- // The recursive call to identifyClones may delete the current edge from the
- // CallerEdges vector. Make a copy and iterate on that, simpler than passing
- // in an iterator and having recursive call erase from it. Other edges may
- // also get removed during the recursion, which will have null Callee and
- // Caller pointers (and are deleted later), so we skip those below.
- {
- auto CallerEdges = Node->CallerEdges;
- for (auto &Edge : CallerEdges) {
- // Skip any that have been removed by an earlier recursive call.
- if (Edge->Callee == nullptr && Edge->Caller == nullptr) {
- assert(!std::count(Node->CallerEdges.begin(), Node->CallerEdges.end(),
- Edge));
- continue;
- }
- // Ignore any caller we previously visited via another edge.
- if (!Visited.count(Edge->Caller) && !Edge->Caller->CloneOf) {
- identifyClones(Edge->Caller, Visited);
- }
- }
- }
-
- // Check if we reached an unambiguous call or have have only a single caller.
- if (hasSingleAllocType(Node->AllocTypes) || Node->CallerEdges.size() <= 1)
- return;
-
- // We need to clone.
-
- // Try to keep the original version as alloc type NotCold. This will make
- // cases with indirect calls or any other situation with an unknown call to
- // the original function get the default behavior. We do this by sorting the
- // CallerEdges of the Node we will clone by alloc type.
- //
- // Give NotCold edge the lowest sort priority so those edges are at the end of
- // the caller edges vector, and stay on the original version (since the below
- // code clones greedily until it finds all remaining edges have the same type
- // and leaves the remaining ones on the original Node).
- //
- // We shouldn't actually have any None type edges, so the sorting priority for
- // that is arbitrary, and we assert in that case below.
- constexpr unsigned AllocTypeCloningPriority[] = {/*None*/ 3, /*NotCold*/ 4,
- /*Cold*/ 1,
- /*NotColdCold*/ 2};
- assert(std::size(AllocTypeCloningPriority) ==
- (std::size_t)AllocationType::All + 1);
- std::stable_sort(Node->CallerEdges.begin(), Node->CallerEdges.end(),
- [](const std::shared_ptr<ContextEdge> &A,
- const std::shared_ptr<ContextEdge> &B) {
- assert(A->AllocTypes != (uint8_t)AllocationType::None &&
- B->AllocTypes != (uint8_t)AllocationType::None);
- if (A->AllocTypes == B->AllocTypes)
- // Use the first context id for each edge as a
- // tie-breaker.
- return *A->ContextIds.begin() < *B->ContextIds.begin();
- return AllocTypeCloningPriority[A->AllocTypes] <
- AllocTypeCloningPriority[B->AllocTypes];
- });
-
- assert(Node->AllocTypes != (uint8_t)AllocationType::None);
-
- // Iterate until we find no more opportunities for disambiguating the alloc
- // types via cloning. In most cases this loop will terminate once the Node
- // has a single allocation type, in which case no more cloning is needed.
- // We need to be able to remove Edge from CallerEdges, so need to adjust
- // iterator inside the loop.
- for (auto EI = Node->CallerEdges.begin(); EI != Node->CallerEdges.end();) {
- auto CallerEdge = *EI;
-
- // See if cloning the prior caller edge left this node with a single alloc
- // type or a single caller. In that case no more cloning of Node is needed.
- if (hasSingleAllocType(Node->AllocTypes) || Node->CallerEdges.size() <= 1)
- break;
-
- // Compute the node callee edge alloc types corresponding to the context ids
- // for this caller edge.
- std::vector<uint8_t> CalleeEdgeAllocTypesForCallerEdge;
- CalleeEdgeAllocTypesForCallerEdge.reserve(Node->CalleeEdges.size());
- for (auto &CalleeEdge : Node->CalleeEdges)
- CalleeEdgeAllocTypesForCallerEdge.push_back(intersectAllocTypes(
- CalleeEdge->getContextIds(), CallerEdge->getContextIds()));
-
- // Don't clone if doing so will not disambiguate any alloc types amongst
- // caller edges (including the callee edges that would be cloned).
- // Otherwise we will simply move all edges to the clone.
- //
- // First check if by cloning we will disambiguate the caller allocation
- // type from node's allocation type. Query allocTypeToUse so that we don't
- // bother cloning to distinguish NotCold+Cold from NotCold. Note that
- // neither of these should be None type.
- //
- // Then check if by cloning node at least one of the callee edges will be
- // disambiguated by splitting out
diff erent context ids.
- assert(CallerEdge->AllocTypes != (uint8_t)AllocationType::None);
- assert(Node->AllocTypes != (uint8_t)AllocationType::None);
- if (allocTypeToUse(CallerEdge->AllocTypes) ==
- allocTypeToUse(Node->AllocTypes) &&
- allocTypesMatch<DerivedCCG, FuncTy, CallTy>(
- CalleeEdgeAllocTypesForCallerEdge, Node->CalleeEdges)) {
- ++EI;
- continue;
- }
-
- // First see if we can use an existing clone. Check each clone and its
- // callee edges for matching alloc types.
- ContextNode *Clone = nullptr;
- for (auto *CurClone : Node->Clones) {
- if (allocTypeToUse(CurClone->AllocTypes) !=
- allocTypeToUse(CallerEdge->AllocTypes))
- continue;
-
- if (!allocTypesMatch<DerivedCCG, FuncTy, CallTy>(
- CalleeEdgeAllocTypesForCallerEdge, CurClone->CalleeEdges))
- continue;
- Clone = CurClone;
- break;
- }
-
- // The edge iterator is adjusted when we move the CallerEdge to the clone.
- if (Clone)
- moveEdgeToExistingCalleeClone(CallerEdge, Clone, &EI);
- else
- Clone = moveEdgeToNewCalleeClone(CallerEdge, &EI);
-
- assert(EI == Node->CallerEdges.end() ||
- Node->AllocTypes != (uint8_t)AllocationType::None);
- // Sanity check that no alloc types on clone or its edges are None.
- assert(Clone->AllocTypes != (uint8_t)AllocationType::None);
- assert(llvm::none_of(
- Clone->CallerEdges, [&](const std::shared_ptr<ContextEdge> &E) {
- return E->AllocTypes == (uint8_t)AllocationType::None;
- }));
- }
-
- // Cloning may have resulted in some cloned callee edges with type None,
- // because they aren't carrying any contexts. Remove those edges.
- for (auto *Clone : Node->Clones) {
- removeNoneTypeCalleeEdges(Clone);
- if (VerifyNodes)
- checkNode<DerivedCCG, FuncTy, CallTy>(Clone, /*CheckEdges=*/true);
- }
- // We should still have some context ids on the original Node.
- assert(!Node->ContextIds.empty());
-
- // Remove any callee edges that ended up with alloc type None after creating
- // clones and updating callee edges.
- removeNoneTypeCalleeEdges(Node);
-
- // Sanity check that no alloc types on node or edges are None.
- assert(Node->AllocTypes != (uint8_t)AllocationType::None);
- assert(llvm::none_of(Node->CalleeEdges,
- [&](const std::shared_ptr<ContextEdge> &E) {
- return E->AllocTypes == (uint8_t)AllocationType::None;
- }));
- assert(llvm::none_of(Node->CallerEdges,
- [&](const std::shared_ptr<ContextEdge> &E) {
- return E->AllocTypes == (uint8_t)AllocationType::None;
- }));
-
- if (VerifyNodes)
- checkNode<DerivedCCG, FuncTy, CallTy>(Node, /*CheckEdges=*/true);
-}
-
template <typename DerivedCCG, typename FuncTy, typename CallTy>
bool CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::process() {
if (DumpCCG) {
@@ -2136,19 +1773,6 @@ bool CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::process() {
check();
}
- identifyClones();
-
- if (VerifyCCG) {
- check();
- }
-
- if (DumpCCG) {
- dbgs() << "CCG after cloning:\n";
- dbgs() << *this;
- }
- if (ExportToDot)
- exportToDot("cloned");
-
return false;
}
diff --git a/llvm/test/ThinLTO/X86/memprof-basic.ll b/llvm/test/ThinLTO/X86/memprof-basic.ll
index 4d11244b2b42b..d8c78d270f277 100644
--- a/llvm/test/ThinLTO/X86/memprof-basic.ll
+++ b/llvm/test/ThinLTO/X86/memprof-basic.ll
@@ -42,8 +42,6 @@
; RUN: -o %t.out 2>&1 | FileCheck %s --check-prefix=DUMP
; RUN: cat %t.ccg.postbuild.dot | FileCheck %s --check-prefix=DOT
-;; We should have cloned bar, baz, and foo, for the cold memory allocation.
-; RUN: cat %t.ccg.cloned.dot | FileCheck %s --check-prefix=DOTCLONED
source_filename = "memprof-basic.ll"
@@ -144,88 +142,6 @@ uselistorder ptr @_Z3foov, { 1, 0 }
; DUMP: Edge from Callee [[FOO]] to Caller: [[MAIN2]] AllocTypes: Cold ContextIds: 2
; DUMP: CallerEdges:
-; DUMP: CCG after cloning:
-; DUMP: Callsite Context Graph:
-; DUMP: Node [[BAR]]
-; DUMP: Versions: 1 MIB:
-; DUMP: AllocType 1 StackIds: 2, 3, 0
-; DUMP: AllocType 2 StackIds: 2, 3, 1
-; DUMP: (clone 0)
-; DUMP: AllocTypes: NotCold
-; DUMP: ContextIds: 1
-; DUMP: CalleeEdges:
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[BAR]] to Caller: [[BAZ]] AllocTypes: NotCold ContextIds: 1
-; DUMP: Clones: [[BAR2:0x[a-z0-9]+]]
-
-; DUMP: Node [[BAZ]]
-; DUMP: Callee: 9832687305761716512 (_Z3barv) Clones: 0 StackIds: 2 (clone 0)
-; DUMP: AllocTypes: NotCold
-; DUMP: ContextIds: 1
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[BAR]] to Caller: [[BAZ]] AllocTypes: NotCold ContextIds: 1
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[BAZ]] to Caller: [[FOO]] AllocTypes: NotCold ContextIds: 1
-; DUMP: Clones: [[BAZ2:0x[a-z0-9]+]]
-
-; DUMP: Node [[FOO]]
-; DUMP: Callee: 5878270615442837395 (_Z3bazv) Clones: 0 StackIds: 3 (clone 0)
-; DUMP: AllocTypes: NotCold
-; DUMP: ContextIds: 1
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[BAZ]] to Caller: [[FOO]] AllocTypes: NotCold ContextIds: 1
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[FOO]] to Caller: [[MAIN1]] AllocTypes: NotCold ContextIds: 1
-; DUMP: Clones: [[FOO2:0x[a-z0-9]+]]
-
-; DUMP: Node [[MAIN1]]
-; DUMP: Callee: 6731117468105397038 (_Z3foov) Clones: 0 StackIds: 0 (clone 0)
-; DUMP: AllocTypes: NotCold
-; DUMP: ContextIds: 1
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[FOO]] to Caller: [[MAIN1]] AllocTypes: NotCold ContextIds: 1
-; DUMP: CallerEdges:
-
-; DUMP: Node [[MAIN2]]
-; DUMP: Callee: 6731117468105397038 (_Z3foov) Clones: 0 StackIds: 1 (clone 0)
-; DUMP: AllocTypes: Cold
-; DUMP: ContextIds: 2
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[FOO2]] to Caller: [[MAIN2]] AllocTypes: Cold ContextIds: 2
-; DUMP: CallerEdges:
-
-; DUMP: Node [[FOO2]]
-; DUMP: Callee: 5878270615442837395 (_Z3bazv) Clones: 0 StackIds: 3 (clone 0)
-; DUMP: AllocTypes: Cold
-; DUMP: ContextIds: 2
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[BAZ2]] to Caller: [[FOO2]] AllocTypes: Cold ContextIds: 2
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[FOO2]] to Caller: [[MAIN2]] AllocTypes: Cold ContextIds: 2
-; DUMP: Clone of [[FOO]]
-
-; DUMP: Node [[BAZ2]]
-; DUMP: Callee: 9832687305761716512 (_Z3barv) Clones: 0 StackIds: 2 (clone 0)
-; DUMP: AllocTypes: Cold
-; DUMP: ContextIds: 2
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[BAR2]] to Caller: [[BAZ2]] AllocTypes: Cold ContextIds: 2
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[BAZ2]] to Caller: [[FOO2]] AllocTypes: Cold ContextIds: 2
-; DUMP: Clone of [[BAZ]]
-
-; DUMP: Node [[BAR2]]
-; DUMP: Versions: 1 MIB:
-; DUMP: AllocType 1 StackIds: 2, 3, 0
-; DUMP: AllocType 2 StackIds: 2, 3, 1
-; DUMP: (clone 0)
-; DUMP: AllocTypes: Cold
-; DUMP: ContextIds: 2
-; DUMP: CalleeEdges:
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[BAR2]] to Caller: [[BAZ2]] AllocTypes: Cold ContextIds: 2
-; DUMP: Clone of [[BAR]]
-
; DOT: digraph "postbuild" {
; DOT: label="postbuild";
@@ -239,22 +155,3 @@ uselistorder ptr @_Z3foov, { 1, 0 }
; DOT: Node[[MAIN2:0x[a-z0-9]+]] [shape=record,tooltip="N[[MAIN2]] ContextIds: 2",fillcolor="cyan",style="filled",style="filled",label="{OrigId: 15025054523792398438\nmain -\> _Z3foov}"];
; DOT: Node[[MAIN2]] -> Node[[FOO]][tooltip="ContextIds: 2",fillcolor="cyan"];
; DOT: }
-
-
-; DOTCLONED: digraph "cloned" {
-; DOTCLONED: label="cloned";
-; DOTCLONED: Node[[BAR:0x[a-z0-9]+]] [shape=record,tooltip="N[[BAR]] ContextIds: 1",fillcolor="brown1",style="filled",style="filled",label="{OrigId: Alloc0\n_Z3barv -\> alloc}"];
-; DOTCLONED: Node[[BAZ:0x[a-z0-9]+]] [shape=record,tooltip="N[[BAZ]] ContextIds: 1",fillcolor="brown1",style="filled",style="filled",label="{OrigId: 12481870273128938184\n_Z3bazv -\> _Z3barv}"];
-; DOTCLONED: Node[[BAZ]] -> Node[[BAR]][tooltip="ContextIds: 1",fillcolor="brown1"];
-; DOTCLONED: Node[[FOO:0x[a-z0-9]+]] [shape=record,tooltip="N[[FOO]] ContextIds: 1",fillcolor="brown1",style="filled",style="filled",label="{OrigId: 2732490490862098848\n_Z3foov -\> _Z3bazv}"];
-; DOTCLONED: Node[[FOO]] -> Node[[BAZ]][tooltip="ContextIds: 1",fillcolor="brown1"];
-; DOTCLONED: Node[[MAIN1:0x[a-z0-9]+]] [shape=record,tooltip="N[[MAIN1]] ContextIds: 1",fillcolor="brown1",style="filled",style="filled",label="{OrigId: 8632435727821051414\nmain -\> _Z3foov}"];
-; DOTCLONED: Node[[MAIN1]] -> Node[[FOO]][tooltip="ContextIds: 1",fillcolor="brown1"];
-; DOTCLONED: Node[[MAIN2:0x[a-z0-9]+]] [shape=record,tooltip="N[[MAIN2]] ContextIds: 2",fillcolor="cyan",style="filled",style="filled",label="{OrigId: 15025054523792398438\nmain -\> _Z3foov}"];
-; DOTCLONED: Node[[MAIN2]] -> Node[[FOO2:0x[a-z0-9]+]][tooltip="ContextIds: 2",fillcolor="cyan"];
-; DOTCLONED: Node[[FOO2]] [shape=record,tooltip="N[[FOO2]] ContextIds: 2",fillcolor="cyan",style="filled",color="blue",style="filled,bold,dashed",label="{OrigId: 0\n_Z3foov -\> _Z3bazv}"];
-; DOTCLONED: Node[[FOO2]] -> Node[[BAZ2:0x[a-z0-9]+]][tooltip="ContextIds: 2",fillcolor="cyan"];
-; DOTCLONED: Node[[BAZ2]] [shape=record,tooltip="N[[BAZ2]] ContextIds: 2",fillcolor="cyan",style="filled",color="blue",style="filled,bold,dashed",label="{OrigId: 0\n_Z3bazv -\> _Z3barv}"];
-; DOTCLONED: Node[[BAZ2]] -> Node[[BAR2:0x[a-z0-9]+]][tooltip="ContextIds: 2",fillcolor="cyan"];
-; DOTCLONED: Node[[BAR2]] [shape=record,tooltip="N[[BAR2]] ContextIds: 2",fillcolor="cyan",style="filled",color="blue",style="filled,bold,dashed",label="{OrigId: Alloc0\n_Z3barv -\> alloc}"];
-; DOTCLONED: }
diff --git a/llvm/test/ThinLTO/X86/memprof-duplicate-context-ids.ll b/llvm/test/ThinLTO/X86/memprof-duplicate-context-ids.ll
index 3b297dd96cede..772b319e0715e 100644
--- a/llvm/test/ThinLTO/X86/memprof-duplicate-context-ids.ll
+++ b/llvm/test/ThinLTO/X86/memprof-duplicate-context-ids.ll
@@ -64,8 +64,6 @@
; RUN: cat %t.ccg.prestackupdate.dot | FileCheck %s --check-prefix=DOTPRE
; RUN: cat %t.ccg.postbuild.dot | FileCheck %s --check-prefix=DOTPOST
-;; We should clone D once for the cold allocations via C.
-; RUN: cat %t.ccg.cloned.dot | FileCheck %s --check-prefix=DOTCLONED
source_filename = "duplicate-context-ids.ll"
@@ -207,67 +205,6 @@ declare i32 @sleep()
; DUMP: CallerEdges:
-; DUMP: CCG after cloning:
-; DUMP: Callsite Context Graph:
-; DUMP: Node [[D]]
-; DUMP: Versions: 1 MIB:
-; DUMP: AllocType 2 StackIds: 0
-; DUMP: AllocType 1 StackIds: 1
-; DUMP: (clone 0)
-; DUMP: AllocTypes: NotCold
-; DUMP: ContextIds: 2
-; DUMP: CalleeEdges:
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[D]] to Caller: [[F]] AllocTypes: NotCold ContextIds: 2
-; DUMP: Clones: [[D2:0x[a-z0-9]+]]
-
-; DUMP: Node [[F]]
-; DUMP: Callee: 4881081444663423788 (_Z1Dv) Clones: 0 StackIds: 1 (clone 0)
-; DUMP: AllocTypes: NotCold
-; DUMP: ContextIds: 2
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[D]] to Caller: [[F]] AllocTypes: NotCold ContextIds: 2
-; DUMP: CallerEdges:
-
-; DUMP: Node [[C2]]
-; DUMP: Callee: 4881081444663423788 (_Z1Dv) Clones: 0 StackIds: 0 (clone 0)
-; DUMP: AllocTypes: Cold
-; DUMP: ContextIds: 3
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[D2]] to Caller: [[C2]] AllocTypes: Cold ContextIds: 3
-; DUMP: CallerEdges:
-
-; DUMP: Node [[B]]
-; DUMP: Callee: 4881081444663423788 (_Z1Dv) Clones: 0 StackIds: 0, 2 (clone 0)
-; DUMP: AllocTypes: Cold
-; DUMP: ContextIds: 4
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[D2]] to Caller: [[B]] AllocTypes: Cold ContextIds: 4
-; DUMP: CallerEdges:
-
-; DUMP: Node [[E]]
-; DUMP: Callee: 4881081444663423788 (_Z1Dv) Clones: 0 StackIds: 0, 3 (clone 0)
-; DUMP: AllocTypes: Cold
-; DUMP: ContextIds: 1
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[D2]] to Caller: [[E]] AllocTypes: Cold ContextIds: 1
-; DUMP: CallerEdges:
-
-; DUMP: Node [[D2]]
-; DUMP: Versions: 1 MIB:
-; DUMP: AllocType 2 StackIds: 0
-; DUMP: AllocType 1 StackIds: 1
-; DUMP: (clone 0)
-; DUMP: AllocTypes: Cold
-; DUMP: ContextIds: 1 3 4
-; DUMP: CalleeEdges:
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[D2]] to Caller: [[E:0x[a-z0-9]+]] AllocTypes: Cold ContextIds: 1
-; DUMP: Edge from Callee [[D2]] to Caller: [[C2:0x[a-z0-9]+]] AllocTypes: Cold ContextIds: 3
-; DUMP: Edge from Callee [[D2]] to Caller: [[B:0x[a-z0-9]+]] AllocTypes: Cold ContextIds: 4
-; DUMP: Clone of [[D]]
-
-
; DOTPRE: digraph "prestackupdate" {
; DOTPRE: label="prestackupdate";
; DOTPRE: Node[[D:0x[a-z0-9]+]] [shape=record,tooltip="N[[D]] ContextIds: 1 2",fillcolor="mediumorchid1",style="filled",style="filled",label="{OrigId: Alloc0\n_Z1Dv -\> alloc}"];
@@ -290,18 +227,3 @@ declare i32 @sleep()
; DOTPOST: Node[[E:0x[a-z0-9]+]] [shape=record,tooltip="N[[E]] ContextIds: 1",fillcolor="cyan",style="filled",style="filled",label="{OrigId: 0\n_Z1Ev -\> _Z1Dv}"];
; DOTPOST: Node[[E]] -> Node[[D]][tooltip="ContextIds: 1",fillcolor="cyan"];
; DOTPOST:}
-
-
-; DOTCLONED: digraph "cloned" {
-; DOTCLONED: label="cloned";
-; DOTCLONED: Node[[D:0x[a-z0-9]+]] [shape=record,tooltip="N[[D]] ContextIds: 2",fillcolor="brown1",style="filled",style="filled",label="{OrigId: Alloc0\n_Z1Dv -\> alloc}"];
-; DOTCLONED: Node[[F:0x[a-z0-9]+]] [shape=record,tooltip="N[[F]] ContextIds: 2",fillcolor="brown1",style="filled",style="filled",label="{OrigId: 13543580133643026784\n_Z1Fv -\> _Z1Dv}"];
-; DOTCLONED: Node[[F]] -> Node[[D]][tooltip="ContextIds: 2",fillcolor="brown1"];
-; DOTCLONED: Node[[C:0x[a-z0-9]+]] [shape=record,tooltip="N[[C]] ContextIds: 3",fillcolor="cyan",style="filled",style="filled",label="{OrigId: 0\n_Z1Cv -\> _Z1Dv}"];
-; DOTCLONED: Node[[C]] -> Node[[D2:0x[a-z0-9]+]][tooltip="ContextIds: 3",fillcolor="cyan"];
-; DOTCLONED: Node[[B:0x[a-z0-9]+]] [shape=record,tooltip="N[[B]] ContextIds: 4",fillcolor="cyan",style="filled",style="filled",label="{OrigId: 0\n_Z1Bv -\> _Z1Dv}"];
-; DOTCLONED: Node[[B]] -> Node[[D2]][tooltip="ContextIds: 4",fillcolor="cyan"];
-; DOTCLONED: Node[[E:0x[a-z0-9]+]] [shape=record,tooltip="N[[E]] ContextIds: 1",fillcolor="cyan",style="filled",style="filled",label="{OrigId: 0\n_Z1Ev -\> _Z1Dv}"];
-; DOTCLONED: Node[[E]] -> Node[[D2]][tooltip="ContextIds: 1",fillcolor="cyan"];
-; DOTCLONED: Node[[D2]] [shape=record,tooltip="N[[D2]] ContextIds: 1 3 4",fillcolor="cyan",style="filled",color="blue",style="filled,bold,dashed",label="{OrigId: Alloc0\n_Z1Dv -\> alloc}"];
-; DOTCLONED: }
diff --git a/llvm/test/ThinLTO/X86/memprof-indirectcall.ll b/llvm/test/ThinLTO/X86/memprof-indirectcall.ll
index 9cf209271ce4d..30c8bd27f37b7 100644
--- a/llvm/test/ThinLTO/X86/memprof-indirectcall.ll
+++ b/llvm/test/ThinLTO/X86/memprof-indirectcall.ll
@@ -64,9 +64,6 @@
; RUN: -o %t.out 2>&1 | FileCheck %s --check-prefix=DUMP
; RUN: cat %t.ccg.postbuild.dot | FileCheck %s --check-prefix=DOT
-;; We should only create a single clone of foo, for the direct call
-;; from main allocating cold memory.
-; RUN: cat %t.ccg.cloned.dot | FileCheck %s --check-prefix=DOTCLONED
source_filename = "indirectcall.ll"
@@ -243,121 +240,6 @@ uselistorder ptr @_Z3foov, { 3, 2, 1, 0 }
; DUMP: Edge from Callee [[FOO]] to Caller: [[MAIN2]] AllocTypes: Cold ContextIds: 6
; DUMP: CallerEdges:
-; DUMP: CCG after cloning:
-; DUMP: Callsite Context Graph:
-; DUMP: Node [[FOO]]
-; DUMP: Versions: 1 MIB:
-; DUMP: AllocType 1 StackIds: 6, 8, 4
-; DUMP: AllocType 2 StackIds: 6, 8, 5
-; DUMP: AllocType 1 StackIds: 0
-; DUMP: AllocType 2 StackIds: 7, 8, 2
-; DUMP: AllocType 1 StackIds: 7, 8, 3
-; DUMP: AllocType 2 StackIds: 1
-; DUMP: (clone 0)
-; DUMP: AllocTypes: NotColdCold
-; DUMP: ContextIds: 1 2 3 4 5
-; DUMP: CalleeEdges:
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[FOO]] to Caller: [[AX]] AllocTypes: NotColdCold ContextIds: 1 2
-; DUMP: Edge from Callee [[FOO]] to Caller: [[BX]] AllocTypes: NotColdCold ContextIds: 4 5
-; DUMP: Edge from Callee [[FOO]] to Caller: [[MAIN1]] AllocTypes: NotCold ContextIds: 3
-; DUMP: Clones: [[FOO2:0x[a-z0-9]+]]
-
-; DUMP: Node [[AX]]
-; DUMP: Callee: 12914368124089294956 (_Z3foov) Clones: 0 StackIds: 6 (clone 0)
-; DUMP: AllocTypes: NotColdCold
-; DUMP: ContextIds: 1 2
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[FOO]] to Caller: [[AX]] AllocTypes: NotColdCold ContextIds: 1 2
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[AX]] to Caller: [[BAR]] AllocTypes: NotColdCold ContextIds: 1 2
-
-; DUMP: Node [[BAR]]
-; DUMP: null Call
-; DUMP: AllocTypes: NotColdCold
-; DUMP: ContextIds: 1 2 4 5
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[AX]] to Caller: [[BAR]] AllocTypes: NotColdCold ContextIds: 1 2
-; DUMP: Edge from Callee [[BX]] to Caller: [[BAR]] AllocTypes: NotColdCold ContextIds: 4 5
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[BAR]] to Caller: [[MAIN3]] AllocTypes: NotCold ContextIds: 1
-; DUMP: Edge from Callee [[BAR]] to Caller: [[MAIN4]] AllocTypes: Cold ContextIds: 2
-; DUMP: Edge from Callee [[BAR]] to Caller: [[MAIN5]] AllocTypes: Cold ContextIds: 4
-; DUMP: Edge from Callee [[BAR]] to Caller: [[MAIN6]] AllocTypes: NotCold ContextIds: 5
-
-; DUMP: Node [[MAIN3]]
-; DUMP: Callee: 4095956691517954349 (_Z3barP1A) Clones: 0 StackIds: 4 (clone 0)
-; DUMP: AllocTypes: NotCold
-; DUMP: ContextIds: 1
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[BAR]] to Caller: [[MAIN3]] AllocTypes: NotCold ContextIds: 1
-; DUMP: CallerEdges:
-
-; DUMP: Node [[MAIN4]]
-; DUMP: Callee: 4095956691517954349 (_Z3barP1A) Clones: 0 StackIds: 5 (clone 0)
-; DUMP: AllocTypes: Cold
-; DUMP: ContextIds: 2
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[BAR]] to Caller: [[MAIN4]] AllocTypes: Cold ContextIds: 2
-; DUMP: CallerEdges:
-
-; DUMP: Node [[MAIN1]]
-; DUMP: Callee: 12914368124089294956 (_Z3foov) Clones: 0 StackIds: 0 (clone 0)
-; DUMP: AllocTypes: NotCold
-; DUMP: ContextIds: 3
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[FOO]] to Caller: [[MAIN1]] AllocTypes: NotCold ContextIds: 3
-; DUMP: CallerEdges:
-
-; DUMP: Node [[BX]]
-; DUMP: Callee: 12914368124089294956 (_Z3foov) Clones: 0 StackIds: 7 (clone 0)
-; DUMP: AllocTypes: NotColdCold
-; DUMP: ContextIds: 4 5
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[FOO]] to Caller: [[BX]] AllocTypes: NotColdCold ContextIds: 4 5
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[BX]] to Caller: [[BAR]] AllocTypes: NotColdCold ContextIds: 4 5
-
-; DUMP: Node [[MAIN5]]
-; DUMP: Callee: 4095956691517954349 (_Z3barP1A) Clones: 0 StackIds: 2 (clone 0)
-; DUMP: AllocTypes: Cold
-; DUMP: ContextIds: 4
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[BAR]] to Caller: [[MAIN5]] AllocTypes: Cold ContextIds: 4
-; DUMP: CallerEdges:
-
-; DUMP: Node [[MAIN6]]
-; DUMP: Callee: 4095956691517954349 (_Z3barP1A) Clones: 0 StackIds: 3 (clone 0)
-; DUMP: AllocTypes: NotCold
-; DUMP: ContextIds: 5
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[BAR]] to Caller: [[MAIN6]] AllocTypes: NotCold ContextIds: 5
-; DUMP: CallerEdges:
-
-; DUMP: Node [[MAIN2]]
-; DUMP: Callee: 12914368124089294956 (_Z3foov) Clones: 0 StackIds: 1 (clone 0)
-; DUMP: AllocTypes: Cold
-; DUMP: ContextIds: 6
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[FOO2]] to Caller: [[MAIN2]] AllocTypes: Cold ContextIds: 6
-; DUMP: CallerEdges:
-
-; DUMP: Node [[FOO2]]
-; DUMP: Versions: 1 MIB:
-; DUMP: AllocType 1 StackIds: 6, 8, 4
-; DUMP: AllocType 2 StackIds: 6, 8, 5
-; DUMP: AllocType 1 StackIds: 0
-; DUMP: AllocType 2 StackIds: 7, 8, 2
-; DUMP: AllocType 1 StackIds: 7, 8, 3
-; DUMP: AllocType 2 StackIds: 1
-; DUMP: (clone 0)
-; DUMP: AllocTypes: Cold
-; DUMP: ContextIds: 6
-; DUMP: CalleeEdges:
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[FOO2]] to Caller: [[MAIN2]] AllocTypes: Cold ContextIds: 6
-; DUMP: Clone of [[FOO]]
-
; DOT: digraph "postbuild" {
; DOT: label="postbuild";
@@ -382,29 +264,3 @@ uselistorder ptr @_Z3foov, { 3, 2, 1, 0 }
; DOT: Node[[MAIN6:0x[a-z0-9]+]] [shape=record,tooltip="N[[MAIN6]] ContextIds: 6",fillcolor="cyan",style="filled",style="filled",label="{OrigId: 15025054523792398438\nmain -\> _Z3foov}"];
; DOT: Node[[MAIN6]] -> Node[[FOO]][tooltip="ContextIds: 6",fillcolor="cyan"];
; DOT: }
-
-
-; DOTCLONED: digraph "cloned" {
-; DOTCLONED: label="cloned";
-; DOTCLONED: Node[[FOO2:0x[a-z0-9]+]] [shape=record,tooltip="N[[FOO2]] ContextIds: 1 2 3 4 5",fillcolor="mediumorchid1",style="filled",style="filled",label="{OrigId: Alloc0\n_Z3foov -\> alloc}"];
-; DOTCLONED: Node[[AX:0x[a-z0-9]+]] [shape=record,tooltip="N[[AX]] ContextIds: 1 2",fillcolor="mediumorchid1",style="filled",style="filled",label="{OrigId: 8256774051149711748\n_ZN1A1xEv -\> _Z3foov}"];
-; DOTCLONED: Node[[AX]] -> Node[[FOO2]][tooltip="ContextIds: 1 2",fillcolor="mediumorchid1"];
-; DOTCLONED: Node[[BAR:0x[a-z0-9]+]] [shape=record,tooltip="N[[BAR]] ContextIds: 1 2 4 5",fillcolor="mediumorchid1",style="filled",style="filled",label="{OrigId: 13626499562959447861\nnull call (external)}"];
-; DOTCLONED: Node[[BAR]] -> Node[[AX]][tooltip="ContextIds: 1 2",fillcolor="mediumorchid1"];
-; DOTCLONED: Node[[BAR]] -> Node[[BX:0x[a-z0-9]+]][tooltip="ContextIds: 4 5",fillcolor="mediumorchid1"];
-; DOTCLONED: Node[[MAIN1:0x[a-z0-9]+]] [shape=record,tooltip="N[[MAIN1]] ContextIds: 1",fillcolor="brown1",style="filled",style="filled",label="{OrigId: 748269490701775343\nmain -\> _Z3barP1A}"];
-; DOTCLONED: Node[[MAIN1]] -> Node[[BAR]][tooltip="ContextIds: 1",fillcolor="brown1"];
-; DOTCLONED: Node[[MAIN2:0x[a-z0-9]+]] [shape=record,tooltip="N[[MAIN2]] ContextIds: 2",fillcolor="cyan",style="filled",style="filled",label="{OrigId: 12699492813229484831\nmain -\> _Z3barP1A}"];
-; DOTCLONED: Node[[MAIN2]] -> Node[[BAR]][tooltip="ContextIds: 2",fillcolor="cyan"];
-; DOTCLONED: Node[[MAIN3:0x[a-z0-9]+]] [shape=record,tooltip="N[[MAIN3]] ContextIds: 3",fillcolor="brown1",style="filled",style="filled",label="{OrigId: 8632435727821051414\nmain -\> _Z3foov}"];
-; DOTCLONED: Node[[MAIN3]] -> Node[[FOO2]][tooltip="ContextIds: 3",fillcolor="brown1"];
-; DOTCLONED: Node[[BX]] [shape=record,tooltip="N[[BX]] ContextIds: 4 5",fillcolor="mediumorchid1",style="filled",style="filled",label="{OrigId: 13614864978754796978\n_ZN1B1xEv -\> _Z3foov}"];
-; DOTCLONED: Node[[BX]] -> Node[[FOO2]][tooltip="ContextIds: 4 5",fillcolor="mediumorchid1"];
-; DOTCLONED: Node[[MAIN4:0x[a-z0-9]+]] [shape=record,tooltip="N[[MAIN4]] ContextIds: 4",fillcolor="cyan",style="filled",style="filled",label="{OrigId: 6792096022461663180\nmain -\> _Z3barP1A}"];
-; DOTCLONED: Node[[MAIN4]] -> Node[[BAR]][tooltip="ContextIds: 4",fillcolor="cyan"];
-; DOTCLONED: Node[[MAIN5:0x[a-z0-9]+]] [shape=record,tooltip="N[[MAIN5]] ContextIds: 5",fillcolor="brown1",style="filled",style="filled",label="{OrigId: 15737101490731057601\nmain -\> _Z3barP1A}"];
-; DOTCLONED: Node[[MAIN5]] -> Node[[BAR]][tooltip="ContextIds: 5",fillcolor="brown1"];
-; DOTCLONED: Node[[MAIN6:0x[a-z0-9]+]] [shape=record,tooltip="N[[MAIN6]] ContextIds: 6",fillcolor="cyan",style="filled",style="filled",label="{OrigId: 15025054523792398438\nmain -\> _Z3foov}"];
-; DOTCLONED: Node[[MAIN6]] -> Node[[FOO2:0x[a-z0-9]+]][tooltip="ContextIds: 6",fillcolor="cyan"];
-; DOTCLONED: Node[[FOO2]] [shape=record,tooltip="N[[FOO2]] ContextIds: 6",fillcolor="cyan",style="filled",color="blue",style="filled,bold,dashed",label="{OrigId: Alloc0\n_Z3foov -\> alloc}"];
-; DOTCLONED: }
diff --git a/llvm/test/ThinLTO/X86/memprof-inlined.ll b/llvm/test/ThinLTO/X86/memprof-inlined.ll
index 7a2304f7202b4..89cd878e99fb4 100644
--- a/llvm/test/ThinLTO/X86/memprof-inlined.ll
+++ b/llvm/test/ThinLTO/X86/memprof-inlined.ll
@@ -51,9 +51,6 @@
; RUN: -o %t.out 2>&1 | FileCheck %s --check-prefix=DUMP
; RUN: cat %t.ccg.postbuild.dot | FileCheck %s --check-prefix=DOT
-;; We should create clones for foo and bar for the call from main to allocate
-;; cold memory.
-; RUN: cat %t.ccg.cloned.dot | FileCheck %s --check-prefix=DOTCLONED
source_filename = "inlined.ll"
@@ -171,91 +168,6 @@ declare i32 @sleep()
; DUMP: Edge from Callee [[FOO]] to Caller: [[MAIN1]] AllocTypes: NotCold ContextIds: 3
; DUMP: Edge from Callee [[FOO]] to Caller: [[MAIN2]] AllocTypes: Cold ContextIds: 4
-; DUMP: CCG after cloning:
-; DUMP: Callsite Context Graph:
-; DUMP: Node [[BAZ]]
-; DUMP: Versions: 1 MIB:
-; DUMP: AllocType 1 StackIds: 1, 2
-; DUMP: AllocType 2 StackIds: 1, 3
-; DUMP: (clone 0)
-; DUMP: AllocTypes: NotColdCold
-; DUMP: ContextIds: 1 2
-; DUMP: CalleeEdges:
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[BAZ]] to Caller: [[FOO2]] AllocTypes: NotColdCold ContextIds: 1 2
-
-; DUMP: Node [[FOO2]]
-; DUMP: null Call
-; DUMP: AllocTypes: NotColdCold
-; DUMP: ContextIds: 1 2
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[BAZ]] to Caller: [[FOO2]] AllocTypes: NotColdCold ContextIds: 1 2
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[FOO2]] to Caller: [[MAIN1]] AllocTypes: NotCold ContextIds: 1
-; DUMP: Edge from Callee [[FOO2]] to Caller: [[MAIN2]] AllocTypes: Cold ContextIds: 2
-
-; DUMP: Node [[MAIN1]]
-; DUMP: Callee: 2229562716906371625 (_Z3foov) Clones: 0 StackIds: 2 (clone 0)
-; DUMP: AllocTypes: NotCold
-; DUMP: ContextIds: 1 3
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[FOO2]] to Caller: [[MAIN1]] AllocTypes: NotCold ContextIds: 1
-; DUMP: Edge from Callee [[FOO]] to Caller: [[MAIN1]] AllocTypes: NotCold ContextIds: 3
-; DUMP: CallerEdges:
-
-; DUMP: Node [[MAIN2]]
-; DUMP: Callee: 2229562716906371625 (_Z3foov) Clones: 0 StackIds: 3 (clone 0)
-; DUMP: AllocTypes: Cold
-; DUMP: ContextIds: 2 4
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[FOO2]] to Caller: [[MAIN2]] AllocTypes: Cold ContextIds: 2
-; DUMP: Edge from Callee [[FOO3:0x[a-z0-9]+]] to Caller: [[MAIN2]] AllocTypes: Cold ContextIds: 4
-; DUMP: CallerEdges:
-
-; DUMP: Node [[BAR]]
-; DUMP: Versions: 1 MIB:
-; DUMP: AllocType 1 StackIds: 0, 1, 2
-; DUMP: AllocType 2 StackIds: 0, 1, 3
-; DUMP: (clone 0)
-; DUMP: AllocTypes: NotCold
-; DUMP: ContextIds: 3
-; DUMP: CalleeEdges:
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[BAR]] to Caller: [[FOO]] AllocTypes: NotCold ContextIds: 3
-; DUMP: Clones: [[BAR2:0x[a-z0-9]+]]
-
-; DUMP: Node [[FOO]]
-; DUMP: Callee: 16064618363798697104 (_Z3barv) Clones: 0 StackIds: 0, 1 (clone 0)
-; DUMP: AllocTypes: NotCold
-; DUMP: ContextIds: 3
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[BAR]] to Caller: [[FOO]] AllocTypes: NotCold ContextIds: 3
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[FOO]] to Caller: [[MAIN1]] AllocTypes: NotCold ContextIds: 3
-; DUMP: Clones: [[FOO3]]
-
-; DUMP: Node [[FOO3]]
-; DUMP: Callee: 16064618363798697104 (_Z3barv) Clones: 0 StackIds: 0, 1 (clone 0)
-; DUMP: AllocTypes: Cold
-; DUMP: ContextIds: 4
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[BAR2]] to Caller: [[FOO3]] AllocTypes: Cold ContextIds: 4
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[FOO3]] to Caller: [[MAIN2]] AllocTypes: Cold ContextIds: 4
-; DUMP: Clone of [[FOO]]
-
-; DUMP: Node [[BAR2]]
-; DUMP: Versions: 1 MIB:
-; DUMP: AllocType 1 StackIds: 0, 1, 2
-; DUMP: AllocType 2 StackIds: 0, 1, 3
-; DUMP: (clone 0)
-; DUMP: AllocTypes: Cold
-; DUMP: ContextIds: 4
-; DUMP: CalleeEdges:
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[BAR2]] to Caller: [[FOO3]] AllocTypes: Cold ContextIds: 4
-; DUMP: Clone of [[BAR]]
-
; DOT: digraph "postbuild" {
; DOT: label="postbuild";
@@ -272,23 +184,3 @@ declare i32 @sleep()
; DOT: Node[[FOO2]] [shape=record,tooltip="N[[FOO2]] ContextIds: 3 4",fillcolor="mediumorchid1",style="filled",style="filled",label="{OrigId: 0\n_Z3foov -\> _Z3barv}"];
; DOT: Node[[FOO2]] -> Node[[BAR]][tooltip="ContextIds: 3 4",fillcolor="mediumorchid1"];
; DOT: }
-
-
-; DOTCLONED: digraph "cloned" {
-; DOTCLONED: label="cloned";
-; DOTCLONED: Node[[BAZ:0x[a-z0-9]+]] [shape=record,tooltip="N[[BAZ]] ContextIds: 1 2",fillcolor="mediumorchid1",style="filled",style="filled",label="{OrigId: Alloc0\n_Z3bazv -\> alloc}"];
-; DOTCLONED: Node[[FOO2:0x[a-z0-9]+]] [shape=record,tooltip="N[[FOO2]] ContextIds: 1 2",fillcolor="mediumorchid1",style="filled",style="filled",label="{OrigId: 2732490490862098848\nnull call (external)}"];
-; DOTCLONED: Node[[FOO2]] -> Node[[BAZ]][tooltip="ContextIds: 1 2",fillcolor="mediumorchid1"];
-; DOTCLONED: Node[[MAIN1:0x[a-z0-9]+]] [shape=record,tooltip="N[[MAIN1]] ContextIds: 1 3",fillcolor="brown1",style="filled",style="filled",label="{OrigId: 8632435727821051414\nmain -\> _Z3foov}"];
-; DOTCLONED: Node[[MAIN1]] -> Node[[FOO2]][tooltip="ContextIds: 1",fillcolor="brown1"];
-; DOTCLONED: Node[[MAIN1]] -> Node[[FOO:0x[a-z0-9]+]][tooltip="ContextIds: 3",fillcolor="brown1"];
-; DOTCLONED: Node[[MAIN2:0x[a-z0-9]+]] [shape=record,tooltip="N[[MAIN2]] ContextIds: 2 4",fillcolor="cyan",style="filled",style="filled",label="{OrigId: 15025054523792398438\nmain -\> _Z3foov}"];
-; DOTCLONED: Node[[MAIN2]] -> Node[[FOO2]][tooltip="ContextIds: 2",fillcolor="cyan"];
-; DOTCLONED: Node[[MAIN2]] -> Node[[FOO3:0x[a-z0-9]+]][tooltip="ContextIds: 4",fillcolor="cyan"];
-; DOTCLONED: Node[[BAR:0x[a-z0-9]+]] [shape=record,tooltip="N[[BAR]] ContextIds: 3",fillcolor="brown1",style="filled",style="filled",label="{OrigId: Alloc2\n_Z3barv -\> alloc}"];
-; DOTCLONED: Node[[FOO]] [shape=record,tooltip="N[[FOO]] ContextIds: 3",fillcolor="brown1",style="filled",style="filled",label="{OrigId: 0\n_Z3foov -\> _Z3barv}"];
-; DOTCLONED: Node[[FOO]] -> Node[[BAR]][tooltip="ContextIds: 3",fillcolor="brown1"];
-; DOTCLONED: Node[[FOO3]] [shape=record,tooltip="N[[FOO3]] ContextIds: 4",fillcolor="cyan",style="filled",color="blue",style="filled,bold,dashed",label="{OrigId: 0\n_Z3foov -\> _Z3barv}"];
-; DOTCLONED: Node[[FOO3]] -> Node[[BAR2:0x[a-z0-9]+]][tooltip="ContextIds: 4",fillcolor="cyan"];
-; DOTCLONED: Node[[BAR2]] [shape=record,tooltip="N[[BAR2]] ContextIds: 4",fillcolor="cyan",style="filled",color="blue",style="filled,bold,dashed",label="{OrigId: Alloc0\n_Z3barv -\> alloc}"];
-; DOTCLONED: }
diff --git a/llvm/test/Transforms/MemProfContextDisambiguation/basic.ll b/llvm/test/Transforms/MemProfContextDisambiguation/basic.ll
index 7a48d66af47e0..539d88a815ed1 100644
--- a/llvm/test/Transforms/MemProfContextDisambiguation/basic.ll
+++ b/llvm/test/Transforms/MemProfContextDisambiguation/basic.ll
@@ -37,8 +37,6 @@
; RUN: %s -S 2>&1 | FileCheck %s --check-prefix=DUMP
; RUN: cat %t.ccg.postbuild.dot | FileCheck %s --check-prefix=DOT
-;; We should have cloned bar, baz, and foo, for the cold memory allocation.
-; RUN: cat %t.ccg.cloned.dot | FileCheck %s --check-prefix=DOTCLONED
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
@@ -145,82 +143,6 @@ attributes #6 = { builtin }
; DUMP: Edge from Callee [[FOO]] to Caller: [[MAIN2]] AllocTypes: Cold ContextIds: 2
; DUMP: CallerEdges:
-; DUMP: CCG after cloning:
-; DUMP: Callsite Context Graph:
-; DUMP: Node [[BAR:0x[a-z0-9]+]]
-; DUMP: %call = call noalias noundef nonnull ptr @_Znam(i64 noundef 10) #6 (clone 0)
-; DUMP: AllocTypes: NotCold
-; DUMP: ContextIds: 1
-; DUMP: CalleeEdges:
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[BAR]] to Caller: [[BAZ:0x[a-z0-9]+]] AllocTypes: NotCold ContextIds: 1
-; DUMP: Clones: [[BAR2:0x[a-z0-9]+]]
-
-; DUMP: Node [[BAZ]]
-; DUMP: %call = call noundef ptr @_Z3barv() (clone 0)
-; DUMP: AllocTypes: NotCold
-; DUMP: ContextIds: 1
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[BAR]] to Caller: [[BAZ]] AllocTypes: NotCold ContextIds: 1
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[BAZ]] to Caller: [[FOO:0x[a-z0-9]+]] AllocTypes: NotCold ContextIds: 1
-; DUMP: Clones: [[BAZ2:0x[a-z0-9]+]]
-
-; DUMP: Node [[FOO]]
-; DUMP: %call = call noundef ptr @_Z3bazv() (clone 0)
-; DUMP: AllocTypes: NotCold
-; DUMP: ContextIds: 1
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[BAZ]] to Caller: [[FOO]] AllocTypes: NotCold ContextIds: 1
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[FOO]] to Caller: [[MAIN1:0x[a-z0-9]+]] AllocTypes: NotCold ContextIds: 1
-; DUMP: Clones: [[FOO2:0x[a-z0-9]+]]
-
-; DUMP: Node [[MAIN1]]
-; DUMP: %call = call noundef ptr @_Z3foov() (clone 0)
-; DUMP: AllocTypes: NotCold
-; DUMP: ContextIds: 1
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[FOO]] to Caller: [[MAIN1]] AllocTypes: NotCold ContextIds: 1
-; DUMP: CallerEdges:
-
-; DUMP: Node [[MAIN2]]
-; DUMP: %call1 = call noundef ptr @_Z3foov() (clone 0)
-; DUMP: AllocTypes: Cold
-; DUMP: ContextIds: 2
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[FOO2]] to Caller: [[MAIN2]] AllocTypes: Cold ContextIds: 2
-; DUMP: CallerEdges:
-
-; DUMP: Node [[FOO2]]
-; DUMP: %call = call noundef ptr @_Z3bazv() (clone 0)
-; DUMP: AllocTypes: Cold
-; DUMP: ContextIds: 2
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[BAZ2]] to Caller: [[FOO2]] AllocTypes: Cold ContextIds: 2
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[FOO2]] to Caller: [[MAIN2:0x[a-z0-9]+]] AllocTypes: Cold ContextIds: 2
-; DUMP: Clone of [[FOO]]
-
-; DUMP: Node [[BAZ2]]
-; DUMP: %call = call noundef ptr @_Z3barv() (clone 0)
-; DUMP: AllocTypes: Cold
-; DUMP: ContextIds: 2
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[BAR2]] to Caller: [[BAZ2]] AllocTypes: Cold ContextIds: 2
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[BAZ2]] to Caller: [[FOO2]] AllocTypes: Cold ContextIds: 2
-; DUMP: Clone of [[BAZ]]
-
-; DUMP: Node [[BAR2]]
-; DUMP: %call = call noalias noundef nonnull ptr @_Znam(i64 noundef 10) #6 (clone 0)
-; DUMP: AllocTypes: Cold
-; DUMP: ContextIds: 2
-; DUMP: CalleeEdges:
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[BAR2]] to Caller: [[BAZ2]] AllocTypes: Cold ContextIds: 2
-; DUMP: Clone of [[BAR]]
-
; DOT: digraph "postbuild" {
; DOT: label="postbuild";
@@ -234,22 +156,3 @@ attributes #6 = { builtin }
; DOT: Node[[MAIN2:0x[a-z0-9]+]] [shape=record,tooltip="N[[MAIN2]] ContextIds: 2",fillcolor="cyan",style="filled",style="filled",label="{OrigId: 15025054523792398438\nmain -\> _Z3foov}"];
; DOT: Node[[MAIN2]] -> Node[[FOO]][tooltip="ContextIds: 2",fillcolor="cyan"];
; DOT: }
-
-
-; DOTCLONED: digraph "cloned" {
-; DOTCLONED: label="cloned";
-; DOTCLONED: Node[[BAR:0x[a-z0-9]+]] [shape=record,tooltip="N[[BAR]] ContextIds: 1",fillcolor="brown1",style="filled",style="filled",label="{OrigId: Alloc0\n_Z3barv -\> _Znam}"];
-; DOTCLONED: Node[[BAZ:0x[a-z0-9]+]] [shape=record,tooltip="N[[BAZ]] ContextIds: 1",fillcolor="brown1",style="filled",style="filled",label="{OrigId: 12481870273128938184\n_Z3bazv -\> _Z3barv}"];
-; DOTCLONED: Node[[BAZ]] -> Node[[BAR]][tooltip="ContextIds: 1",fillcolor="brown1"];
-; DOTCLONED: Node[[FOO:0x[a-z0-9]+]] [shape=record,tooltip="N[[FOO]] ContextIds: 1",fillcolor="brown1",style="filled",style="filled",label="{OrigId: 2732490490862098848\n_Z3foov -\> _Z3bazv}"];
-; DOTCLONED: Node[[FOO]] -> Node[[BAZ]][tooltip="ContextIds: 1",fillcolor="brown1"];
-; DOTCLONED: Node[[MAIN1:0x[a-z0-9]+]] [shape=record,tooltip="N[[MAIN1]] ContextIds: 1",fillcolor="brown1",style="filled",style="filled",label="{OrigId: 8632435727821051414\nmain -\> _Z3foov}"];
-; DOTCLONED: Node[[MAIN1]] -> Node[[FOO]][tooltip="ContextIds: 1",fillcolor="brown1"];
-; DOTCLONED: Node[[MAIN2:0x[a-z0-9]+]] [shape=record,tooltip="N[[MAIN2]] ContextIds: 2",fillcolor="cyan",style="filled",style="filled",label="{OrigId: 15025054523792398438\nmain -\> _Z3foov}"];
-; DOTCLONED: Node[[MAIN2]] -> Node[[FOO2:0x[a-z0-9]+]][tooltip="ContextIds: 2",fillcolor="cyan"];
-; DOTCLONED: Node[[FOO2]] [shape=record,tooltip="N[[FOO2]] ContextIds: 2",fillcolor="cyan",style="filled",color="blue",style="filled,bold,dashed",label="{OrigId: 0\n_Z3foov -\> _Z3bazv}"];
-; DOTCLONED: Node[[FOO2]] -> Node[[BAZ2:0x[a-z0-9]+]][tooltip="ContextIds: 2",fillcolor="cyan"];
-; DOTCLONED: Node[[BAZ2]] [shape=record,tooltip="N[[BAZ2]] ContextIds: 2",fillcolor="cyan",style="filled",color="blue",style="filled,bold,dashed",label="{OrigId: 0\n_Z3bazv -\> _Z3barv}"];
-; DOTCLONED: Node[[BAZ2]] -> Node[[BAR2:0x[a-z0-9]+]][tooltip="ContextIds: 2",fillcolor="cyan"];
-; DOTCLONED: Node[[BAR2]] [shape=record,tooltip="N[[BAR2]] ContextIds: 2",fillcolor="cyan",style="filled",color="blue",style="filled,bold,dashed",label="{OrigId: Alloc0\n_Z3barv -\> _Znam}"];
-; DOTCLONED: }
diff --git a/llvm/test/Transforms/MemProfContextDisambiguation/duplicate-context-ids.ll b/llvm/test/Transforms/MemProfContextDisambiguation/duplicate-context-ids.ll
index aa5f539a61832..c5ed97f182a98 100644
--- a/llvm/test/Transforms/MemProfContextDisambiguation/duplicate-context-ids.ll
+++ b/llvm/test/Transforms/MemProfContextDisambiguation/duplicate-context-ids.ll
@@ -59,8 +59,6 @@
; RUN: cat %t.ccg.prestackupdate.dot | FileCheck %s --check-prefix=DOTPRE
; RUN: cat %t.ccg.postbuild.dot | FileCheck %s --check-prefix=DOTPOST
-;; We should clone D once for the cold allocations via C.
-; RUN: cat %t.ccg.cloned.dot | FileCheck %s --check-prefix=DOTCLONED
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
@@ -209,60 +207,6 @@ attributes #6 = { builtin }
; DUMP: Edge from Callee [[D]] to Caller: [[E]] AllocTypes: Cold ContextIds: 1
; DUMP: CallerEdges:
-; DUMP: CCG after cloning:
-; DUMP: Callsite Context Graph:
-; DUMP: Node [[D]]
-; DUMP: %call = call noalias noundef nonnull ptr @_Znam(i64 noundef 10) #6 (clone 0)
-; DUMP: AllocTypes: NotCold
-; DUMP: ContextIds: 2
-; DUMP: CalleeEdges:
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[D]] to Caller: [[F]] AllocTypes: NotCold ContextIds: 2
-; DUMP: Clones: [[D2:0x[a-z0-9]+]]
-
-; DUMP: Node [[F]]
-; DUMP: %call = call noundef ptr @_Z1Dv() (clone 0)
-; DUMP: AllocTypes: NotCold
-; DUMP: ContextIds: 2
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[D]] to Caller: [[F]] AllocTypes: NotCold ContextIds: 2
-; DUMP: CallerEdges:
-
-; DUMP: Node [[C2]]
-; DUMP: %call = call noundef ptr @_Z1Dv() (clone 0)
-; DUMP: AllocTypes: Cold
-; DUMP: ContextIds: 3
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[D2]] to Caller: [[C2]] AllocTypes: Cold ContextIds: 3
-; DUMP: CallerEdges:
-
-; DUMP: Node [[B]]
-; DUMP: %call.i = call noundef ptr @_Z1Dv() (clone 0)
-; DUMP: AllocTypes: Cold
-; DUMP: ContextIds: 4
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[D2]] to Caller: [[B]] AllocTypes: Cold ContextIds: 4
-; DUMP: CallerEdges:
-
-; DUMP: Node [[E]]
-; DUMP: %call.i = call noundef ptr @_Z1Dv() (clone 0)
-; DUMP: AllocTypes: Cold
-; DUMP: ContextIds: 1
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[D2]] to Caller: [[E]] AllocTypes: Cold ContextIds: 1
-; DUMP: CallerEdges:
-
-; DUMP: Node [[D2]]
-; DUMP: %call = call noalias noundef nonnull ptr @_Znam(i64 noundef 10) #6 (clone 0)
-; DUMP: AllocTypes: Cold
-; DUMP: ContextIds: 1 3 4
-; DUMP: CalleeEdges:
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[D2]] to Caller: [[E:0x[a-z0-9]+]] AllocTypes: Cold ContextIds: 1
-; DUMP: Edge from Callee [[D2]] to Caller: [[C2:0x[a-z0-9]+]] AllocTypes: Cold ContextIds: 3
-; DUMP: Edge from Callee [[D2]] to Caller: [[B:0x[a-z0-9]+]] AllocTypes: Cold ContextIds: 4
-; DUMP: Clone of [[D]]
-
; DOTPRE: digraph "prestackupdate" {
; DOTPRE: label="prestackupdate";
@@ -286,18 +230,3 @@ attributes #6 = { builtin }
; DOTPOST: Node[[E:0x[a-z0-9]+]] [shape=record,tooltip="N[[E]] ContextIds: 1",fillcolor="cyan",style="filled",style="filled",label="{OrigId: 0\n_Z1Ev -\> _Z1Dv}"];
; DOTPOST: Node[[E]] -> Node[[D]][tooltip="ContextIds: 1",fillcolor="cyan"];
; DOTPOST:}
-
-
-; DOTCLONED: digraph "cloned" {
-; DOTCLONED: label="cloned";
-; DOTCLONED: Node[[D:0x[a-z0-9]+]] [shape=record,tooltip="N[[D]] ContextIds: 2",fillcolor="brown1",style="filled",style="filled",label="{OrigId: Alloc0\n_Z1Dv -\> _Znam}"];
-; DOTCLONED: Node[[F:0x[a-z0-9]+]] [shape=record,tooltip="N[[F]] ContextIds: 2",fillcolor="brown1",style="filled",style="filled",label="{OrigId: 13543580133643026784\n_Z1Fv -\> _Z1Dv}"];
-; DOTCLONED: Node[[F]] -> Node[[D]][tooltip="ContextIds: 2",fillcolor="brown1"];
-; DOTCLONED: Node[[C:0x[a-z0-9]+]] [shape=record,tooltip="N[[C]] ContextIds: 3",fillcolor="cyan",style="filled",style="filled",label="{OrigId: 0\n_Z1Cv -\> _Z1Dv}"];
-; DOTCLONED: Node[[C]] -> Node[[D2:0x[a-z0-9]+]][tooltip="ContextIds: 3",fillcolor="cyan"];
-; DOTCLONED: Node[[B:0x[a-z0-9]+]] [shape=record,tooltip="N[[B]] ContextIds: 4",fillcolor="cyan",style="filled",style="filled",label="{OrigId: 0\n_Z1Bv -\> _Z1Dv}"];
-; DOTCLONED: Node[[B]] -> Node[[D2]][tooltip="ContextIds: 4",fillcolor="cyan"];
-; DOTCLONED: Node[[E:0x[a-z0-9]+]] [shape=record,tooltip="N[[E]] ContextIds: 1",fillcolor="cyan",style="filled",style="filled",label="{OrigId: 0\n_Z1Ev -\> _Z1Dv}"];
-; DOTCLONED: Node[[E]] -> Node[[D2]][tooltip="ContextIds: 1",fillcolor="cyan"];
-; DOTCLONED: Node[[D2]] [shape=record,tooltip="N[[D2]] ContextIds: 1 3 4",fillcolor="cyan",style="filled",color="blue",style="filled,bold,dashed",label="{OrigId: Alloc0\n_Z1Dv -\> _Znam}"];
-; DOTCLONED: }
diff --git a/llvm/test/Transforms/MemProfContextDisambiguation/indirectcall.ll b/llvm/test/Transforms/MemProfContextDisambiguation/indirectcall.ll
index e66ec0d76fe8b..9ebf219dd37a0 100644
--- a/llvm/test/Transforms/MemProfContextDisambiguation/indirectcall.ll
+++ b/llvm/test/Transforms/MemProfContextDisambiguation/indirectcall.ll
@@ -57,9 +57,6 @@
; RUN: %s -S 2>&1 | FileCheck %s --check-prefix=DUMP
; RUN: cat %t.ccg.postbuild.dot | FileCheck %s --check-prefix=DOT
-;; We should only create a single clone of foo, for the direct call
-;; from main allocating cold memory.
-; RUN: cat %t.ccg.cloned.dot | FileCheck %s --check-prefix=DOTCLONED
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
@@ -238,107 +235,6 @@ attributes #7 = { builtin }
; DUMP: Edge from Callee [[FOO]] to Caller: [[MAIN2]] AllocTypes: Cold ContextIds: 6
; DUMP: CallerEdges:
-; DUMP: CCG after cloning:
-; DUMP: Callsite Context Graph:
-; DUMP: Node [[FOO]]
-; DUMP: %call = call noalias noundef nonnull ptr @_Znam(i64 noundef 10) #7 (clone 0)
-; DUMP: AllocTypes: NotColdCold
-; DUMP: ContextIds: 1 2 3 4 5
-; DUMP: CalleeEdges:
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[FOO]] to Caller: [[AX]] AllocTypes: NotColdCold ContextIds: 1 2
-; DUMP: Edge from Callee [[FOO]] to Caller: [[BX]] AllocTypes: NotColdCold ContextIds: 4 5
-; DUMP: Edge from Callee [[FOO]] to Caller: [[MAIN1]] AllocTypes: NotCold ContextIds: 3
-; DUMP: Clones: [[FOO2:0x[a-z0-9]+]]
-
-; DUMP: Node [[AX]]
-; DUMP: %call = call noundef ptr @_Z3foov() (clone 0)
-; DUMP: AllocTypes: NotColdCold
-; DUMP: ContextIds: 1 2
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[FOO]] to Caller: [[AX]] AllocTypes: NotColdCold ContextIds: 1 2
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[AX]] to Caller: [[BAR]] AllocTypes: NotColdCold ContextIds: 1 2
-
-; DUMP: Node [[BAR]]
-; DUMP: null Call
-; DUMP: AllocTypes: NotColdCold
-; DUMP: ContextIds: 1 2 4 5
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[AX]] to Caller: [[BAR]] AllocTypes: NotColdCold ContextIds: 1 2
-; DUMP: Edge from Callee [[BX]] to Caller: [[BAR]] AllocTypes: NotColdCold ContextIds: 4 5
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[BAR]] to Caller: [[MAIN3]] AllocTypes: NotCold ContextIds: 1
-; DUMP: Edge from Callee [[BAR]] to Caller: [[MAIN4]] AllocTypes: Cold ContextIds: 2
-; DUMP: Edge from Callee [[BAR]] to Caller: [[MAIN5]] AllocTypes: Cold ContextIds: 4
-; DUMP: Edge from Callee [[BAR]] to Caller: [[MAIN6]] AllocTypes: NotCold ContextIds: 5
-
-; DUMP: Node [[MAIN3]]
-; DUMP: %call4 = call noundef ptr @_Z3barP1A(ptr noundef %a) (clone 0)
-; DUMP: AllocTypes: NotCold
-; DUMP: ContextIds: 1
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[BAR]] to Caller: [[MAIN3]] AllocTypes: NotCold ContextIds: 1
-; DUMP: CallerEdges:
-
-; DUMP: Node [[MAIN4]]
-; DUMP: %call5 = call noundef ptr @_Z3barP1A(ptr noundef %a) (clone 0)
-; DUMP: AllocTypes: Cold
-; DUMP: ContextIds: 2
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[BAR]] to Caller: [[MAIN4]] AllocTypes: Cold ContextIds: 2
-; DUMP: CallerEdges:
-
-; DUMP: Node [[MAIN1]]
-; DUMP: %call = call noundef ptr @_Z3foov() (clone 0)
-; DUMP: AllocTypes: NotCold
-; DUMP: ContextIds: 3
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[FOO]] to Caller: [[MAIN1]] AllocTypes: NotCold ContextIds: 3
-; DUMP: CallerEdges:
-
-; DUMP: Node [[BX]]
-; DUMP: %call = call noundef ptr @_Z3foov() (clone 0)
-; DUMP: AllocTypes: NotColdCold
-; DUMP: ContextIds: 4 5
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[FOO]] to Caller: [[BX]] AllocTypes: NotColdCold ContextIds: 4 5
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[BX]] to Caller: [[BAR]] AllocTypes: NotColdCold ContextIds: 4 5
-
-; DUMP: Node [[MAIN5]]
-; DUMP: %call2 = call noundef ptr @_Z3barP1A(ptr noundef %b) (clone 0)
-; DUMP: AllocTypes: Cold
-; DUMP: ContextIds: 4
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[BAR]] to Caller: [[MAIN5]] AllocTypes: Cold ContextIds: 4
-; DUMP: CallerEdges:
-
-; DUMP: Node [[MAIN6]]
-; DUMP: %call3 = call noundef ptr @_Z3barP1A(ptr noundef %b) (clone 0)
-; DUMP: AllocTypes: NotCold
-; DUMP: ContextIds: 5
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[BAR]] to Caller: [[MAIN6]] AllocTypes: NotCold ContextIds: 5
-; DUMP: CallerEdges:
-
-; DUMP: Node [[MAIN2]]
-; DUMP: %call1 = call noundef ptr @_Z3foov() (clone 0)
-; DUMP: AllocTypes: Cold
-; DUMP: ContextIds: 6
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[FOO2]] to Caller: [[MAIN2]] AllocTypes: Cold ContextIds: 6
-; DUMP: CallerEdges:
-
-; DUMP: Node [[FOO2]]
-; DUMP: %call = call noalias noundef nonnull ptr @_Znam(i64 noundef 10) #7 (clone 0)
-; DUMP: AllocTypes: Cold
-; DUMP: ContextIds: 6
-; DUMP: CalleeEdges:
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[FOO2]] to Caller: [[MAIN2]] AllocTypes: Cold ContextIds: 6
-; DUMP: Clone of [[FOO]]
-
; DOT: digraph "postbuild" {
; DOT: label="postbuild";
@@ -363,29 +259,3 @@ attributes #7 = { builtin }
; DOT: Node[[MAIN6:0x[a-z0-9]+]] [shape=record,tooltip="N[[MAIN6]] ContextIds: 6",fillcolor="cyan",style="filled",style="filled",label="{OrigId: 15025054523792398438\nmain -\> _Z3foov}"];
; DOT: Node[[MAIN6]] -> Node[[FOO]][tooltip="ContextIds: 6",fillcolor="cyan"];
; DOT: }
-
-
-; DOTCLONED: digraph "cloned" {
-; DOTCLONED: label="cloned";
-; DOTCLONED: Node[[FOO2:0x[a-z0-9]+]] [shape=record,tooltip="N[[FOO2]] ContextIds: 1 2 3 4 5",fillcolor="mediumorchid1",style="filled",style="filled",label="{OrigId: Alloc0\n_Z3foov -\> _Znam}"];
-; DOTCLONED: Node[[AX:0x[a-z0-9]+]] [shape=record,tooltip="N[[AX]] ContextIds: 1 2",fillcolor="mediumorchid1",style="filled",style="filled",label="{OrigId: 8256774051149711748\n_ZN1A1xEv -\> _Z3foov}"];
-; DOTCLONED: Node[[AX]] -> Node[[FOO2]][tooltip="ContextIds: 1 2",fillcolor="mediumorchid1"];
-; DOTCLONED: Node[[BAR:0x[a-z0-9]+]] [shape=record,tooltip="N[[BAR]] ContextIds: 1 2 4 5",fillcolor="mediumorchid1",style="filled",style="filled",label="{OrigId: 13626499562959447861\nnull call (external)}"];
-; DOTCLONED: Node[[BAR]] -> Node[[AX]][tooltip="ContextIds: 1 2",fillcolor="mediumorchid1"];
-; DOTCLONED: Node[[BAR]] -> Node[[BX:0x[a-z0-9]+]][tooltip="ContextIds: 4 5",fillcolor="mediumorchid1"];
-; DOTCLONED: Node[[MAIN1:0x[a-z0-9]+]] [shape=record,tooltip="N[[MAIN1]] ContextIds: 1",fillcolor="brown1",style="filled",style="filled",label="{OrigId: 748269490701775343\nmain -\> _Z3barP1A}"];
-; DOTCLONED: Node[[MAIN1]] -> Node[[BAR]][tooltip="ContextIds: 1",fillcolor="brown1"];
-; DOTCLONED: Node[[MAIN2:0x[a-z0-9]+]] [shape=record,tooltip="N[[MAIN2]] ContextIds: 2",fillcolor="cyan",style="filled",style="filled",label="{OrigId: 12699492813229484831\nmain -\> _Z3barP1A}"];
-; DOTCLONED: Node[[MAIN2]] -> Node[[BAR]][tooltip="ContextIds: 2",fillcolor="cyan"];
-; DOTCLONED: Node[[MAIN3:0x[a-z0-9]+]] [shape=record,tooltip="N[[MAIN3]] ContextIds: 3",fillcolor="brown1",style="filled",style="filled",label="{OrigId: 8632435727821051414\nmain -\> _Z3foov}"];
-; DOTCLONED: Node[[MAIN3]] -> Node[[FOO2]][tooltip="ContextIds: 3",fillcolor="brown1"];
-; DOTCLONED: Node[[BX]] [shape=record,tooltip="N[[BX]] ContextIds: 4 5",fillcolor="mediumorchid1",style="filled",style="filled",label="{OrigId: 13614864978754796978\n_ZN1B1xEv -\> _Z3foov}"];
-; DOTCLONED: Node[[BX]] -> Node[[FOO2]][tooltip="ContextIds: 4 5",fillcolor="mediumorchid1"];
-; DOTCLONED: Node[[MAIN4:0x[a-z0-9]+]] [shape=record,tooltip="N[[MAIN4]] ContextIds: 4",fillcolor="cyan",style="filled",style="filled",label="{OrigId: 6792096022461663180\nmain -\> _Z3barP1A}"];
-; DOTCLONED: Node[[MAIN4]] -> Node[[BAR]][tooltip="ContextIds: 4",fillcolor="cyan"];
-; DOTCLONED: Node[[MAIN5:0x[a-z0-9]+]] [shape=record,tooltip="N[[MAIN5]] ContextIds: 5",fillcolor="brown1",style="filled",style="filled",label="{OrigId: 15737101490731057601\nmain -\> _Z3barP1A}"];
-; DOTCLONED: Node[[MAIN5]] -> Node[[BAR]][tooltip="ContextIds: 5",fillcolor="brown1"];
-; DOTCLONED: Node[[MAIN6:0x[a-z0-9]+]] [shape=record,tooltip="N[[MAIN6]] ContextIds: 6",fillcolor="cyan",style="filled",style="filled",label="{OrigId: 15025054523792398438\nmain -\> _Z3foov}"];
-; DOTCLONED: Node[[MAIN6]] -> Node[[FOO2:0x[a-z0-9]+]][tooltip="ContextIds: 6",fillcolor="cyan"];
-; DOTCLONED: Node[[FOO2]] [shape=record,tooltip="N[[FOO2]] ContextIds: 6",fillcolor="cyan",style="filled",color="blue",style="filled,bold,dashed",label="{OrigId: Alloc0\n_Z3foov -\> _Znam}"];
-; DOTCLONED: }
diff --git a/llvm/test/Transforms/MemProfContextDisambiguation/inlined.ll b/llvm/test/Transforms/MemProfContextDisambiguation/inlined.ll
index a2fa703e04e7b..59f135ca06627 100644
--- a/llvm/test/Transforms/MemProfContextDisambiguation/inlined.ll
+++ b/llvm/test/Transforms/MemProfContextDisambiguation/inlined.ll
@@ -46,9 +46,6 @@
; RUN: %s -S 2>&1 | FileCheck %s --check-prefix=DUMP
; RUN: cat %t.ccg.postbuild.dot | FileCheck %s --check-prefix=DOT
-;; We should create clones for foo and bar for the call from main to allocate
-;; cold memory.
-; RUN: cat %t.ccg.cloned.dot | FileCheck %s --check-prefix=DOTCLONED
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
@@ -174,82 +171,6 @@ attributes #7 = { builtin }
; DUMP: Edge from Callee [[FOO]] to Caller: [[MAIN1]] AllocTypes: NotCold ContextIds: 1
; DUMP: Edge from Callee [[FOO]] to Caller: [[MAIN2]] AllocTypes: Cold ContextIds: 2
-; DUMP: CCG after cloning:
-; DUMP: Callsite Context Graph:
-; DUMP: Node [[BAR]]
-; DUMP: %call = call noalias noundef nonnull ptr @_Znam(i64 noundef 10) #7 (clone 0)
-; DUMP: AllocTypes: NotCold
-; DUMP: ContextIds: 1
-; DUMP: CalleeEdges:
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[BAR]] to Caller: [[FOO]] AllocTypes: NotCold ContextIds: 1
-; DUMP: Clones: [[BAR2:0x[a-z0-9]+]]
-
-; DUMP: Node [[FOO2]]
-; DUMP: null Call
-; DUMP: AllocTypes: NotColdCold
-; DUMP: ContextIds: 3 4
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[BAZ]] to Caller: [[FOO2]] AllocTypes: NotColdCold ContextIds: 3 4
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[FOO2]] to Caller: [[MAIN1]] AllocTypes: NotCold ContextIds: 3
-; DUMP: Edge from Callee [[FOO2]] to Caller: [[MAIN2]] AllocTypes: Cold ContextIds: 4
-
-; DUMP: Node [[MAIN1]]
-; DUMP: %call = call noundef ptr @_Z3foov() (clone 0)
-; DUMP: AllocTypes: NotCold
-; DUMP: ContextIds: 1 3
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[FOO2]] to Caller: [[MAIN1]] AllocTypes: NotCold ContextIds: 3
-; DUMP: Edge from Callee [[FOO]] to Caller: [[MAIN1]] AllocTypes: NotCold ContextIds: 1
-; DUMP: CallerEdges:
-
-; DUMP: Node [[MAIN2]]
-; DUMP: %call1 = call noundef ptr @_Z3foov() (clone 0)
-; DUMP: AllocTypes: Cold
-; DUMP: ContextIds: 2 4
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[FOO2]] to Caller: [[MAIN2]] AllocTypes: Cold ContextIds: 4
-; DUMP: Edge from Callee [[FOO3:0x[a-z0-9]+]] to Caller: [[MAIN2]] AllocTypes: Cold ContextIds: 2
-; DUMP: CallerEdges:
-
-; DUMP: Node [[BAZ]]
-; DUMP: %call.i = call noalias noundef nonnull ptr @_Znam(i64 noundef 10) #7 (clone 0)
-; DUMP: AllocTypes: NotColdCold
-; DUMP: ContextIds: 3 4
-; DUMP: CalleeEdges:
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[BAZ]] to Caller: [[FOO2]] AllocTypes: NotColdCold ContextIds: 3 4
-
-; DUMP: Node [[FOO]]
-; DUMP: %call.i = call noundef ptr @_Z3barv() (clone 0)
-; DUMP: AllocTypes: NotCold
-; DUMP: ContextIds: 1
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[BAR]] to Caller: [[FOO]] AllocTypes: NotCold ContextIds: 1
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[FOO]] to Caller: [[MAIN1]] AllocTypes: NotCold ContextIds: 1
-; DUMP: Clones: [[FOO3]]
-
-; DUMP: Node [[FOO3]]
-; DUMP: %call.i = call noundef ptr @_Z3barv() (clone 0)
-; DUMP: AllocTypes: Cold
-; DUMP: ContextIds: 2
-; DUMP: CalleeEdges:
-; DUMP: Edge from Callee [[BAR2]] to Caller: [[FOO3]] AllocTypes: Cold ContextIds: 2
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[FOO3]] to Caller: [[MAIN2]] AllocTypes: Cold ContextIds: 2
-; DUMP: Clone of [[FOO]]
-
-; DUMP: Node [[BAR2]]
-; DUMP: %call = call noalias noundef nonnull ptr @_Znam(i64 noundef 10) #7 (clone 0)
-; DUMP: AllocTypes: Cold
-; DUMP: ContextIds: 2
-; DUMP: CalleeEdges:
-; DUMP: CallerEdges:
-; DUMP: Edge from Callee [[BAR2]] to Caller: [[FOO3]] AllocTypes: Cold ContextIds: 2
-; DUMP: Clone of [[BAR]]
-
; DOT: digraph "postbuild" {
; DOT: label="postbuild";
@@ -266,23 +187,3 @@ attributes #7 = { builtin }
; DOT: Node[[FOO2]] [shape=record,tooltip="N[[FOO2]] ContextIds: 1 2",fillcolor="mediumorchid1",style="filled",style="filled",label="{OrigId: 0\n_Z3foov -\> _Z3barv}"];
; DOT: Node[[FOO2]] -> Node[[BAR]][tooltip="ContextIds: 1 2",fillcolor="mediumorchid1"];
; DOT: }
-
-
-; DOTCLONED: digraph "cloned" {
-; DOTCLONED: label="cloned";
-; DOTCLONED: Node[[BAR:0x[a-z0-9]+]] [shape=record,tooltip="N[[BAR]] ContextIds: 1",fillcolor="brown1",style="filled",style="filled",label="{OrigId: Alloc0\n_Z3barv -\> _Znam}"];
-; DOTCLONED: Node[[FOO2:0x[a-z0-9]+]] [shape=record,tooltip="N[[FOO2]] ContextIds: 3 4",fillcolor="mediumorchid1",style="filled",style="filled",label="{OrigId: 2732490490862098848\nnull call (external)}"];
-; DOTCLONED: Node[[FOO2]] -> Node[[BAZ:0x[a-z0-9]+]][tooltip="ContextIds: 3 4",fillcolor="mediumorchid1"];
-; DOTCLONED: Node[[MAIN1:0x[a-z0-9]+]] [shape=record,tooltip="N[[MAIN1]] ContextIds: 1 3",fillcolor="brown1",style="filled",style="filled",label="{OrigId: 8632435727821051414\nmain -\> _Z3foov}"];
-; DOTCLONED: Node[[MAIN1]] -> Node[[FOO2]][tooltip="ContextIds: 3",fillcolor="brown1"];
-; DOTCLONED: Node[[MAIN1]] -> Node[[FOO:0x[a-z0-9]+]][tooltip="ContextIds: 1",fillcolor="brown1"];
-; DOTCLONED: Node[[MAIN2:0x[a-z0-9]+]] [shape=record,tooltip="N[[MAIN2]] ContextIds: 2 4",fillcolor="cyan",style="filled",style="filled",label="{OrigId: 15025054523792398438\nmain -\> _Z3foov}"];
-; DOTCLONED: Node[[MAIN2]] -> Node[[FOO2]][tooltip="ContextIds: 4",fillcolor="cyan"];
-; DOTCLONED: Node[[MAIN2]] -> Node[[FOO3:0x[a-z0-9]+]][tooltip="ContextIds: 2",fillcolor="cyan"];
-; DOTCLONED: Node[[BAZ]] [shape=record,tooltip="N[[BAZ]] ContextIds: 3 4",fillcolor="mediumorchid1",style="filled",style="filled",label="{OrigId: Alloc2\n_Z3bazv -\> _Znam}"];
-; DOTCLONED: Node[[FOO]] [shape=record,tooltip="N[[FOO]] ContextIds: 1",fillcolor="brown1",style="filled",style="filled",label="{OrigId: 0\n_Z3foov -\> _Z3barv}"];
-; DOTCLONED: Node[[FOO]] -> Node[[BAR]][tooltip="ContextIds: 1",fillcolor="brown1"];
-; DOTCLONED: Node[[FOO3]] [shape=record,tooltip="N[[FOO3]] ContextIds: 2",fillcolor="cyan",style="filled",color="blue",style="filled,bold,dashed",label="{OrigId: 0\n_Z3foov -\> _Z3barv}"];
-; DOTCLONED: Node[[FOO3]] -> Node[[BAR2:0x[a-z0-9]+]][tooltip="ContextIds: 2",fillcolor="cyan"];
-; DOTCLONED: Node[[BAR2]] [shape=record,tooltip="N[[BAR2]] ContextIds: 2",fillcolor="cyan",style="filled",color="blue",style="filled,bold,dashed",label="{OrigId: Alloc0\n_Z3barv -\> _Znam}"];
-; DOTCLONED: }
More information about the llvm-commits
mailing list