LLVM  14.0.0git
Public Member Functions | Friends | List of all members
llvm::VPlan Class Reference

VPlan models a candidate for vectorization, encoding various decisions take to produce efficient output IR, including which branches, basic-blocks and output IR instructions to generate, and their cost. More...

#include "Transforms/Vectorize/VPlan.h"

Public Member Functions

 VPlan (VPBlockBase *Entry=nullptr)
 
 ~VPlan ()
 
void prepareToExecute (Value *TripCount, Value *VectorTripCount, Value *CanonicalIVStartValue, VPTransformState &State)
 Prepare the plan for execution, setting up the required live-in values. More...
 
void execute (struct VPTransformState *State)
 Generate the IR code for this VPlan. More...
 
VPBlockBasegetEntry ()
 
const VPBlockBasegetEntry () const
 
VPBlockBasesetEntry (VPBlockBase *Block)
 
VPValuegetOrCreateTripCount ()
 The trip count of the original loop. More...
 
VPValuegetOrCreateBackedgeTakenCount ()
 The backedge taken count of the original loop. More...
 
VPValuegetVectorTripCount ()
 The vector trip count. More...
 
void disableValue2VPValue ()
 Mark the plan to indicate that using Value2VPValue is not safe any longer, because it may be stale. More...
 
void addVF (ElementCount VF)
 
bool hasVF (ElementCount VF)
 
const std::string & getName () const
 
void setName (const Twine &newName)
 
void addExternalDef (VPValue *VPVal)
 Add VPVal to the pool of external definitions if it's not already in the pool. More...
 
void addVPValue (Value *V)
 
void addVPValue (Value *V, VPValue *VPV)
 
VPValuegetVPValue (Value *V, bool OverrideAllowed=false)
 Returns the VPValue for V. More...
 
VPValuegetOrAddVPValue (Value *V, bool OverrideAllowed=false)
 Gets the VPValue or adds a new one (if none exists yet) for V. More...
 
void removeVPValueFor (Value *V)
 
VPLoopInfogetVPLoopInfo ()
 Return the VPLoopInfo analysis for this VPlan. More...
 
const VPLoopInfogetVPLoopInfo () const
 
void print (raw_ostream &O) const
 Print this VPlan to O. More...
 
void printDOT (raw_ostream &O) const
 Print this VPlan in DOT format to O. More...
 
LLVM_DUMP_METHOD void dump () const
 Dump the plan to stderr (for debugging). More...
 
iterator_range< mapped_iterator< Use *, std::function< VPValue *(Value *)> > > mapToVPValues (User::op_range Operands)
 Returns a range mapping the values the range Operands to their corresponding VPValues. More...
 
bool isUniformAfterVectorization (VPValue *VPV) const
 Returns true if VPV is uniform after vectorization. More...
 
VPRegionBlockgetVectorLoopRegion ()
 Returns the VPRegionBlock of the vector loop. More...
 
VPCanonicalIVPHIRecipegetCanonicalIV ()
 Returns the canonical induction recipe of the vector loop. More...
 

Friends

class VPlanPrinter
 
class VPSlotTracker
 

Detailed Description

VPlan models a candidate for vectorization, encoding various decisions take to produce efficient output IR, including which branches, basic-blocks and output IR instructions to generate, and their cost.

VPlan holds a Hierarchical-CFG of VPBasicBlocks and VPRegionBlocks rooted at an Entry VPBlock.

Definition at line 2198 of file VPlan.h.

Constructor & Destructor Documentation

◆ VPlan()

llvm::VPlan::VPlan ( VPBlockBase Entry = nullptr)
inline

Definition at line 2245 of file VPlan.h.

◆ ~VPlan()

llvm::VPlan::~VPlan ( )
inline

Definition at line 2250 of file VPlan.h.

Member Function Documentation

◆ addExternalDef()

void llvm::VPlan::addExternalDef ( VPValue VPVal)
inline

Add VPVal to the pool of external definitions if it's not already in the pool.

Definition at line 2315 of file VPlan.h.

