LLVM 20.0.0git
|
In what follows, the term "input IR" refers to code that is fed into the vectorizer whereas the term "output IR" refers to code that is generated by the vectorizer. More...
#include "Transforms/Vectorize/VPlan.h"
Public Types | |
enum class | Kind : uint8_t { First , ScalableLast } |
Kind describes how to interpret Lane. More... | |
Public Member Functions | |
VPLane (unsigned Lane, Kind LaneKind) | |
unsigned | getKnownLane () const |
Returns a compile-time known value for the lane index and asserts if the lane can only be calculated at runtime. | |
Value * | getAsRuntimeExpr (IRBuilderBase &Builder, const ElementCount &VF) const |
Returns an expression describing the lane index that can be used at runtime. | |
Kind | getKind () const |
Returns the Kind of lane offset. | |
bool | isFirstLane () const |
Returns true if this is the first lane of the whole vector. | |
unsigned | mapToCacheIndex (const ElementCount &VF) const |
Maps the lane to a cache index based on VF . | |
Static Public Member Functions | |
static VPLane | getFirstLane () |
static VPLane | getLaneFromEnd (const ElementCount &VF, unsigned Offset) |
static VPLane | getLastLaneForVF (const ElementCount &VF) |
static unsigned | getNumCachedLanes (const ElementCount &VF) |
Returns the maxmimum number of lanes that we are able to consider caching for VF . | |
In what follows, the term "input IR" refers to code that is fed into the vectorizer whereas the term "output IR" refers to code that is generated by the vectorizer.
VPLane provides a way to access lanes in both fixed width and scalable vectors, where for the latter the lane index sometimes needs calculating as a runtime expression.
|
strong |
Kind describes how to interpret Lane.
Value * VPLane::getAsRuntimeExpr | ( | IRBuilderBase & | Builder, |
const ElementCount & | VF | ||
) | const |
Returns an expression describing the lane index that can be used at runtime.
Definition at line 75 of file VPlan.cpp.
References llvm::IRBuilderBase::CreateSub(), First, llvm::IRBuilderBase::getInt32(), llvm::IRBuilderBase::getInt32Ty(), llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::getKnownMinValue(), llvm::getRuntimeVF(), llvm_unreachable, and ScalableLast.
|
inlinestatic |
Definition at line 180 of file VPlan.h.
References First.
Referenced by createAndCollectMergePhiForReduction(), llvm::VPLiveOut::fixPhi(), llvm::VPTransformState::get(), and llvm::InnerLoopVectorizer::scalarizeInstruction().
|
inline |
|
inline |
|
inlinestatic |
Definition at line 182 of file VPlan.h.
References assert(), First, llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::getKnownMinValue(), llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::isScalable(), llvm::Offset, and ScalableLast.
Referenced by getLastLaneForVF().
|
inlinestatic |
Definition at line 196 of file VPlan.h.
References getLaneFromEnd().
Referenced by llvm::VPReplicateRecipe::execute(), and llvm::VPLiveOut::fixPhi().
|
inlinestatic |
Returns the maxmimum number of lanes that we are able to consider caching for VF
.
Definition at line 231 of file VPlan.h.
References llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::getKnownMinValue(), and llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::isScalable().
|
inline |
Returns true if this is the first lane of the whole vector.
Definition at line 215 of file VPlan.h.
References First.
Referenced by llvm::VPIteration::isFirstIteration().
|
inline |
Maps the lane to a cache index based on VF
.
Definition at line 218 of file VPlan.h.
References assert(), llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::getKnownMinValue(), llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::isScalable(), and ScalableLast.