Lines Matching defs:VPBasicBlock
11 /// 1. VPBasicBlock and VPRegionBlock that inherit from a common pure virtual
62 class VPBasicBlock;
334 /// The previous VPBasicBlock visited. Initially set to null.
335 VPBasicBlock *PrevVPBB = nullptr;
345 /// A mapping of each VPBasicBlock to the corresponding BasicBlock. In case
347 SmallDenseMap<VPBasicBlock *, BasicBlock *> VPBB2IRBB;
391 /// A VPBlockBase can be either a VPBasicBlock or a VPRegionBlock.
497 /// \return the VPBasicBlock that is the entry of this VPBlockBase,
499 /// VPBlockBase is a VPBasicBlock, it is returned.
500 const VPBasicBlock *getEntryBasicBlock() const;
501 VPBasicBlock *getEntryBasicBlock();
503 /// \return the VPBasicBlock that is the exiting this VPBlockBase,
505 /// VPBlockBase is a VPBasicBlock, it is returned.
506 const VPBasicBlock *getExitingBasicBlock() const;
507 VPBasicBlock *getExitingBasicBlock();
596 /// Set each VPBasicBlock in \p NewPreds as predecessor of this VPBlockBase.
598 /// as successor of any VPBasicBlock in \p NewPreds.
605 /// Set each VPBasicBlock in \p NewSuccss as successor of this VPBlockBase.
607 /// as predecessor of any VPBasicBlock in \p NewSuccs.
709 class VPRecipeBase : public ilist_node_with_parent<VPRecipeBase, VPBasicBlock>,
712 friend VPBasicBlock;
715 /// Each VPRecipe belongs to a single VPBasicBlock.
716 VPBasicBlock *Parent = nullptr;
735 /// \return the VPBasicBlock which this VPRecipe belongs to.
736 VPBasicBlock *getParent() { return Parent; }
737 const VPBasicBlock *getParent() const { return Parent; }
753 void insertBefore(VPBasicBlock &BB, iplist<VPRecipeBase>::iterator IP);
759 /// Unlink this recipe from its current VPBasicBlock and insert it into
760 /// the VPBasicBlock that MovePos lives in, right after MovePos.
766 void moveBefore(VPBasicBlock &BB, iplist<VPRecipeBase>::iterator I);
2306 /// In the VPlan native path, all incoming VPValues & VPBasicBlock pairs are
2310 SmallVector<VPBasicBlock *, 2> IncomingBlocks;
2339 void addIncoming(VPValue *IncomingV, VPBasicBlock *IncomingBlock) {
2344 /// Returns the \p I th incoming VPBasicBlock.
2345 VPBasicBlock *getIncomingBlock(unsigned I) { return IncomingBlocks[I]; }
3538 /// VPBasicBlock serves as the leaf of the Hierarchical Control-Flow Graph. It
3541 class VPBasicBlock : public VPBlockBase {
3545 VPBasicBlock(const Twine &Name = "", VPRecipeBase *Recipe = nullptr)
3558 VPBasicBlock(const unsigned char BlockSC, const Twine &Name = "")
3562 ~VPBasicBlock() override {
3597 static RecipeListTy VPBasicBlock::*getSublistAccess(VPRecipeBase *) {
3598 return &VPBasicBlock::Recipes;
3614 /// Augment the existing recipes of a VPBasicBlock with an additional
3619 /// this VPBasicBlock, thereby "executing" the VPlan.
3622 /// Return the cost of this VPBasicBlock.
3636 VPBasicBlock *splitAt(iterator SplitAt);
3662 VPBasicBlock *clone() override;
3674 /// VPBasicBlock, and return it. Update the CFGState accordingly.
3678 /// A special type of VPBasicBlock that wraps an existing IR basic block.
3683 class VPIRBasicBlock : public VPBasicBlock {
3690 : VPBasicBlock(VPIRBasicBlockSC,
3702 /// this VPBasicBlock, thereby "executing" the VPlan.
3778 /// Returns the pre-header VPBasicBlock of the loop region.
3779 VPBasicBlock *getPreheaderVPBB() {
3816 /// VPBasicBlock.
3821 /// VPBasicBlock corresponding to the original preheader. Used to place
3826 VPBasicBlock *Entry;
3877 VPlan(VPBasicBlock *Entry, VPIRBasicBlock *ScalarHeader)
3890 /// Construct a VPlan with a new VPBasicBlock as entry, a VPIRBasicBlock
3900 void setEntry(VPBasicBlock *VPBB) {
3905 /// Create initial VPlan, having an "entry" VPBasicBlock (wrapping
3909 /// one); a VPBasicBlock for the vector pre-header, followed by a region for
3910 /// the vector loop, followed by the middle VPBasicBlock. If a check is needed
3930 VPBasicBlock *getEntry() { return Entry; }
3931 const VPBasicBlock *getEntry() const { return Entry; }
3935 VPBasicBlock *getVectorPreheader() {
3938 ? cast<VPBasicBlock>(VectorRegion->getSinglePredecessor())
3949 const VPBasicBlock *getMiddleBlock() const {
3950 return cast<VPBasicBlock>(getScalarPreheader()->getPredecessors().front());
3952 VPBasicBlock *getMiddleBlock() {
3953 return cast<VPBasicBlock>(getScalarPreheader()->getPredecessors().front());
3956 /// Return the VPBasicBlock for the preheader of the scalar loop.
3957 VPBasicBlock *getScalarPreheader() const {
3958 return cast<VPBasicBlock>(getScalarHeader()->getSinglePredecessor());
4076 VPBasicBlock *EntryVPBB = getVectorLoopRegion()->getEntryBasicBlock();
4079 EntryVPBB = cast<VPBasicBlock>(EntryVPBB->getSingleSuccessor());
4097 /// Create a new VPBasicBlock with \p Name and containing \p Recipe if
4100 VPBasicBlock *createVPBasicBlock(const Twine &Name,
4102 auto *VPB = new VPBasicBlock(Name, Recipe);
4167 void dumpBasicBlock(const VPBasicBlock *BasicBlock);
4283 const VPBasicBlock &BB;
4329 VPlanSlp(VPInterleavedAccessInfo &IAI, VPBasicBlock &BB) : IAI(IAI), BB(BB) {}