Lines Matching defs:ContextNode

255   struct ContextNode {
361 // List of clones of this ContextNode, initially empty.
362 std::vector<ContextNode *> Clones;
365 ContextNode *CloneOf = nullptr;
367 ContextNode(bool IsAllocation) : IsAllocation(IsAllocation), Call() {}
369 ContextNode(bool IsAllocation, CallInfo C)
372 void addClone(ContextNode *Clone) {
383 ContextNode *getOrigNode() {
389 void addOrUpdateCallerEdge(ContextNode *Caller, AllocationType AllocType,
392 ContextEdge *findEdgeFromCallee(const ContextNode *Callee);
393 ContextEdge *findEdgeFromCaller(const ContextNode *Caller);
414 friend raw_ostream &operator<<(raw_ostream &OS, const ContextNode &Node) {
420 /// Edge in the Callsite Context Graph from a ContextNode N to a caller or
423 ContextNode *Callee;
424 ContextNode *Caller;
433 ContextEdge(ContextNode *Callee, ContextNode *Caller, uint8_t AllocType,
474 void removeNoneTypeCalleeEdges(ContextNode *Node);
475 void removeNoneTypeCallerEdges(ContextNode *Node);
477 recursivelyRemoveNoneTypeCalleeEdges(ContextNode *Node,
478 DenseSet<const ContextNode *> &Visited);
489 ContextNode *addAllocNode(CallInfo Call, const FuncTy *F);
493 void addStackNodesForMIB(ContextNode *AllocNode,
513 ContextNode *Node, ArrayRef<CallInfo> AllCalls,
514 std::vector<std::pair<CallInfo, ContextNode *>> &NewCallToNode);
521 std::map<const ContextNode *, const FuncTy *> NodeToCallingFunc;
557 ContextNode *Node, DenseSet<const ContextNode *> &Visited,
575 void connectNewNode(ContextNode *NewNode, ContextNode *OrigNode,
594 MapVector<CallInfo, ContextNode *> &TailCallToContextNodeMap);
663 // Create and return a new ContextNode.
664 ContextNode *createNewNode(bool IsAllocation, const FuncTy *F = nullptr,
666 NodeOwner.push_back(std::make_unique<ContextNode>(IsAllocation, C));
674 ContextNode *getNodeForInst(const CallInfo &C);
675 ContextNode *getNodeForAlloc(const CallInfo &C);
676 ContextNode *getNodeForStackId(uint64_t StackId);
697 ContextNode *
706 ContextNode *NewCallee,
716 ContextNode *NewCaller);
722 void identifyClones(ContextNode *Node, DenseSet<const ContextNode *> &Visited,
738 DenseMap<uint64_t, ContextNode *> StackEntryIdToContextNodeMap;
741 MapVector<CallInfo, ContextNode *> AllocationCallToContextNodeMap;
742 MapVector<CallInfo, ContextNode *> NonAllocationCallToContextNodeMap;
744 /// Owner of all ContextNode unique_ptrs.
745 std::vector<std::unique_ptr<ContextNode>> NodeOwner;
755 using ContextNode =
756 typename CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextNode;
977 const ContextNode<DerivedCCG, FuncTy, CallTy> *Clone) {
978 const ContextNode<DerivedCCG, FuncTy, CallTy> *Node = Clone->CloneOf;
984 DenseMap<const ContextNode<DerivedCCG, FuncTy, CallTy> *, uint8_t>
1012 typename CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextNode *
1015 ContextNode *Node = getNodeForAlloc(C);
1023 typename CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextNode *
1030 typename CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextNode *
1040 void CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextNode::
1041 addOrUpdateCallerEdge(ContextNode *Caller, AllocationType AllocType,
1086 DerivedCCG, FuncTy, CallTy>::removeNoneTypeCalleeEdges(ContextNode *Node) {
1099 DerivedCCG, FuncTy, CallTy>::removeNoneTypeCallerEdges(ContextNode *Node) {
1113 CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextNode::
1114 findEdgeFromCallee(const ContextNode *Callee) {
1123 CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextNode::
1124 findEdgeFromCaller(const ContextNode *Caller) {
1132 void CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextNode::
1143 void CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextNode::
1198 typename CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextNode *
1202 ContextNode *AllocNode = createNewNode(/*IsAllocation=*/true, F, Call);
1227 ContextNode *AllocNode, CallStack<NodeT, IteratorT> &StackContext,
1248 ContextNode *PrevNode = AllocNode;
1257 ContextNode *StackNode = getNodeForStackId(StackId);
1307 auto UpdateCallers = [&](ContextNode *Node,
1314 ContextNode *NextNode = Edge->Caller;
1334 ContextNode *NewNode, ContextNode *OrigNode, bool TowardsCallee,
1387 static void checkNode(const ContextNode<DerivedCCG, FuncTy, CallTy> *Node,
1429 DenseSet<ContextNode<DerivedCCG, FuncTy, CallTy> *> NodeSet;
1439 ContextNode *Node, DenseSet<const ContextNode *> &Visited,
1494 ContextNode *LastNode = getNodeForStackId(LastId);
1499 ContextNode *LastNode = Node;
1543 ContextNode *PrevNode = LastNode;
1549 ContextNode *CurNode = getNodeForStackId(Id);
1576 ContextNode *NewNode = createNewNode(/*IsAllocation=*/false, Func, Call);
1581 ContextNode *FirstNode = getNodeForStackId(Ids[0]);
1598 ContextNode *CurNode = getNodeForStackId(Id);
1622 ContextNode *CurNode = getNodeForStackId(Id);
1705 ContextNode *LastNode = getNodeForStackId(LastId);
1743 ContextNode *PrevNode = LastNode;
1744 ContextNode *CurNode = LastNode;
1875 DenseSet<const ContextNode *> Visited;
1962 ContextNode *Node = getNodeForStackId(StackId);
2153 MapVector<CallInfo, ContextNode *> TailCallToContextNodeMap;
2155 std::vector<std::pair<CallInfo, ContextNode *>> NewCallToNode;
2261 ContextNode *Node, ArrayRef<CallInfo> AllCalls,
2262 std::vector<std::pair<CallInfo, ContextNode *>> &NewCallToNode) {
2268 ContextNode *Node = nullptr;
2285 DenseMap<ContextNode *, CallsWithSameCallee *> CalleeNodeToCallInfo;
2310 ContextNode *UnmatchedCalleesNode = nullptr;
2324 ContextNode *CallerNodeToUse = nullptr;
2396 MapVector<CallInfo, ContextNode *> &TailCallToContextNodeMap) {
2411 auto AddEdge = [Edge, &EI](ContextNode *Caller, ContextNode *Callee) {
2442 ContextNode *NewNode = nullptr;
2767 void CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextNode::dump()
2774 void CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextNode::print(
2900 using NodeRef = const ContextNode<DerivedCCG, FuncTy, CallTy> *;
2902 using NodePtrTy = std::unique_ptr<ContextNode<DerivedCCG, FuncTy, CallTy>>;
2922 static const ContextNode<DerivedCCG, FuncTy, CallTy> *
3044 typename CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextNode *
3048 ContextNode *Node = Edge->Callee;
3050 ContextNode *Clone =
3062 ContextNode *NewCallee, bool NewClone,
3068 ContextNode *OldCallee = Edge->Callee;
3178 ContextNode *NewCaller) {
3180 ContextNode *OldCaller = Edge->Caller;
3261 ContextNode *Node, DenseSet<const ContextNode *> &Visited) {
3286 DenseSet<const ContextNode *> Visited;
3308 ContextNode *Node, DenseSet<const ContextNode *> &Visited,
3467 ContextNode *Clone = nullptr;
3669 DenseMap<ContextNode *, FuncInfo> CallsiteToCalleeFuncCloneMap;
3673 auto RecordCalleeFuncOfCallsite = [&](ContextNode *Caller,
3688 ContextNode *Node = getNodeForInst(Call);
3699 std::map<FuncInfo, ContextNode *> FuncCloneToCurNodeCloneMap;
3705 ContextNode *CallsiteClone,
3729 std::deque<ContextNode *> ClonesWorklist;
3741 ContextNode *Clone = ClonesWorklist.front();
3871 ContextNode *Callee = CalleeEdge->Callee;
3877 ContextNode *NewClone = moveEdgeToNewCalleeClone(CalleeEdge);
3935 std::map<FuncInfo, ContextNode *> FuncCloneToNewCallsiteCloneMap;
3987 ContextNode *NewClone =
3994 ContextNode *NewClone = moveEdgeToNewCalleeClone(Edge);
4076 auto UpdateCalls = [&](ContextNode *Node,
4077 DenseSet<const ContextNode *> &Visited,
4139 DenseSet<const ContextNode *> Visited;