LLVM 22.0.0git
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 (Loop *L)
 Construct a VPlan for L.
 VPlan (BasicBlock *ScalarHeaderBB, VPValue *TC)
 Construct a VPlan with a new VPBasicBlock as entry, a VPIRBasicBlock wrapping ScalarHeaderBB and a trip count of TC.
LLVM_ABI_FOR_TEST ~VPlan ()
void setEntry (VPBasicBlock *VPBB)
void execute (VPTransformState *State)
 Generate the IR code for this VPlan.
InstructionCost cost (ElementCount VF, VPCostContext &Ctx)
 Return the cost of this plan.
VPBasicBlockgetEntry ()
const VPBasicBlockgetEntry () const
VPBasicBlockgetVectorPreheader ()
 Returns the preheader of the vector loop region, if one exists, or null otherwise.
LLVM_ABI_FOR_TEST VPRegionBlockgetVectorLoopRegion ()
 Returns the VPRegionBlock of the vector loop.
LLVM_ABI_FOR_TEST const VPRegionBlockgetVectorLoopRegion () const
VPBasicBlockgetMiddleBlock ()
 Returns the 'middle' block of the plan, that is the block that selects whether to execute the scalar tail loop or the exit block from the loop latch.
const VPBasicBlockgetMiddleBlock () const
VPBasicBlockgetScalarPreheader () const
 Return the VPBasicBlock for the preheader of the scalar loop.
VPIRBasicBlockgetScalarHeader () const
 Return the VPIRBasicBlock wrapping the header of the scalar loop.
ArrayRef< VPIRBasicBlock * > getExitBlocks () const
 Return an ArrayRef containing VPIRBasicBlocks wrapping the exit blocks of the original scalar loop.
VPIRBasicBlockgetExitBlock (BasicBlock *IRBB) const
 Return the VPIRBasicBlock corresponding to IRBB.
bool isExitBlock (VPBlockBase *VPBB)
 Returns true if VPBB is an exit block.
VPValuegetTripCount () const
 The trip count of the original loop.
void setTripCount (VPValue *NewTripCount)
 Set the trip count assuming it is currently null; if it is not - use resetTripCount().
void resetTripCount (VPValue *NewTripCount)
 Resets the trip count for the VPlan.
VPValuegetOrCreateBackedgeTakenCount ()
 The backedge taken count of the original loop.
VPValuegetBackedgeTakenCount () const
VPValuegetVectorTripCount ()
 The vector trip count.
VPValuegetVF ()
 Returns the VF of the vector loop region.
const VPValuegetVF () const
VPValuegetSymbolicUF ()
 Returns the symbolic UF of the vector loop region.
VPValuegetVFxUF ()
 Returns VF * UF of the vector loop region.
LLVMContextgetContext () const
void addVF (ElementCount VF)
void removeVF (ElementCount VF)
 Remove VF from the plan.
void setVF (ElementCount VF)
bool hasVF (ElementCount VF) const
bool hasScalableVF () const
iterator_range< SmallSetVector< ElementCount, 2 >::iterator > vectorFactors () const
 Returns an iterator range over all VFs of the plan.
bool hasScalarVFOnly () const
bool hasUF (unsigned UF) const
unsigned getUF () const
void setUF (unsigned UF)
bool isUnrolled () const
 Returns true if the VPlan already has been unrolled, i.e.
std::string getName () const
 Return a string with the name of the plan and the applicable VFs and UFs.
void setName (const Twine &newName)
VPValuegetOrAddLiveIn (Value *V)
 Gets the live-in VPValue for V or adds a new live-in (if none exists yet) for V.
VPValuegetTrue ()
 Return a VPValue wrapping i1 true.
VPValuegetFalse ()
 Return a VPValue wrapping i1 false.
VPValuegetLiveIn (Value *V) const
 Return the live-in VPValue for V, if there is one or nullptr otherwise.
ArrayRef< VPValue * > getLiveIns () const
 Return the list of live-in VPValues available in the VPlan.
void printLiveIns (raw_ostream &O) const
 Print the live-ins of this VPlan to O.
void print (raw_ostream &O) const
 Print this VPlan to O.
