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

This is a concrete Recipe that models a single VPlan-level instruction. More...

#include "[Transforms/Vectorize/VPlan.h](VPlan%5F8h%5Fsource.html)"

Public Types
enum { FirstOrderRecurrenceSplice, Not, SLPLoad, SLPStore, ActiveLaneMask, ExplicitVectorLength, CalculateTripCountMinusVF, CanonicalIVIncrementForPart, BranchOnCount, BranchOnCond, Broadcast, BuildStructVector, BuildVector, Unpack, ComputeAnyOfResult, ComputeFindIVResult, ComputeReductionResult, ExtractLastPart, ExtractLastLane, ExtractPenultimateElement, LogicalAnd, PtrAdd, WidePtrAdd, AnyOf, FirstActiveLane, LastActiveLane, WideIVStep, ReductionStartVector, StepVector, ExtractLane, ResumeForEpilogue, VScale, OpsEnd = VScale }
VPlan opcodes, extending LLVM IR with idiomatics instructions. More...
Public Types inherited from llvm::VPDef
using VPRecipeTy
An enumeration for keeping track of the concrete subclass of VPRecipeBase that is actually instantiated.
Public Types inherited from llvm::VPUser
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
Public Types inherited from llvm::VPValue
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
Public Member Functions
bool doesGeneratePerAllLanes () const
Returns true if this VPInstruction generates scalar values for all lanes.
VPInstruction (unsigned Opcode, ArrayRef< VPValue * > Operands, const VPIRFlags &Flags={}, const VPIRMetadata &MD={}, DebugLoc DL=DebugLoc::getUnknown(), const Twine &Name="")
VPInstruction * clone () override
Clone the current recipe.
unsigned getOpcode () const
void execute (VPTransformState &State) override
Generate the instruction.
InstructionCost computeCost (ElementCount VF, VPCostContext &Ctx) const override
Return the cost of this VPInstruction.
LLVM_DUMP_METHOD void dump () const
Print the VPInstruction to dbgs() (for debugging).
bool hasResult () const
bool opcodeMayReadOrWriteFromMemory () const
Returns true if the underlying opcode may read from or write to memory.
bool usesFirstLaneOnly (const VPValue *Op) const override
Returns true if the recipe only uses the first lane of operand Op.
bool usesFirstPartOnly (const VPValue *Op) const override
Returns true if the recipe only uses the first part of operand Op.
bool isVectorToScalar () const
Returns true if this VPInstruction produces a scalar value from a vector, e.g.
bool isSingleScalar () const
Returns true if this VPInstruction's operands are single scalars and the result is also a single scalar.
StringRef getName () const
Returns the symbolic name assigned to the VPInstruction.
void setName (StringRef NewName)
Set the symbolic name for the VPInstruction.
Public Member Functions inherited from llvm::VPRecipeWithIRFlags
VPRecipeWithIRFlags (const unsigned char SC, ArrayRef< VPValue * > Operands, const VPIRFlags &Flags, DebugLoc DL=DebugLoc::getUnknown())
InstructionCost getCostForRecipeWithOpcode (unsigned Opcode, ElementCount VF, VPCostContext &Ctx) const
Compute the cost for this recipe for VF, using Opcode and Ctx.
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.
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 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::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
Public Member Functions inherited from llvm::VPIRMetadata
VPIRMetadata ()=default
VPIRMetadata (Instruction &I)
Adds metatadata that can be preserved from the original instruction I.
VPIRMetadata (const VPIRMetadata &Other)=default
Copy constructor for cloning.
VPIRMetadata & operator= (const VPIRMetadata &Other)=default
void applyMetadata (Instruction &I) const
Add all metadata to I.
void setMetadata (unsigned Kind, MDNode *Node)
Set metadata with kind Kind to Node.
void intersect (const VPIRMetadata &MD)
Intersect this VPIRMetadata object with MD, keeping only metadata nodes that are common to both.
MDNode * getMetadata (unsigned Kind) const
Get metadata of kind Kind. Returns nullptr if not found.
void print (raw_ostream &O, VPSlotTracker &SlotTracker) const
Print metadata with node IDs.
Protected Member Functions
void printRecipe (raw_ostream &O, const Twine &Indent, VPSlotTracker &SlotTracker) const override
Print the VPInstruction to O.
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.
Protected Member Functions inherited from llvm::VPUnrollPartAccessor< 1 >
VPValue * getUnrollPartOperand (const VPUser &U) const
Return the VPValue operand containing the unroll part or null if there is no such operand.
unsigned getUnrollPart (const VPUser &U) const
Return the unroll part.
Additional Inherited Members
Static Public Member Functions inherited from llvm::VPRecipeWithIRFlags
static bool classof (const VPRecipeBase *R)
static bool classof (const VPUser *U)
static bool classof (const VPValue *V)
static bool classof (const VPSingleDefRecipe *U)
Static Public Member Functions inherited from llvm::VPSingleDefRecipe
static bool classof (const VPRecipeBase *R)
static bool classof (const VPUser *U)
Static Public Member Functions inherited from llvm::VPRecipeBase
static bool classof (const VPDef *D)
Method to support type inquiry through isa, cast, and dyn_cast.
static bool classof (const VPUser *U)
Protected Types inherited from llvm::ilist_node_impl< ilist_detail::compute_node_options< VPRecipeBase, Options... >::type >
using self_iterator
using const_self_iterator
using reverse_self_iterator
using const_reverse_self_iterator
Protected Attributes inherited from llvm::VPValue
Value * UnderlyingVal
Hold the underlying Value, if any, attached to this VPValue.
VPDef * Def
Pointer to the VPDef that defines this VPValue.

