Lines Matching defs:VPBasicBlock
11 /// 1. VPBasicBlock and VPRegionBlock that inherit from a common pure virtual
62 class VPBasicBlock;
379 /// The previous VPBasicBlock visited. Initially set to null.
380 VPBasicBlock *PrevVPBB = nullptr;
390 /// A mapping of each VPBasicBlock to the corresponding BasicBlock. In case
392 SmallDenseMap<VPBasicBlock *, BasicBlock *> VPBB2IRBB;
436 /// A VPBlockBase can be either a VPBasicBlock or a VPRegionBlock.
522 /// \return the VPBasicBlock that is the entry of this VPBlockBase,
524 /// VPBlockBase is a VPBasicBlock, it is returned.
525 const VPBasicBlock *getEntryBasicBlock() const;
526 VPBasicBlock *getEntryBasicBlock();
528 /// \return the VPBasicBlock that is the exiting this VPBlockBase,
530 /// VPBlockBase is a VPBasicBlock, it is returned.
531 const VPBasicBlock *getExitingBasicBlock() const;
532 VPBasicBlock *getExitingBasicBlock();
620 /// Set each VPBasicBlock in \p NewPreds as predecessor of this VPBlockBase.
622 /// as successor of any VPBasicBlock in \p NewPreds.
629 /// Set each VPBasicBlock in \p NewSuccss as successor of this VPBlockBase.
631 /// as predecessor of any VPBasicBlock in \p NewSuccs.
762 class VPRecipeBase : public ilist_node_with_parent<VPRecipeBase, VPBasicBlock>,
765 friend VPBasicBlock;
768 /// Each VPRecipe belongs to a single VPBasicBlock.
769 VPBasicBlock *Parent = nullptr;
788 /// \return the VPBasicBlock which this VPRecipe belongs to.
789 VPBasicBlock *getParent() { return Parent; }
790 const VPBasicBlock *getParent() const { return Parent; }
806 void insertBefore(VPBasicBlock &BB, iplist<VPRecipeBase>::iterator IP);
812 /// Unlink this recipe from its current VPBasicBlock and insert it into
813 /// the VPBasicBlock that MovePos lives in, right after MovePos.
819 void moveBefore(VPBasicBlock &BB, iplist<VPRecipeBase>::iterator I);
1892 /// In the VPlan native path, all incoming VPValues & VPBasicBlock pairs are
1896 SmallVector<VPBasicBlock *, 2> IncomingBlocks;
1924 void addIncoming(VPValue *IncomingV, VPBasicBlock *IncomingBlock) {
1929 /// Returns the \p I th incoming VPBasicBlock.
1930 VPBasicBlock *getIncomingBlock(unsigned I) { return IncomingBlocks[I]; }
2968 /// VPBasicBlock serves as the leaf of the Hierarchical Control-Flow Graph. It
2971 class VPBasicBlock : public VPBlockBase {
2979 VPBasicBlock(const unsigned char BlockSC, const Twine &Name = "")
2983 VPBasicBlock(const Twine &Name = "", VPRecipeBase *Recipe = nullptr)
2989 ~VPBasicBlock() override {
3024 static RecipeListTy VPBasicBlock::*getSublistAccess(VPRecipeBase *) {
3025 return &VPBasicBlock::Recipes;
3041 /// Augment the existing recipes of a VPBasicBlock with an additional
3046 /// this VPBasicBlock, thereby "executing" the VPlan.
3049 /// Return the cost of this VPBasicBlock.
3065 VPBasicBlock *splitAt(iterator SplitAt);
3090 VPBasicBlock *clone() override {
3091 auto *NewBlock = new VPBasicBlock(getName());
3103 /// VPBasicBlock, and return it. Update the CFGState accordingly.
3107 /// A special type of VPBasicBlock that wraps an existing IR basic block.
3112 class VPIRBasicBlock : public VPBasicBlock {
3117 : VPBasicBlock(VPIRBasicBlockSC,
3128 /// this VPBasicBlock, thereby "executing" the VPlan.
3212 /// Returns the pre-header VPBasicBlock of the loop region.
3213 VPBasicBlock *getPreheaderVPBB() {
3252 /// VPBasicBlock.
3259 VPBasicBlock *Entry;
3261 /// VPBasicBlock corresponding to the original preheader. Used to place
3264 VPBasicBlock *Preheader;
3313 VPlan(VPBasicBlock *Preheader, VPValue *TC, VPBasicBlock *Entry)
3322 VPlan(VPBasicBlock *Preheader, VPBasicBlock *Entry)
3333 /// Create initial VPlan, having an "entry" VPBasicBlock (wrapping
3335 /// to happen before the CFG is modified; a VPBasicBlock for the vector
3337 /// middle VPBasicBlock. If a check is needed to guard executing the scalar
3355 VPBasicBlock *getEntry() { return Entry; }
3356 const VPBasicBlock *getEntry() const { return Entry; }
3464 VPBasicBlock *EntryVPBB = getVectorLoopRegion()->getEntryBasicBlock();
3467 EntryVPBB = cast<VPBasicBlock>(EntryVPBB->getSingleSuccessor());
3493 VPBasicBlock *getPreheader() { return Preheader; }
3494 const VPBasicBlock *getPreheader() const { return Preheader; }
3527 void dumpBasicBlock(const VPBasicBlock *BasicBlock);
3730 const VPBasicBlock &BB;
3776 VPlanSlp(VPInterleavedAccessInfo &IAI, VPBasicBlock &BB) : IAI(IAI), BB(BB) {}