Lines Matching refs:GepNode
69 struct GepNode;
70 using NodeSet = std::set<GepNode *>;
71 using NodeToValueMap = std::map<GepNode *, Value *>;
72 using NodeVect = std::vector<GepNode *>;
73 using NodeChildrenMap = std::map<GepNode *, NodeVect>;
75 using NodeToUsesMap = std::map<GepNode *, UseSet>;
82 void insert(const GepNode *N) { Map.insert(std::make_pair(N, ++LastNum)); } in insert()
85 bool operator()(const GepNode *N1, const GepNode *N2) const { in operator ()()
92 std::map<const GepNode *, unsigned> Map;
118 using ValueToNodeMap = std::map<Value *, GepNode *>;
120 using NodeToValuesMap = std::map<GepNode *, ValueVect>;
128 BasicBlock *recalculatePlacement(GepNode *Node, NodeChildrenMap &NCM,
130 BasicBlock *recalculatePlacementRec(GepNode *Node, NodeChildrenMap &NCM,
133 bool isInvariantIn(GepNode *Node, Loop *L);
135 BasicBlock *adjustForInvariance(GepNode *Node, NodeChildrenMap &NCM,
137 void separateChainForNode(GepNode *Node, Use *U, NodeToValueMap &Loc);
138 void separateConstantChains(GepNode *Node, NodeChildrenMap &NCM,
144 void getAllUsersForNode(GepNode *Node, ValueVect &Values,
153 SpecificBumpPtrAllocator<GepNode> *Mem;
175 struct GepNode { struct
186 GepNode *Parent;
192 GepNode() : Parent(nullptr) {} in GepNode() argument
193 GepNode(const GepNode *N) : Flags(N->Flags), Idx(N->Idx), PTy(N->PTy) { in GepNode() argument
200 friend raw_ostream &operator<< (raw_ostream &OS, const GepNode &GN);
219 raw_ostream &operator<< (raw_ostream &OS, const GepNode &GN) { in operator <<()
222 if (GN.Flags & GepNode::Root) { in operator <<()
226 if (GN.Flags & GepNode::Internal) { in operator <<()
232 if (GN.Flags & GepNode::Used) { in operator <<()
237 if (GN.Flags & GepNode::InBounds) { in operator <<()
243 if (GN.Flags & GepNode::Root) in operator <<()
308 bool operator() (GepNode *N) const { in operator ()()
318 inline void *operator new(size_t, SpecificBumpPtrAllocator<GepNode> &A) { in operator new()
346 GepNode *N = new (*Mem) GepNode; in processGepInst()
348 uint32_t InBounds = GepI->isInBounds() ? GepNode::InBounds : 0; in processGepInst()
352 N->Flags |= GepNode::Root | InBounds; in processGepInst()
381 GepNode *PN = N; in processGepInst()
386 GepNode *Nx = new (*Mem) GepNode; in processGepInst()
388 Nx->Flags |= GepNode::Internal | InBounds; in processGepInst()
400 PN->Flags |= GepNode::Used; in processGepInst()
437 GepNode *N = *I; in invert_find_roots()
438 if (N->Flags & GepNode::Root) { in invert_find_roots()
442 GepNode *PN = N->Parent; in invert_find_roots()
447 static void nodes_for_root(GepNode *Root, NodeChildrenMap &NCM, in nodes_for_root()
455 GepNode *N = *First; in nodes_for_root()
468 using NodePair = std::pair<GepNode *, GepNode *>;
473 static const NodeSet *node_class(GepNode *N, NodeSymRel &Rel) { in node_class()
483 static NodePair node_pair(GepNode *N1, GepNode *N2) { in node_pair()
490 static unsigned node_hash(GepNode *N) { in node_hash()
498 static bool node_eq(GepNode *N1, GepNode *N2, NodePairSet &Eq, in node_eq()
513 bool Root1 = N1->Flags & GepNode::Root; in node_eq()
514 bool Root2 = N2->Flags & GepNode::Root; in node_eq()
542 GepNode *N = *I; in common()
555 GepNode *N = *NI; in common()
597 using ProjMap = std::map<const NodeSet *, GepNode *>; in common()
601 GepNode *Min = *std::min_element(S.begin(), S.end(), NodeOrder); in common()
610 GepNode *N = *J; in common()
614 if (NF & GepNode::Used) in common()
631 GepNode *N = *I; in common()
632 if (N->Flags & GepNode::Root) in common()
641 GepNode *Rep = F->second; in common()
650 GepNode *N = *I; in common()
754 BasicBlock *HexagonCommonGEP::recalculatePlacement(GepNode *Node, in recalculatePlacement()
767 if (Node->Flags & GepNode::Used) { in recalculatePlacement()
789 GepNode *CN = *I; in recalculatePlacement()
821 BasicBlock *HexagonCommonGEP::recalculatePlacementRec(GepNode *Node, in recalculatePlacementRec()
847 bool HexagonCommonGEP::isInvariantIn(GepNode *Node, Loop *L) { in isInvariantIn()
848 if (Node->Flags & GepNode::Root) in isInvariantIn()
876 BasicBlock *HexagonCommonGEP::adjustForInvariance(GepNode *Node, in adjustForInvariance()
882 if (Node->Flags & GepNode::Root) { in adjustForInvariance()
946 inline bool is_constant(GepNode *N) { in is_constant()
952 void HexagonCommonGEP::separateChainForNode(GepNode *Node, Use *U, in separateChainForNode()
959 GepNode *N = Node; in separateChainForNode()
960 GepNode *C = nullptr, *NewNode = nullptr; in separateChainForNode()
961 while (is_constant(N) && !(N->Flags & GepNode::Root)) { in separateChainForNode()
963 GepNode *NewN = new (*Mem) GepNode(N); in separateChainForNode()
969 NewN->Flags &= ~GepNode::Used; in separateChainForNode()
993 Node->Flags &= ~GepNode::Used; in separateChainForNode()
998 NewNode->Flags |= GepNode::Used; in separateChainForNode()
1004 void HexagonCommonGEP::separateConstantChains(GepNode *Node, in separateConstantChains()
1015 GepNode *N = *I; in separateConstantChains()
1016 if (!(N->Flags & GepNode::Used)) in separateConstantChains()
1050 GepNode *N = I->first; in separateConstantChains()
1097 GepNode *RN = NA[0]; in fabricateGEP()
1098 assert((RN->Flags & GepNode::Root) && "Creating GEP for non-root"); in fabricateGEP()
1117 GepNode *N = NA[nax-1]; in fabricateGEP()
1131 NewInst->setIsInBounds(RN->Flags & GepNode::InBounds); in fabricateGEP()
1140 void HexagonCommonGEP::getAllUsersForNode(GepNode *Node, ValueVect &Values, in getAllUsersForNode()
1147 GepNode *N = *First; in getAllUsersForNode()
1149 if (N->Flags & GepNode::Used) { in getAllUsersForNode()
1174 GepNode *Root = *First, *Last = *First; in materialize()
1193 LastUsed = (Last->Flags & GepNode::Used); in materialize()
1200 GepNode *Child = CF->second.front(); in materialize()
1224 GepNode *CN = *I; in materialize()
1225 CN->Flags &= ~GepNode::Internal; in materialize()
1226 CN->Flags |= GepNode::Root; in materialize()
1293 SpecificBumpPtrAllocator<GepNode> Allocator; in runOnFunction()