void printDOT (raw_ostream &O) const
 Print this VPlan in DOT format to O.
LLVM_DUMP_METHOD void dump () const
 Dump the plan to stderr (for debugging).
VPValuegetSCEVExpansion (const SCEV *S) const
void addSCEVExpansion (const SCEV *S, VPValue *V)
VPlanduplicate ()
 Clone the current VPlan, update all VPValues of the new VPlan and cloned recipes to refer to the clones, and return it.
VPBasicBlockcreateVPBasicBlock (const Twine &Name, VPRecipeBase *Recipe=nullptr)
 Create a new VPBasicBlock with Name and containing Recipe if present.
VPRegionBlockcreateLoopRegion (const std::string &Name="", VPBlockBase *Entry=nullptr, VPBlockBase *Exiting=nullptr)
 Create a new loop region with Name and entry and exiting blocks set to Entry and Exiting respectively, if set.
VPRegionBlockcreateReplicateRegion (VPBlockBase *Entry, VPBlockBase *Exiting, const std::string &Name="")
 Create a new replicate region with Entry, Exiting and Name.
VPIRBasicBlockcreateEmptyVPIRBasicBlock (BasicBlock *IRBB)
 Create a VPIRBasicBlock wrapping IRBB, but do not create VPIRInstructions wrapping the instructions in tIRBB.
LLVM_ABI_FOR_TEST VPIRBasicBlockcreateVPIRBasicBlock (BasicBlock *IRBB)
 Create a VPIRBasicBlock from IRBB containing VPIRInstructions for all instructions in IRBB, except its terminator which is managed by the successors of the block in VPlan.
bool hasEarlyExit () const
 Returns true if the VPlan is based on a loop with an early exit.
bool hasScalarTail () const
 Returns true if the scalar tail may execute after the vector loop.

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 VPBasicBlock.

Definition at line 4112 of file VPlan.h.

Constructor & Destructor Documentation

◆ VPlan() [1/2]

VPlan::VPlan ( Loop * L)

Construct a VPlan for L.

This will create VPIRBasicBlocks wrapping the original preheader and scalar header of L, to be used as entry and scalar header blocks of the new VPlan.

Definition at line 873 of file VPlan.cpp.

References createVPIRBasicBlock(), and setEntry().

◆ VPlan() [2/2]

llvm::VPlan::VPlan ( BasicBlock * ScalarHeaderBB,
VPValue * TC )
inline

Construct a VPlan with a new VPBasicBlock as entry, a VPIRBasicBlock wrapping ScalarHeaderBB and a trip count of TC.

Definition at line 4195 of file VPlan.h.

References createVPBasicBlock(), createVPIRBasicBlock(), and setEntry().

◆ ~VPlan()

VPlan::~VPlan ( )

Definition at line 883 of file VPlan.cpp.

References llvm::dyn_cast(), getLiveIns(), and I.

Member Function Documentation

◆ addSCEVExpansion()

void llvm::VPlan::addSCEVExpansion ( const SCEV * S,
VPValue * V )
inline

Definition at line 4434 of file VPlan.h.

References assert().

Referenced by llvm::vputils::getOrCreateVPValueForSCEVExpr().

◆ addVF()

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

Definition at line 4321 of file VPlan.h.

◆ cost()

◆ createEmptyVPIRBasicBlock()

VPIRBasicBlock * VPlan::createEmptyVPIRBasicBlock ( BasicBlock * IRBB)

Create a VPIRBasicBlock wrapping IRBB, but do not create VPIRInstructions wrapping the instructions in tIRBB.

The returned block is owned by the VPlan and deleted once the VPlan is destroyed.

Definition at line 1237 of file VPlan.cpp.

Referenced by llvm::VPIRBasicBlock::clone(), and createVPIRBasicBlock().

◆ createLoopRegion()

VPRegionBlock * llvm::VPlan::createLoopRegion ( const std::string & Name = "",
VPBlockBase * Entry = nullptr,
VPBlockBase * Exiting = nullptr )
inline

Create a new loop region with Name and entry and exiting blocks set to Entry and Exiting respectively, if set.

The returned block is owned by the VPlan and deleted once the VPlan is destroyed.

