LLVM: llvm::VPWidenIntOrFpInductionRecipe Class Reference (original) (raw)

A recipe for handling phi nodes of integer and floating-point inductions, producing their vector values. More...

Public Member Functions

VPWidenIntOrFpInductionRecipe (PHINode *IV, VPValue *Start, VPValue *Step, VPValue *VF, const InductionDescriptor &IndDesc, const VPIRFlags &Flags, DebugLoc DL)

VPWidenIntOrFpInductionRecipe (PHINode *IV, VPValue *Start, VPValue *Step, VPValue *VF, const InductionDescriptor &IndDesc, TruncInst *Trunc, const VPIRFlags &Flags, DebugLoc DL)

~VPWidenIntOrFpInductionRecipe () override=default

VPWidenIntOrFpInductionRecipe *

clone () override

Clone the current recipe.

void

execute (VPTransformState &State) override

Generate the phi nodes.

VPValue *

getSplatVFValue ()

unsigned

getNumIncoming () const override

Returns the number of incoming values, also number of incoming blocks.

TruncInst *

getTruncInst ()

Returns the first defined value as TruncInst, if it is one or nullptr otherwise.

const TruncInst *

getTruncInst () const

bool

isCanonical () const

Returns true if the induction is canonical, i.e.

Type *

getScalarType () const

Returns the scalar type of the induction.

VPValue *

getLastUnrolledPartOperand ()

Returns the VPValue representing the value of this induction at the last unrolled part, if it exists.

Public Member Functions inherited from llvm::VPWidenInductionRecipe

VPWidenInductionRecipe (unsigned char Kind, PHINode *IV, VPValue *Start, VPValue *Step, const InductionDescriptor &IndDesc, DebugLoc DL)

VPValue *

getStepValue ()

Returns the step value of the induction.

const VPValue *

getStepValue () const

void

setStepValue (VPValue *V)

Update the step value of the recipe.

VPValue *

getVFValue ()

const VPValue *

getVFValue () const

PHINode *

getPHINode () const

const InductionDescriptor &

getInductionDescriptor () const

Returns the induction descriptor for the recipe.

VPValue *

getBackedgeValue () override

Returns the incoming value from the loop backedge.

VPRecipeBase &

getBackedgeRecipe () override

Returns the backedge value as a recipe.

bool

usesFirstLaneOnly (const VPValue *Op) const override

