|
| 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.
|
| VPValue * | llvm::vputils::getOrCreateVPValueForSCEVExpr (VPlan &Plan, const SCEV *Expr) |
| | Get or create a VPValue that corresponds to the expansion of Expr.
|
| const SCEV * | llvm::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.
|
| VPBasicBlock * | llvm::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< MemoryLocation > | llvm::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> |
| VPRecipeBase * | llvm::vputils::findRecipe (VPValue *Start, PredT Pred) |
| | Search Start's users for a recipe satisfying Pred, looking through recipes with definitions.
|
| VPInstruction * | llvm::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.
|
| VPInstruction * | llvm::vputils::findComputeReductionResult (VPReductionPHIRecipe *PhiR) |
| | Find the ComputeReductionResult recipe for PhiR, looking through selects inserted for predicated reductions or tail folding.
|
| VPValue * | llvm::vputils::findIncomingAliasMask (const VPlan &Plan) |
| | Finds the incoming alias-mask within the vector preheader.
|
| VPScalarIVStepsRecipe * | llvm::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.
|
| VPValue * | llvm::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.
|
| VPIRValue * | llvm::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.
|