LLVM 22.0.0git
Functions
llvm::vputils Namespace Reference

Functions

bool onlyFirstLaneUsed (const VPValue *Def)
 Returns true if only the first lane of Def is used.
 
bool onlyFirstPartUsed (const VPValue *Def)
 Returns true if only the first part of Def is used.
 
bool onlyScalarValuesUsed (const VPValue *Def)
 Returns true if only scalar values of Def are used by all users.
 
VPValuegetOrCreateVPValueForSCEVExpr (VPlan &Plan, const SCEV *Expr)
 Get or create a VPValue that corresponds to the expansion of Expr.
 
const SCEVgetSCEVExprForVPValue (VPValue *V, ScalarEvolution &SE)
 Return the SCEV expression for V.
 
bool isSingleScalar (const VPValue *VPV)
 Returns true if VPV is a single scalar, either because it produces the same value for all lanes or only has its first lane used.
 
bool isHeaderMask (const VPValue *V, VPlan &Plan)
 Return true if V is a header mask in Plan.
 
bool isUniformAcrossVFsAndUFs (VPValue *V)
 Checks if V is uniform across all VF lanes and UF parts.
 
VPBasicBlockgetFirstLoopHeader (VPlan &Plan, VPDominatorTree &VPDT)
 Returns the header block of the first, top-level loop, or null if none exist.
 

Function Documentation

◆ getFirstLoopHeader()

VPBasicBlock * llvm::vputils::getFirstLoopHeader ( VPlan Plan,
VPDominatorTree VPDT 
)

Returns the header block of the first, top-level loop, or null if none exist.

Definition at line 138 of file VPlanUtils.cpp.

References llvm::find_if(), llvm::VPlan::getEntry(), I, llvm::VPBlockUtils::isHeader(), and llvm::vp_depth_first_shallow().

Referenced by llvm::VPlan::execute(), llvm::LoopVectorizationPlanner::executePlan(), and llvm::InnerLoopVectorizer::fixVectorizedLoop().

◆ getOrCreateVPValueForSCEVExpr()

VPValue * llvm::vputils::getOrCreateVPValueForSCEVExpr ( VPlan Plan,
const SCEV Expr 
)

Get or create a VPValue that corresponds to the expansion of Expr.

If Expr is a SCEVConstant or SCEVUnknown, return a VPValue wrapping the live-in value. Otherwise return a VPExpandSCEVRecipe to expand Expr. If Plan's pre-header already contains a recipe expanding Expr, return it. If not, create a new one.

Definition at line 32 of file VPlanUtils.cpp.

References llvm::VPlan::addSCEVExpansion(), llvm::VPBasicBlock::appendRecipe(), llvm::VPValue::getDefiningRecipe(), llvm::VPlan::getEntry(), llvm::VPlan::getOrAddLiveIn(), and llvm::VPlan::getSCEVExpansion().

Referenced by addInitialSkeleton(), createWidenInductionRecipes(), and llvm::VPlanTransforms::tryToConvertVPInstructionsToVPRecipes().

◆ getSCEVExprForVPValue()

const SCEV * llvm::vputils::getSCEVExprForVPValue ( VPValue V,
ScalarEvolution SE 
)

◆ isHeaderMask()

bool llvm::vputils::isHeaderMask ( const VPValue V,
VPlan Plan 
)

◆ isSingleScalar()

bool llvm::vputils::isSingleScalar ( const VPValue VPV)
inline

◆ isUniformAcrossVFsAndUFs()

bool llvm::vputils::isUniformAcrossVFsAndUFs ( VPValue V)

Checks if V is uniform across all VF lanes and UF parts.

It is considered as such if it is either loop invariant (defined outside the vector region) or its operand is known to be uniform across all VFs and UFs (e.g. VPDerivedIV or VPCanonicalIVPHI).

Definition at line 93 of file VPlanUtils.cpp.

References llvm::all_of(), llvm::TypeSwitch< T, ResultT >::Case(), Default, isUniformAcrossVFsAndUFs(), and llvm::PatternMatch::match().

Referenced by isUniformAcrossVFsAndUFs().

◆ onlyFirstLaneUsed()

bool llvm::vputils::onlyFirstLaneUsed ( const VPValue Def)

◆ onlyFirstPartUsed()

bool llvm::vputils::onlyFirstPartUsed ( const VPValue Def)

Returns true if only the first part of Def is used.

Definition at line 22 of file VPlanUtils.cpp.

References llvm::all_of().

Referenced by llvm::VPInstruction::onlyFirstPartUsed().

◆ onlyScalarValuesUsed()

bool llvm::vputils::onlyScalarValuesUsed ( const VPValue Def)