| 
    LLVM 22.0.0git
    
   | 
 
#include "llvm/Transforms/Vectorize/LoopVectorizationLegality.h"#include "llvm/Analysis/AliasAnalysis.h"#include "llvm/Analysis/Loads.h"#include "llvm/Analysis/LoopInfo.h"#include "llvm/Analysis/MustExecute.h"#include "llvm/Analysis/OptimizationRemarkEmitter.h"#include "llvm/Analysis/ScalarEvolutionExpressions.h"#include "llvm/Analysis/TargetLibraryInfo.h"#include "llvm/Analysis/TargetTransformInfo.h"#include "llvm/Analysis/ValueTracking.h"#include "llvm/Analysis/VectorUtils.h"#include "llvm/IR/IntrinsicInst.h"#include "llvm/IR/PatternMatch.h"#include "llvm/Transforms/Utils/SizeOpts.h"#include "llvm/Transforms/Vectorize/LoopVectorize.h"Go to the source code of this file.
Namespaces | |
| namespace | llvm | 
| This is an optimization pass for GlobalISel generic memory operations.  | |
Macros | |
| #define | LV_NAME "loop-vectorize" | 
| #define | DEBUG_TYPE LV_NAME | 
Functions | |
| static bool | llvm::isUniformLoop (Loop *Lp, Loop *OuterLp) | 
| static bool | llvm::isUniformLoopNest (Loop *Lp, Loop *OuterLp) | 
| static IntegerType * | llvm::getInductionIntegerTy (const DataLayout &DL, Type *Ty) | 
| static IntegerType * | llvm::getWiderInductionTy (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.")) | 
| static cl::opt< bool > | 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.   | |
| #define DEBUG_TYPE LV_NAME | 
Definition at line 37 of file LoopVectorizationLegality.cpp.
| #define LV_NAME "loop-vectorize" | 
Definition at line 36 of file LoopVectorizationLegality.cpp.
Referenced by checkMixedPrecision(), llvm::LoopVectorizeHints::emitRemarkWithHints(), llvm::LoopVectorizePass::processLoop(), llvm::reportVectorization(), and llvm::LoopVectorizeHints::vectorizeAnalysisPassName().
      
  | 
  static | 
      
  | 
  static | 
      
  | 
  static | 
      
  | 
  static | 
Referenced by llvm::LoopVectorizeHints::LoopVectorizeHints().
      
  | 
  static | 
Referenced by llvm::LoopVectorizeHints::allowReordering().
Maximum vectorization interleave count.
Definition at line 87 of file LoopVectorizationLegality.cpp.
Referenced by llvm::WebAssemblyTTIImpl::getInterleavedMemoryOpCost().
      
  | 
  static | 
Referenced by llvm::LoopVectorizationLegality::canVectorize().
      
  | 
  static | 
Referenced by llvm::LoopVectorizationLegality::canVectorize().