LLVM 22.0.0git
|
An overlay for VPIRInstructions wrapping PHI nodes enabling convenient use cast/dyn_cast/isa and execute() implementation. More...
#include "Transforms/Vectorize/VPlan.h"
Public Member Functions | |
VPIRPhi (PHINode &PN) | |
PHINode & | getIRPhi () |
void | execute (VPTransformState &State) override |
The method which generates the output IR instructions that correspond to this VPRecipe, thereby "executing" the VPlan. | |
void | print (raw_ostream &O, const Twine &Indent, VPSlotTracker &SlotTracker) const override |
Print the recipe. | |
![]() | |
~VPIRInstruction () override=default | |
VPIRInstruction * | clone () override |
Clone the current recipe. | |
void | execute (VPTransformState &State) override |
The method which generates the output IR instructions that correspond to this VPRecipe, thereby "executing" the VPlan. | |
LLVM_ABI_FOR_TEST InstructionCost | computeCost (ElementCount VF, VPCostContext &Ctx) const override |
Return the cost of this VPIRInstruction. | |
Instruction & | getInstruction () const |
void | print (raw_ostream &O, const Twine &Indent, VPSlotTracker &SlotTracker) const override |
Print the recipe. | |
bool | usesScalars (const VPValue *Op) const override |
Returns true if the VPUser uses scalars of operand Op . | |
bool | onlyFirstPartUsed (const VPValue *Op) const override |
Returns true if the VPUser only uses the first part of operand Op . | |
bool | onlyFirstLaneUsed (const VPValue *Op) const override |
Returns true if the VPUser only uses the first lane of operand Op . | |
void | extractLastLaneOfFirstOperand (VPBuilder &Builder) |
Update the recipes first operand to the last lane of the operand using Builder . | |
![]() | |
VPRecipeBase (const unsigned char SC, ArrayRef< VPValue * > Operands, DebugLoc DL=DebugLoc::getUnknown()) | |
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. | |
bool | isScalarCast () const |
Return true if the recipe is a scalar cast. | |
void | setDebugLoc (DebugLoc NewDL) |
Set the recipe's debug location to NewDL . | |
![]() | |
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 |
std::enable_if_t< T::is_sentinel_tracking_explicit, 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) |
void | swapOperands () |
Swap operands of the VPUser. It must have exactly 2 operands. | |
void | replaceUsesOfWith (VPValue *From, VPValue *To) |
Replaces all uses of From in the VPUser with To . | |
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 . | |
![]() | |
virtual | ~VPPhiAccessors ()=default |
VPValue * | getIncomingValue (unsigned Idx) const |
Returns the incoming VPValue with index Idx . | |
const VPBasicBlock * | getIncomingBlock (unsigned Idx) const |
Returns the incoming block with index Idx . | |
virtual unsigned | getNumIncoming () const |
Returns the number of incoming values, also number of incoming blocks. | |
VPUser::const_operand_range | incoming_values () const |
Returns an interator range over the incoming values. | |
const_incoming_blocks_range | incoming_blocks () const |
Returns an iterator range over the incoming blocks. | |
detail::zippy< llvm::detail::zip_first, VPUser::const_operand_range, const_incoming_blocks_range > | incoming_values_and_blocks () const |
Returns an iterator range over pairs of incoming values and corresponding incoming blocks. | |
void | removeIncomingValueFor (VPBlockBase *IncomingBlock) const |
Removes the incoming value for IncomingBlock , which must be a predecessor. | |
void | printPhiOperands (raw_ostream &O, VPSlotTracker &SlotTracker) const |
Print the recipe. | |
Static Public Member Functions | |
static bool | classof (const VPRecipeBase *U) |
![]() | |
static LLVM_ABI_FOR_TEST VPIRInstruction * | create (Instruction &I) |
Create a new VPIRPhi for \I , if it is a PHINode, otherwise create a VPIRInstruction. | |
![]() | |
static bool | classof (const VPDef *D) |
Method to support type inquiry through isa, cast, and dyn_cast. | |
static bool | classof (const VPUser *U) |
Protected Member Functions | |
const VPRecipeBase * | getAsRecipe () const override |
Return a VPRecipeBase* to the current object. | |
![]() | |
VPIRInstruction (Instruction &I) | |
VPIRInstruction::create() should be used to create VPIRInstructions, as subclasses may need to be created, e.g. | |
virtual InstructionCost | computeCost (ElementCount VF, VPCostContext &Ctx) const |
Compute the cost of this recipe either using a recipe's specialized implementation or using the legacy cost model and the underlying instructions. | |
![]() | |
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) | |
virtual const VPRecipeBase * | getAsRecipe () const =0 |
Return a VPRecipeBase* to the current object. | |
Additional Inherited Members | |
![]() | |
using | VPRecipeTy = enum { VPBranchOnMaskSC, VPDerivedIVSC, VPExpandSCEVSC, VPExpressionSC, VPIRInstructionSC, VPInstructionSC, VPInterleaveEVLSC, VPInterleaveSC, VPReductionEVLSC, VPReductionSC, VPPartialReductionSC, VPReplicateSC, VPScalarIVStepsSC, VPVectorPointerSC, VPVectorEndPointerSC, VPWidenCallSC, VPWidenCanonicalIVSC, VPWidenCastSC, VPWidenGEPSC, VPWidenIntrinsicSC, VPWidenLoadEVLSC, VPWidenLoadSC, VPWidenStoreEVLSC, VPWidenStoreSC, VPWidenSC, VPWidenSelectSC, VPBlendSC, VPHistogramSC, VPWidenPHISC, VPPredInstPHISC, VPCanonicalIVPHISC, VPActiveLaneMaskPHISC, VPEVLBasedIVPHISC, VPFirstOrderRecurrencePHISC, VPWidenIntOrFpInductionSC, VPWidenPointerInductionSC, VPReductionPHISC, VPFirstPHISC=VPWidenPHISC, VPFirstHeaderPHISC=VPCanonicalIVPHISC, VPLastHeaderPHISC=VPReductionPHISC, VPLastPHISC=VPReductionPHISC, } |
An enumeration for keeping track of the concrete subclass of VPRecipeBase that is actually instantiated. | |
![]() | |
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 |
![]() | |
using | const_incoming_blocks_range = iterator_range< mapped_iterator< detail::index_iterator, std::function< const VPBasicBlock *(size_t)> > > |
![]() | |
using | self_iterator = typename ilist_select_iterator_type< OptionsT::has_iterator_bits, ilist_detail::compute_node_options< T, Options... >::type, false, false >::type |
using | const_self_iterator = typename ilist_select_iterator_type< OptionsT::has_iterator_bits, ilist_detail::compute_node_options< T, Options... >::type, false, true >::type |
using | reverse_self_iterator = typename ilist_select_iterator_type< OptionsT::has_iterator_bits, ilist_detail::compute_node_options< T, Options... >::type, true, false >::type |
using | const_reverse_self_iterator = typename ilist_select_iterator_type< OptionsT::has_iterator_bits, ilist_detail::compute_node_options< T, Options... >::type, true, true >::type |
An overlay for VPIRInstructions wrapping PHI nodes enabling convenient use cast/dyn_cast/isa and execute() implementation.
A single VPValue operand is allowed, and it is used to add a new incoming value for the single predecessor VPBB.
|
inlinestatic |
|
overridevirtual |
The method which generates the output IR instructions that correspond to this VPRecipe, thereby "executing" the VPlan.
Reimplemented from llvm::VPIRInstruction.
Definition at line 1517 of file VPlanRecipes.cpp.
References llvm::VPTransformState::Builder, llvm::VPTransformState::CFG, llvm::enumerate(), llvm::VPTransformState::get(), llvm::VPBlockBase::getExitingBasicBlock(), llvm::VPLane::getFirstLane(), llvm::BasicBlock::getFirstNonPHIIt(), getIRPhi(), llvm::VPLane::getLastLaneForVF(), llvm::VPRecipeBase::getParent(), llvm::VPBlockBase::getPredecessors(), Idx, llvm::vputils::isSingleScalar(), llvm::VPUser::operands(), llvm::IRBuilderBase::SetInsertPoint(), llvm::VPTransformState::VF, and llvm::VPTransformState::CFGState::VPBB2IRBB.
|
inlineoverrideprotectedvirtual |
Return a VPRecipeBase* to the current object.
Implements llvm::VPPhiAccessors.
|
inline |
|
overridevirtual |
Print the recipe.
Reimplemented from llvm::VPIRInstruction.
Definition at line 1567 of file VPlanRecipes.cpp.
References llvm::VPUser::getNumOperands(), llvm::VPPhiAccessors::incoming_values_and_blocks(), llvm::interleaveComma(), and llvm::VPIRInstruction::print().