LLVM 23.0.0git
llvm::VPRecipeBuilder Class Reference

Helper class to create VPRecipies from IR instructions. More...

#include "Transforms/Vectorize/VPRecipeBuilder.h"

Public Member Functions

 VPRecipeBuilder (VPlan &Plan, LoopVectorizationLegality *Legal, LoopVectorizationCostModel &CM, VPBuilder &Builder)
bool isPredicatedInst (Instruction *I) const
 Returns true if I needs to be predicated (i.e.
bool prefersVectorizedAddressing () const
 Returns true if the target prefers vectorized addressing.
VPRecipeBasetryToCreateWidenNonPhiRecipe (VPSingleDefRecipe *R, VFRange &Range)
 Create and return a widened recipe for a non-phi recipe R if one can be created within the given VF Range.
VPRecipeBasetryToWidenMemory (VPInstruction *VPI, VFRange &Range)
 Check if the load or store instruction VPI should widened for Range.Start and potentially masked.
VPHistogramRecipewidenIfHistogram (VPInstruction *VPI)
 If VPI represents a histogram operation (as determined by LoopVectorizationLegality) make that safe for vectorization, by emitting a llvm.experimental.vector.histogram.add intrinsic in place of the Load + Add|Sub + Store operations that perform the histogram in the original scalar loop.
bool replaceWithFinalIfReductionStore (VPInstruction *VPI, VPBuilder &FinalRedStoresBuilder)
 If VPI is a store of a reduction into an invariant address, delete it.
VPSingleDefRecipehandleReplication (VPInstruction *VPI, VFRange &Range)
 Build a replicating or single-scalar recipe for VPI.

Detailed Description

Helper class to create VPRecipies from IR instructions.

Definition at line 24 of file VPRecipeBuilder.h.

Constructor & Destructor Documentation

◆ VPRecipeBuilder()

llvm::VPRecipeBuilder::VPRecipeBuilder ( VPlan & Plan,
LoopVectorizationLegality * Legal,
LoopVectorizationCostModel & CM,
VPBuilder & Builder )
inline

Definition at line 52 of file VPRecipeBuilder.h.

Member Function Documentation

◆ handleReplication()

VPSingleDefRecipe * VPRecipeBuilder::handleReplication ( VPInstruction * VPI,
VFRange & Range )

◆ isPredicatedInst()

bool VPRecipeBuilder::isPredicatedInst ( Instruction * I) const

Returns true if I needs to be predicated (i.e.

cannot be executed unconditionally for all lanes) in the loop being vectorized. FIXME: Fully migrate logic to determine if mask is needed to VPlan.

Definition at line 6150 of file LoopVectorize.cpp.

References I.

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

◆ prefersVectorizedAddressing()

bool VPRecipeBuilder::prefersVectorizedAddressing ( ) const

Returns true if the target prefers vectorized addressing.

Definition at line 6154 of file LoopVectorize.cpp.

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

◆ replaceWithFinalIfReductionStore()

bool VPRecipeBuilder::replaceWithFinalIfReductionStore ( VPInstruction * VPI,
VPBuilder & FinalRedStoresBuilder )

If VPI is a store of a reduction into an invariant address, delete it.

If it is the final store of a reduction result, a uniform store recipe will be created for it in the middle block. Returns true if replacement took place. The order of stores must be preserved, hence FinalRedStoresBuidler.

Definition at line 6368 of file LoopVectorize.cpp.

References assert(), llvm::dyn_cast(), llvm::VPRecipeBase::eraseFromParent(), llvm::VPlanPatternMatch::findUserOf(), llvm::VPRecipeBase::getDebugLoc(), llvm::VPUser::getOperand(), llvm::VPSingleDefRecipe::getUnderlyingInstr(), and llvm::VPBuilder::insert().

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

◆ tryToCreateWidenNonPhiRecipe()

◆ tryToWidenMemory()

◆ widenIfHistogram()

VPHistogramRecipe * VPRecipeBuilder::widenIfHistogram ( VPInstruction * VPI)

If VPI represents a histogram operation (as determined by LoopVectorizationLegality) make that safe for vectorization, by emitting a llvm.experimental.vector.histogram.add intrinsic in place of the Load + Add|Sub + Store operations that perform the histogram in the original scalar loop.

Definition at line 6338 of file LoopVectorize.cpp.

References assert(), llvm::cast(), llvm::VPRecipeBase::getDebugLoc(), llvm::VPInstruction::getMask(), llvm::VPInstruction::getOpcode(), llvm::VPUser::getOperand(), llvm::VPSingleDefRecipe::getUnderlyingInstr(), and llvm::SmallVectorTemplateBase< T, bool >::push_back().

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


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