Definition at line 4456 of file VPlan.h.

Referenced by createLoopRegion().

◆ createReplicateRegion()

VPRegionBlock * llvm::VPlan::createReplicateRegion ( VPBlockBase * Entry,
VPBlockBase * Exiting,
const std::string & Name = "" )
inline

Create a new replicate region with Entry, Exiting and Name.

The returned block is owned by the VPlan and deleted once the VPlan is destroyed.

Definition at line 4468 of file VPlan.h.

Referenced by createReplicateRegion().

◆ createVPBasicBlock()

VPBasicBlock * llvm::VPlan::createVPBasicBlock ( const Twine & Name,
VPRecipeBase * Recipe = nullptr )
inline

Create a new VPBasicBlock with Name and containing Recipe if present.

The returned block is owned by the VPlan and deleted once the VPlan is destroyed.

Definition at line 4446 of file VPlan.h.

Referenced by addInitialSkeleton(), llvm::VPBasicBlock::clone(), createReplicateRegion(), llvm::VPlanTransforms::handleUncountableEarlyExit(), llvm::VPBasicBlock::splitAt(), and VPlan().

◆ createVPIRBasicBlock()

VPIRBasicBlock * VPlan::createVPIRBasicBlock ( BasicBlock * IRBB)

Create a VPIRBasicBlock from IRBB containing VPIRInstructions for all instructions in IRBB, except its terminator which is managed by the successors of the block in VPlan.

The returned block is owned by the VPlan and deleted once the VPlan is destroyed.

Definition at line 1243 of file VPlan.cpp.

References llvm::BasicBlock::begin(), llvm::VPIRInstruction::create(), createEmptyVPIRBasicBlock(), llvm::ilist_node_impl< OptionsT >::getIterator(), llvm::BasicBlock::getTerminator(), I, and llvm::make_range().

Referenced by llvm::VPlanTransforms::attachCheckBlock(), duplicate(), VPlan(), and VPlan().

◆ dump()

LLVM_DUMP_METHOD void VPlan::dump ( ) const

Dump the plan to stderr (for debugging).

Definition at line 1128 of file VPlan.cpp.

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

Referenced by execute().

◆ duplicate()

◆ execute()

void VPlan::execute ( VPTransformState * State)

Generate the IR code for this VPlan.

Generate the code inside the preheader and body of the vectorized loop.

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

Definition at line 921 of file VPlan.cpp.

References llvm::Block, llvm::cast(), llvm::dbgs(), llvm::DominatorTreeBase< BasicBlock, false >::Delete, llvm::DeleteDeadBlocks(), dump(), llvm::LoopBase< BlockT, LoopT >::getBlocksVector(), getExitBlocks(), llvm::vputils::getFirstLoopHeader(), getScalarHeader(), getScalarPreheader(), llvm::BasicBlock::getSingleSuccessor(), llvm::BasicBlock::getTerminator(), getUF(), llvm::VPBlockBase::hasPredecessors(), llvm::isa(), LLVM_DEBUG, llvm::make_early_inc_range(), and setName().

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

◆ getBackedgeTakenCount()

VPValue * llvm::VPlan::getBackedgeTakenCount ( ) const
inline

Definition at line 4302 of file VPlan.h.

Referenced by llvm::vputils::isHeaderMask().

◆ getContext()

◆ getEntry() [1/2]

◆ getEntry() [2/2]

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

Definition at line 4215 of file VPlan.h.

◆ getExitBlock()

VPIRBasicBlock * VPlan::getExitBlock ( BasicBlock * IRBB) const

Return the VPIRBasicBlock corresponding to IRBB.

IRBB must be an exit block.

Definition at line 906 of file VPlan.cpp.

References assert(), llvm::find_if(), getExitBlocks(), and llvm::VPIRBasicBlock::getIRBasicBlock().

◆ getExitBlocks()

ArrayRef< VPIRBasicBlock * > llvm::VPlan::getExitBlocks ( ) const
inline

Return an ArrayRef containing VPIRBasicBlocks wrapping the exit blocks of the original scalar loop.

Definition at line 4266 of file VPlan.h.

