10 #ifndef LLVM_TRANSFORMS_VECTORIZE_VPRECIPEBUILDER_H 11 #define LLVM_TRANSFORMS_VECTORIZE_VPRECIPEBUILDER_H 20 class LoopVectorizationLegality;
21 class LoopVectorizationCostModel;
22 class TargetTransformInfo;
23 class TargetLibraryInfo;
111 : OrigLoop(OrigLoop), TLI(TLI), TTI(TTI), Legal(Legal), CM(CM),
132 #endif // LLVM_TRANSFORMS_VECTORIZE_VPRECIPEBUILDER_H VPInterleaveRecipe * tryToInterleaveMemory(Instruction *I, VFRange &Range, VPlanPtr &Plan)
Check if belongs to an Interleave Group within the given VF Range,.
This class represents lattice values for constants.
VPRegionBlock represents a collection of VPBasicBlocks and VPRegionBlocks which form a Single-Entry-S...
VPWidenMemoryInstructionRecipe * tryToWidenMemory(Instruction *I, VFRange &Range, VPlanPtr &Plan)
Check if is a memory instruction to be widened for Range.Start and potentially masked.
Helper class to create VPRecipies from IR instructions.
LoopVectorizationLegality checks if it is legal to vectorize a loop, and to what vectorization factor...
bool tryToCreateRecipe(Instruction *Instr, VFRange &Range, VPlanPtr &Plan, VPBasicBlock *VPBB)
Check if a recipe can be create for I withing the given VF Range.
A Recipe for widening load/store operations.
VPRecipeBase is a base class modeling a sequence of one or more output IR instructions.
VPValue * createBlockInMask(BasicBlock *BB, VPlanPtr &Plan)
A helper function that computes the predicate of the block BB, assuming that the header block of the ...
bool tryToWiden(Instruction *I, VPBasicBlock *VPBB, VFRange &Range)
Check if I can be widened within the given VF Range.
VPBlendRecipe * tryToBlend(Instruction *I, VPlanPtr &Plan)
Handle non-loop phi nodes.
VPRegionBlock * createReplicateRegion(Instruction *I, VPRecipeBase *PredRecipe, VPlanPtr &Plan)
Create a replicating region for instruction I that requires predication.
VPRecipeBuilder(Loop *OrigLoop, const TargetLibraryInfo *TLI, const TargetTransformInfo *TTI, LoopVectorizationLegality *Legal, LoopVectorizationCostModel &CM, VPBuilder &Builder)
This file provides a LoopVectorizationPlanner class.
VPlan-based builder utility analogous to IRBuilder.
LLVM Basic Block Representation.
This file contains the declarations of the Vectorization Plan base classes:
std::unique_ptr< VPlan > VPlanPtr
VPBasicBlock serves as the leaf of the Hierarchical Control-Flow Graph.
A range of powers-of-2 vectorization factors with fixed start and adjustable end. ...
Provides information about what library functions are available for the current target.
VPValue * createEdgeMask(BasicBlock *Src, BasicBlock *Dst, VPlanPtr &Plan)
A helper function that computes the predicate of the edge between SRC and DST.
VPInterleaveRecipe is a recipe for transforming an interleave group of load or stores into one wide l...
Represents a single loop in the control flow graph.
VPBasicBlock * handleReplication(Instruction *I, VFRange &Range, VPBasicBlock *VPBB, DenseMap< Instruction *, VPReplicateRecipe *> &PredInst2Recipe, VPlanPtr &Plan)
Build a VPReplicationRecipe for I and enclose it within a Region if it is predicated.
A recipe for handling phi nodes of integer and floating-point inductions, producing their vector and ...
LoopVectorizationCostModel - estimates the expected speedups due to vectorization.
A recipe for vectorizing a phi-node as a sequence of mask-based select instructions.
VPWidenIntOrFpInductionRecipe * tryToOptimizeInduction(Instruction *I, VFRange &Range)
Check if an induction recipe should be constructed for within the given VF Range.