Returns true if the recipe only uses the first lane of operand [Op](namespacellvm.html#ab471937b9a227e70c7fe8bd9604014d6).

Public Member Functions inherited from llvm::VPHeaderPHIRecipe

~VPHeaderPHIRecipe () override=default

InstructionCost

computeCost (ElementCount VF, VPCostContext &Ctx) const override

Return the cost of this header phi recipe.

VPValue *

getStartValue ()

Returns the start value of the phi, if one is set.

VPValue *

getStartValue () const

void

setStartValue (VPValue *V)

Update the start value of the recipe.

void

setBackedgeValue (VPValue *V)

Update the incoming value from the loop backedge.

Public Member Functions inherited from llvm::VPSingleDefRecipe

VPSingleDefRecipe (const unsigned char SC, ArrayRef< VPValue * > Operands, DebugLoc DL=DebugLoc::getUnknown())

VPSingleDefRecipe (const unsigned char SC, ArrayRef< VPValue * > Operands, Value *UV, DebugLoc DL=DebugLoc::getUnknown())

Instruction *

getUnderlyingInstr ()

Returns the underlying instruction.

const Instruction *

getUnderlyingInstr () const

LLVM_ABI_FOR_TEST LLVM_DUMP_METHOD void

dump () const

Print this VPSingleDefRecipe to dbgs() (for debugging).

Public Member Functions inherited from llvm::VPRecipeBase

VPRecipeBase (const unsigned char SC, ArrayRef< VPValue * > Operands, DebugLoc DL=DebugLoc::getUnknown())

~VPRecipeBase () override=default

VPBasicBlock *

getParent ()

const VPBasicBlock *

getParent () const

VPRegionBlock *

getRegion ()

const VPRegionBlock *

getRegion () const

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.

void

print (raw_ostream &O, const Twine &Indent, VPSlotTracker &SlotTracker) const override final

Print the recipe, delegating to printRecipe().

Public Member Functions inherited from llvm::ilist_node_with_parent< VPRecipeBase, VPBasicBlock >

VPRecipeBase *

getPrevNode ()

VPRecipeBase *

getNextNode ()

Get the next node, or nullptr for the list tail.

Public Member Functions inherited from llvm::ilist_node_impl< ilist_detail::compute_node_options< VPRecipeBase, Options... >::type >

self_iterator

getIterator ()

reverse_self_iterator

getReverseIterator ()

std::enable_if_t< T::is_sentinel_tracking_explicit, bool >

isSentinel () const

Check whether this is the sentinel node.

Public Member Functions inherited from llvm::ilist_detail::node_parent_access< ilist_node_impl< ilist_detail::compute_node_options< VPRecipeBase, Options... >::type >, ilist_detail::compute_node_options< VPRecipeBase, Options... >::type::parent_ty >

const ilist_detail::compute_node_options< VPRecipeBase, Options... >::type::parent_ty *

getParent () const

void

setParent (ilist_detail::compute_node_options< VPRecipeBase, Options... >::type::parent_ty *Parent)

Public Member Functions inherited from llvm::VPDef

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

LLVM_ABI_FOR_TEST void

dump () const

Dump the VPDef to stderr (for debugging).

Public Member Functions inherited from llvm::VPUser

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](namespacellvm.html#ab471937b9a227e70c7fe8bd9604014d6).

virtual bool

usesFirstPartOnly (const VPValue *Op) const

Returns true if the VPUser only uses the first part of operand [Op](namespacellvm.html#ab471937b9a227e70c7fe8bd9604014d6).

Public Member Functions inherited from llvm::VPValue

Value *

getUnderlyingValue () const

Return the underlying Value attached to this VPValue.

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](classllvm%5F1%5F1User.html) 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.

bool

hasOneUse () const

VPUser *

getSingleUser ()

Return the single user of this value, or nullptr if there is not exactly one user.

const VPUser *

getSingleUser () const

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 () const

Returns the underlying IR value, if this VPValue is defined outside the scope of VPlan.

bool

isDefinedOutsideLoopRegions () const

Returns true if the VPValue is defined outside any loop.

void

setUnderlyingValue (Value *Val)

Public Member Functions inherited from llvm::VPPhiAccessors

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.

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.

Public Member Functions inherited from llvm::VPIRFlags

VPIRFlags ()

VPIRFlags (Instruction &I)

VPIRFlags (CmpInst::Predicate Pred)

VPIRFlags (CmpInst::Predicate Pred, FastMathFlags FMFs)

VPIRFlags (WrapFlagsTy WrapFlags)

VPIRFlags (TruncFlagsTy TruncFlags)

VPIRFlags (FastMathFlags FMFs)

VPIRFlags (DisjointFlagsTy DisjointFlags)

VPIRFlags (NonNegFlagsTy NonNegFlags)

VPIRFlags (GEPNoWrapFlags GEPFlags)

void

transferFlags (VPIRFlags &Other)

void

intersectFlags (const VPIRFlags &Other)

Only keep flags also present in Other.

void

dropPoisonGeneratingFlags ()

Drop all poison-generating flags.

void

applyFlags (Instruction &I) const

Apply the IR flags to I.

CmpInst::Predicate

getPredicate () const

void

setPredicate (CmpInst::Predicate Pred)

GEPNoWrapFlags

getGEPNoWrapFlags () const

bool

hasPredicate () const

Returns true if the recipe has a comparison predicate.

bool

hasFastMathFlags () const

Returns true if the recipe has fast-math flags.

LLVM_ABI_FOR_TEST FastMathFlags

getFastMathFlags () const

bool

hasNonNegFlag () const

Returns true if the recipe has non-negative flag.

bool

isNonNeg () const

bool

hasNoUnsignedWrap () const

bool

hasNoSignedWrap () const

bool

isDisjoint () const

LLVM_ABI_FOR_TEST bool

flagsValidForOpcode (unsigned Opcode) const

Returns true if the set flags are valid for Opcode.

void

printFlags (raw_ostream &O) const

Protected Member Functions

void

printRecipe (raw_ostream &O, const Twine &Indent, VPSlotTracker &SlotTracker) const override

Print the recipe.

Protected Member Functions inherited from llvm::VPHeaderPHIRecipe

VPHeaderPHIRecipe (unsigned char VPDefID, Instruction *UnderlyingInstr, VPValue *Start, DebugLoc DL=DebugLoc::getUnknown())

const VPRecipeBase *

getAsRecipe () const override

Return a VPRecipeBase* to the current object.

Protected Member Functions inherited from llvm::ilist_node_with_parent< VPRecipeBase, VPBasicBlock >

ilist_node_with_parent ()=default

Protected Member Functions inherited from llvm::ilist_node_impl< ilist_detail::compute_node_options< VPRecipeBase, Options... >::type >

ilist_node_impl ()=default

Protected Member Functions inherited from llvm::VPUser

void

printOperands (raw_ostream &O, VPSlotTracker &SlotTracker) const

Print the operands to O.

VPUser (ArrayRef< VPValue * > Operands)

Protected Member Functions inherited from llvm::VPValue

VPValue (const unsigned char SC, Value *UV=nullptr, VPDef *Def=nullptr)

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.

A recipe for handling phi nodes of integer and floating-point inductions, producing their vector values.

This is an abstract recipe and must be converted to concrete recipes before executing.

Definition at line 2191 of file VPlan.h.