Go to the documentation of this file.
56 #ifndef LLVM_TRANSFORMS_VECTORIZE_LOOPVECTORIZE_H
57 #define LLVM_TRANSFORMS_VECTORIZE_LOOPVECTORIZE_H
66 class AssumptionCache;
67 class BlockFrequencyInfo;
74 class OptimizationRemarkEmitter;
75 class ProfileSummaryInfo;
76 class ScalarEvolution;
77 class TargetLibraryInfo;
78 class TargetTransformInfo;
94 return !PAC.preservedWhenStateless();
165 bool InterleaveOnlyWhenForced;
169 bool VectorizeOnlyWhenForced;
220 #endif // LLVM_TRANSFORMS_VECTORIZE_LOOPVECTORIZE_H
A set of analyses that are preserved following a run of a transformation pass.
LoopVectorizeOptions()
The current defaults when creating the pass with no arguments are: EnableLoopInterleaving = true and ...
This is an optimization pass for GlobalISel generic memory operations.
void printPipeline(raw_ostream &OS, function_ref< StringRef(StringRef)> MapClassName2PassName)
OptimizationRemarkEmitter * ORE
A CRTP mix-in to automatically provide informational APIs needed for passes.
Represents a single loop in the control flow graph.
bool VectorizeOnlyWhenForced
If false, consider all loops for vectorization.
The main scalar evolution driver.
Concrete subclass of DominatorTreeBase that is used to compute a normal dominator tree.
FunctionAnalysisManager FAM
void reportVectorizationFailure(const StringRef DebugMsg, const StringRef OREMsg, const StringRef ORETag, OptimizationRemarkEmitter *ORE, Loop *TheLoop, Instruction *I=nullptr)
Reports a vectorization failure: print DebugMsg for debugging purposes along with the corresponding o...
LoopVectorizeOptions & setInterleaveOnlyWhenForced(bool Value)
LoopVectorizeOptions(bool InterleaveOnlyWhenForced, bool VectorizeOnlyWhenForced)
BlockFrequencyInfo pass uses BlockFrequencyInfoImpl implementation to estimate IR basic block frequen...
void reportVectorizationInfo(const StringRef OREMsg, const StringRef ORETag, OptimizationRemarkEmitter *ORE, Loop *TheLoop, Instruction *I=nullptr)
Reports an informative message: print Msg for debugging purposes as well as an optimization remark.
This class implements an extremely fast bulk output stream that can only output to a stream.
API to communicate dependencies between analyses during invalidation.
TargetTransformInfo * TTI
cl::opt< bool > EnableLoopVectorization
Analysis providing profile information.
An efficient, type-erasing, non-owning reference to a callable.
LoopVectorizeResult runImpl(Function &F, ScalarEvolution &SE_, LoopInfo &LI_, TargetTransformInfo &TTI_, DominatorTree &DT_, BlockFrequencyInfo &BFI_, TargetLibraryInfo *TLI_, DemandedBits &DB_, AAResults &AA_, AssumptionCache &AC_, std::function< const LoopAccessInfo &(Loop &)> &GetLAA_, OptimizationRemarkEmitter &ORE_, ProfileSummaryInfo *PSI_)
A special type used by analysis passes to provide an address that identifies that particular analysis...
Drive the analysis of memory accesses in the loop.
print Print MemDeps of function
A CRTP mix-in that provides informational APIs needed for analysis passes.
StringRef - Represent a constant reference to a string, i.e.
A cache of @llvm.assume calls within a function.
LoopVectorizeOptions & setVectorizeOnlyWhenForced(bool Value)
bool processLoop(Loop *L)
static PreservedAnalyses all()
Construct a special preserved set that preserves all passes.
PassT::Result * getCachedResult(IRUnitT &IR) const
Get the cached result of an analysis pass for a given IR unit.
Provides information about what library functions are available for the current target.
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
Storage for information about made changes.
PreservedAnalyses run(Function &IR, AnalysisManager< Function > &AM, ExtraArgTs... ExtraArgs)
Run all of the passes in this manager over the given unit of IR.
std::function< const LoopAccessInfo &(Loop &)> * GetLAA
LoopVectorizeResult(bool MadeAnyChange, bool MadeCFGChange)
PreservedAnalysisChecker getChecker() const
Build a checker for this PreservedAnalyses and the specified analysis type.
A container for analyses that lazily runs them and caches their results.
bool InterleaveOnlyWhenForced
If false, consider all loops for interleaving.
LoopVectorizePass(LoopVectorizeOptions Opts={})
LLVM Value Representation.
cl::opt< bool > EnableLoopInterleaving