reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced

Derived Classes

lib/Transforms/Vectorize/VPlan.h
  986 class VPBasicBlock : public VPBlockBase {
 1071 class VPRegionBlock : public VPBlockBase {

Declarations

lib/Transforms/Vectorize/VPlanLoopInfo.h
   23 class VPBlockBase;

References

include/llvm/ADT/ArrayRef.h
  108         const ArrayRef<U *> &A,
  110            std::is_convertible<U *const *, T const *>::value>::type * = nullptr)
  118       const SmallVectorTemplateCommon<U *, DummyT> &Vec,
  120           std::is_convertible<U *const *, T const *>::value>::type * = nullptr)
  127     ArrayRef(const std::vector<U *, A> &Vec,
  129                  std::is_convertible<U *const *, T const *>::value>::type* = 0)
include/llvm/ADT/DenseMapInfo.h
   39   static inline T* getEmptyKey() {
   41     Val <<= PointerLikeTypeTraits<T*>::NumLowBitsAvailable;
   45   static inline T* getTombstoneKey() {
   47     Val <<= PointerLikeTypeTraits<T*>::NumLowBitsAvailable;
   51   static unsigned getHashValue(const T *PtrVal) {
   56   static bool isEqual(const T *LHS, const T *RHS) { return LHS == RHS; }
   56   static bool isEqual(const T *LHS, const T *RHS) { return LHS == RHS; }
include/llvm/Analysis/LoopInfo.h
   80   std::vector<BlockT *> Blocks;
   82   SmallPtrSet<const BlockT *, 8> DenseBlockSet;
   89   LoopBase(const LoopBase<BlockT, LoopT> &) = delete;
   90   const LoopBase<BlockT, LoopT> &
   91   operator=(const LoopBase<BlockT, LoopT> &) = delete;
  105   BlockT *getHeader() const { return getBlocks().front(); }
  125   bool contains(const BlockT *BB) const {
  131   template <class InstT> bool contains(const InstT *Inst) const {
  154   ArrayRef<BlockT *> getBlocks() const {
  158   typedef typename ArrayRef<BlockT *>::const_iterator block_iterator;
  175   std::vector<BlockT *> &getBlocksVector() {
  181   SmallPtrSetImpl<const BlockT *> &getBlocksSet() {
  187   const SmallPtrSetImpl<const BlockT *> &getBlocksSet() const {
  208   bool isLoopExiting(const BlockT *BB) const {
  211     for (const auto &Succ : children<const BlockT *>(BB)) {
  222   bool isLoopLatch(const BlockT *BB) const {
  226     BlockT *Header = getHeader();
  227     auto PredBegin = GraphTraits<Inverse<BlockT *>>::child_begin(Header);
  228     auto PredEnd = GraphTraits<Inverse<BlockT *>>::child_end(Header);
  256   void getExitingBlocks(SmallVectorImpl<BlockT *> &ExitingBlocks) const;
  260   BlockT *getExitingBlock() const;
  264   void getExitBlocks(SmallVectorImpl<BlockT *> &ExitBlocks) const;
  268   BlockT *getExitBlock() const;
  276   void getUniqueExitBlocks(SmallVectorImpl<BlockT *> &ExitBlocks) const;
  282   void getUniqueNonLatchExitBlocks(SmallVectorImpl<BlockT *> &ExitBlocks) const;
  286   BlockT *getUniqueExitBlock() const;
  289   typedef std::pair<BlockT *, BlockT *> Edge;
  289   typedef std::pair<BlockT *, BlockT *> Edge;
  300   BlockT *getLoopPreheader() const;
  306   BlockT *getLoopPredecessor() const;
  310   BlockT *getLoopLatch() const;
  314   void getLoopLatches(SmallVectorImpl<BlockT *> &LoopLatches) const {
  365   void addBasicBlockToLoop(BlockT *NewBB, LoopInfoBase<BlockT, LoopT> &LI);
  365   void addBasicBlockToLoop(BlockT *NewBB, LoopInfoBase<BlockT, LoopT> &LI);
  403   void addBlockEntry(BlockT *BB) {
  423   void moveToHeader(BlockT *BB) {
  440   void removeBlockFromLoop(BlockT *BB) {
  470   explicit LoopBase(BlockT *BB) : ParentLoop(nullptr) {
  850   DenseMap<const BlockT *, LoopT *> BBMap;
  928   LoopT *getLoopFor(const BlockT *BB) const { return BBMap.lookup(BB); }
  931   const LoopT *operator[](const BlockT *BB) const { return getLoopFor(BB); }
  935   unsigned getLoopDepth(const BlockT *BB) const {
  941   bool isLoopHeader(const BlockT *BB) const {
  960   void changeLoopFor(BlockT *BB, LoopT *L) {
  987   void removeBlock(BlockT *BB) {
 1009   void analyze(const DominatorTreeBase<BlockT, false> &DomTree);
 1014   void verify(const DominatorTreeBase<BlockT, false> &DomTree) const;
include/llvm/Analysis/LoopInfoImpl.h
   38     for (const auto &Succ : children<BlockT *>(BB))
   51   SmallVector<BlockT *, 8> ExitingBlocks;
   66     for (const auto &Succ : children<BlockT *>(BB))
   77   SmallVector<BlockT *, 8> ExitBlocks;
  163   BlockT *Out = getLoopPredecessor();
  172   typedef GraphTraits<BlockT *> BlockTraits;
  191   BlockT *Out = nullptr;
  194   BlockT *Header = getHeader();
  195   for (const auto Pred : children<Inverse<BlockT *>>(Header)) {
  211   BlockT *Header = getHeader();
  212   BlockT *Latch = nullptr;
  213   for (const auto Pred : children<Inverse<BlockT *>>(Header)) {
  384   BlockT *H = getHeader();
  386     BlockT *BB = getBlocks()[i];
  418 static void discoverAndMapSubloop(LoopT *L, ArrayRef<BlockT *> Backedges,
  419                                   LoopInfoBase<BlockT, LoopT> *LI,
  420                                   const DomTreeBase<BlockT> &DomTree) {
  421   typedef GraphTraits<Inverse<BlockT *>> InvBlockTraits;
  427   std::vector<BlockT *> ReverseCFGWorklist(Backedges.begin(), Backedges.end());
  429     BlockT *PredBB = ReverseCFGWorklist.back();
  464       for (const auto Pred : children<Inverse<BlockT *>>(PredBB)) {
  476   typedef GraphTraits<BlockT *> BlockTraits;
  479   LoopInfoBase<BlockT, LoopT> *LI;
  482   PopulateLoopsDFS(LoopInfoBase<BlockT, LoopT> *li) : LI(li) {}
  484   void traverse(BlockT *EntryBlock);
  487   void insertIntoLoop(BlockT *Block);
  493   for (BlockT *BB : post_order(EntryBlock))
  540   const DomTreeNodeBase<BlockT> *DomRoot = DomTree.getRootNode();
  543     BlockT *Header = DomNode->getBlock();
  544     SmallVector<BlockT *, 4> Backedges;
  547     for (const auto Backedge : children<Inverse<BlockT *>>(Header)) {
  562   PopulateLoopsDFS<BlockT, LoopT> DFS(this);
include/llvm/Support/Casting.h
   57   static inline bool doit(const From &Val) {
  104   static inline bool doit(const From *Val) {
  106     return isa_impl<To, From>::doit(*Val);
  263 inline typename cast_retty<X, Y *>::ret_type cast(Y *Val) {
  263 inline typename cast_retty<X, Y *>::ret_type cast(Y *Val) {
  265   return cast_convert_val<X, Y*,
  266                           typename simplify_type<Y*>::SimpleType>::doit(Val);
  342 LLVM_NODISCARD inline typename cast_retty<X, Y *>::ret_type dyn_cast(Y *Val) {
  342 LLVM_NODISCARD inline typename cast_retty<X, Y *>::ret_type dyn_cast(Y *Val) {
include/llvm/Support/GenericDomTree.h
   61   NodeT *TheBB;
   69   DomTreeNodeBase(NodeT *BB, DomTreeNodeBase *iDom)
   81   NodeT *getBlock() const { return TheBB; }
  167 raw_ostream &operator<<(raw_ostream &O, const DomTreeNodeBase<NodeT> *Node) {
  180 void PrintDomTree(const DomTreeNodeBase<NodeT> *N, raw_ostream &O,
  183   for (typename DomTreeNodeBase<NodeT>::const_iterator I = N->begin(),
  186     PrintDomTree<NodeT>(*I, O, Lev + 1);
  221   static_assert(std::is_pointer<typename GraphTraits<NodeT *>::NodeRef>::value,
  223   using NodeType = NodeT;
  224   using NodePtr = NodeT *;
  225   using ParentPtr = decltype(std::declval<NodeT *>()->getParent());
  240   SmallVector<NodeT *, IsPostDom ? 4 : 1> Roots;
  243      DenseMap<NodeT *, std::unique_ptr<DomTreeNodeBase<NodeT>>>;
  243      DenseMap<NodeT *, std::unique_ptr<DomTreeNodeBase<NodeT>>>;
  245   DomTreeNodeBase<NodeT> *RootNode = nullptr;
  284   const SmallVectorImpl<NodeT *> &getRoots() const { return Roots; }
  328   DomTreeNodeBase<NodeT> *getNode(const NodeT *BB) const {
  328   DomTreeNodeBase<NodeT> *getNode(const NodeT *BB) const {
  336   DomTreeNodeBase<NodeT> *operator[](const NodeT *BB) const {
  336   DomTreeNodeBase<NodeT> *operator[](const NodeT *BB) const {
  347   DomTreeNodeBase<NodeT> *getRootNode() { return RootNode; }
  348   const DomTreeNodeBase<NodeT> *getRootNode() const { return RootNode; }
  351   void getDescendants(NodeT *R, SmallVectorImpl<NodeT *> &Result) const {
  351   void getDescendants(NodeT *R, SmallVectorImpl<NodeT *> &Result) const {
  369   bool properlyDominates(const DomTreeNodeBase<NodeT> *A,
  370                          const DomTreeNodeBase<NodeT> *B) const {
  378   bool properlyDominates(const NodeT *A, const NodeT *B) const;
  378   bool properlyDominates(const NodeT *A, const NodeT *B) const;
  382   bool isReachableFromEntry(const NodeT *A) const {
  388   bool isReachableFromEntry(const DomTreeNodeBase<NodeT> *A) const { return A; }
  393   bool dominates(const DomTreeNodeBase<NodeT> *A,
  394                  const DomTreeNodeBase<NodeT> *B) const {
  436   bool dominates(const NodeT *A, const NodeT *B) const;
  436   bool dominates(const NodeT *A, const NodeT *B) const;
  438   NodeT *getRoot() const {
  445   NodeT *findNearestCommonDominator(NodeT *A, NodeT *B) const {
  445   NodeT *findNearestCommonDominator(NodeT *A, NodeT *B) const {
  445   NodeT *findNearestCommonDominator(NodeT *A, NodeT *B) const {
  453       NodeT &Entry = A->getParent()->front();
  458     DomTreeNodeBase<NodeT> *NodeA = getNode(A);
  459     DomTreeNodeBase<NodeT> *NodeB = getNode(B);
  474   const NodeT *findNearestCommonDominator(const NodeT *A,
  474   const NodeT *findNearestCommonDominator(const NodeT *A,
  475                                           const NodeT *B) const {
  482   bool isVirtualRoot(const DomTreeNodeBase<NodeT> *A) const {
  533   void insertEdge(NodeT *From, NodeT *To) {
  533   void insertEdge(NodeT *From, NodeT *To) {
  551   void deleteEdge(NodeT *From, NodeT *To) {
  551   void deleteEdge(NodeT *From, NodeT *To) {
  568   DomTreeNodeBase<NodeT> *addNewBlock(NodeT *BB, NodeT *DomBB) {
  568   DomTreeNodeBase<NodeT> *addNewBlock(NodeT *BB, NodeT *DomBB) {
  568   DomTreeNodeBase<NodeT> *addNewBlock(NodeT *BB, NodeT *DomBB) {
  582   DomTreeNodeBase<NodeT> *setNewRoot(NodeT *BB) {
  582   DomTreeNodeBase<NodeT> *setNewRoot(NodeT *BB) {
  606   void changeImmediateDominator(DomTreeNodeBase<NodeT> *N,
  607                                 DomTreeNodeBase<NodeT> *NewIDom) {
  613   void changeImmediateDominator(NodeT *BB, NodeT *NewBB) {
  613   void changeImmediateDominator(NodeT *BB, NodeT *NewBB) {
  620   void eraseNode(NodeT *BB) {
  651   void splitBlock(NodeT *NewBB) {
  671     if (getRootNode()) PrintDomTree<NodeT>(getRootNode(), O, 1);
  689     SmallVector<std::pair<const DomTreeNodeBase<NodeT> *,
  690                           typename DomTreeNodeBase<NodeT>::const_iterator>,
  693     const DomTreeNodeBase<NodeT> *ThisRoot = getRootNode();
  706       const DomTreeNodeBase<NodeT> *Node = WorkStack.back().first;
  716         const DomTreeNodeBase<NodeT> *Child = *ChildIt;
  758   void addRoot(NodeT *BB) { this->Roots.push_back(BB); }
  827   bool dominatedBySlowTreeWalk(const DomTreeNodeBase<NodeT> *A,
  828                                const DomTreeNodeBase<NodeT> *B) const {
  834     const DomTreeNodeBase<NodeT> *IDom;
include/llvm/Support/PointerLikeTypeTraits.h
   56   static inline void *getAsVoidPointer(T *P) { return P; }
   57   static inline T *getFromVoidPointer(void *P) { return static_cast<T *>(P); }
   59   enum { NumLowBitsAvailable = detail::ConstantLog2<alignof(T)>::value };
   91   typedef PointerLikeTypeTraits<T *> NonConst;
   93   static inline const void *getAsVoidPointer(const T *P) {
   96   static inline const T *getFromVoidPointer(const void *P) {
lib/Transforms/Vectorize/LoopVectorize.cpp
 6970   VPBlockBase *Region = createReplicateRegion(I, Recipe, Plan);
 7194   VPBlockBase *Entry = Plan->setEntry(PreEntry->getSingleSuccessor());
lib/Transforms/Vectorize/VPlan.cpp
   60   const VPBlockBase *Block = this;
   67   VPBlockBase *Block = this;
   75   const VPBlockBase *Block = this;
   82   VPBlockBase *Block = this;
   88 VPBlockBase *VPBlockBase::getEnclosingBlockWithSuccessors() {
   96 VPBlockBase *VPBlockBase::getEnclosingBlockWithPredecessors() {
  104 void VPBlockBase::deleteCFG(VPBlockBase *Entry) {
  105   SmallVector<VPBlockBase *, 8> Blocks;
  106   for (VPBlockBase *Block : depth_first(Entry))
  109   for (VPBlockBase *Block : Blocks)
  123   for (VPBlockBase *PredVPBlock : getHierarchicalPredecessors()) {
  165   VPBlockBase *SingleHPred = nullptr;
  231   ReversePostOrderTraversal<VPBlockBase *> RPOT(Entry);
  235     for (VPBlockBase *Block : RPOT) {
  266       for (VPBlockBase *Block : RPOT) {
  410   for (VPBlockBase *Block : depth_first(Entry))
  424     for (VPBlockBase *SuccVPBlock : VPBB->getHierarchicalSuccessors()) {
  490 const Twine VPlanPrinter::getUID(const VPBlockBase *Block) {
  495 const Twine VPlanPrinter::getOrCreateName(const VPBlockBase *Block) {
  525   for (VPBlockBase *Block : depth_first(Plan.getEntry()))
  531 void VPlanPrinter::dumpBlock(const VPBlockBase *Block) {
  540 void VPlanPrinter::drawEdge(const VPBlockBase *From, const VPBlockBase *To,
  540 void VPlanPrinter::drawEdge(const VPBlockBase *From, const VPBlockBase *To,
  544   const VPBlockBase *Tail = From->getExitBasicBlock();
  545   const VPBlockBase *Head = To->getEntryBasicBlock();
  557 void VPlanPrinter::dumpEdges(const VPBlockBase *Block) {
  566     for (auto *Successor : Successors)
  619   for (const VPBlockBase *Block : depth_first(Region->getEntry()))
  725   ReversePostOrderTraversal<VPBlockBase *> RPOT(Region->getEntry());
  726   for (VPBlockBase *Base : RPOT) {
  731 void VPInterleavedAccessInfo::visitBlock(VPBlockBase *Block, Old2NewTy &Old2New,
lib/Transforms/Vectorize/VPlan.h
  347   SmallVector<VPBlockBase *, 1> Predecessors;
  350   SmallVector<VPBlockBase *, 1> Successors;
  359   void appendSuccessor(VPBlockBase *Successor) {
  365   void appendPredecessor(VPBlockBase *Predecessor) {
  371   void removePredecessor(VPBlockBase *Predecessor) {
  378   void removeSuccessor(VPBlockBase *Successor) {
  395   using VPBlocksTy = SmallVectorImpl<VPBlockBase *>;
  433   VPBlockBase *getSingleSuccessor() const {
  439   VPBlockBase *getSinglePredecessor() const {
  450   VPBlockBase *getEnclosingBlockWithSuccessors();
  455   VPBlockBase *getEnclosingBlockWithPredecessors();
  469   VPBlockBase *getSingleHierarchicalSuccessor() {
  485   VPBlockBase *getSingleHierarchicalPredecessor() {
  505   void setOneSuccessor(VPBlockBase *Successor) {
  514   void setTwoSuccessors(VPBlockBase *IfTrue, VPBlockBase *IfFalse,
  514   void setTwoSuccessors(VPBlockBase *IfTrue, VPBlockBase *IfFalse,
  526   void setPredecessors(ArrayRef<VPBlockBase *> NewPreds) {
  528     for (auto *Pred : NewPreds)
  546   static void deleteCFG(VPBlockBase *Entry);
  986 class VPBasicBlock : public VPBlockBase {
 1038   static inline bool classof(const VPBlockBase *V) {
 1039     return V->getVPBlockID() == VPBlockBase::VPBasicBlockSC;
 1071 class VPRegionBlock : public VPBlockBase {
 1074   VPBlockBase *Entry;
 1077   VPBlockBase *Exit;
 1084   VPRegionBlock(VPBlockBase *Entry, VPBlockBase *Exit,
 1084   VPRegionBlock(VPBlockBase *Entry, VPBlockBase *Exit,
 1103   static inline bool classof(const VPBlockBase *V) {
 1104     return V->getVPBlockID() == VPBlockBase::VPRegionBlockSC;
 1107   const VPBlockBase *getEntry() const { return Entry; }
 1108   VPBlockBase *getEntry() { return Entry; }
 1112   void setEntry(VPBlockBase *EntryBlock) {
 1123   VPBlockBase &front() const { return *Entry; }
 1125   const VPBlockBase *getExit() const { return Exit; }
 1126   VPBlockBase *getExit() { return Exit; }
 1130   void setExit(VPBlockBase *ExitBlock) {
 1156   VPBlockBase *Entry;
 1186   VPlan(VPBlockBase *Entry = nullptr) : Entry(Entry) {}
 1190       VPBlockBase::deleteCFG(Entry);
 1205   VPBlockBase *getEntry() { return Entry; }
 1206   const VPBlockBase *getEntry() const { return Entry; }
 1208   VPBlockBase *setEntry(VPBlockBase *Block) { return Entry = Block; }
 1208   VPBlockBase *setEntry(VPBlockBase *Block) { return Entry = Block; }
 1274   SmallDenseMap<const VPBlockBase *, unsigned> BlockID;
 1282   void dumpBlock(const VPBlockBase *Block);
 1286   void dumpEdges(const VPBlockBase *Block);
 1295   unsigned getOrCreateBID(const VPBlockBase *Block) {
 1299   const Twine getOrCreateName(const VPBlockBase *Block);
 1301   const Twine getUID(const VPBlockBase *Block);
 1304   void drawEdge(const VPBlockBase *From, const VPBlockBase *To, bool Hidden,
 1304   void drawEdge(const VPBlockBase *From, const VPBlockBase *To, bool Hidden,
 1340   using NodeRef = VPBlockBase *;
 1341   using ChildIteratorType = SmallVectorImpl<VPBlockBase *>::iterator;
 1355   using NodeRef = const VPBlockBase *;
 1356   using ChildIteratorType = SmallVectorImpl<VPBlockBase *>::const_iterator;
 1372   using NodeRef = VPBlockBase *;
 1373   using ChildIteratorType = SmallVectorImpl<VPBlockBase *>::iterator;
 1394 struct GraphTraits<VPRegionBlock *> : public GraphTraits<VPBlockBase *> {
 1413     : public GraphTraits<const VPBlockBase *> {
 1432     : public GraphTraits<Inverse<VPBlockBase *>> {
 1465   static void insertBlockAfter(VPBlockBase *NewBlock, VPBlockBase *BlockPtr) {
 1465   static void insertBlockAfter(VPBlockBase *NewBlock, VPBlockBase *BlockPtr) {
 1482   static void insertTwoBlocksAfter(VPBlockBase *IfTrue, VPBlockBase *IfFalse,
 1482   static void insertTwoBlocksAfter(VPBlockBase *IfTrue, VPBlockBase *IfFalse,
 1483                                    VPValue *Condition, VPBlockBase *BlockPtr) {
 1499   static void connectBlocks(VPBlockBase *From, VPBlockBase *To) {
 1499   static void connectBlocks(VPBlockBase *From, VPBlockBase *To) {
 1510   static void disconnectBlocks(VPBlockBase *From, VPBlockBase *To) {
 1510   static void disconnectBlocks(VPBlockBase *From, VPBlockBase *To) {
 1517   static bool isBackEdge(const VPBlockBase *FromBlock,
 1518                          const VPBlockBase *ToBlock, const VPLoopInfo *VPLI) {
 1531   static bool blockIsLoopLatch(const VPBlockBase *Block,
 1541   static unsigned countSuccessorsNoBE(VPBlockBase *PredBlock,
 1544     for (VPBlockBase *SuccBlock : PredBlock->getSuccessors()) {
 1568   void visitBlock(VPBlockBase *Block, Old2NewTy &Old2New,
lib/Transforms/Vectorize/VPlanDominatorTree.h
   26 using VPDominatorTree = DomTreeBase<VPBlockBase>;
   28 using VPDomTreeNode = DomTreeNodeBase<VPBlockBase>;
lib/Transforms/Vectorize/VPlanHCFGBuilder.cpp
   84   SmallVector<VPBlockBase *, 8> VPBBPreds;
  258   VPBlockBase *HeaderVPBB = getOrCreateVPBB(TheLoop->getHeader());
lib/Transforms/Vectorize/VPlanHCFGTransforms.cpp
   25   ReversePostOrderTraversal<VPBlockBase *> RPOT(TopRegion->getEntry());
   30   for (VPBlockBase *Base : RPOT) {
   38   for (VPBlockBase *Base : RPOT) {
lib/Transforms/Vectorize/VPlanLoopInfo.h
   27 class VPLoop : public LoopBase<VPBlockBase, VPLoop> {
   30   explicit VPLoop(VPBlockBase *VPB) : LoopBase<VPBlockBase, VPLoop>(VPB) {}
   40 typedef LoopInfoBase<VPBlockBase, VPLoop> VPLoopInfo;
lib/Transforms/Vectorize/VPlanPredicator.cpp
  117 VPlanPredicator::getEdgeTypeBetween(VPBlockBase *FromBlock,
  118                                     VPBlockBase *ToBlock) {
  120   for (VPBlockBase *SuccBlock : FromBlock->getSuccessors()) {
  133 void VPlanPredicator::createOrPropagatePredicates(VPBlockBase *CurrBlock,
  154   for (VPBlockBase *PredBlock : CurrBlock->getPredecessors()) {
  189   ReversePostOrderTraversal<VPBlockBase *> RPOT(EntryBlock);
  194   for (VPBlockBase *Block : make_range(RPOT.begin(), RPOT.end())) {
  208   ReversePostOrderTraversal<VPBlockBase *> RPOT(Region->getEntry());
  209   VPBlockBase *PrevBlock = nullptr;
  211   for (VPBlockBase *CurrBlock : make_range(RPOT.begin(), RPOT.end())) {
lib/Transforms/Vectorize/VPlanPredicator.h
   46   EdgeType getEdgeTypeBetween(VPBlockBase *FromBlock, VPBlockBase *ToBlock);
   46   EdgeType getEdgeTypeBetween(VPBlockBase *FromBlock, VPBlockBase *ToBlock);
   58   void createOrPropagatePredicates(VPBlockBase *CurrBlock,
lib/Transforms/Vectorize/VPlanVerifier.cpp
   29 static bool hasDuplicates(const SmallVectorImpl<VPBlockBase *> &VPBlockVec) {
   30   SmallDenseSet<const VPBlockBase *, 8> VPBlockSet;
   31   for (const auto *Block : VPBlockVec) {
   44   for (const VPBlockBase *VPB :
   45        make_range(df_iterator<const VPBlockBase *>::begin(Region->getEntry()),
   46                   df_iterator<const VPBlockBase *>::end(Region->getExit()))) {
   63     for (const VPBlockBase *Succ : Successors) {
   80     for (const VPBlockBase *Pred : Predecessors) {
   98   const VPBlockBase *Entry = Region->getEntry();
   99   const VPBlockBase *Exit = Region->getExit();
  116   for (const VPBlockBase *VPB :
  117        make_range(df_iterator<const VPBlockBase *>::begin(Region->getEntry()),
  118                   df_iterator<const VPBlockBase *>::end(Region->getExit()))) {
unittests/Transforms/Vectorize/VPlanDominatorTreeTest.cpp
   49   VPBlockBase *PH = TopRegion->getEntry();
   50   VPBlockBase *H = PH->getSingleSuccessor();
   51   VPBlockBase *IfThen = H->getSuccessors()[0];
   52   VPBlockBase *IfElse = H->getSuccessors()[1];
   53   VPBlockBase *Latch = IfThen->getSingleSuccessor();
   54   VPBlockBase *Exit = Latch->getSuccessors()[0] != H
unittests/Transforms/Vectorize/VPlanHCFGTest.cpp
  125   VPBlockBase *Entry = Plan->getEntry()->getEntryBasicBlock();
unittests/Transforms/Vectorize/VPlanLoopInfoTest.cpp
   51   VPBlockBase *PH = TopRegion->getEntry();
   52   VPBlockBase *H = PH->getSingleSuccessor();
   53   VPBlockBase *IfThen = H->getSuccessors()[0];
   54   VPBlockBase *IfElse = H->getSuccessors()[1];
   55   VPBlockBase *Latch = IfThen->getSingleSuccessor();
   56   VPBlockBase *Exit = Latch->getSuccessors()[0] != H
unittests/Transforms/Vectorize/VPlanPredicatorTest.cpp
   70   VPBlockBase *PH = TopRegion->getEntry();
   71   VPBlockBase *H = PH->getSingleSuccessor();
   72   VPBlockBase *InnerLoopH = H->getSingleSuccessor();
   73   VPBlockBase *OuterIf = InnerLoopH->getSuccessors()[0];
   74   VPBlockBase *InnerLoopLatch = InnerLoopH->getSuccessors()[1];
   75   VPBlockBase *InnerIf = OuterIf->getSuccessors()[0];
   83   VPBlockBase *InnerLoopLinSucc = InnerLoopH->getSingleSuccessor();
   84   VPBlockBase *OuterIfLinSucc = OuterIf->getSingleSuccessor();
   85   VPBlockBase *InnerIfLinSucc = InnerIf->getSingleSuccessor();
  164   VPBlockBase *PH = TopRegion->getEntry();
  165   VPBlockBase *H = PH->getSingleSuccessor();
  166   VPBlockBase *OuterIfCmpBlk = H->getSingleSuccessor();
  167   VPBlockBase *InnerIfCmpBlk = OuterIfCmpBlk->getSuccessors()[0];
  168   VPBlockBase *InnerIfTSucc = InnerIfCmpBlk->getSuccessors()[0];
  169   VPBlockBase *InnerIfFSucc = InnerIfCmpBlk->getSuccessors()[1];
  170   VPBlockBase *TSuccSucc = InnerIfTSucc->getSingleSuccessor();
  171   VPBlockBase *FSuccSucc = InnerIfFSucc->getSingleSuccessor();
unittests/Transforms/Vectorize/VPlanSlpTest.cpp
  100   VPBlockBase *Entry = Plan->getEntry()->getEntryBasicBlock();
  167   VPBlockBase *Entry = Plan->getEntry()->getEntryBasicBlock();
  234   VPBlockBase *Entry = Plan->getEntry()->getEntryBasicBlock();
  293   VPBlockBase *Entry = Plan->getEntry()->getEntryBasicBlock();
  421   VPBlockBase *Entry = Plan->getEntry()->getEntryBasicBlock();
  493   VPBlockBase *Entry = Plan->getEntry()->getEntryBasicBlock();
  565   VPBlockBase *Entry = Plan->getEntry()->getEntryBasicBlock();
  641   VPBlockBase *Entry = Plan->getEntry()->getEntryBasicBlock();
  702   VPBlockBase *Entry = Plan->getEntry()->getEntryBasicBlock();
  765   VPBlockBase *Entry = Plan->getEntry()->getEntryBasicBlock();
  825   VPBlockBase *Entry = Plan->getEntry()->getEntryBasicBlock();
  884   VPBlockBase *Entry = Plan->getEntry()->getEntryBasicBlock();
usr/include/c++/7.4.0/type_traits
 1983     { typedef _Up     type; };
utils/unittest/googletest/include/gtest/gtest-printers.h
  407                     T* p, ::std::ostream* os) {
  416     if (IsTrue(ImplicitlyConvertible<T*, const void*>::value)) {