Lines Matching refs:VPBlockBase
385 class VPBlockBase {
398 SmallVector<VPBlockBase *, 1> Predecessors;
401 SmallVector<VPBlockBase *, 1> Successors;
408 void appendSuccessor(VPBlockBase *Successor) { in appendSuccessor()
414 void appendPredecessor(VPBlockBase *Predecessor) { in appendPredecessor()
420 void removePredecessor(VPBlockBase *Predecessor) { in removePredecessor()
427 void removeSuccessor(VPBlockBase *Successor) { in removeSuccessor()
434 VPBlockBase(const unsigned char SC, const std::string &N) in VPBlockBase() function
444 using VPBlocksTy = SmallVectorImpl<VPBlockBase *>;
446 virtual ~VPBlockBase() = default;
485 iterator_range<VPBlockBase **> successors() { return Successors; } in successors()
492 VPBlockBase *getSingleSuccessor() const { in getSingleSuccessor()
498 VPBlockBase *getSinglePredecessor() const { in getSinglePredecessor()
509 VPBlockBase *getEnclosingBlockWithSuccessors();
514 VPBlockBase *getEnclosingBlockWithPredecessors();
528 VPBlockBase *getSingleHierarchicalSuccessor() { in getSingleHierarchicalSuccessor()
544 VPBlockBase *getSingleHierarchicalPredecessor() { in getSingleHierarchicalPredecessor()
551 void setOneSuccessor(VPBlockBase *Successor) { in setOneSuccessor()
560 void setTwoSuccessors(VPBlockBase *IfTrue, VPBlockBase *IfFalse) { in setTwoSuccessors()
569 void setPredecessors(ArrayRef<VPBlockBase *> NewPreds) { in setPredecessors()
586 static void deleteCFG(VPBlockBase *Entry);
2019 class VPBasicBlock : public VPBlockBase {
2029 : VPBlockBase(VPBasicBlockSC, Name.str()) {
2074 static inline bool classof(const VPBlockBase *V) { in classof()
2075 return V->getVPBlockID() == VPBlockBase::VPBasicBlockSC; in classof()
2118 using VPBlockBase::print; // Get the print(raw_stream &O) version.
2143 class VPRegionBlock : public VPBlockBase {
2145 VPBlockBase *Entry;
2149 VPBlockBase *Exiting;
2156 VPRegionBlock(VPBlockBase *Entry, VPBlockBase *Exiting,
2158 : VPBlockBase(VPRegionBlockSC, Name), Entry(Entry), Exiting(Exiting), in VPBlockBase() function
2166 : VPBlockBase(VPRegionBlockSC, Name), Entry(nullptr), Exiting(nullptr), in VPBlockBase() function
2178 static inline bool classof(const VPBlockBase *V) { in classof()
2179 return V->getVPBlockID() == VPBlockBase::VPRegionBlockSC; in classof()
2182 const VPBlockBase *getEntry() const { return Entry; } in getEntry()
2183 VPBlockBase *getEntry() { return Entry; } in getEntry()
2187 void setEntry(VPBlockBase *EntryBlock) { in setEntry()
2198 VPBlockBase &front() const { return *Entry; } in front()
2200 const VPBlockBase *getExiting() const { return Exiting; } in getExiting()
2201 VPBlockBase *getExiting() { return Exiting; } in getExiting()
2205 void setExiting(VPBlockBase *ExitingBlock) { in setExiting()
2237 using VPBlockBase::print; // Get the print(raw_stream &O) version.
2251 template <> struct GraphTraits<VPBlockBase *> {
2252 using NodeRef = VPBlockBase *;
2253 using ChildIteratorType = SmallVectorImpl<VPBlockBase *>::iterator;
2266 template <> struct GraphTraits<const VPBlockBase *> {
2267 using NodeRef = const VPBlockBase *;
2268 using ChildIteratorType = SmallVectorImpl<VPBlockBase *>::const_iterator;
2283 template <> struct GraphTraits<Inverse<VPBlockBase *>> {
2284 using NodeRef = VPBlockBase *;
2285 using ChildIteratorType = SmallVectorImpl<VPBlockBase *>::iterator;
2306 struct GraphTraits<VPRegionBlock *> : public GraphTraits<VPBlockBase *> {
2325 : public GraphTraits<const VPBlockBase *> {
2344 : public GraphTraits<Inverse<VPBlockBase *>> {
2371 std::forward_iterator_tag, VPBlockBase> {
2425 const VPBlockBase *operator*() const { return deref(Block, SuccessorIdx); }
2456 struct GraphTraits<VPBlockRecursiveTraversalWrapper<VPBlockBase *>> {
2457 using NodeRef = VPBlockBase *;
2458 using ChildIteratorType = VPAllSuccessorsIterator<VPBlockBase *>;
2461 getEntryNode(VPBlockRecursiveTraversalWrapper<VPBlockBase *> N) {
2475 struct GraphTraits<VPBlockRecursiveTraversalWrapper<const VPBlockBase *>> {
2476 using NodeRef = const VPBlockBase *;
2477 using ChildIteratorType = VPAllSuccessorsIterator<const VPBlockBase *>;
2480 getEntryNode(VPBlockRecursiveTraversalWrapper<const VPBlockBase *> N) {
2503 VPBlockBase *Entry;
2542 VPlan(VPBlockBase *Entry = nullptr) : Entry(Entry) {
2552 for (VPBlockBase *Block : depth_first(Entry))
2555 VPBlockBase::deleteCFG(Entry);
2575 VPBlockBase *getEntry() { return Entry; }
2576 const VPBlockBase *getEntry() const { return Entry; }
2578 VPBlockBase *setEntry(VPBlockBase *Block) {
2750 SmallDenseMap<const VPBlockBase *, unsigned> BlockID;
2758 void dumpBlock(const VPBlockBase *Block);
2762 void dumpEdges(const VPBlockBase *Block);
2771 unsigned getOrCreateBID(const VPBlockBase *Block) {
2775 Twine getOrCreateName(const VPBlockBase *Block);
2777 Twine getUID(const VPBlockBase *Block);
2780 void drawEdge(const VPBlockBase *From, const VPBlockBase *To, bool Hidden,
2823 static void insertBlockAfter(VPBlockBase *NewBlock, VPBlockBase *BlockPtr) {
2828 SmallVector<VPBlockBase *> Succs(BlockPtr->successors());
2829 for (VPBlockBase *Succ : Succs) {
2842 static void insertTwoBlocksAfter(VPBlockBase *IfTrue, VPBlockBase *IfFalse,
2843 VPBlockBase *BlockPtr) {
2859 static void connectBlocks(VPBlockBase *From, VPBlockBase *To) {
2870 static void disconnectBlocks(VPBlockBase *From, VPBlockBase *To) {
2879 static VPBasicBlock *tryToMergeBlockIntoPredecessor(VPBlockBase *Block) {
2892 SmallVector<VPBlockBase *> Successors(Block->successors());
2908 const VPBlockBase, VPBlockBase>::type;
2937 void visitBlock(VPBlockBase *Block, Old2NewTy &Old2New,