Referenced by calculateEarlyExitCost(), createExtractsForLiveOuts(), execute(), llvm::LoopVectorizationPlanner::executePlan(), getExitBlock(), llvm::VPlanTransforms::handleEarlyExits(), and llvm::VPlanTransforms::optimizeInductionExitUsers().

◆ getFalse()

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

◆ getLiveIn()

VPValue * llvm::VPlan::getLiveIn ( Value * V) const
inline

Return the live-in VPValue for V, if there is one or nullptr otherwise.

Definition at line 4404 of file VPlan.h.

Referenced by llvm::VPlanTransforms::replaceSymbolicStrides().

◆ getLiveIns()

ArrayRef< VPValue * > llvm::VPlan::getLiveIns ( ) const
inline

Return the list of live-in VPValues available in the VPlan.

Definition at line 4407 of file VPlan.h.

References llvm::all_of(), assert(), llvm::is_contained(), and P.

Referenced by duplicate(), llvm::VPlanTransforms::materializeBroadcasts(), and ~VPlan().

◆ getMiddleBlock() [1/2]

VPBasicBlock * llvm::VPlan::getMiddleBlock ( )
inline

Returns the 'middle' block of the plan, that is the block that selects whether to execute the scalar tail loop or the exit block from the loop latch.

If there is an early exit from the vector loop, the middle block conceptully has the early exit block as third successor, split accross 2 VPBBs. In that case, the second VPBB selects whether to execute the scalar tail loop or the exit bock. If the scalar tail loop or exit block are known to always execute, the middle block may branch directly to that block. This function cannot be called once the vector loop region has been removed.

Definition at line 4239 of file VPlan.h.

References assert(), llvm::cast(), getScalarPreheader(), llvm::VPBlockBase::getSingleSuccessor(), getVectorLoopRegion(), and llvm::is_contained().

Referenced by llvm::VPlanTransforms::addBranchWeightToMiddleTerminator(), llvm::VPlanTransforms::addExitUsersForFirstOrderRecurrences(), llvm::VPlanTransforms::addScalarResumePhis(), calculateEarlyExitCost(), getMiddleBlock(), llvm::VPlanTransforms::handleMaxMinNumReductions(), llvm::VPlanTransforms::materializeConstantVectorTripCount(), llvm::VPlanTransforms::optimizeInductionExitUsers(), preparePlanForMainVectorLoop(), and llvm::LoopVectorizePass::processLoop().

◆ getMiddleBlock() [2/2]

const VPBasicBlock * llvm::VPlan::getMiddleBlock ( ) const
inline

Definition at line 4252 of file VPlan.h.

References getMiddleBlock().

◆ getName()

std::string VPlan::getName ( ) const

Return a string with the name of the plan and the applicable VFs and UFs.

Definition at line 1098 of file VPlan.cpp.

References llvm::drop_begin().

Referenced by print().

◆ getOrAddLiveIn()

◆ getOrCreateBackedgeTakenCount()

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

The backedge taken count of the original loop.

Definition at line 4297 of file VPlan.h.

Referenced by llvm::VPlanTransforms::materializeBackedgeTakenCount(), llvm::VPlanTransforms::materializeBroadcasts(), and optimizeVectorInductionWidthForTCAndVFUF().

◆ getScalarHeader()

◆ getScalarPreheader()

◆ getSCEVExpansion()

VPValue * llvm::VPlan::getSCEVExpansion ( const SCEV * S) const
inline

Definition at line 4430 of file VPlan.h.

Referenced by llvm::vputils::getOrCreateVPValueForSCEVExpr().

◆ getSymbolicUF()

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

Returns the symbolic UF of the vector loop region.

Definition at line 4312 of file VPlan.h.

Referenced by llvm::VPlanTransforms::materializeVFAndVFxUF(), and llvm::VPlanTransforms::narrowInterleaveGroups().

◆ getTripCount()

◆ getTrue()

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

◆ getUF()

◆ getVectorLoopRegion() [1/2]

VPRegionBlock * VPlan::getVectorLoopRegion ( )

Returns the VPRegionBlock of the vector loop.

Definition at line 1027 of file VPlan.cpp.

References B(), llvm::dyn_cast(), getEntry(), and llvm::vp_depth_first_shallow().

Referenced by llvm::VPlanTransforms::addActiveLaneMask(), llvm::VPlanTransforms::addExitUsersForFirstOrderRecurrences(), llvm::VPlanTransforms::addExplicitVectorLength(), llvm::VPlanTransforms::addScalarResumePhis(), addVPLaneMaskPhiAndUpdateExitBranch(), llvm::VPlanTransforms::adjustFixedOrderRecurrences(), llvm::VPlanTransforms::attachCheckBlock(), llvm::LoopVectorizationPlanner::buildVPlans(), llvm::calculateRegisterUsageForPlan(), llvm::VPlanTransforms::clearReductionWrapFlags(), llvm::collectEphemeralRecipesForVPlan(), llvm::VPlanTransforms::convertToAbstractRecipes(), cost(), llvm::VPlanTransforms::createLoopRegions(), createScalarIVSteps(), expandVPWidenIntOrFpInduction(), expandVPWidenPointerInduction(), findHeaderMask(), getMiddleBlock(), llvm::vputils::getRecipesForUncountableExit(), getVectorPreheader(), llvm::VPlanTransforms::handleMaxMinNumReductions(), hasReplicatorRegion(), llvm::VPlanTransforms::introduceMasksAndLinearize(), isConditionTrueViaVFAndUF(), llvm::vputils::isHeaderMask(), legalizeAndOptimizeInductions(), licm(), llvm::VPlanTransforms::materializePacksAndUnpacks(), llvm::VPlanTransforms::narrowInterleaveGroups(), narrowToSingleScalarRecipes(), optimizeEarlyExitInductionUser(), optimizeVectorInductionWidthForTCAndVFUF(), planContainsAdditionalSimplifications(), preparePlanForEpilogueVectorLoop(), preparePlanForMainVectorLoop(), removeRedundantCanonicalIVs(), removeRedundantInductionCasts(), llvm::VPlanTransforms::replaceSymbolicStrides(), llvm::VPlanTransforms::replicateByVF(), scalarizeInstruction(), llvm::LoopVectorizationPlanner::selectInterleaveCount(), simplifyBlends(), simplifyBranchConditionForVFAndUF(), transformRecipestoEVLRecipes(), llvm::VPlanTransforms::truncateToMinimalBitwidths(), llvm::VPlanTransforms::tryToConvertVPInstructionsToVPRecipes(), tryToReplaceALMWithWideALM(), llvm::VPlanTransforms::unrollByUF(), llvm::VPInterleavedAccessInfo::VPInterleavedAccessInfo(), llvm::VPTypeAnalysis::VPTypeAnalysis(), and willGenerateVectors().

◆ getVectorLoopRegion() [2/2]

const VPRegionBlock * VPlan::getVectorLoopRegion ( ) const

Definition at line 1035 of file VPlan.cpp.

References B(), llvm::dyn_cast(), getEntry(), and llvm::vp_depth_first_shallow().

◆ getVectorPreheader()

◆ getVectorTripCount()

◆ getVF() [1/2]

◆ getVF() [2/2]

const VPValue & llvm::VPlan::getVF ( ) const
inline

Definition at line 4309 of file VPlan.h.

◆ getVFxUF()

◆ hasEarlyExit()

bool llvm::VPlan::hasEarlyExit ( ) const
inline

Returns true if the VPlan is based on a loop with an early exit.

That is the case if the VPlan has either more than one exit block or a single exit block with multiple predecessors (one for the exit via the latch and one via the other early exit).

Definition at line 4490 of file VPlan.h.

References llvm::count_if(), and llvm::VPBlockBase::hasPredecessors().

Referenced by llvm::LoopVectorizationPlanner::computeBestVF(), llvm::LoopVectorizationPlanner::executePlan(), and llvm::LoopVectorizationPlanner::selectInterleaveCount().

◆ hasScalableVF()

bool llvm::VPlan::hasScalableVF ( ) const
inline

Definition at line 4336 of file VPlan.h.

References llvm::any_of().

Referenced by expandVPWidenPointerInduction(), and legalizeAndOptimizeInductions().

◆ hasScalarTail()

bool llvm::VPlan::hasScalarTail ( ) const
inline