References llvm::SetVector< T, Vector, Set >::insert().

Referenced by prepareToExecute(), and llvm::LoopVectorizePass::processLoop().

◆ addVF()

void llvm::VPlan::addVF ( ElementCount  VF)
inline

◆ addVPValue() [1/2]

void llvm::VPlan::addVPValue ( Value V)
inline

◆ addVPValue() [2/2]

void llvm::VPlan::addVPValue ( Value V,
VPValue VPV 
)
inline

◆ disableValue2VPValue()

void llvm::VPlan::disableValue2VPValue ( )
inline

Mark the plan to indicate that using Value2VPValue is not safe any longer, because it may be stale.

Definition at line 2303 of file VPlan.h.

◆ dump()

LLVM_DUMP_METHOD void VPlan::dump ( ) const

Dump the plan to stderr (for debugging).

Definition at line 1034 of file VPlan.cpp.

References llvm::dbgs(), and print().

◆ execute()

void VPlan::execute ( struct VPTransformState State)

Generate the IR code for this VPlan.

Generate the code inside the body of the vectorized loop.

Assumes a single LoopVectorBody basic-block was created for this. Introduce additional basic-blocks as needed, and fill them all.

Definition at line 891 of file VPlan.cpp.

References llvm::LoopBase< BlockT, LoopT >::addBasicBlockToLoop(), assert(), BB, llvm::VPTransformState::Builder, llvm::VPTransformState::CFG, llvm::BranchInst::Create(), llvm::IRBuilderBase::CreateUnreachable(), llvm::depth_first(), llvm::VPTransformState::DT, llvm::VPBasicBlock::empty(), EnableVPlanNativePath, llvm::Instruction::eraseFromParent(), llvm::VPTransformState::get(), llvm::VPBlockBase::getEntryBasicBlock(), llvm::LoopBase< BlockT, LoopT >::getExitBlock(), llvm::BasicBlock::getFirstInsertionPt(), llvm::VPBlockBase::getHierarchicalSuccessors(), llvm::LoopInfoBase< BlockT, LoopT >::getLoopFor(), llvm::BasicBlock::getSingleSuccessor(), llvm::VPBlockBase::getSingleSuccessor(), llvm::BasicBlock::getTerminator(), llvm::VPTransformState::CFGState::LastBB, llvm::VPTransformState::LI, llvm::MergeBlockIntoPredecessor(), llvm::VPBasicBlock::phis(), llvm::VPTransformState::CFGState::PrevBB, llvm::VPTransformState::CFGState::PrevVPBB, llvm::IRBuilderBase::SetInsertPoint(), llvm::BasicBlock::splitBasicBlock(), llvm::MCID::Terminator, llvm::VPTransformState::UF, llvm::VPTransformState::CFGState::VectorPreHeader, llvm::VPTransformState::CFGState::VPBB2IRBB, llvm::VPTransformState::CFGState::VPBBsToFix, and llvm::VPTransformState::VPValue2Value.

Referenced by llvm::LoopVectorizationPlanner::executePlan().

◆ getCanonicalIV()

VPCanonicalIVPHIRecipe* llvm::VPlan::getCanonicalIV ( )
inline

◆ getEntry() [1/2]

VPBlockBase* llvm::VPlan::getEntry ( )
inline

◆ getEntry() [2/2]

const VPBlockBase* llvm::VPlan::getEntry ( ) const
inline

Definition at line 2276 of file VPlan.h.

◆ getName()

const std::string& llvm::VPlan::getName ( ) const
inline

Definition at line 2309 of file VPlan.h.

Referenced by llvm::VPlanPrinter::dump().

◆ getOrAddVPValue()

VPValue* llvm::VPlan::getOrAddVPValue ( Value V,
bool  OverrideAllowed = false 
)
inline

Gets the VPValue or adds a new one (if none exists yet) for V.

OverrideAllowed can be used to disable checking whether it is safe to query VPValues using IR Values.

Definition at line 2347 of file VPlan.h.

