LLVM 22.0.0git
Public Types | Public Member Functions | Protected Member Functions | Friends | List of all members
llvm::VPUser Class Reference

This class augments VPValue with operands which provide the inverse def-use edges from VPValue's users to their defs. More...

#include "Transforms/Vectorize/VPlanValue.h"

Inheritance diagram for llvm::VPUser:
[legend]

Public Types

typedef SmallVectorImpl< VPValue * >::iterator operand_iterator
 
typedef SmallVectorImpl< VPValue * >::const_iterator const_operand_iterator
 
typedef iterator_range< operand_iteratoroperand_range
 
typedef iterator_range< const_operand_iteratorconst_operand_range
 

Public Member Functions

 VPUser ()=delete
 
 VPUser (const VPUser &)=delete
 
VPUseroperator= (const VPUser &)=delete
 
virtual ~VPUser ()
 
void addOperand (VPValue *Operand)
 
unsigned getNumOperands () const
 
VPValuegetOperand (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.
 

Protected Member Functions

void printOperands (raw_ostream &O, VPSlotTracker &SlotTracker) const
 Print the operands to O.
 
 VPUser (ArrayRef< VPValue * > Operands)
 

Friends

class VPPhiAccessors
 Grant access to removeOperand for VPPhiAccessors, the only supported user.
 

Detailed Description

This class augments VPValue with operands which provide the inverse def-use edges from VPValue's users to their defs.

Definition at line 197 of file VPlanValue.h.

Member Typedef Documentation

◆ const_operand_iterator

Definition at line 257 of file VPlanValue.h.

◆ const_operand_range

Definition at line 259 of file VPlanValue.h.

◆ operand_iterator

Definition at line 256 of file VPlanValue.h.

◆ operand_range

Definition at line 258 of file VPlanValue.h.

Constructor & Destructor Documentation

◆ VPUser() [1/3]

llvm::VPUser::VPUser ( ArrayRef< VPValue * >  Operands)
inlineprotected

Definition at line 216 of file VPlanValue.h.

References addOperand(), and Operands.

◆ VPUser() [2/3]

llvm::VPUser::VPUser ( )
delete

◆ VPUser() [3/3]

llvm::VPUser::VPUser ( const VPUser )
delete

◆ ~VPUser()

virtual llvm::VPUser::~VPUser ( )
inlinevirtual

Definition at line 225 of file VPlanValue.h.

References operands().

Member Function Documentation

◆ addOperand()

void llvm::VPUser::addOperand ( VPValue Operand)
inline

◆ getNumOperands()

unsigned llvm::VPUser::getNumOperands ( ) const
inline

◆ getOperand()

VPValue * llvm::VPUser::getOperand ( unsigned  N) const
inline

Definition at line 236 of file VPlanValue.h.

References assert(), N, and Operands.

Referenced by canNarrowLoad(), llvm::VPWidenCastRecipe::clone(), llvm::VPVectorEndPointerRecipe::clone(), llvm::VPVectorPointerRecipe::clone(), llvm::VPWidenPointerInductionRecipe::clone(), llvm::VPFirstOrderRecurrencePHIRecipe::clone(), llvm::VPReductionPHIRecipe::clone(), llvm::VPPartialReductionRecipe::clone(), llvm::VPCanonicalIVPHIRecipe::clone(), llvm::VPActiveLaneMaskPHIRecipe::clone(), llvm::VPWidenCanonicalIVRecipe::clone(), llvm::VPDerivedIVRecipe::clone(), llvm::VPInstruction::computeCost(), llvm::VPWidenCastRecipe::computeCost(), llvm::VPHistogramRecipe::computeCost(), llvm::VPWidenSelectRecipe::computeCost(), llvm::VPPartialReductionRecipe::computeCost(), llvm::VPReplicateRecipe::computeCost(), llvm::VPExpressionRecipe::computeCost(), llvm::VPWidenMemoryRecipe::computeCost(), llvm::VPInstructionWithType::execute(), llvm::VPWidenRecipe::execute(), llvm::VPWidenCastRecipe::execute(), llvm::VPHistogramRecipe::execute(), llvm::VPWidenSelectRecipe::execute(), llvm::VPWidenGEPRecipe::execute(), llvm::VPVectorEndPointerRecipe::execute(), llvm::VPVectorPointerRecipe::execute(), llvm::VPWidenPHIRecipe::execute(), llvm::VPPartialReductionRecipe::execute(), llvm::VPBranchOnMaskRecipe::execute(), llvm::VPPredInstPHIRecipe::execute(), llvm::VPActiveLaneMaskPHIRecipe::execute(), llvm::VPWidenCanonicalIVRecipe::execute(), llvm::VPDerivedIVRecipe::execute(), llvm::VPScalarIVStepsRecipe::execute(), llvm::VPIRInstruction::extractLastLaneOfFirstOperand(), fixReductionScalarResumeWhenVectorizingEpilog(), llvm::VPRecipeWithIRFlags::getCostForRecipeWithOpcode(), llvm::VPWidenLoadEVLRecipe::getEVL(), llvm::VPWidenStoreEVLRecipe::getEVL(), llvm::VPPhiAccessors::getIncomingValue(), llvm::VPWidenIntOrFpInductionRecipe::getLastUnrolledPartOperand(), llvm::VPHistogramRecipe::getMask(), llvm::VPExpressionRecipe::getOperandOfResultType(), llvm::VPWidenIntOrFpInductionRecipe::getSplatVFValue(), llvm::VPDerivedIVRecipe::getStartValue(), getStartValueFromReductionResult(), llvm::VPWidenInductionRecipe::getStepValue(), llvm::VPDerivedIVRecipe::getStepValue(), llvm::VPWidenStoreEVLRecipe::getStoredValue(), llvm::VPVectorEndPointerRecipe::getVFValue(), llvm::VPWidenInductionRecipe::getVFValue(), llvm::VPlanTransforms::handleMaxMinNumReductions(), llvm::VPlanTransforms::handleUncountableEarlyExit(), llvm::VPInstruction::onlyFirstLaneUsed(), preparePlanForMainVectorLoop(), llvm::VPHistogramRecipe::print(), llvm::VPWidenSelectRecipe::print(), llvm::VPWidenPointerInductionRecipe::print(), llvm::VPInterleaveRecipe::print(), llvm::VPInterleaveEVLRecipe::print(), llvm::VPExpressionRecipe::print(), llvm::VPDerivedIVRecipe::print(), and replaceUsesOfWith().

◆ onlyFirstLaneUsed()

virtual bool llvm::VPUser::onlyFirstLaneUsed ( const VPValue Op) const
inlinevirtual

◆ onlyFirstPartUsed()

virtual bool llvm::VPUser::onlyFirstPartUsed ( const VPValue Op) const
inlinevirtual

Returns true if the VPUser only uses the first part of operand Op.

Conservatively returns false.

Reimplemented in llvm::VPInstruction, llvm::VPIRInstruction, llvm::VPVectorEndPointerRecipe, llvm::VPVectorPointerRecipe, and llvm::VPCanonicalIVPHIRecipe.

Definition at line 288 of file VPlanValue.h.

References assert(), llvm::is_contained(), and operands().

◆ op_begin() [1/2]

operand_iterator llvm::VPUser::op_begin ( )
inline

Definition at line 261 of file VPlanValue.h.

References Operands.

Referenced by createReplicateRegion(), operands(), and llvm::VPReplicateRecipe::print().

◆ op_begin() [2/2]

const_operand_iterator llvm::VPUser::op_begin ( ) const
inline

Definition at line 262 of file VPlanValue.h.

References Operands.

◆ op_end() [1/2]

operand_iterator llvm::VPUser::op_end ( )
inline

Definition at line 263 of file VPlanValue.h.

References Operands.

Referenced by createReplicateRegion(), and operands().

◆ op_end() [2/2]

const_operand_iterator llvm::VPUser::op_end ( ) const
inline

Definition at line 264 of file VPlanValue.h.

References Operands.

◆ operands() [1/2]

operand_range llvm::VPUser::operands ( )
inline

Definition at line 265 of file VPlanValue.h.

References op_begin(), and op_end().

Referenced by llvm::VPInstructionWithType::clone(), llvm::VPIRInstruction::clone(), llvm::VPWidenIntrinsicRecipe::clone(), llvm::VPHistogramRecipe::clone(), llvm::VPExpressionRecipe::clone(), cloneForLane(), llvm::collectEphemeralRecipesForVPlan(), llvm::VPWidenIntrinsicRecipe::computeCost(), llvm::VPWidenSelectRecipe::computeCost(), llvm::VPReplicateRecipe::computeCost(), llvm::VPExpressionRecipe::decompose(), llvm::VPIRPhi::execute(), llvm::VPWidenRecipe::execute(), llvm::VPWidenIntrinsicRecipe::execute(), hoistPreviousBeforeFORUsers(), llvm::vputils::isSingleScalar(), onlyFirstLaneUsed(), llvm::VPInstruction::onlyFirstLaneUsed(), llvm::VPIRInstruction::onlyFirstLaneUsed(), llvm::VPWidenIntrinsicRecipe::onlyFirstLaneUsed(), llvm::VPVectorEndPointerRecipe::onlyFirstLaneUsed(), llvm::VPVectorPointerRecipe::onlyFirstLaneUsed(), llvm::VPWidenInductionRecipe::onlyFirstLaneUsed(), llvm::VPFirstOrderRecurrencePHIRecipe::onlyFirstLaneUsed(), llvm::VPReductionPHIRecipe::onlyFirstLaneUsed(), llvm::VPWidenLoadEVLRecipe::onlyFirstLaneUsed(), llvm::VPWidenStoreEVLRecipe::onlyFirstLaneUsed(), llvm::VPCanonicalIVPHIRecipe::onlyFirstLaneUsed(), llvm::VPEVLBasedIVPHIRecipe::onlyFirstLaneUsed(), llvm::VPDerivedIVRecipe::onlyFirstLaneUsed(), onlyFirstPartUsed(), llvm::VPInstruction::onlyFirstPartUsed(), llvm::VPIRInstruction::onlyFirstPartUsed(), llvm::VPVectorEndPointerRecipe::onlyFirstPartUsed(), llvm::VPVectorPointerRecipe::onlyFirstPartUsed(), llvm::VPCanonicalIVPHIRecipe::onlyFirstPartUsed(), llvm::VPWidenIntrinsicRecipe::print(), printOperands(), scalarizeInstruction(), sinkScalarOperands(), usesScalars(), llvm::VPIRInstruction::usesScalars(), and ~VPUser().

◆ operands() [2/2]

const_operand_range llvm::VPUser::operands ( ) const
inline

Definition at line 266 of file VPlanValue.h.

References op_begin(), and op_end().

◆ operator=()

VPUser & llvm::VPUser::operator= ( const VPUser )
delete

◆ printOperands()

void VPUser::printOperands ( raw_ostream O,
VPSlotTracker SlotTracker 
) const
protected

◆ replaceUsesOfWith()

void VPUser::replaceUsesOfWith ( VPValue From,
VPValue To 
)

Replaces all uses of From in the VPUser with To.

Definition at line 1437 of file VPlan.cpp.

References From, getNumOperands(), getOperand(), Idx, and setOperand().

◆ setOperand()

void llvm::VPUser::setOperand ( unsigned  I,
VPValue New 
)
inline

◆ swapOperands()

void llvm::VPUser::swapOperands ( )
inline

Swap operands of the VPUser. It must have exactly 2 operands.

Definition at line 248 of file VPlanValue.h.

References assert(), Operands, and std::swap().

◆ usesScalars()

virtual bool llvm::VPUser::usesScalars ( const VPValue Op) const
inlinevirtual

Returns true if the VPUser uses scalars of operand Op.

Conservatively returns if only first (scalar) lane is used, as default.

Reimplemented in llvm::VPIRInstruction, llvm::VPReplicateRecipe, llvm::VPBranchOnMaskRecipe, and llvm::VPPredInstPHIRecipe.

Definition at line 272 of file VPlanValue.h.

References assert(), llvm::is_contained(), onlyFirstLaneUsed(), and operands().

Friends And Related Function Documentation

◆ VPPhiAccessors

friend class VPPhiAccessors
friend

Grant access to removeOperand for VPPhiAccessors, the only supported user.

Definition at line 199 of file VPlanValue.h.


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