This is a concrete Recipe that models a single VPlan-level instruction.

While as any Recipe it may generate a sequence of IR instructions when executed, these instructions would always form a single-def expression as the VPInstruction is also a single def-use vertex.

Definition at line 1034 of file VPlan.h.

anonymous enum

VPlan opcodes, extending LLVM IR with idiomatics instructions.

Enumerator
FirstOrderRecurrenceSplice
Not
SLPLoad
SLPStore
ActiveLaneMask
ExplicitVectorLength
CalculateTripCountMinusVF
CanonicalIVIncrementForPart
BranchOnCount
BranchOnCond
Broadcast
BuildStructVector Given operands of (the same) struct type, creates a struct of fixed- width vectors each containing a struct field of all operands. The number of operands matches the element count of every vector.
BuildVector Creates a fixed-width vector containing all operands. The number of operands matches the vector element count.
Unpack Extracts all lanes from its (non-scalable) vector operand. This is an abstract VPInstruction whose single defined VPValue represents VF scalars extracted from a vector, to be replaced by VF ExtractElement VPInstructions.
ComputeAnyOfResult Compute the final result of a AnyOf reduction with select(cmp(),x,y), where one of (x,y) is loop invariant, and both x and y are integer type.
ComputeFindIVResult
ComputeReductionResult
ExtractLastPart
ExtractLastLane
ExtractPenultimateElement
LogicalAnd
PtrAdd
WidePtrAdd
AnyOf
FirstActiveLane
LastActiveLane
WideIVStep Scale the first operand (vector step) by the second operand (scalar-step). Casts both operands to the result type if needed.
ReductionStartVector Start vector for reductions with 3 operands: the original start value, the identity value for the reduction and an integer indicating the scaling factor.
StepVector
ExtractLane Extracts a single lane (first operand) from a set of vector operands. The lane specifies an index into a vector formed by combining all vector operands (all operands after the first one).
ResumeForEpilogue Explicit user for the resume phi of the canonical induction in the main VPlan, used by the epilogue vector loop.
VScale Returns the value for vscale.
OpsEnd

Definition at line 1041 of file VPlan.h.

