|
| 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) |
|
| InnerLoopVectorizer (Loop *OrigLoop, PredicatedScalarEvolution &PSE, LoopInfo *LI, DominatorTree *DT, const TargetLibraryInfo *TLI, const TargetTransformInfo *TTI, AssumptionCache *AC, OptimizationRemarkEmitter *ORE, unsigned VecWidth, unsigned UnrollFactor, LoopVectorizationLegality *LVL, LoopVectorizationCostModel *CM) |
|
virtual | ~InnerLoopVectorizer ()=default |
|
BasicBlock * | createVectorizedLoopSkeleton () |
| Create a new empty loop. More...
|
|
void | widenInstruction (Instruction &I) |
| Widen a single instruction within the innermost loop. More...
|
|
void | fixVectorizedLoop () |
| Fix the vectorized code, taking care of header phi's, live-outs, and more. More...
|
|
bool | areSafetyChecksAdded () |
|
void | widenPHIInstruction (Instruction *PN, unsigned UF, unsigned VF) |
| Vectorize a single PHINode in a block. More...
|
|
void | scalarizeInstruction (Instruction *Instr, const VPIteration &Instance, bool IfPredicateInstr) |
| A helper function to scalarize a single Instruction in the innermost loop. More...
|
|
void | widenIntOrFpInduction (PHINode *IV, TruncInst *Trunc=nullptr) |
| Widen an integer or floating-point induction variable IV . More...
|
|
Value * | getOrCreateVectorValue (Value *V, unsigned Part) |
| getOrCreateVectorValue and getOrCreateScalarValue coordinate to generate a vector or scalar value on-demand if one is not yet available. More...
|
|
Value * | getOrCreateScalarValue (Value *V, const VPIteration &Instance) |
| Return a value in the new loop corresponding to V from the original loop at unroll and vector indices Instance . More...
|
|
void | packScalarIntoVectorValue (Value *V, const VPIteration &Instance) |
| Construct the vector value of a scalarized value V one lane at a time. More...
|
|
void | vectorizeInterleaveGroup (Instruction *Instr, VectorParts *BlockInMask=nullptr) |
| Try to vectorize the interleaved access group that Instr belongs to, optionally masking the vector operations if BlockInMask is non-null. More...
|
|
void | vectorizeMemoryInstruction (Instruction *Instr, VectorParts *BlockInMask=nullptr) |
| Vectorize Load and Store instructions, optionally masking the vector operations if BlockInMask is non-null. More...
|
|
void | setDebugLocFromInst (IRBuilder<> &B, const Value *Ptr) |
| Set the debug location in the builder using the debug location in the instruction. More...
|
|
void | fixNonInductionPHIs (void) |
| Fix the non-induction PHIs in the OrigPHIsToFix vector. More...
|
|
|
using | VectorParts = SmallVector< Value *, 2 > |
| A type for vectorized values in the new loop. More...
|
|
using | PhiVector = SmallVector< PHINode *, 4 > |
| A small list of PHINodes. More...
|
|
using | ScalarParts = SmallVector< SmallVector< Value *, 4 >, 2 > |
| A type for scalarized values in the new loop. More...
|
|
void | fixupIVUsers (PHINode *OrigPhi, const InductionDescriptor &II, Value *CountRoundDown, Value *EndValue, BasicBlock *MiddleBlock) |
| Set up the values of the IVs correctly when exiting the vector loop. More...
|
|
PHINode * | createInductionVariable (Loop *L, Value *Start, Value *End, Value *Step, Instruction *DL) |
| Create a new induction variable inside L. More...
|
|
void | fixCrossIterationPHIs () |
| Handle all cross-iteration phis in the header. More...
|
|
void | fixFirstOrderRecurrence (PHINode *Phi) |
| Fix a first-order recurrence. More...
|
|
void | fixReduction (PHINode *Phi) |
| Fix a reduction cross-iteration phi. More...
|
|
void | fixLCSSAPHIs () |
| The Loop exit block may have single value PHI nodes with some incoming value. More...
|
|
void | sinkScalarOperands (Instruction *PredInst) |
| Iteratively sink the scalarized operands of a predicated instruction into the block that was created for it. More...
|
|
void | truncateToMinimalBitwidths () |
| Shrinks vector element sizes to the smallest bitwidth they can be legally represented as. More...
|
|
void | updateAnalysis () |
| Insert the new loop to the loop hierarchy and pass manager and update the analysis passes. More...
|
|
void | buildScalarSteps (Value *ScalarIV, Value *Step, Instruction *EntryVal, const InductionDescriptor &ID) |
| Compute scalar induction steps. More...
|
|
void | createVectorIntOrFpInductionPHI (const InductionDescriptor &II, Value *Step, Instruction *EntryVal) |
| Create a vector induction phi node based on an existing scalar one. More...
|
|
bool | shouldScalarizeInstruction (Instruction *I) const |
| Returns true if an instruction I should be scalarized instead of vectorized for the chosen vectorization factor. More...
|
|
bool | needsScalarInduction (Instruction *IV) const |
| Returns true if we should generate a scalar version of IV . More...
|
|
void | recordVectorLoopValueForInductionCast (const InductionDescriptor &ID, const Instruction *EntryVal, Value *VectorLoopValue, unsigned Part, unsigned Lane=UINT_MAX) |
| If there is a cast involved in the induction variable ID , which should be ignored in the vectorized loop body, this function records the VectorLoopValue of the respective Phi also as the VectorLoopValue of the cast. More...
|
|
Value * | getOrCreateTripCount (Loop *NewLoop) |
| Returns (and creates if needed) the original loop trip count. More...
|
|
Value * | getOrCreateVectorTripCount (Loop *NewLoop) |
| Returns (and creates if needed) the trip count of the widened loop. More...
|
|
Value * | createBitOrPointerCast (Value *V, VectorType *DstVTy, const DataLayout &DL) |
| Returns a bitcasted value to the requested vector type. More...
|
|
void | emitMinimumIterationCountCheck (Loop *L, BasicBlock *Bypass) |
| Emit a bypass check to see if the vector trip count is zero, including if it overflows. More...
|
|
void | emitSCEVChecks (Loop *L, BasicBlock *Bypass) |
| Emit a bypass check to see if all of the SCEV assumptions we've had to make are correct. More...
|
|
void | emitMemRuntimeChecks (Loop *L, BasicBlock *Bypass) |
| Emit bypass checks to check any memory assumptions we may have made. More...
|
|
Value * | emitTransformedIndex (IRBuilder<> &B, Value *Index, ScalarEvolution *SE, const DataLayout &DL, const InductionDescriptor &ID) const |
| Compute the transformed value of Index at offset StartValue using step StepValue. More...
|
|
void | addNewMetadata (Instruction *To, const Instruction *Orig) |
| Add additional metadata to To that was not present on Orig . More...
|
|
void | addMetadata (Instruction *To, Instruction *From) |
| Add metadata from one instruction to another. More...
|
|
void | addMetadata (ArrayRef< Value *> To, Instruction *From) |
| Similar to the previous function but it adds the metadata to a vector of instructions. More...
|
|
Loop * | OrigLoop |
| The original loop. More...
|
|
PredicatedScalarEvolution & | PSE |
| A wrapper around ScalarEvolution used to add runtime SCEV checks. More...
|
|
LoopInfo * | LI |
| Loop Info. More...
|
|
DominatorTree * | DT |
| Dominator Tree. More...
|
|
AliasAnalysis * | AA |
| Alias Analysis. More...
|
|
const TargetLibraryInfo * | TLI |
| Target Library Info. More...
|
|
const TargetTransformInfo * | TTI |
| Target Transform Info. More...
|
|
AssumptionCache * | AC |
| Assumption Cache. More...
|
|
OptimizationRemarkEmitter * | ORE |
| Interface to emit optimization remarks. More...
|
|
std::unique_ptr< LoopVersioning > | LVer |
| LoopVersioning. More...
|
|
unsigned | VF |
| The vectorization SIMD factor to use. More...
|
|
unsigned | UF |
| The vectorization unroll factor to use. More...
|
|
IRBuilder | Builder |
| The builder that we use. More...
|
|
BasicBlock * | LoopVectorPreHeader |
| The vector-loop preheader. More...
|
|
BasicBlock * | LoopScalarPreHeader |
| The scalar-loop preheader. More...
|
|
BasicBlock * | LoopMiddleBlock |
| Middle Block between the vector and the scalar. More...
|
|
BasicBlock * | LoopExitBlock |
| The ExitBlock of the scalar loop. More...
|
|
BasicBlock * | LoopVectorBody |
| The vector loop body. More...
|
|
BasicBlock * | LoopScalarBody |
| The scalar loop body. More...
|
|
SmallVector< BasicBlock *, 4 > | LoopBypassBlocks |
| A list of all bypass blocks. The first block is the entry of the loop. More...
|
|
PHINode * | Induction = nullptr |
| The new Induction variable which was added to the new block. More...
|
|
PHINode * | OldInduction = nullptr |
| The induction variable of the old basic block. More...
|
|
VectorizerValueMap | VectorLoopValueMap |
| Maps values from the original loop to their corresponding values in the vectorized loop. More...
|
|
SmallVector< Instruction *, 4 > | PredicatedInstructions |
| Store instructions that were predicated. More...
|
|
Value * | TripCount = nullptr |
| Trip count of the original loop. More...
|
|
Value * | VectorTripCount = nullptr |
| Trip count of the widened loop (TripCount - TripCount % (VF*UF)) More...
|
|
LoopVectorizationLegality * | Legal |
| The legality analysis. More...
|
|
LoopVectorizationCostModel * | Cost |
| The profitablity analysis. More...
|
|
bool | AddedSafetyChecks = false |
|
DenseMap< PHINode *, Value * > | IVEndValues |
|
SmallVector< PHINode *, 8 > | OrigPHIsToFix |
|
Definition at line 717 of file LoopVectorize.cpp.