Lines Matching defs:ContextNode

235   struct ContextNode {
334 // List of clones of this ContextNode, initially empty.
335 std::vector<ContextNode *> Clones;
338 ContextNode *CloneOf = nullptr;
340 ContextNode(bool IsAllocation) : IsAllocation(IsAllocation), Call() {}
342 ContextNode(bool IsAllocation, CallInfo C)
345 void addClone(ContextNode *Clone) {
356 ContextNode *getOrigNode() {
362 void addOrUpdateCallerEdge(ContextNode *Caller, AllocationType AllocType,
365 ContextEdge *findEdgeFromCallee(const ContextNode *Callee);
366 ContextEdge *findEdgeFromCaller(const ContextNode *Caller);
387 friend raw_ostream &operator<<(raw_ostream &OS, const ContextNode &Node) {
393 /// Edge in the Callsite Context Graph from a ContextNode N to a caller or
396 ContextNode *Callee;
397 ContextNode *Caller;
406 ContextEdge(ContextNode *Callee, ContextNode *Caller, uint8_t AllocType,
424 void removeNoneTypeCalleeEdges(ContextNode *Node);
426 recursivelyRemoveNoneTypeCalleeEdges(ContextNode *Node,
427 DenseSet<const ContextNode *> &Visited);
438 ContextNode *addAllocNode(CallInfo Call, const FuncTy *F);
442 void addStackNodesForMIB(ContextNode *AllocNode,
461 std::map<const ContextNode *, const FuncTy *> NodeToCallingFunc;
476 ContextNode *Node, DenseSet<const ContextNode *> &Visited,
493 void connectNewNode(ContextNode *NewNode, ContextNode *OrigNode,
512 MapVector<CallInfo, ContextNode *> &TailCallToContextNodeMap);
566 ContextNode *getNodeForInst(const CallInfo &C);
567 ContextNode *getNodeForAlloc(const CallInfo &C);
568 ContextNode *getNodeForStackId(uint64_t StackId);
590 ContextNode *
601 ContextNode *NewCallee,
610 void identifyClones(ContextNode *Node, DenseSet<const ContextNode *> &Visited,
624 DenseMap<uint64_t, ContextNode *> StackEntryIdToContextNodeMap;
627 MapVector<CallInfo, ContextNode *> AllocationCallToContextNodeMap;
628 MapVector<CallInfo, ContextNode *> NonAllocationCallToContextNodeMap;
630 /// Owner of all ContextNode unique_ptrs.
631 std::vector<std::unique_ptr<ContextNode>> NodeOwner;
641 using ContextNode =
642 typename CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextNode;
852 typename CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextNode *
855 ContextNode *Node = getNodeForAlloc(C);
863 typename CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextNode *
870 typename CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextNode *
880 void CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextNode::
881 addOrUpdateCallerEdge(ContextNode *Caller, AllocationType AllocType,
898 DerivedCCG, FuncTy, CallTy>::removeNoneTypeCalleeEdges(ContextNode *Node) {
912 CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextNode::
913 findEdgeFromCallee(const ContextNode *Callee) {
922 CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextNode::
923 findEdgeFromCaller(const ContextNode *Caller) {
931 void CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextNode::
942 void CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextNode::
995 typename CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextNode *
1000 std::make_unique<ContextNode>(/*IsAllocation=*/true, Call));
1001 ContextNode *AllocNode = NodeOwner.back().get();
1027 ContextNode *AllocNode, CallStack<NodeT, IteratorT> &StackContext,
1049 ContextNode *PrevNode = AllocNode;
1058 ContextNode *StackNode = getNodeForStackId(StackId);
1061 std::make_unique<ContextNode>(/*IsAllocation=*/false));
1110 auto UpdateCallers = [&](ContextNode *Node,
1117 ContextNode *NextNode = Edge->Caller;
1137 ContextNode *NewNode, ContextNode *OrigNode, bool TowardsCallee,
1196 static void checkNode(const ContextNode<DerivedCCG, FuncTy, CallTy> *Node,
1233 assignStackNodesPostOrder(ContextNode *Node,
1234 DenseSet<const ContextNode *> &Visited,
1284 ContextNode *LastNode = getNodeForStackId(LastId);
1297 ContextNode *FirstNode = getNodeForStackId(Ids[0]);
1307 ContextNode *PrevNode = nullptr;
1309 ContextNode *CurNode = getNodeForStackId(Id);
1335 std::make_unique<ContextNode>(/*IsAllocation=*/false, Call));
1336 ContextNode *NewNode = NodeOwner.back().get();
1355 ContextNode *CurNode = getNodeForStackId(Id);
1381 ContextNode *CurNode = getNodeForStackId(Id);
1451 ContextNode *LastNode = getNodeForStackId(LastId);
1474 ContextNode *PrevNode = LastNode;
1475 ContextNode *CurNode = LastNode;
1580 DenseSet<const ContextNode *> Visited;
1662 ContextNode *Node = getNodeForStackId(StackId);
1830 MapVector<CallInfo, ContextNode *> TailCallToContextNodeMap;
1882 MapVector<CallInfo, ContextNode *> &TailCallToContextNodeMap) {
1897 auto AddEdge = [Edge, &EI](ContextNode *Caller, ContextNode *Callee) {
1928 ContextNode *NewNode = nullptr;
1937 std::make_unique<ContextNode>(/*IsAllocation=*/false, NewCall));
2213 void CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextNode::dump()
2220 void CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextNode::print(
2328 using NodeRef = const ContextNode<DerivedCCG, FuncTy, CallTy> *;
2330 using NodePtrTy = std::unique_ptr<ContextNode<DerivedCCG, FuncTy, CallTy>>;
2350 static const ContextNode<DerivedCCG, FuncTy, CallTy> *
2472 typename CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextNode *
2476 ContextNode *Node = Edge->Callee;
2478 std::make_unique<ContextNode>(Node->IsAllocation, Node->Call));
2479 ContextNode *Clone = NodeOwner.back().get();
2491 ContextNode *NewCallee, EdgeIter *CallerEdgeI,
2498 ContextNode *OldCallee = Edge->Callee;
2613 ContextNode *Node, DenseSet<const ContextNode *> &Visited) {
2638 DenseSet<const ContextNode *> Visited;
2660 ContextNode *Node, DenseSet<const ContextNode *> &Visited,
2799 ContextNode *Clone = nullptr;
2977 DenseMap<ContextNode *, FuncInfo> CallsiteToCalleeFuncCloneMap;
2981 auto RecordCalleeFuncOfCallsite = [&](ContextNode *Caller,
2996 ContextNode *Node = getNodeForInst(Call);
3007 std::map<FuncInfo, ContextNode *> FuncCloneToCurNodeCloneMap;
3013 ContextNode *CallsiteClone,
3029 std::deque<ContextNode *> ClonesWorklist;
3041 ContextNode *Clone = ClonesWorklist.front();
3157 ContextNode *Callee = CalleeEdge->Callee;
3163 ContextNode *NewClone = moveEdgeToNewCalleeClone(CalleeEdge);
3211 std::map<FuncInfo, ContextNode *> FuncCloneToNewCallsiteCloneMap;
3265 ContextNode *NewClone =
3272 ContextNode *NewClone = moveEdgeToNewCalleeClone(Edge, &EI);
3356 auto UpdateCalls = [&](ContextNode *Node,
3357 DenseSet<const ContextNode *> &Visited,
3391 DenseSet<const ContextNode *> Visited;