13#ifndef LLVM_TRANSFORMS_VECTORIZE_VPLANTRANSFORMS_H
14#define LLVM_TRANSFORMS_VECTORIZE_VPLANTRANSFORMS_H
24class InductionDescriptor;
28class PredicatedScalarEvolution;
29class TargetLibraryInfo;
39 template <
typename... ArgsTy>
41 typename std::remove_reference<ArgsTy>::type &...Args) {
42 bool Res = Transform(Plan, Args...);
49 template <
typename... ArgsTy>
51 typename std::remove_reference<ArgsTy>::type &...Args) {
105 bool HasUncountableExit);
110 bool RequiresScalarEpilogueCheck,
116 ElementCount MinProfitableTripCount,
bool RequiresScalarEpilogue,
117 bool TailFolded,
bool CheckNeededWithTailFolding,
Loop *OrigLoop,
128 bool AddBranchWeights);
136 GetIntOrFpInductionDescriptor,
193 bool UseActiveLaneMaskForControlFlow,
216 const std::function<
bool(
BasicBlock *)> &BlockNeedsPredication);
225 const std::optional<unsigned> &MaxEVLSafeElements);
305 bool RequiresScalarEpilogue);
334 unsigned VectorRegWidth);
349 std::optional<unsigned> VScaleForTuning);
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
#define LLVM_ABI_FOR_TEST
static constexpr uint32_t MinItersBypassWeights[]
ConstantRange Range(APInt(BitWidth, Low), APInt(BitWidth, High))
const SmallVectorImpl< MachineOperand > & Cond
This file declares the class VPlanVerifier, which contains utility functions to check the consistency...
This file contains the declarations of the Vectorization Plan base classes:
LLVM Basic Block Representation.
A struct for saving information about induction variables.
The group of interleaved loads/stores sharing the same stride and close to each other.
Represents a single loop in the control flow graph.
This class implements a map that also provides access to all stored values in a deterministic order.
An interface layer with SCEV used to manage how we see SCEV expressions for values in the context of ...
The main scalar evolution driver.
A templated base class for SmallPtrSet which provides the typesafe interface that is common across al...
Provides information about what library functions are available for the current target.
The instances of the Type class are immutable: once they are created, they are never changed.
VPBasicBlock serves as the leaf of the Hierarchical Control-Flow Graph.
VPlan-based builder utility analogous to IRBuilder.
Helper class to create VPRecipies from IR instructions.
VPlan models a candidate for vectorization, encoding various decisions take to produce efficient outp...
LLVM Value Representation.
An efficient, type-erasing, non-owning reference to a callable.
template class LLVM_TEMPLATE_ABI opt< bool >
This is an optimization pass for GlobalISel generic memory operations.
cl::opt< bool > VerifyEachVPlan
LLVM_ABI_FOR_TEST bool verifyVPlanIsValid(const VPlan &Plan, bool VerifyLate=false)
Verify invariants for general VPlans.
std::unique_ptr< VPlan > VPlanPtr
@ DataAndControlFlowWithoutRuntimeCheck
Use predicate to control both data and control flow, but modify the trip count so that a runtime over...
A range of powers-of-2 vectorization factors with fixed start and adjustable end.
Struct to hold various analysis needed for cost computations.