clone()

VPInstruction * llvm::VPInstruction::clone ( ) inlineoverridevirtual

computeCost()

Return the cost of this VPInstruction.

Reimplemented from llvm::VPRecipeBase.

Reimplemented in llvm::VPInstructionWithType.

Definition at line 994 of file VPlanRecipes.cpp.

References ActiveLaneMask, AnyOf, assert(), llvm::CmpInst::BAD_ICMP_PREDICATE, llvm::cast(), doesGeneratePerAllLanes(), ExplicitVectorLength, ExtractLane, ExtractLastLane, ExtractPenultimateElement, FirstActiveLane, FirstOrderRecurrenceSplice, llvm::VPRecipeWithIRFlags::getCostForRecipeWithOpcode(), llvm::ElementCount::getFixed(), llvm::Type::getInt1Ty(), llvm::Type::getInt32Ty(), llvm::Type::getInt64Ty(), llvm::InstructionCost::getInvalid(), llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::getKnownMinValue(), llvm::VPValue::getLiveInIRValue(), getOpcode(), llvm::VPUser::getOperand(), llvm::ElementCount::getScalable(), llvm::VPValue::getUnderlyingValue(), llvm::CmpInst::ICMP_EQ, llvm::Instruction::isBinaryOp(), llvm::ElementCount::isScalar(), llvm::ElementCount::isVector(), LastActiveLane, llvm::PatternMatch::m_Cmp(), llvm::VPlanPatternMatch::m_VPValue(), llvm::CmpInst::makeCmpResultType(), llvm::PatternMatch::match(), llvm::vputils::onlyFirstLaneUsed(), llvm::TargetTransformInfo::SK_Splice, and llvm::toVectorTy().

doesGeneratePerAllLanes()

bool VPInstruction::doesGeneratePerAllLanes ( ) const

Returns true if this VPInstruction generates scalar values for all lanes.

Most VPInstructions generate a single value per part, either vector or scalar. VPReplicateRecipe takes care of generating multiple (scalar) values per all lanes, stemming from an original ingredient. This method identifies the (rare) cases of VPInstructions that do so as well, w/o an underlying ingredient.

Definition at line 485 of file VPlanRecipes.cpp.

References llvm::vputils::onlyFirstLaneUsed(), and PtrAdd.

Referenced by computeCost().

dump()

void VPInstruction::dump ( ) const

execute()

Generate the instruction.

TODO: We currently execute only per-part unless a specific instance is provided.

Implements llvm::VPRecipeWithIRFlags.

Reimplemented in llvm::VPInstructionWithType, and llvm::VPPhi.

Definition at line 1150 of file VPlanRecipes.cpp.

References assert(), llvm::VPIRFlags::flagsValidForOpcode(), llvm::VPIRFlags::getFastMathFlags(), getOpcode(), llvm::Value::getType(), llvm::VPIRFlags::hasFastMathFlags(), hasResult(), isSingleScalar(), llvm::Type::isStructTy(), isVectorToScalar(), llvm::Type::isVectorTy(), and llvm::vputils::onlyFirstLaneUsed().

getName()

StringRef llvm::VPInstruction::getName ( ) const inline

getOpcode()

unsigned llvm::VPInstruction::getOpcode ( ) const inline

Definition at line 1182 of file VPlan.h.

Referenced by llvm::VPInstructionWithType::clone(), computeCost(), execute(), llvm::VPInstructionWithType::execute(), getStartValueFromReductionResult(), isSingleScalar(), isVectorToScalar(), opcodeMayReadOrWriteFromMemory(), preparePlanForEpilogueVectorLoop(), preparePlanForMainVectorLoop(), printRecipe(), llvm::VPInstructionWithType::printRecipe(), llvm::VPRecipeBuilder::tryToCreateWidenRecipe(), usesFirstLaneOnly(), usesFirstPartOnly(), and VPInstruction().

hasResult()