References addVPValue(), assert(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::count(), and getVPValue().

Referenced by addCanonicalIVRecipes(), and mapToVPValues().

◆ getOrCreateBackedgeTakenCount()

VPValue* llvm::VPlan::getOrCreateBackedgeTakenCount ( )
inline

The backedge taken count of the original loop.

Definition at line 2292 of file VPlan.h.

◆ getOrCreateTripCount()

VPValue* llvm::VPlan::getOrCreateTripCount ( )
inline

The trip count of the original loop.

Definition at line 2285 of file VPlan.h.

◆ getVectorLoopRegion()

VPRegionBlock* llvm::VPlan::getVectorLoopRegion ( )
inline

Returns the VPRegionBlock of the vector loop.

Definition at line 2394 of file VPlan.h.

References getEntry().

Referenced by addCanonicalIVRecipes(), getCanonicalIV(), and llvm::VPlanTransforms::removeRedundantCanonicalIVs().

◆ getVectorTripCount()

VPValue& llvm::VPlan::getVectorTripCount ( )
inline

The vector trip count.

Definition at line 2299 of file VPlan.h.

Referenced by addCanonicalIVRecipes().

◆ getVPLoopInfo() [1/2]

VPLoopInfo& llvm::VPlan::getVPLoopInfo ( )
inline

Return the VPLoopInfo analysis for this VPlan.

Definition at line 2363 of file VPlan.h.

Referenced by llvm::VPlanHCFGBuilder::buildHierarchicalCFG().

◆ getVPLoopInfo() [2/2]

const VPLoopInfo& llvm::VPlan::getVPLoopInfo ( ) const
inline

Definition at line 2364 of file VPlan.h.

◆ getVPValue()

VPValue* llvm::VPlan::getVPValue ( Value V,
bool  OverrideAllowed = false 
)
inline

◆ hasVF()

bool llvm::VPlan::hasVF ( ElementCount  VF)
inline

◆ isUniformAfterVectorization()

bool llvm::VPlan::isUniformAfterVectorization ( VPValue VPV) const
inline

Returns true if VPV is uniform after vectorization.

Definition at line 2388 of file VPlan.h.

References llvm::VPValue::getDef().

Referenced by llvm::InnerLoopVectorizer::scalarizeInstruction().

◆ mapToVPValues()

iterator_range<mapped_iterator<Use *, std::function<VPValue *(Value *)> > > llvm::VPlan::mapToVPValues ( User::op_range  Operands)
inline

Returns a range mapping the values the range Operands to their corresponding VPValues.

Definition at line 2380 of file VPlan.h.

References function, getOrAddVPValue(), llvm::map_range(), and Operands.

◆ prepareToExecute()

void VPlan::prepareToExecute ( Value TripCount,
Value VectorTripCount,
Value CanonicalIVStartValue,
VPTransformState State 
)

◆ print()

LLVM_DUMP_METHOD void VPlan::print ( raw_ostream O) const

◆ printDOT()

LLVM_DUMP_METHOD void VPlan::printDOT ( raw_ostream O) const

Print this VPlan in DOT format to O.

Definition at line 1028 of file VPlan.cpp.

References llvm::RISCVFenceField::O, and Printer.

◆ removeVPValueFor()

void llvm::VPlan::removeVPValueFor ( Value V)
inline

◆ setEntry()

VPBlockBase* llvm::VPlan::setEntry ( VPBlockBase Block)
inline

Definition at line 2278 of file VPlan.h.

Referenced by llvm::VPlanHCFGBuilder::buildHierarchicalCFG().

◆ setName()

void llvm::VPlan::setName ( const Twine newName)
inline

Definition at line 2311 of file VPlan.h.

References llvm::Twine::str().

Referenced by llvm::VPlanHCFGBuilder::buildHierarchicalCFG().

Friends And Related Function Documentation

◆ VPlanPrinter

friend class VPlanPrinter
friend

Definition at line 2199 of file VPlan.h.

◆ VPSlotTracker

friend class VPSlotTracker
friend

Definition at line 2200 of file VPlan.h.


The documentation for this class was generated from the following files: