class VPBasicBlock

Declaration

class VPBasicBlock : public VPBlockBase { /* full declaration omitted */ };

Description

VPBasicBlock serves as the leaf of the Hierarchical Control-Flow Graph. It holds a sequence of zero or more VPRecipe's each representing a sequence of output IR instructions. All PHI-like recipes must come before any non-PHI recipes.

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2019

Inherits from: VPBlockBase

Member Variables

private llvm::VPBasicBlock::RecipeListTy Recipes
The VPRecipes held in the order of output instructions to generate.

Method Overview

  • public VPBasicBlock(const llvm::Twine & Name = "", llvm::VPRecipeBase * Recipe = nullptr)
  • public void appendRecipe(llvm::VPRecipeBase * Recipe)
  • public inline llvm::VPRecipeBase & back()
  • public inline const llvm::VPRecipeBase & back() const
  • public inline llvm::VPBasicBlock::iterator begin()
  • public inline llvm::VPBasicBlock::const_iterator begin() const
  • public static inline bool classof(const llvm::VPBlockBase * V)
  • private llvm::BasicBlock * createEmptyBasicBlock(VPTransformState::CFGState & CFG)
  • public void dropAllReferences(llvm::VPValue * NewValue)
  • public inline bool empty() const
  • public inline llvm::VPBasicBlock::const_iterator end() const
  • public inline llvm::VPBasicBlock::iterator end()
  • public void execute(struct VPTransformState * State)
  • public inline const llvm::VPRecipeBase & front() const
  • public inline llvm::VPRecipeBase & front()
  • public llvm::VPRegionBlock * getEnclosingLoopRegion()
  • public llvm::VPBasicBlock::iterator getFirstNonPhi()
  • public llvm::VPBasicBlock::RecipeListTy & getRecipeList()
  • public static llvm::VPBasicBlock::RecipeListTy llvm::VPBasicBlock::* getSublistAccess(llvm::VPRecipeBase *)
  • public llvm::VPRecipeBase * getTerminator()
  • public const llvm::VPRecipeBase * getTerminator() const
  • public void insert(llvm::VPRecipeBase * Recipe, llvm::VPBasicBlock::iterator InsertPt)
  • public bool isExiting() const
  • public iterator_range<llvm::VPBasicBlock::iterator> phis()
  • public void print(llvm::raw_ostream & O, const llvm::Twine & Indent, llvm::VPSlotTracker & SlotTracker) const
  • public inline llvm::VPBasicBlock::const_reverse_iterator rbegin() const
  • public inline llvm::VPBasicBlock::reverse_iterator rbegin()
  • public inline llvm::VPBasicBlock::const_reverse_iterator rend() const
  • public inline llvm::VPBasicBlock::reverse_iterator rend()
  • public inline size_t size() const
  • public llvm::VPBasicBlock * splitAt(llvm::VPBasicBlock::iterator SplitAt)
  • public ~VPBasicBlock()

Inherited from VPBlockBase:

Methods

VPBasicBlock(const llvm::Twine& Name = "",
             llvm::VPRecipeBase* Recipe = nullptr)

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2028

Parameters

const llvm::Twine& Name = ""
llvm::VPRecipeBase* Recipe = nullptr

void appendRecipe(llvm::VPRecipeBase* Recipe)

Description

Augment the existing recipes of a VPBasicBlock with an additional\p Recipe as the last recipe.

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2087

Parameters

llvm::VPRecipeBase* Recipe

inline llvm::VPRecipeBase& back()

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2063

inline const llvm::VPRecipeBase& back() const

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2062

inline llvm::VPBasicBlock::iterator begin()

Description

Recipe iterator methods

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2048

inline llvm::VPBasicBlock::const_iterator begin()
    const

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2049

static inline bool classof(
    const llvm::VPBlockBase* V)

Description

Method to support type inquiry through isa, cast, and dyn_cast.

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2074

Parameters

const llvm::VPBlockBase* V

llvm::BasicBlock* createEmptyBasicBlock(
    VPTransformState::CFGState& CFG)

Description

Create an IR BasicBlock to hold the output instructions generated by this VPBasicBlock, and return it. Update the CFGState accordingly.

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2132

Parameters

VPTransformState::CFGState& CFG

void dropAllReferences(llvm::VPValue* NewValue)

Description

Replace all operands of VPUsers in the block with \p NewValue and also replaces all uses of VPValues defined in the block with NewValue.

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2101

Parameters

llvm::VPValue* NewValue

inline bool empty() const

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2059

inline llvm::VPBasicBlock::const_iterator end()
    const

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2051

inline llvm::VPBasicBlock::iterator end()

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2050

void execute(struct VPTransformState* State)

Description

The method which generates the output IR instructions that correspond to this VPBasicBlock, thereby "executing" the VPlan.

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2091

Parameters

struct VPTransformState* State

inline const llvm::VPRecipeBase& front() const

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2060

inline llvm::VPRecipeBase& front()

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2061

llvm::VPRegionBlock* getEnclosingLoopRegion()

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2108

llvm::VPBasicBlock::iterator getFirstNonPhi()

Description

Return the position of the first non-phi node recipe in the block.

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2094

llvm::VPBasicBlock::RecipeListTy& getRecipeList()

Description

Returns a reference to the list of recipes.

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2066

static llvm::VPBasicBlock::RecipeListTy
    llvm::VPBasicBlock::*
    getSublistAccess(llvm::VPRecipeBase*)

Description

Returns a pointer to a member of the recipe list.

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2069

Parameters

llvm::VPRecipeBase*

llvm::VPRecipeBase* getTerminator()

Description

If the block has multiple successors, return the branch recipe terminating the block. If there are no or only a single successor, return nullptr;

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2123

const llvm::VPRecipeBase* getTerminator() const

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2124

void insert(llvm::VPRecipeBase* Recipe,
            llvm::VPBasicBlock::iterator InsertPt)

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2078

Parameters

llvm::VPRecipeBase* Recipe
llvm::VPBasicBlock::iterator InsertPt

bool isExiting() const

Description

Returns true if the block is exiting it's parent region.

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2127

iterator_range<llvm::VPBasicBlock::iterator>
phis()

Description

Returns an iterator range over the PHI-like recipes in the block.

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2097

void print(llvm::raw_ostream& O,
           const llvm::Twine& Indent,
           llvm::VPSlotTracker& SlotTracker) const

Description

Print this VPBsicBlock to \p O, prefixing all lines with \p Indent. \p SlotTracker is used to print unnamed VPValue's using consequtive numbers. Note that the numbering is applied to the whole VPlan, so printing individual blocks is consistent with the whole VPlan printing.

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2116

Parameters

llvm::raw_ostream& O
const llvm::Twine& Indent
llvm::VPSlotTracker& SlotTracker

inline llvm::VPBasicBlock::const_reverse_iterator
rbegin() const

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2054

inline llvm::VPBasicBlock::reverse_iterator
rbegin()

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2053

inline llvm::VPBasicBlock::const_reverse_iterator
rend() const

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2056

inline llvm::VPBasicBlock::reverse_iterator rend()

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2055

inline size_t size() const

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2058

llvm::VPBasicBlock* splitAt(
    llvm::VPBasicBlock::iterator SplitAt)

Description

Split current block at \p SplitAt by inserting a new block between the current block and its successors and moving all recipes starting at SplitAt to the new block. Returns the new block.

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2106

Parameters

llvm::VPBasicBlock::iterator SplitAt

~VPBasicBlock()

Declared at: llvm/lib/Transforms/Vectorize/VPlan.h:2034