bool llvm::VPInstruction::hasResult ( ) const inline

isSingleScalar()

bool VPInstruction::isSingleScalar ( ) const

isVectorToScalar()

bool VPInstruction::isVectorToScalar ( ) const

Returns true if this VPInstruction produces a scalar value from a vector, e.g.

by performing a reduction or extracting a lane.

Definition at line 1125 of file VPlanRecipes.cpp.

References AnyOf, ComputeAnyOfResult, ComputeFindIVResult, ComputeReductionResult, ExtractLane, ExtractLastLane, ExtractPenultimateElement, FirstActiveLane, getOpcode(), and LastActiveLane.

Referenced by execute().

opcodeMayReadOrWriteFromMemory()

bool VPInstruction::opcodeMayReadOrWriteFromMemory ( ) const

Returns true if the underlying opcode may read from or write to memory.

Definition at line 1173 of file VPlanRecipes.cpp.

References ActiveLaneMask, AnyOf, BranchOnCond, BranchOnCount, Broadcast, BuildStructVector, BuildVector, CalculateTripCountMinusVF, CanonicalIVIncrementForPart, ExplicitVectorLength, ExtractLane, ExtractLastLane, ExtractLastPart, ExtractPenultimateElement, FirstActiveLane, FirstOrderRecurrenceSplice, getOpcode(), llvm::Instruction::isBinaryOp(), llvm::Instruction::isCast(), LastActiveLane, LogicalAnd, Not, PtrAdd, ReductionStartVector, StepVector, Unpack, VScale, WideIVStep, and WidePtrAdd.

printRecipe()

Print the VPInstruction to O.

Implements llvm::VPRecipeBase.

Reimplemented in llvm::VPInstructionWithType, and llvm::VPPhi.

Definition at line 1291 of file VPlanRecipes.cpp.

References ActiveLaneMask, AnyOf, BranchOnCond, BranchOnCount, Broadcast, BuildStructVector, BuildVector, CalculateTripCountMinusVF, CanonicalIVIncrementForPart, ComputeAnyOfResult, ComputeFindIVResult, ComputeReductionResult, ExplicitVectorLength, ExtractLane, ExtractLastLane, ExtractLastPart, ExtractPenultimateElement, FirstActiveLane, FirstOrderRecurrenceSplice, getOpcode(), llvm::Instruction::getOpcodeName(), hasResult(), isSingleScalar(), LastActiveLane, LogicalAnd, Not, llvm::VPValue::printAsOperand(), llvm::VPIRFlags::printFlags(), llvm::VPUser::printOperands(), PtrAdd, ReductionStartVector, ResumeForEpilogue, SLPLoad, SLPStore, Unpack, and WidePtrAdd.

Referenced by dump().

setName()

void llvm::VPInstruction::setName ( StringRef NewName) inline

usesFirstLaneOnly()

bool VPInstruction::usesFirstLaneOnly ( const VPValue * Op) const overridevirtual

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

Reimplemented from llvm::VPUser.

Definition at line 1216 of file VPlanRecipes.cpp.

References ActiveLaneMask, assert(), BranchOnCond, BranchOnCount, Broadcast, BuildStructVector, BuildVector, CalculateTripCountMinusVF, CanonicalIVIncrementForPart, ComputeAnyOfResult, ComputeFindIVResult, ExplicitVectorLength, ExtractLane, llvm::VPUser::getNumOperands(), getOpcode(), llvm::VPUser::getOperand(), llvm::is_contained(), llvm::Instruction::isBinaryOp(), llvm::Instruction::isCast(), llvm_unreachable, Not, llvm::vputils::onlyFirstLaneUsed(), llvm::VPUser::operands(), PtrAdd, ReductionStartVector, and WidePtrAdd.

usesFirstPartOnly()

bool VPInstruction::usesFirstPartOnly ( const VPValue * Op) const overridevirtual

VPlanSlp


The documentation for this class was generated from the following files: