|
| InnerLoopUnroller (Loop *OrigLoop, PredicatedScalarEvolution &PSE, LoopInfo *LI, DominatorTree *DT, const TargetLibraryInfo *TLI, const TargetTransformInfo *TTI, AssumptionCache *AC, OptimizationRemarkEmitter *ORE, unsigned UnrollFactor, LoopVectorizationLegality *LVL, LoopVectorizationCostModel *CM, BlockFrequencyInfo *BFI, ProfileSummaryInfo *PSI, GeneratedRTChecks &Check) |
|
| InnerLoopVectorizer (Loop *OrigLoop, PredicatedScalarEvolution &PSE, LoopInfo *LI, DominatorTree *DT, const TargetLibraryInfo *TLI, const TargetTransformInfo *TTI, AssumptionCache *AC, OptimizationRemarkEmitter *ORE, ElementCount VecWidth, ElementCount MinProfitableTripCount, unsigned UnrollFactor, LoopVectorizationLegality *LVL, LoopVectorizationCostModel *CM, BlockFrequencyInfo *BFI, ProfileSummaryInfo *PSI, GeneratedRTChecks &RTChecks) |
|
virtual | ~InnerLoopVectorizer ()=default |
|
virtual std::pair< BasicBlock *, Value * > | createVectorizedLoopSkeleton (const SCEV2ValueTy &ExpandedSCEVs) |
| Create a new empty loop that will contain vectorized instructions later on, while the old loop will be used as the scalar remainder.
|
|
void | fixVectorizedLoop (VPTransformState &State, VPlan &Plan) |
| Fix the vectorized code, taking care of header phi's, live-outs, and more.
|
|
bool | areSafetyChecksAdded () |
|
void | scalarizeInstruction (const Instruction *Instr, VPReplicateRecipe *RepRecipe, const VPIteration &Instance, VPTransformState &State) |
| A helper function to scalarize a single Instruction in the innermost loop.
|
|
void | fixNonInductionPHIs (VPlan &Plan, VPTransformState &State) |
| Fix the non-induction PHIs in Plan .
|
|
PHINode * | createInductionResumeValue (PHINode *OrigPhi, const InductionDescriptor &ID, Value *Step, ArrayRef< BasicBlock * > BypassBlocks, std::pair< BasicBlock *, Value * > AdditionalBypass={nullptr, nullptr}) |
| Create a new phi node for the induction variable OrigPhi to resume iteration count in the scalar epilogue, from where the vectorized loop left off.
|
|
Value * | getTripCount () const |
| Returns the original loop trip count.
|
|
void | setTripCount (Value *TC) |
| Used to set the trip count after ILV's construction and after the preheader block has been executed.
|
|
|
using | PhiVector = SmallVector< PHINode *, 4 > |
| A small list of PHINodes.
|
|
using | ScalarParts = SmallVector< SmallVector< Value *, 4 >, 2 > |
| A type for scalarized values in the new loop.
|
|
void | fixupIVUsers (PHINode *OrigPhi, const InductionDescriptor &II, Value *VectorTripCount, Value *EndValue, BasicBlock *MiddleBlock, BasicBlock *VectorHeader, VPlan &Plan, VPTransformState &State) |
| Set up the values of the IVs correctly when exiting the vector loop.
|
|
void | sinkScalarOperands (Instruction *PredInst) |
| Iteratively sink the scalarized operands of a predicated instruction into the block that was created for it.
|
|
Value * | getOrCreateVectorTripCount (BasicBlock *InsertBlock) |
| Returns (and creates if needed) the trip count of the widened loop.
|
|
void | emitIterationCountCheck (BasicBlock *Bypass) |
| Emit a bypass check to see if the vector trip count is zero, including if it overflows.
|
|
BasicBlock * | emitSCEVChecks (BasicBlock *Bypass) |
| Emit a bypass check to see if all of the SCEV assumptions we've had to make are correct.
|
|
BasicBlock * | emitMemRuntimeChecks (BasicBlock *Bypass) |
| Emit bypass checks to check any memory assumptions we may have made.
|
|
void | createVectorLoopSkeleton (StringRef Prefix) |
| Emit basic blocks (prefixed with Prefix ) for the iteration check, vector loop preheader, middle block and scalar preheader.
|
|
void | createInductionResumeValues (const SCEV2ValueTy &ExpandedSCEVs, std::pair< BasicBlock *, Value * > AdditionalBypass={nullptr, nullptr}) |
| Create new phi nodes for the induction variables to resume iteration count in the scalar epilogue, from where the vectorized loop left off.
|
|
BasicBlock * | completeLoopSkeleton () |
| Complete the loop skeleton by adding debug MDs, creating appropriate conditional branches in the middle block, preparing the builder and running the verifier.
|
|
virtual void | printDebugTracesAtStart () |
| Allow subclasses to override and print debug traces before/after vplan execution, when trace information is requested.
|
|
virtual void | printDebugTracesAtEnd () |
|
Loop * | OrigLoop |
| The original loop.
|
|
PredicatedScalarEvolution & | PSE |
| A wrapper around ScalarEvolution used to add runtime SCEV checks.
|
|
LoopInfo * | LI |
| Loop Info.
|
|
DominatorTree * | DT |
| Dominator Tree.
|
|
const TargetLibraryInfo * | TLI |
| Target Library Info.
|
|
const TargetTransformInfo * | TTI |
| Target Transform Info.
|
|
AssumptionCache * | AC |
| Assumption Cache.
|
|
OptimizationRemarkEmitter * | ORE |
| Interface to emit optimization remarks.
|
|
ElementCount | VF |
| The vectorization SIMD factor to use.
|
|
ElementCount | MinProfitableTripCount |
|
unsigned | UF |
| The vectorization unroll factor to use.
|
|
IRBuilder | Builder |
| The builder that we use.
|
|
BasicBlock * | LoopVectorPreHeader |
| The vector-loop preheader.
|
|
BasicBlock * | LoopScalarPreHeader |
| The scalar-loop preheader.
|
|
BasicBlock * | LoopMiddleBlock |
| Middle Block between the vector and the scalar.
|
|
BasicBlock * | LoopExitBlock |
| The unique ExitBlock of the scalar loop if one exists.
|
|
BasicBlock * | LoopScalarBody |
| The scalar loop body.
|
|
SmallVector< BasicBlock *, 4 > | LoopBypassBlocks |
| A list of all bypass blocks. The first block is the entry of the loop.
|
|
SmallVector< Instruction *, 4 > | PredicatedInstructions |
| Store instructions that were predicated.
|
|
Value * | TripCount = nullptr |
| Trip count of the original loop.
|
|
Value * | VectorTripCount = nullptr |
| Trip count of the widened loop (TripCount - TripCount % (VF*UF))
|
|
LoopVectorizationLegality * | Legal |
| The legality analysis.
|
|
LoopVectorizationCostModel * | Cost |
| The profitablity analysis.
|
|
bool | AddedSafetyChecks = false |
|
DenseMap< PHINode *, Value * > | IVEndValues |
|
BlockFrequencyInfo * | BFI |
| BFI and PSI are used to check for profile guided size optimizations.
|
|
ProfileSummaryInfo * | PSI |
|
bool | OptForSizeBasedOnProfile |
|
GeneratedRTChecks & | RTChecks |
| Structure to hold information about generated runtime checks, responsible for cleaning the checks, if vectorization turns out unprofitable.
|
|
SmallMapVector< const RecurrenceDescriptor *, PHINode *, 4 > | ReductionResumeValues |
|
Definition at line 704 of file LoopVectorize.cpp.