LLVM
15.0.0git
|
A recipe for handling phi nodes of integer and floating-point inductions, producing their vector values. More...
#include "Transforms/Vectorize/VPlan.h"
Public Member Functions | |
VPWidenIntOrFpInductionRecipe (PHINode *IV, VPValue *Start, VPValue *Step, const InductionDescriptor &IndDesc, bool NeedsScalarIV, bool NeedsVectorIV) | |
VPWidenIntOrFpInductionRecipe (PHINode *IV, VPValue *Start, VPValue *Step, const InductionDescriptor &IndDesc, TruncInst *Trunc, bool NeedsScalarIV, bool NeedsVectorIV) | |
~VPWidenIntOrFpInductionRecipe () override=default | |
void | execute (VPTransformState &State) override |
Generate the vectorized and scalarized versions of the phi node as needed by their users. More... | |
void | print (raw_ostream &O, const Twine &Indent, VPSlotTracker &SlotTracker) const override |
Print the recipe. More... | |
VPValue * | getStartValue () |
Returns the start value of the induction. More... | |
const VPValue * | getStartValue () const |
VPValue * | getStepValue () |
Returns the step value of the induction. More... | |
const VPValue * | getStepValue () const |
TruncInst * | getTruncInst () |
Returns the first defined value as TruncInst, if it is one or nullptr otherwise. More... | |
const TruncInst * | getTruncInst () const |
PHINode * | getPHINode () |
const InductionDescriptor & | getInductionDescriptor () const |
Returns the induction descriptor for the recipe. More... | |
bool | isCanonical () const |
Returns true if the induction is canonical, i.e. More... | |
const Type * | getScalarType () const |
Returns the scalar type of the induction. More... | |
bool | needsScalarIV () const |
Returns true if a scalar phi needs to be created for the induction. More... | |
bool | needsVectorIV () const |
Returns true if a vector phi needs to be created for the induction. More... | |
![]() | |
VPRecipeBase (const unsigned char SC, ArrayRef< VPValue * > Operands) | |
template<typename IterT > | |
VPRecipeBase (const unsigned char SC, iterator_range< IterT > Operands) | |
virtual | ~VPRecipeBase ()=default |
VPBasicBlock * | getParent () |
const VPBasicBlock * | getParent () const |
void | insertBefore (VPRecipeBase *InsertPos) |
Insert an unlinked recipe into a basic block immediately before the specified recipe. More... | |
void | insertBefore (VPBasicBlock &BB, iplist< VPRecipeBase >::iterator IP) |
Insert an unlinked recipe into BB immediately before the insertion point IP ;. More... | |
void | insertAfter (VPRecipeBase *InsertPos) |
Insert an unlinked Recipe into a basic block immediately after the specified Recipe. More... | |
void | moveAfter (VPRecipeBase *MovePos) |
Unlink this recipe from its current VPBasicBlock and insert it into the VPBasicBlock that MovePos lives in, right after MovePos. More... | |
void | moveBefore (VPBasicBlock &BB, iplist< VPRecipeBase >::iterator I) |
Unlink this recipe and insert into BB before I. More... | |
void | removeFromParent () |
This method unlinks 'this' from the containing basic block, but does not delete it. More... | |
iplist< VPRecipeBase >::iterator | eraseFromParent () |
This method unlinks 'this' from the containing basic block and deletes it. More... | |
Instruction * | getUnderlyingInstr () |
Returns the underlying instruction, if the recipe is a VPValue or nullptr otherwise. More... | |
const Instruction * | getUnderlyingInstr () const |
bool | mayHaveSideEffects () const |
Returns true if the recipe may have side-effects. More... | |
bool | isPhi () const |
Returns true for PHI-like recipes. More... | |
bool | mayReadFromMemory () const |
Returns true if the recipe may read from memory. More... | |
bool | mayWriteToMemory () const |
Returns true if the recipe may write to memory. More... | |
bool | mayReadOrWriteMemory () const |
Returns true if the recipe may read from or write to memory. More... | |
![]() | |
VPRecipeBase * | getPrevNode () |
const VPRecipeBase * | getPrevNode () const |
Get the previous node, or nullptr for the list head. More... | |
VPRecipeBase * | getNextNode () |
Get the next node, or nullptr for the list tail. More... | |
const VPRecipeBase * | getNextNode () const |
Get the next node, or nullptr for the list tail. More... | |
![]() | |
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. More... | |
![]() | |
VPDef (const unsigned char SC) | |
virtual | ~VPDef () |
VPValue * | getVPSingleValue () |
Returns the only VPValue defined by the VPDef. More... | |
const VPValue * | getVPSingleValue () const |
VPValue * | getVPValue (unsigned I) |
Returns the VPValue with index I defined by the VPDef. More... | |
const VPValue * | getVPValue (unsigned I) const |
ArrayRef< VPValue * > | definedValues () |
Returns an ArrayRef of the values defined by the VPDef. More... | |
ArrayRef< VPValue * > | definedValues () const |
Returns an ArrayRef of the values defined by the VPDef. More... | |
unsigned | getNumDefinedValues () const |
Returns the number of values defined by the VPDef. More... | |
unsigned | getVPDefID () const |
void | dump () const |
Dump the VPDef to stderr (for debugging). More... | |
![]() | |
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 . More... | |
virtual bool | onlyFirstLaneUsed (const VPValue *Op) const |
Returns true if the VPUser only uses the first lane of operand Op . More... | |
![]() | |
Value * | getUnderlyingValue () |
Return the underlying Value attached to this VPValue. More... | |
const Value * | getUnderlyingValue () const |
VPValue (Value *UV=nullptr, VPDef *Def=nullptr) | |
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). More... | |
unsigned | getNumUsers () const |
void | addUser (VPUser &User) |
void | removeUser (VPUser &User) |
Remove a single User from the list of users. More... | |
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. More... | |
void | replaceAllUsesWith (VPValue *New) |
VPDef * | getDef () |
const VPDef * | getDef () const |
Value * | getLiveInIRValue () |
Returns the underlying IR value, if this VPValue is defined outside the scope of VPlan. More... | |
const Value * | getLiveInIRValue () const |
Static Public Member Functions | |
static bool | classof (const VPDef *D) |
Method to support type inquiry through isa, cast, and dyn_cast. More... | |
![]() | |
static bool | classof (const VPDef *D) |
Method to support type inquiry through isa, cast, and dyn_cast. More... | |
static bool | classof (const VPUser *U) |
![]() | |
static bool | classof (const VPDef *Recipe) |
Method to support type inquiry through isa, cast, and dyn_cast. More... | |
A recipe for handling phi nodes of integer and floating-point inductions, producing their vector values.
|
inline |
|
overridedefault |
|
overridevirtual |
Generate the vectorized and scalarized versions of the phi node as needed by their users.
Implements llvm::VPRecipeBase.
Definition at line 9515 of file LoopVectorize.cpp.
References llvm::MCID::Add, llvm::PHINode::addIncoming(), llvm::InnerLoopVectorizer::addMetadata(), assert(), llvm::VPTransformState::Builder, llvm::InnerLoopVectorizer::Builder, llvm::VPTransformState::CFG, llvm::PHINode::Create(), llvm::IRBuilderBase::CreateBinOp(), llvm::IRBuilderBase::CreateCast(), llvm::IRBuilderBase::CreateTrunc(), llvm::IRBuilderBase::CreateVectorSplat(), llvm::VPTransformState::get(), llvm::Instruction::getDebugLoc(), llvm::BasicBlock::getFirstInsertionPt(), llvm::VPTransformState::CFGState::getPreheaderBBFor(), llvm::getRuntimeVF(), llvm::getRuntimeVFAsFloat(), getSignedIntOrFpConstant(), llvm::ConstantVector::getSplat(), getStepVector(), llvm::BasicBlock::getTerminator(), llvm::Value::getType(), llvm::VPTransformState::ILV, llvm::VPTransformState::Instance, llvm::Type::isFloatingPointTy(), llvm::Type::isIntegerTy(), llvm::ElementCount::isVector(), IV, Mul, llvm::VPTransformState::CFGState::PrevBB, llvm::IRBuilderBase::restoreIP(), llvm::IRBuilderBase::saveIP(), llvm::VPTransformState::set(), llvm::Instruction::setDebugLoc(), llvm::IRBuilderBase::setFastMathFlags(), llvm::IRBuilderBase::SetInsertPoint(), llvm::Value::setName(), llvm::VPTransformState::UF, and llvm::VPTransformState::VF.
|
inline |
|
inline |
Returns the scalar type of the induction.
Definition at line 1113 of file VPlan.h.
References getTruncInst(), and llvm::Value::getType().
|
inline |
Returns the start value of the induction.
Definition at line 1087 of file VPlan.h.
References llvm::VPUser::getOperand().
Definition at line 1088 of file VPlan.h.
References llvm::VPUser::getOperand().
|
inline |
Returns the step value of the induction.
Definition at line 1091 of file VPlan.h.
References llvm::VPUser::getOperand().
Definition at line 1092 of file VPlan.h.
References llvm::VPUser::getOperand().
|
inline |
Returns the first defined value as TruncInst, if it is one or nullptr otherwise.
Definition at line 1096 of file VPlan.h.
References llvm::VPValue::getUnderlyingValue(), and llvm::VPDef::getVPValue().
Referenced by getScalarType().
Definition at line 1099 of file VPlan.h.
References llvm::VPValue::getUnderlyingValue(), and llvm::VPDef::getVPValue().
bool VPWidenIntOrFpInductionRecipe::isCanonical | ( | ) | const |
|
inline |
|
inline |
|
overridevirtual |
Print the recipe.
Implements llvm::VPDef.
Definition at line 1296 of file VPlan.cpp.
References IV, and llvm::RISCVFenceField::O.