LLVM: lib/Transforms/Vectorize/LoopVectorizationLegality.cpp File Reference (original) (raw)

Go to the source code of this file.

Namespaces
namespace llvm
This is an optimization pass for GlobalISel generic memory operations.
Functions
static bool llvm::isUniformLoop (Loop *Lp, Loop *OuterLp)
static bool llvm::isUniformLoopNest (Loop *Lp, Loop *OuterLp)
static Type * llvm::convertPointerToIntegerType (const DataLayout &DL, Type *Ty)
static Type * llvm::getWiderType (const DataLayout &DL, Type *Ty0, Type *Ty1)
static bool llvm::hasOutsideLoopUser (const Loop *TheLoop, Instruction *Inst, SmallPtrSetImpl< Value * > &AllowedExit)
Check that the instruction has outside loop users and is not an identified reduction variable.
static bool llvm::storeToSameAddress (ScalarEvolution *SE, StoreInst *A, StoreInst *B)
Returns true if A and B have same pointer operands or same SCEVs addresses.
static bool llvm::isTLIScalarize (const TargetLibraryInfo &TLI, const CallInst &CI)
Checks if a function is scalarizable according to the TLI, in the sense that it should be vectorized and then expanded in multiple scalar calls.
static bool llvm::canWidenCallReturnType (Type *Ty)
Returns true if the call return type Ty can be widened by the loop vectorizer.
static bool llvm::findHistogram (LoadInst *LI, StoreInst *HSt, Loop *TheLoop, const PredicatedScalarEvolution &PSE, SmallVectorImpl< HistogramInfo > &Histograms)
Find histogram operations that match high-level code in loops:
Variables
static cl::opt< bool > EnableIfConversion ("enable-if-conversion", cl::init(true), cl::Hidden, cl::desc("Enable if-conversion during vectorization."))
static cl::opt< bool > AllowStridedPointerIVs ("lv-strided-pointer-ivs", cl::init(false), cl::Hidden, cl::desc("Enable recognition of non-constant strided " "pointer induction variables."))
cl::opt< bool > llvm::HintsAllowReordering ("hints-allow-reordering", cl::init(true), cl::Hidden, cl::desc("Allow enabling loop hints to reorder " "FP operations during vectorization."))
static cl::opt< unsigned > VectorizeSCEVCheckThreshold ("vectorize-scev-check-threshold", cl::init(16), cl::Hidden, cl::desc("The maximum number of SCEV checks allowed."))
static cl::opt< unsigned > PragmaVectorizeSCEVCheckThreshold ("pragma-vectorize-scev-check-threshold", cl::init(128), cl::Hidden, cl::desc("The maximum number of SCEV checks allowed with a " "vectorize(enable) pragma"))
static cl::opt< LoopVectorizeHints::ScalableForceKind > ForceScalableVectorization ("scalable-vectorization", cl::init(LoopVectorizeHints::SK_Unspecified), cl::Hidden, cl::desc("Control whether the compiler can use scalable vectors to " "vectorize a loop"), cl::values(clEnumValN(LoopVectorizeHints::SK_FixedWidthOnly, "off", "Scalable vectorization is disabled."), clEnumValN(LoopVectorizeHints::SK_PreferScalable, "preferred", "Scalable vectorization is available and favored when the " "cost is inconclusive."), clEnumValN(LoopVectorizeHints::SK_PreferScalable, "on", "Scalable vectorization is available and favored when the " "cost is inconclusive.")))
static cl::opt< bool > EnableHistogramVectorization ("enable-histogram-loop-vectorization", cl::init(false), cl::Hidden, cl::desc("Enables autovectorization of some loops containing histograms"))
static const unsigned MaxInterleaveFactor = 16
Maximum vectorization interleave count.

DEBUG_TYPE

LV_NAME

#define LV_NAME "loop-vectorize"

AllowStridedPointerIVs

cl::opt< bool > AllowStridedPointerIVs("lv-strided-pointer-ivs", cl::init(false), cl::Hidden, cl::desc("Enable recognition of non-constant strided " "pointer induction variables.")) ( "lv-strided-pointer-ivs" , cl::init(false) , cl::Hidden , cl::desc("Enable recognition of non-constant strided " "pointer induction variables.") ) static

EnableHistogramVectorization

cl::opt< bool > EnableHistogramVectorization("enable-histogram-loop-vectorization", cl::init(false), cl::Hidden, cl::desc("Enables autovectorization of some loops containing histograms")) ( "enable-histogram-loop-vectorization" , cl::init(false) , cl::Hidden , cl::desc("Enables autovectorization of some loops containing histograms") ) static

EnableIfConversion

cl::opt< bool > EnableIfConversion("enable-if-conversion", cl::init(true), cl::Hidden, cl::desc("Enable if-conversion during vectorization.")) ( "enable-if-conversion" , cl::init(true) , cl::Hidden , cl::desc("Enable if-conversion during vectorization.") ) static

ForceScalableVectorization

cl::opt< LoopVectorizeHints::ScalableForceKind > ForceScalableVectorization("scalable-vectorization", cl::init(LoopVectorizeHints::SK_Unspecified), cl::Hidden, cl::desc("Control whether the compiler can use scalable vectors to " "vectorize a loop"), cl::values( clEnumValN(LoopVectorizeHints::SK_FixedWidthOnly, "off", "Scalable vectorization is disabled."), clEnumValN( LoopVectorizeHints::SK_PreferScalable, "preferred", "Scalable vectorization is available and favored when the " "cost is inconclusive."), clEnumValN( LoopVectorizeHints::SK_PreferScalable, "on", "Scalable vectorization is available and favored when the " "cost is inconclusive."))) ( "scalable-vectorization" , cl::init(LoopVectorizeHints::SK_Unspecified) , cl::Hidden , cl::desc("Control whether the compiler can use scalable vectors to " "vectorize a loop") , cl::values( clEnumValN(LoopVectorizeHints::SK_FixedWidthOnly, "off", "Scalable vectorization is disabled."), clEnumValN( LoopVectorizeHints::SK_PreferScalable, "preferred", "Scalable vectorization is available and favored when the " "cost is inconclusive."), clEnumValN( LoopVectorizeHints::SK_PreferScalable, "on", "Scalable vectorization is available and favored when the " "cost is inconclusive.")) ) static

MaxInterleaveFactor

PragmaVectorizeSCEVCheckThreshold

cl::opt< unsigned > PragmaVectorizeSCEVCheckThreshold("pragma-vectorize-scev-check-threshold", cl::init(128), cl::Hidden, cl::desc("The maximum number of SCEV checks allowed with a " "vectorize(enable) pragma")) ( "pragma-vectorize-scev-check-threshold" , cl::init(128) , cl::Hidden , cl::desc("The maximum number of SCEV checks allowed with a " "vectorize(enable) pragma") ) static

VectorizeSCEVCheckThreshold

cl::opt< unsigned > VectorizeSCEVCheckThreshold("vectorize-scev-check-threshold", cl::init(16), cl::Hidden, cl::desc("The maximum number of SCEV checks allowed.")) ( "vectorize-scev-check-threshold" , cl::init(16) , cl::Hidden , cl::desc("The maximum number of SCEV checks allowed.") ) static