|
template<typename IterT > |
| VPWidenSelectRecipe (SelectInst &I, iterator_range< IterT > Operands) |
|
| ~VPWidenSelectRecipe () override=default |
|
void | execute (VPTransformState &State) override |
| Produce a widened version of the select instruction.
|
|
void | print (raw_ostream &O, const Twine &Indent, VPSlotTracker &SlotTracker) const override |
| Print the recipe.
|
|
VPValue * | getCond () const |
|
bool | isInvariantCond () const |
|
| 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 |
|
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.
|
|
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.
|
|
Instruction * | getUnderlyingInstr () |
| Returns the underlying instruction, if the recipe is a VPValue or nullptr otherwise.
|
|
const Instruction * | getUnderlyingInstr () const |
|
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.
|
|
| 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 () |
|
VPUserID | getVPUserID () const |
|
void | addOperand (VPValue *Operand) |
|
unsigned | getNumOperands () const |
|
VPValue * | getOperand (unsigned N) const |
|
void | setOperand (unsigned I, VPValue *New) |
|
void | removeLastOperand () |
|
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 .
|
|
Value * | getUnderlyingValue () |
| Return the underlying Value attached to this VPValue.
|
|
const Value * | getUnderlyingValue () const |
|
| 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 () |
| Returns true if the value has more than one unique user.
|
|
void | replaceAllUsesWith (VPValue *New) |
|
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 | isDefinedOutsideVectorRegions () const |
| Returns true if the VPValue is defined outside any vector regions, i.e.
|
|
|
using | VPRecipeTy = enum { VPBranchOnMaskSC, VPDerivedIVSC, VPExpandSCEVSC, VPInstructionSC, VPInterleaveSC, VPReductionSC, VPReplicateSC, VPScalarIVStepsSC, VPWidenCallSC, VPWidenCanonicalIVSC, VPWidenCastSC, VPWidenGEPSC, VPWidenMemoryInstructionSC, VPWidenSC, VPWidenSelectSC, VPBlendSC, VPPredInstPHISC, VPCanonicalIVPHISC, VPActiveLaneMaskPHISC, VPFirstOrderRecurrencePHISC, VPWidenPHISC, VPWidenIntOrFpInductionSC, VPWidenPointerInductionSC, VPReductionPHISC, VPFirstPHISC=VPBlendSC, VPFirstHeaderPHISC=VPCanonicalIVPHISC, VPLastHeaderPHISC=VPReductionPHISC, VPLastPHISC=VPReductionPHISC, } |
| An enumeration for keeping track of the concrete subclass of VPRecipeBase that is actually instantiated.
|
|
enum class | VPUserID { Recipe
, LiveOut
} |
| Subclass identifier (for isa/dyn_cast). More...
|
|
typedef SmallVectorImpl< VPValue * >::iterator | operand_iterator |
|
typedef SmallVectorImpl< VPValue * >::const_iterator | const_operand_iterator |
|
typedef iterator_range< operand_iterator > | operand_range |
|
typedef iterator_range< const_operand_iterator > | const_operand_range |
|
enum | { VPValueSC
, VPVRecipeSC
} |
| An enumeration for keeping track of the concrete subclass of VPValue that are actually instantiated. More...
|
|
typedef SmallVectorImpl< VPUser * >::iterator | user_iterator |
|
typedef SmallVectorImpl< VPUser * >::const_iterator | const_user_iterator |
|
typedef iterator_range< user_iterator > | user_range |
|
typedef iterator_range< const_user_iterator > | const_user_range |
|
static bool | classof (const VPDef *D) |
| Method to support type inquiry through isa, cast, and dyn_cast.
|
|
static bool | classof (const VPUser *U) |
|
using | self_iterator = ilist_iterator< ilist_detail::compute_node_options< T, Options... >::type, false, false > |
|
using | const_self_iterator = ilist_iterator< ilist_detail::compute_node_options< T, Options... >::type, false, true > |
|
using | reverse_self_iterator = ilist_iterator< ilist_detail::compute_node_options< T, Options... >::type, true, false > |
|
using | const_reverse_self_iterator = ilist_iterator< ilist_detail::compute_node_options< T, Options... >::type, true, true > |
|
| ilist_node_with_parent ()=default |
|
| ilist_node_impl ()=default |
|
void | printOperands (raw_ostream &O, VPSlotTracker &SlotTracker) const |
| Print the operands to O .
|
|
| VPUser (ArrayRef< VPValue * > Operands, VPUserID ID) |
|
| VPUser (std::initializer_list< VPValue * > Operands, VPUserID ID) |
|
template<typename IterT > |
| VPUser (iterator_range< IterT > Operands, VPUserID ID) |
|
| VPValue (const unsigned char SC, Value *UV=nullptr, VPDef *Def=nullptr) |
|
void | setUnderlyingValue (Value *Val) |
|
Value * | UnderlyingVal |
|
VPDef * | Def |
| Pointer to the VPDef that defines this VPValue.
|
|
A recipe for widening select instructions.
Definition at line 1247 of file VPlan.h.