|
| VPReductionPHIRecipe (PHINode *Phi, const RecurrenceDescriptor &RdxDesc, VPValue &Start, bool IsInLoop=false, bool IsOrdered=false, unsigned VFScaleFactor=1) |
| Create a new VPReductionPHIRecipe for the reduction Phi described by RdxDesc .
|
|
| ~VPReductionPHIRecipe () override=default |
|
VPReductionPHIRecipe * | clone () override |
| Clone the current recipe.
|
|
void | execute (VPTransformState &State) override |
| Generate the phi/select nodes.
|
|
void | print (raw_ostream &O, const Twine &Indent, VPSlotTracker &SlotTracker) const override |
| Print the recipe.
|
|
const RecurrenceDescriptor & | getRecurrenceDescriptor () const |
|
bool | isOrdered () const |
| Returns true, if the phi is part of an ordered reduction.
|
|
bool | isInLoop () const |
| Returns true, if the phi is part of an in-loop reduction.
|
|
template<typename IterT > |
| VPSingleDefRecipe (const unsigned char SC, IterT Operands, DebugLoc DL={}) |
|
| VPSingleDefRecipe (const unsigned char SC, ArrayRef< VPValue * > Operands, DebugLoc DL={}) |
|
template<typename IterT > |
| VPSingleDefRecipe (const unsigned char SC, IterT Operands, Value *UV, DebugLoc DL={}) |
|
virtual VPSingleDefRecipe * | clone () override=0 |
| Clone the current recipe.
|
|
Instruction * | getUnderlyingInstr () |
| Returns the underlying instruction.
|
|
const Instruction * | getUnderlyingInstr () const |
|
LLVM_DUMP_METHOD void | dump () const |
| Print this VPSingleDefRecipe to dbgs() (for debugging).
|
|
| VPRecipeBase (const unsigned char SC, ArrayRef< VPValue * > Operands, DebugLoc DL={}) |
|
template<typename IterT > |
| VPRecipeBase (const unsigned char SC, iterator_range< IterT > Operands, DebugLoc DL={}) |
|
virtual | ~VPRecipeBase ()=default |
|
virtual VPRecipeBase * | clone ()=0 |
| Clone the current recipe.
|
|
VPBasicBlock * | getParent () |
|
const VPBasicBlock * | getParent () const |
|
virtual void | execute (VPTransformState &State)=0 |
| The method which generates the output IR instructions that correspond to this VPRecipe, thereby "executing" the VPlan.
|
|
InstructionCost | cost (ElementCount VF, VPCostContext &Ctx) |
| Return the cost of this recipe, taking into account if the cost computation should be skipped and the ForceTargetInstructionCost flag.
|
|
void | insertBefore (VPRecipeBase *InsertPos) |
| Insert an unlinked recipe into a basic block immediately before the specified recipe.
|
|
void | insertBefore (VPBasicBlock &BB, iplist< VPRecipeBase >::iterator IP) |
| Insert an unlinked recipe into BB immediately before the insertion point IP ;.
|
|
void | insertAfter (VPRecipeBase *InsertPos) |
| Insert an unlinked Recipe into a basic block immediately after the specified Recipe.
|
|
void | moveAfter (VPRecipeBase *MovePos) |
| Unlink this recipe from its current VPBasicBlock and insert it into the VPBasicBlock that MovePos lives in, right after MovePos.
|
|
void | moveBefore (VPBasicBlock &BB, iplist< VPRecipeBase >::iterator I) |
| Unlink this recipe and insert into BB before I.
|
|
void | removeFromParent () |
| This method unlinks 'this' from the containing basic block, but does not delete it.
|
|
iplist< VPRecipeBase >::iterator | eraseFromParent () |
| This method unlinks 'this' from the containing basic block and deletes it.
|
|
bool | mayHaveSideEffects () const |
| Returns true if the recipe may have side-effects.
|
|
bool | isPhi () const |
| Returns true for PHI-like recipes.
|
|
bool | mayReadFromMemory () const |
| Returns true if the recipe may read from memory.
|
|
bool | mayWriteToMemory () const |
| Returns true if the recipe may write to memory.
|
|
bool | mayReadOrWriteMemory () const |
| Returns true if the recipe may read from or write to memory.
|
|
DebugLoc | getDebugLoc () const |
| Returns the debug location of the recipe.
|
|
VPRecipeBase * | getPrevNode () |
|
const VPRecipeBase * | getPrevNode () const |
| Get the previous node, or nullptr for the list head.
|
|
VPRecipeBase * | getNextNode () |
| Get the next node, or nullptr for the list tail.
|
|
const VPRecipeBase * | getNextNode () const |
| Get the next node, or nullptr for the list tail.
|
|
self_iterator | getIterator () |
|
const_self_iterator | getIterator () const |
|
reverse_self_iterator | getReverseIterator () |
|
const_reverse_self_iterator | getReverseIterator () const |
|
bool | isSentinel () const |
| Check whether this is the sentinel node.
|
|
const ParentTy * | getParent () const |
|
ParentTy * | getParent () |
|
void | setParent (ParentTy *Parent) |
|
| VPDef (const unsigned char SC) |
|
virtual | ~VPDef () |
|
VPValue * | getVPSingleValue () |
| Returns the only VPValue defined by the VPDef.
|
|
const VPValue * | getVPSingleValue () const |
|
VPValue * | getVPValue (unsigned I) |
| Returns the VPValue with index I defined by the VPDef.
|
|
const VPValue * | getVPValue (unsigned I) const |
|
ArrayRef< VPValue * > | definedValues () |
| Returns an ArrayRef of the values defined by the VPDef.
|
|
ArrayRef< VPValue * > | definedValues () const |
| Returns an ArrayRef of the values defined by the VPDef.
|
|
unsigned | getNumDefinedValues () const |
| Returns the number of values defined by the VPDef.
|
|
unsigned | getVPDefID () const |
|
void | dump () const |
| Dump the VPDef to stderr (for debugging).
|
|
virtual void | print (raw_ostream &O, const Twine &Indent, VPSlotTracker &SlotTracker) const =0 |
| Each concrete VPDef prints itself.
|
|
| VPUser ()=delete |
|
| VPUser (const VPUser &)=delete |
|
VPUser & | operator= (const VPUser &)=delete |
|
virtual | ~VPUser () |
|
void | addOperand (VPValue *Operand) |
|
unsigned | getNumOperands () const |
|
VPValue * | getOperand (unsigned N) const |
|
void | setOperand (unsigned I, VPValue *New) |
|
operand_iterator | op_begin () |
|
const_operand_iterator | op_begin () const |
|
operand_iterator | op_end () |
|
const_operand_iterator | op_end () const |
|
operand_range | operands () |
|
const_operand_range | operands () const |
|
virtual bool | usesScalars (const VPValue *Op) const |
| Returns true if the VPUser uses scalars of operand Op .
|
|
virtual bool | onlyFirstLaneUsed (const VPValue *Op) const |
| Returns true if the VPUser only uses the first lane of operand Op .
|
|
virtual bool | onlyFirstPartUsed (const VPValue *Op) const |
| Returns true if the VPUser only uses the first part of operand Op .
|
|
Value * | getUnderlyingValue () const |
| Return the underlying Value attached to this VPValue.
|
|
| VPValue (Value *UV=nullptr) |
| Create a live-in VPValue.
|
|
| VPValue (VPDef *Def, Value *UV=nullptr) |
| Create a VPValue for a Def which is a subclass of VPValue.
|
|
| VPValue (Value *UV, VPDef *Def) |
| Create a VPValue for a Def which defines multiple values.
|
|
| VPValue (const VPValue &)=delete |
|
VPValue & | operator= (const VPValue &)=delete |
|
virtual | ~VPValue () |
|
unsigned | getVPValueID () const |
|
void | printAsOperand (raw_ostream &OS, VPSlotTracker &Tracker) const |
|
void | print (raw_ostream &OS, VPSlotTracker &Tracker) const |
|
void | dump () const |
| Dump the value to stderr (for debugging).
|
|
unsigned | getNumUsers () const |
|
void | addUser (VPUser &User) |
|
void | removeUser (VPUser &User) |
| Remove a single User from the list of users.
|
|
user_iterator | user_begin () |
|
const_user_iterator | user_begin () const |
|
user_iterator | user_end () |
|
const_user_iterator | user_end () const |
|
user_range | users () |
|
const_user_range | users () const |
|
bool | hasMoreThanOneUniqueUser () const |
| Returns true if the value has more than one unique user.
|
|
void | replaceAllUsesWith (VPValue *New) |
|
void | replaceUsesWithIf (VPValue *New, llvm::function_ref< bool(VPUser &U, unsigned Idx)> ShouldReplace) |
| Go through the uses list for this VPValue and make each use point to New if the callback ShouldReplace returns true for the given use specified by a pair of (VPUser, the use index).
|
|
VPRecipeBase * | getDefiningRecipe () |
| Returns the recipe defining this VPValue or nullptr if it is not defined by a recipe, i.e.
|
|
const VPRecipeBase * | getDefiningRecipe () const |
|
bool | hasDefiningRecipe () const |
| Returns true if this VPValue is defined by a recipe.
|
|
bool | isLiveIn () const |
| Returns true if this VPValue is a live-in, i.e. defined outside the VPlan.
|
|
Value * | getLiveInIRValue () |
| Returns the underlying IR value, if this VPValue is defined outside the scope of VPlan.
|
|
const Value * | getLiveInIRValue () const |
|
bool | isDefinedOutsideLoopRegions () const |
| Returns true if the VPValue is defined outside any loop region.
|
|
void | setUnderlyingValue (Value *Val) |
|