LLVM 24.0.0git
VPlanUtils.h File Reference
#include "VPlan.h"
#include "llvm/Support/Compiler.h"

Go to the source code of this file.

Classes

class  llvm::VPSCEVExpander
 Lightweight SCEV-to-VPlan expander. More...
class  llvm::VPBlockUtils
 Class that provides utilities for VPBlockBases in VPlan. More...

Namespaces

namespace  llvm
 This is an optimization pass for GlobalISel generic memory operations.
namespace  llvm::vputils
namespace  llvm::vputils::detail

Functions

bool llvm::vputils::onlyFirstLaneUsed (const VPValue *Def)
 Returns true if only the first lane of Def is used.
bool llvm::vputils::onlyFirstPartUsed (const VPValue *Def)
 Returns true if only the first part of Def is used.
bool llvm::vputils::onlyScalarValuesUsed (const VPValue *Def)
 Returns true if only scalar values of Def are used by all users.
VPValuellvm::vputils::getOrCreateVPValueForSCEVExpr (VPlan &Plan, const SCEV *Expr)
 Get or create a VPValue that corresponds to the expansion of Expr.
const SCEVllvm::vputils::getSCEVExprForVPValue (const VPValue *V, PredicatedScalarEvolution &PSE, const Loop *L=nullptr)
 Return the SCEV expression for V.
bool llvm::vputils::isAddressSCEVForCost (const SCEV *Addr, ScalarEvolution &SE, const Loop *L)
 Returns true if Addr is an address SCEV that can be passed to TTI::getAddressComputationCost, i.e.
bool llvm::vputils::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 llvm::vputils::isUniformAcrossVFsAndUFs (const VPValue *V)
 Checks if V is uniform across all VF lanes and UF parts.
bool llvm::vputils::isElementwise (const VPValue *V)
 Return true if V is elementwise, i.e. none of the lanes are permuted.
bool llvm::vputils::doesGeneratePerAllLanes (const VPRecipeBase *R)
 Returns true if R produces scalar values for all VF lanes.
VPBasicBlockllvm::vputils::getFirstLoopHeader (VPlan &Plan, VPDominatorTree &VPDT)
 Returns the header block of the first, top-level loop, or null if none exist.
unsigned llvm::vputils::getVFScaleFactor (VPRecipeBase *R)
 Get the VF scaling factor applied to the recipe's output, if the recipe has one.
bool llvm::vputils::cannotHoistOrSinkRecipe (const VPRecipeBase &R, bool Sinking=false)
 Return true if we do not know how to (mechanically) hoist or sink R.
template<typename Ty>
Intrinsic::ID llvm::vputils::getIntrinsicID (const Ty *R)
 Return the intrinsic ID underlying a call.
unsigned llvm::vputils::getOpcode (const VPValue *V)
 Return the instruction opcode for the recipe defining V or 0 for unsupported recipes and VPValues not defined by a recipe.
std::optional< std::pair< bool, unsigned > > llvm::vputils::getOpcodeOrIntrinsicID (const VPValue *V)
 Get the instruction opcode or intrinsic ID for the recipe defining V.
std::optional< MemoryLocationllvm::vputils::getMemoryLocation (const VPRecipeBase &R)
 Return a MemoryLocation for R with noalias metadata populated from R, if the recipe is supported and std::nullopt otherwise.
VPIRFlags llvm::vputils::getFlagsFromIndDesc (const InductionDescriptor &ID)
 Extracts and returns NoWrap and FastMath flags from the induction binop in ID.
template<typename PredT>
VPRecipeBasellvm::vputils::findRecipe (VPValue *Start, PredT Pred)
 Search Start's users for a recipe satisfying Pred, looking through recipes with definitions.
VPInstructionllvm::vputils::findCanonicalIVIncrement (VPlan &Plan)
 Find the canonical IV increment of Plan's vector loop region.
GEPNoWrapFlags llvm::vputils::getGEPFlagsForPtr (VPValue *Ptr)
 Returns the GEP nowrap flags for Ptr, looking through pointer casts mirroring Value::stripPointerCasts.
bool llvm::vputils::isUsedByLoadStoreAddress (const VPValue *V)
 Returns true if V is used as part of the address of another load or store.
VPInstructionllvm::vputils::findComputeReductionResult (VPReductionPHIRecipe *PhiR)
 Find the ComputeReductionResult recipe for PhiR, looking through selects inserted for predicated reductions or tail folding.
VPValuellvm::vputils::findIncomingAliasMask (const VPlan &Plan)
 Finds the incoming alias-mask within the vector preheader.
VPScalarIVStepsRecipellvm::vputils::createScalarIVSteps (VPlan &Plan, InductionDescriptor::InductionKind Kind, Instruction::BinaryOps InductionOpcode, FPMathOperator *FPBinOp, Instruction *TruncI, VPIRValue *StartV, VPValue *Step, DebugLoc DL, VPBuilder &Builder)
 Create a scalar-iv-steps recipe over Plan's canonical IV for an induction of Kind with InductionOpcode / FPBinOp, start value StartV and step Step, truncated to TruncI's type if TruncI is non-null, inserting recipes via Builder.
VPValuellvm::vputils::scalarizeVPWidenPointerInduction (VPWidenPointerInductionRecipe *PtrIV, VPlan &Plan, VPBuilder &Builder)
 Scalarize a VPWidenPointerInductionRecipe by replacing it with a PtrAdd (IndStart, ScalarIVSteps (0, Step)).
bool llvm::vputils::isDeadRecipe (VPRecipeBase &R)
 Returns true if R is dead, i.e.
void llvm::vputils::recursivelyDeleteDeadRecipes (VPValue *V)
 Recursively delete V and any of its operands that become dead.
SmallVector< VPUser * > llvm::vputils::collectUsersRecursively (VPValue *V)
 Collect all users of V, looking through recipes that define other values.
VPIRValuellvm::vputils::tryToFoldLiveIns (VPSingleDefRecipe &R, ArrayRef< VPValue * > Operands, const DataLayout &DL)
 Try to fold R using InstSimplifyFolder.
void llvm::vputils::detail::pullOutPermutationsImpl (VPlan &Plan, function_ref< VPValue *(VPValue *Op)> Perm, function_ref< VPSingleDefRecipe *(VPSingleDefRecipe *X)> Build)
 Template-independent implementation for pullOutPermutations.
template<typename Match_t, typename Builder>
void llvm::vputils::pullOutPermutations (VPlan &Plan, Match_t Perm, Builder Build)
 Removes the permutation pattern Perm from any elementwise operations in the plan, by constructing a new permutation via Build.