Returns true if the scalar tail may execute after the vector loop.

Note that this relies on unneeded branches to the scalar tail loop being removed.

Definition at line 4500 of file VPlan.h.

References getEntry(), getScalarPreheader(), llvm::VPBlockBase::getSinglePredecessor(), and llvm::VPBlockBase::hasPredecessors().

Referenced by llvm::VPlanTransforms::handleMaxMinNumReductions(), and llvm::VPlanTransforms::materializeConstantVectorTripCount().

◆ hasScalarVFOnly()

◆ hasUF()

◆ hasVF()

◆ isExitBlock()

bool VPlan::isExitBlock ( VPBlockBase * VPBB)

Returns true if VPBB is an exit block.

Definition at line 914 of file VPlan.cpp.

References llvm::is_contained().

◆ isUnrolled()

bool llvm::VPlan::isUnrolled ( ) const
inline

Returns true if the VPlan already has been unrolled, i.e.

it has a single concrete UF.

Definition at line 4368 of file VPlan.h.

Referenced by simplifyRecipe().

◆ print()

LLVM_DUMP_METHOD void VPlan::print ( raw_ostream & O) const

Print this VPlan to O.

Definition at line 1081 of file VPlan.cpp.

References llvm::Block, getEntry(), getName(), printLiveIns(), and VPSlotTracker.

Referenced by dump(), llvm::operator<<(), and llvm::LoopVectorizationPlanner::printPlans().

◆ printDOT()

LLVM_DUMP_METHOD void VPlan::printDOT ( raw_ostream & O) const

Print this VPlan in DOT format to O.

Definition at line 1122 of file VPlan.cpp.

References Printer, and VPlanPrinter.

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

◆ printLiveIns()

void VPlan::printLiveIns ( raw_ostream & O) const

Print the live-ins of this VPlan to O.

Definition at line 1043 of file VPlan.cpp.

References VPSlotTracker.

Referenced by print().

◆ removeVF()

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

Remove VF from the plan.

Definition at line 4324 of file VPlan.h.

References assert(), and hasVF().

◆ resetTripCount()

void llvm::VPlan::resetTripCount ( VPValue * NewTripCount)
inline

Resets the trip count for the VPlan.

The caller must make sure all uses of the original trip count have been replaced.

Definition at line 4290 of file VPlan.h.

References assert(), and llvm::VPValue::getNumUsers().

Referenced by llvm::VPlanTransforms::expandSCEVs(), preparePlanForEpilogueVectorLoop(), and llvm::VPlanTransforms::replaceSymbolicStrides().

◆ setEntry()

void llvm::VPlan::setEntry ( VPBasicBlock * VPBB)
inline

Definition at line 4203 of file VPlan.h.

References llvm::VPBlockBase::setPlan().

Referenced by VPlan(), and VPlan().

◆ setName()

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

Definition at line 4373 of file VPlan.h.

References llvm::Twine::str().

Referenced by execute().

◆ setTripCount()

void llvm::VPlan::setTripCount ( VPValue * NewTripCount)
inline

Set the trip count assuming it is currently null; if it is not - use resetTripCount().

Definition at line 4283 of file VPlan.h.

References assert().

Referenced by addInitialSkeleton().

◆ setUF()

void llvm::VPlan::setUF ( unsigned UF)
inline

◆ setVF()

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

◆ vectorFactors()

iterator_range< SmallSetVector< ElementCount, 2 >::iterator > llvm::VPlan::vectorFactors ( ) const
inline

Returns an iterator range over all VFs of the plan.

Definition at line 4342 of file VPlan.h.

Referenced by llvm::LoopVectorizationPlanner::computeBestVF(), and llvm::VPlanTransforms::narrowInterleaveGroups().

◆ VPlanPrinter

friend class VPlanPrinter
friend

Definition at line 4113 of file VPlan.h.

References VPlanPrinter.

Referenced by printDOT(), and VPlanPrinter.

◆ VPSlotTracker

friend class VPSlotTracker
friend

Definition at line 4114 of file VPlan.h.

References VPSlotTracker.

Referenced by print(), printLiveIns(), and VPSlotTracker.


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