13#ifndef LLVM_TRANSFORMS_VECTORIZE_VPLANTRANSFORMS_H
14#define LLVM_TRANSFORMS_VECTORIZE_VPLANTRANSFORMS_H
40 template <
typename... ArgsTy>
42 typename std::remove_reference<ArgsTy>::type &...Args) {
43 bool Res = Transform(Plan, Args...);
50 template <
typename... ArgsTy>
52 typename std::remove_reference<ArgsTy>::type &...Args) {
106 bool HasUncountableExit);
111 bool RequiresScalarEpilogueCheck,
117 ElementCount MinProfitableTripCount,
bool RequiresScalarEpilogue,
118 bool TailFolded,
bool CheckNeededWithTailFolding,
Loop *OrigLoop,
125 bool RequiresScalarEpilogue,
ElementCount EpilogueVF,
unsigned EpilogueUF,
126 unsigned MainLoopStep,
unsigned EpilogueLoopStep,
ScalarEvolution &SE);
136 bool AddBranchWeights);
144 GetIntOrFpInductionDescriptor,
201 bool UseActiveLaneMaskForControlFlow,
230 const std::function<
bool(
BasicBlock *)> &BlockNeedsPredication);
239 const std::optional<unsigned> &MaxEVLSafeElements);
322 bool RequiresScalarEpilogue);
367 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.
This is an optimization pass for GlobalISel generic memory operations.
LLVM_ABI_FOR_TEST cl::opt< bool > VerifyEachVPlan
LLVM_ABI_FOR_TEST bool verifyVPlanIsValid(const VPlan &Plan, bool VerifyLate=false)
Verify invariants for general VPlans.
LLVM_ABI_FOR_TEST cl::opt< bool > EnableWideActiveLaneMask
@ 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.