#include "llvm/IR/User.h"
Classes | |
struct | AllocInfo |
Information about how aUser object was allocated, to be passed into theUser constructor.More... | |
struct | const_value_op_iterator |
struct | HungOffOperandsAllocMarker |
Indicates thisUser has operands "hung off" in another allocation.More... | |
struct | IntrusiveOperandsAllocMarker |
Indicates thisUser has operands co-allocated.More... | |
struct | IntrusiveOperandsAndDescriptorAllocMarker |
Indicates thisUser has operands and a descriptor co-allocated .More... | |
struct | value_op_iterator |
Iterator for directly iterating over the operand Values.More... | |
Public Types | |
using | op_iterator =Use * |
using | const_op_iterator =constUse * |
using | op_range =iterator_range<op_iterator > |
using | const_op_range =iterator_range<const_op_iterator > |
![]() | |
enum | ValueTy |
Concrete subclass of this.More... | |
using | use_iterator = use_iterator_impl<Use > |
using | const_use_iterator = use_iterator_impl<constUse > |
using | user_iterator = user_iterator_impl<User > |
using | const_user_iterator = user_iterator_impl<constUser > |
Public Member Functions | |
User (constUser &)=delete | |
void | operator delete (void *Usr) |
Free memory allocated forUser andUse objects. | |
void | operator delete (void *Usr,HungOffOperandsAllocMarker) |
Placement delete - required by std, called if the ctor throws. | |
void | operator delete (void *Usr,IntrusiveOperandsAllocMarker) |
Placement delete - required by std, called if the ctor throws. | |
void | operator delete (void *Usr,IntrusiveOperandsAndDescriptorAllocMarker) |
Placement delete - required by std, called if the ctor throws. | |
constUse * | getOperandList ()const |
Use * | getOperandList () |
Value * | getOperand (unsigned i)const |
void | setOperand (unsigned i,Value *Val) |
constUse & | getOperandUse (unsigned i)const |
Use & | getOperandUse (unsigned i) |
unsigned | getNumOperands ()const |
ArrayRef<constuint8_t > | getDescriptor ()const |
Returns the descriptor co-allocated with thisUser instance. | |
MutableArrayRef<uint8_t > | getDescriptor () |
Returns the descriptor co-allocated with thisUser instance. | |
void | setNumHungOffUseOperands (unsigned NumOps) |
Subclasses with hung off uses need to manage the operand count themselves. | |
bool | isDroppable ()const |
A droppable user is a user for which uses can be dropped without affecting correctness and should be dropped rather than preventing a transformation from happening. | |
op_iterator | op_begin () |
const_op_iterator | op_begin ()const |
op_iterator | op_end () |
const_op_iterator | op_end ()const |
op_range | operands () |
const_op_range | operands ()const |
value_op_iterator | value_op_begin () |
value_op_iterator | value_op_end () |
iterator_range<value_op_iterator > | operand_values () |
const_value_op_iterator | value_op_begin ()const |
const_value_op_iterator | value_op_end ()const |
iterator_range<const_value_op_iterator > | operand_values ()const |
void | dropAllReferences () |
Drop all references to operands. | |
bool | replaceUsesOfWith (Value *From,Value *To) |
Replace uses of oneValue with another. | |
![]() | |
Value (constValue &)=delete | |
Value & | operator= (constValue &)=delete |
void | deleteValue () |
Delete a pointer to a genericValue. | |
void | dump ()const |
Support for debugging, callable in GDB: V->dump() | |
Type * | getType ()const |
All values are typed, get the type of this value. | |
LLVMContext & | getContext ()const |
All values hold a context through their type. | |
bool | hasName ()const |
ValueName * | getValueName ()const |
void | setValueName (ValueName *VN) |
StringRef | getName ()const |
Return a constant reference to the value's name. | |
void | setName (constTwine &Name) |
Change the name of the value. | |
void | takeName (Value *V) |
Transfer the name from V to this value. | |
std::string | getNameOrAsOperand ()const |
void | replaceAllUsesWith (Value *V) |
Change all uses of this to point to a newValue. | |
void | replaceNonMetadataUsesWith (Value *V) |
Change non-metadata uses of this to point to a newValue. | |
void | replaceUsesWithIf (Value *New,llvm::function_ref<bool(Use &U)> ShouldReplace) |
Go through the uses list for this definition and make each use point to "V" if the callback ShouldReplace returns true for the givenUse. | |
void | replaceUsesOutsideBlock (Value *V,BasicBlock *BB) |
replaceUsesOutsideBlock - Go through the uses list for this definition and make each use point to "V" instead of "this" when the use is outside the block. | |
void | assertModuleIsMaterializedImpl ()const |
void | assertModuleIsMaterialized ()const |
bool | use_empty ()const |
bool | materialized_use_empty ()const |
use_iterator | materialized_use_begin () |
const_use_iterator | materialized_use_begin ()const |
use_iterator | use_begin () |
const_use_iterator | use_begin ()const |
use_iterator | use_end () |
const_use_iterator | use_end ()const |
iterator_range<use_iterator > | materialized_uses () |
iterator_range<const_use_iterator > | materialized_uses ()const |
iterator_range<use_iterator > | uses () |
iterator_range<const_use_iterator > | uses ()const |
bool | user_empty ()const |
user_iterator | materialized_user_begin () |
const_user_iterator | materialized_user_begin ()const |
user_iterator | user_begin () |
const_user_iterator | user_begin ()const |
user_iterator | user_end () |
const_user_iterator | user_end ()const |
User * | user_back () |
constUser * | user_back ()const |
iterator_range<user_iterator > | materialized_users () |
iterator_range<const_user_iterator > | materialized_users ()const |
iterator_range<user_iterator > | users () |
iterator_range<const_user_iterator > | users ()const |
bool | hasOneUse ()const |
Return true if there is exactly one use of this value. | |
bool | hasNUses (unsignedN)const |
Return true if thisValue has exactly N uses. | |
bool | hasNUsesOrMore (unsignedN)const |
Return true if this value has N uses or more. | |
bool | hasOneUser ()const |
Return true if there is exactly one user of this value. | |
Use * | getSingleUndroppableUse () |
Return true if there is exactly one use of this value that cannot be dropped. | |
constUse * | getSingleUndroppableUse ()const |
User * | getUniqueUndroppableUser () |
Return true if there is exactly one unique user of this value that cannot be dropped (that user can have multiple uses of this value). | |
constUser * | getUniqueUndroppableUser ()const |
bool | hasNUndroppableUses (unsignedN)const |
Return true if there this value. | |
bool | hasNUndroppableUsesOrMore (unsignedN)const |
Return true if this value has N uses or more. | |
void | dropDroppableUses (llvm::function_ref<bool(constUse *)> ShouldDrop=[](constUse *) { returntrue;}) |
Remove every uses that can safely be removed. | |
void | dropDroppableUsesIn (User &Usr) |
Remove every use of this value inUser that can safely be removed. | |
bool | isUsedInBasicBlock (constBasicBlock *BB)const |
Check if this value is used in the specified basic block. | |
unsigned | getNumUses ()const |
This method computes the number of uses of thisValue. | |
void | addUse (Use &U) |
This method should only be used by theUse class. | |
unsigned | getValueID ()const |
Return an ID for the concrete type of this object. | |
unsigned | getRawSubclassOptionalData ()const |
Return the raw optional flags value contained in this value. | |
void | clearSubclassOptionalData () |
Clear the optional flags contained in this value. | |
bool | hasSameSubclassOptionalData (constValue *V)const |
Check the optional flags for equality. | |
bool | hasValueHandle ()const |
Return true if there is a value handle associated with this value. | |
bool | isUsedByMetadata ()const |
Return true if there is metadata referencing this value. | |
bool | isSwiftError ()const |
Return true if this value is a swifterror value. | |
constValue * | stripPointerCasts ()const |
Strip off pointer casts, all-zero GEPs and address space casts. | |
Value * | stripPointerCasts () |
constValue * | stripPointerCastsAndAliases ()const |
Strip off pointer casts, all-zero GEPs, address space casts, and aliases. | |
Value * | stripPointerCastsAndAliases () |
constValue * | stripPointerCastsSameRepresentation ()const |
Strip off pointer casts, all-zero GEPs and address space casts but ensures the representation of the result stays the same. | |
Value * | stripPointerCastsSameRepresentation () |
constValue * | stripPointerCastsForAliasAnalysis ()const |
Strip off pointer casts, all-zero GEPs, single-argument phi nodes and invariant group info. | |
Value * | stripPointerCastsForAliasAnalysis () |
constValue * | stripInBoundsConstantOffsets ()const |
Strip off pointer casts and all-constant inbounds GEPs. | |
Value * | stripInBoundsConstantOffsets () |
constValue * | stripAndAccumulateConstantOffsets (constDataLayout &DL,APInt &Offset,bool AllowNonInbounds,bool AllowInvariantGroup=false,function_ref<bool(Value &Value,APInt &Offset)> ExternalAnalysis=nullptr)const |
Accumulate the constant offset this value has compared to a base pointer. | |
Value * | stripAndAccumulateConstantOffsets (constDataLayout &DL,APInt &Offset,bool AllowNonInbounds,bool AllowInvariantGroup=false,function_ref<bool(Value &Value,APInt &Offset)> ExternalAnalysis=nullptr) |
constValue * | stripAndAccumulateInBoundsConstantOffsets (constDataLayout &DL,APInt &Offset)const |
This is a wrapper around stripAndAccumulateConstantOffsets with the in-bounds requirement set to false. | |
Value * | stripAndAccumulateInBoundsConstantOffsets (constDataLayout &DL,APInt &Offset) |
constValue * | stripInBoundsOffsets (function_ref< void(constValue *)> Func=[](constValue *) {})const |
Strip off pointer casts and inbounds GEPs. | |
Value * | stripInBoundsOffsets (function_ref< void(constValue *)> Func=[](constValue *) {}) |
std::optional< int64_t > | getPointerOffsetFrom (constValue *Other,constDataLayout &DL)const |
If this ptr is provably equal toOther plus a constant offset, return that offset in bytes. | |
bool | canBeFreed ()const |
Return true if the memory object referred to by V can by freed in the scope for which the SSA value defining the allocation is statically defined. | |
uint64_t | getPointerDereferenceableBytes (constDataLayout &DL,bool &CanBeNull,bool &CanBeFreed)const |
Returns the number of bytes known to be dereferenceable for the pointer value. | |
Align | getPointerAlignment (constDataLayout &DL)const |
Returns an alignment of the pointer value. | |
constValue * | DoPHITranslation (constBasicBlock *CurBB,constBasicBlock *PredBB)const |
Translate PHI node to its predecessor from the given basic block. | |
Value * | DoPHITranslation (constBasicBlock *CurBB,constBasicBlock *PredBB) |
void | mutateType (Type *Ty) |
Mutate the type of thisValue to be of the specified type. | |
template<class Compare > | |
void | sortUseList (Compare Cmp) |
Sort the use-list. | |
void | reverseUseList () |
Reverse the use-list. | |
void | print (raw_ostream &O,bool IsForDebug=false)const |
Implement operator<< onValue. | |
void | print (raw_ostream &O,ModuleSlotTracker &MST,bool IsForDebug=false)const |
void | printAsOperand (raw_ostream &O,bool PrintType=true,constModule *M=nullptr)const |
Print the name of thisValue out to the specifiedraw_ostream. | |
void | printAsOperand (raw_ostream &O,bool PrintType,ModuleSlotTracker &MST)const |
Static Public Member Functions | |
staticbool | classof (constValue *V) |
![]() | |
static void | dropDroppableUse (Use &U) |
Remove the droppable useU . | |
Protected Member Functions | |
void * | operator new (size_tSize)=delete |
void * | operator new (size_tSize,HungOffOperandsAllocMarker) |
Allocate aUser with an operand pointer co-allocated. | |
void * | operator new (size_tSize,IntrusiveOperandsAllocMarker allocTrait) |
Allocate aUser with the operands co-allocated. | |
void * | operator new (size_tSize,IntrusiveOperandsAndDescriptorAllocMarker allocTrait) |
Allocate aUser with the operands co-allocated. | |
User (Type *ty,unsigned vty,AllocInfoAllocInfo) | |
void | allocHungoffUses (unsignedN,bool IsPhi=false) |
Allocate the array of Uses, followed by a pointer (with bottom bit set) to theUser. | |
void | growHungoffUses (unsignedN,bool IsPhi=false) |
Grow the number of hung off uses. | |
~User ()=default | |
template<int Idx> | |
Use & | Op () |
template<int Idx> | |
constUse & | Op ()const |
![]() | |
Value (Type *Ty,unsigned scid) | |
~Value () | |
Value's destructor should be virtual by design, but that would require thatValue and all of its subclasses have a vtable that effectively duplicates the information in the value ID. | |
void | getAllMetadata (SmallVectorImpl< std::pair<unsigned,MDNode * > > &MDs)const |
Appends all metadata attached to this value toMDs , sorting by KindID. | |
bool | hasMetadata ()const |
Return true if this value has any metadata attached to it. | |
bool | eraseMetadata (unsigned KindID) |
Erase all metadata attachments with the given kind. | |
void | eraseMetadataIf (function_ref<bool(unsigned,MDNode *)> Pred) |
Erase all metadata attachments matching the given predicate. | |
void | clearMetadata () |
Erase all metadata attached to thisValue. | |
MDNode * | getMetadataImpl (unsigned KindID)const |
Get metadata for the given kind, if any. | |
unsigned short | getSubclassDataFromValue ()const |
void | setValueSubclassData (unsigned shortD) |
MDNode * | getMetadata (unsigned KindID)const |
Get the current metadata attachments for the given kind, if any. | |
MDNode * | getMetadata (StringRef Kind)const |
void | getMetadata (unsigned KindID,SmallVectorImpl<MDNode * > &MDs)const |
Appends all attachments with the given ID toMDs in insertion order. | |
void | getMetadata (StringRef Kind,SmallVectorImpl<MDNode * > &MDs)const |
bool | hasMetadata (unsigned KindID)const |
Return true if this value has the given type of metadata attached. | |
bool | hasMetadata (StringRef Kind)const |
void | setMetadata (unsigned KindID,MDNode *Node) |
Set a particular kind of metadata attachment. | |
void | setMetadata (StringRef Kind,MDNode *Node) |
void | addMetadata (unsigned KindID,MDNode &MD) |
Add a metadata attachment. | |
void | addMetadata (StringRef Kind,MDNode &MD) |
Static Protected Member Functions | |
template<int Idx, typename U > | |
staticUse & | OpFrom (const U *that) |
Friends | |
struct | HungoffOperandTraits |
template<class ConstantClass > | |
struct | ConstantAggrKeyType |
Additional Inherited Members | |
![]() | |
static constexprunsigned | MaxAlignmentExponent = 32 |
The maximum alignment for instructions. | |
static constexpruint64_t | MaximumAlignment = 1ULL <<MaxAlignmentExponent |
![]() | |
enum | : unsigned {NumUserOperandsBits = 27 } |
The number of operands in the subclass.More... | |
![]() | |
unsignedchar | SubclassOptionalData: 7 |
Hold subclass data that can be dropped. | |
unsigned | NumUserOperands:NumUserOperandsBits |
unsigned | IsUsedByMD: 1 |
unsigned | HasName: 1 |
unsigned | HasMetadata: 1 |
unsigned | HasHungOffUses: 1 |
unsigned | HasDescriptor: 1 |
usingllvm::User::op_iterator =Use* |
Definition at line115 of fileUser.h.
Referencesassert(),getOperandList(),llvm::User::AllocInfo::HasDescriptor,llvm::Value::HasDescriptor,llvm::User::AllocInfo::HasHungOffUses,llvm::Value::HasHungOffUses,llvm::User::AllocInfo::NumOps,llvm::Value::NumUserOperands, andllvm::Value::NumUserOperandsBits.
Referenced byllvm::slpvectorizer::BoUpSLP::vectorizeTree().
| protecteddefault |
Allocate the array of Uses, followed by a pointer (with bottom bit set) to theUser.
IsPhi | identifies callers which are phi nodes and which need N BasicBlock* allocated along with N |
Definition at line50 of fileUser.cpp.
Referenced byllvm::MemoryPhi::allocHungoffUses(), andllvm::PHINode::allocHungoffUses().
| inline |
Drop all references to operands.
This function is in charge of "letting go" of all objects that thisUser refers to. This allows one to 'delete' a whole class at a time, even though there may be circular references... First all references are dropped, and all use counts go to zero. Then everything is deleted for real. Note that no operations are valid on an object that has "droppedall references", except operator delete.
Definition at line345 of fileUser.h.
Referencesoperands().
Referenced byllvm::GlobalVariable::dropAllReferences(),llvm::expandDivision(),llvm::expandDivisionUpTo32Bits(),llvm::expandDivisionUpTo64Bits(),expandFPToI(),expandIToFP(),llvm::expandRemainder(),llvm::expandRemainderUpTo32Bits(),llvm::expandRemainderUpTo64Bits(),llvm::MemorySSAUpdater::removeBlocks(),scalarize(), andllvm::MemorySSA::~MemorySSA().
MutableArrayRef<uint8_t > llvm::User::getDescriptor | ( | ) |
Returns the descriptor co-allocated with thisUser instance.
Definition at line99 of fileUser.cpp.
Referencesllvm::Use::get(),llvm::sandboxir::User::getNumOperands(), andllvm::sandboxir::User::getOperandUse().
Referenced byllvm::CallBase::bundle_op_info_begin(), andllvm::CallBase::bundle_op_info_end().
| inline |
Definition at line250 of fileUser.h.
Referencesllvm::Value::NumUserOperands.
Referenced byllvm::SwitchInst::addCase(),llvm::LandingPadInst::addClause(),llvm::IndirectBrInst::addDestination(),llvm::CatchSwitchInst::addHandler(),argVectorFlatten(),canReplaceGEPIdxWithZero(),canSinkInstructions(),llvm::FuncletPadInst::cloneImpl(),llvm::GetElementPtrInst::cloneImpl(),llvm::CallInst::cloneImpl(),llvm::ReturnInst::cloneImpl(),llvm::BranchInst::cloneImpl(),llvm::InvokeInst::cloneImpl(),llvm::CallBrInst::cloneImpl(),llvm::CleanupReturnInst::cloneImpl(),llvm::FunctionComparator::cmpConstants(),CollectSubexprs(),CombineBaseUpdate(),detectShiftUntilLessThanIdiom(),emitGlobalConstantArray(),emitGlobalConstantStruct(),llvm::Evaluator::EvaluateFunction(),llvm::AArch64TargetLowering::fallBackToDAGISel(),llvm::RISCVTargetLowering::fallBackToDAGISel(),FindUsedValues(),findUsedValues(),llvm::InstCombinerImpl::foldGEPICmp(),foldGEPOfPhi(),llvm::InstCombinerImpl::foldPHIArgGEPIntoPHI(),llvm::InstCombinerImpl::foldSelectOpOp(),llvm::DbgAssignIntrinsic::getAddress(),llvm::ConstantExpr::getAsInstruction(),getBranchWeight(),getGEPInductionOperand(),getLoopPhiForCounter(),llvm::SystemZTTIImpl::getMemoryOpCost(),llvm::GetElementPtrInst::getNumIndices(),llvm::GEPOperator::getNumIndices(),llvm::ConstantVector::getSplatValue(),llvm::ConstantExpr::getWithOperands(),llvm::GetElementPtrInst::hasAllConstantIndices(),llvm::GetElementPtrInst::hasAllZeroIndices(),llvm::GetElementPtrInst::hasIndices(),llvm::GEPOperator::hasIndices(),isEmptyXXStructor(),isHighCostExpansion(),isNotUsedOrFoldableInLoop(),llvm::isSafeToSpeculativelyExecuteWithOpcode(),llvm::VariadicOperandTraits< SubClass >::op_begin(),llvm::orc::CtorDtorIterator::operator*(),parseGlobalCtors(),llvm::PPCTargetLowering::PerformDAGCombine(),llvm::SwitchInst::removeCase(),llvm::IndirectBrInst::removeDestination(),removeGlobalCtors(),llvm::CatchSwitchInst::removeHandler(),llvm::PHINode::removeIncomingValue(),llvm::PHINode::removeIncomingValueIf(),llvm::VPValue::replaceUsesWithIf(),llvm::DAGTypeLegalizer::run(),llvm::ExecutionEngine::runStaticConstructorsDestructors(),sinkLastInstruction(),upgradeAMDGCNIntrinsicCall(),llvm::UpgradeIntrinsicCall(),vectorPseudoHasAllNBitUsers(),DataScalarizerVisitor::visitGetElementPtrInst(),VisitGlobalVariableForEmission(), andDataScalarizerVisitor::visitLoadInst().
Definition at line228 of fileUser.h.
Referencesassert(),getOperandList(), andllvm::Value::NumUserOperands.
Referenced byllvm::RecurrenceDescriptor::AddReductionVar(),AddReturnAttributes(),llvm::LanaiInstrInfo::analyzeBranch(),areIdenticalUpToCommutativity(),argVectorFlatten(),llvm::CanonicalLoopInfo::assertOK(),BreakUpSubtract(),canEvaluateShiftedShift(),canFoldTermCondOfLoop(),CanGenerateTest(),canonicalizeBitCastExtElt(),canonicalizeInsertSplat(),canonicalizeSaturatedAdd(),canonicalizeSaturatedSubtract(),canPHITrans(),canReplaceGEPIdxWithZero(),canSinkInstructions(),canUseShiftPair(),CheckForPhysRegDependency(),llvm::SITargetLowering::checkForPhysRegDependency(),checkIfSafeAddSequence(),checkOrAndOpImpliedByOther(),llvm::AllocaInst::cloneImpl(),llvm::LoadInst::cloneImpl(),llvm::StoreInst::cloneImpl(),llvm::AtomicCmpXchgInst::cloneImpl(),llvm::AtomicRMWInst::cloneImpl(),llvm::SelectInst::cloneImpl(),llvm::VAArgInst::cloneImpl(),llvm::ExtractElementInst::cloneImpl(),llvm::InsertElementInst::cloneImpl(),llvm::ShuffleVectorInst::cloneImpl(),llvm::TruncInst::cloneImpl(),llvm::ZExtInst::cloneImpl(),llvm::SExtInst::cloneImpl(),llvm::FPTruncInst::cloneImpl(),llvm::FPExtInst::cloneImpl(),llvm::UIToFPInst::cloneImpl(),llvm::SIToFPInst::cloneImpl(),llvm::FPToUIInst::cloneImpl(),llvm::FPToSIInst::cloneImpl(),llvm::IntToPtrInst::cloneImpl(),llvm::PtrToIntInst::cloneImpl(),llvm::BitCastInst::cloneImpl(),llvm::AddrSpaceCastInst::cloneImpl(),llvm::FreezeInst::cloneImpl(),llvm::FunctionComparator::cmpConstants(),collectShuffleElements(),collectSingleShuffleElements(),CollectSubexprs(),CombineBaseUpdate(),combineSCALAR_TO_VECTOR(),combineTargetShuffle(),llvm::InstCombinerImpl::commonCastTransforms(),llvm::InstCombinerImpl::commonShiftTransforms(),compareCmp(),llvm::VPWidenMemoryRecipe::computeCost(),computeKnownBitsFromOperator(),computeUnlikelySuccessors(),llvm::ConstantFoldCastOperand(),constantFoldUser(),ConvertShiftToMul(),createReplacement(),createTblForTrunc(),despeculateCountZeros(),detectPopcountIdiom(),detectShiftUntilLessThanIdiom(),detectShiftUntilZeroIdiom(),DoInitialMatch(),dominatesAllUsesOf(),dropRedundantMaskingOfLeftShiftInput(),llvm::SITargetLowering::emitExpandAtomicAddrSpacePredicate(),emitGlobalConstantArray(),emitGlobalConstantStruct(),llvm::Evaluator::EvaluateFunction(),evaluateICmpRelation(),llvm::VPPredInstPHIRecipe::execute(),expandAbs(),expandAnyOrAllIntrinsic(),expandAtan2Intrinsic(),expandClampIntrinsic(),expandCrossIntrinsic(),expandDegreesIntrinsic(),llvm::expandDivision(),llvm::expandDivisionUpTo32Bits(),llvm::expandDivisionUpTo64Bits(),expandExpIntrinsic(),expandFloatDotIntrinsic(),expandFPToI(),expandIntegerDotIntrinsic(),expandIToFP(),expandLerpIntrinsic(),expandLogIntrinsic(),expandNormalizeIntrinsic(),expandPowIntrinsic(),expandRadiansIntrinsic(),llvm::expandRemainder(),llvm::expandRemainderUpTo32Bits(),llvm::expandRemainderUpTo64Bits(),expandSignIntrinsic(),expandStepIntrinsic(),expandVecReduceAdd(),ExtendUsesToFormExtLoad(),extractConstantBits(),llvm::AArch64TargetLowering::fallBackToDAGISel(),llvm::RISCVTargetLowering::fallBackToDAGISel(),findBuildAggregate_rec(),findDemandedEltsBySingleUser(),findFinalIVValue(),findGlobalCtors(),llvm::findHistogram(),findInitTrampoline(),findInitTrampolineFromAlloca(),llvm::findScalarElement(),findSelectThroughCast(),FindSingleUseMultiplyFactors(),FindUsedValues(),findUsedValues(),llvm::InstCombinerImpl::foldBinopWithPhiOperands(),foldBitCastBitwiseLogic(),foldBitCastSelect(),foldCastShuffle(),llvm::InstCombinerImpl::foldCmpLoadFromIndexedGlobal(),foldConstantInsEltIntoShuffle(),foldFCmpFSubIntoFCmp(),llvm::InstCombinerImpl::foldFCmpIntToFPConst(),foldFCmpReciprocalAndZero(),foldFCmpToFPClassTest(),foldFPtoI(),llvm::InstCombinerImpl::foldGEPICmp(),foldGEPOfPhi(),llvm::InstCombinerImpl::foldICmpAndShift(),llvm::InstCombinerImpl::foldICmpBinOp(),llvm::InstCombinerImpl::foldICmpBinOpEqualityWithConstant(),llvm::InstCombinerImpl::foldICmpDivConstant(),llvm::InstCombinerImpl::foldICmpInstWithConstantNotInt(),llvm::InstCombinerImpl::foldICmpShlConstant(),llvm::InstCombinerImpl::foldICmpShrConstant(),llvm::InstCombinerImpl::foldICmpSRemConstant(),llvm::InstCombinerImpl::foldICmpSubConstant(),llvm::InstCombinerImpl::foldICmpTruncConstant(),llvm::InstCombinerImpl::foldICmpUDivConstant(),llvm::InstCombinerImpl::foldICmpUsingBoolRange(),llvm::InstCombinerImpl::foldICmpWithCastOp(),llvm::InstCombinerImpl::foldICmpWithTrunc(),llvm::InstCombinerImpl::foldICmpWithZextOrSext(),foldIdentityExtractShuffle(),foldIdentityPaddedShuffles(),foldInsEltIntoIdentityShuffle(),foldInsEltIntoSplat(),foldInsSequenceIntoSplat(),foldIntrinsicUsingDistributiveLaws(),foldIsPowerOf2(),foldIsPowerOf2OrZero(),llvm::InstCombinerImpl::foldItoFPtoI(),foldLogicCastConstant(),foldMulShl1(),llvm::InstCombinerImpl::foldPHIArgBinOpIntoPHI(),llvm::InstCombinerImpl::foldPHIArgGEPIntoPHI(),llvm::InstCombinerImpl::foldPHIArgLoadIntoPHI(),llvm::InstCombinerImpl::foldPHIArgOpIntoPHI(),foldSelectBinOpIdentity(),foldSelectICmpAndBinOp(),foldSelectICmpLshrAshr(),llvm::InstCombinerImpl::foldSelectOpOp(),llvm::InstCombinerImpl::foldSelectShuffle(),foldSelectShuffleOfSelectShuffle(),foldSelectShuffleWith1Binop(),llvm::InstCombinerImpl::FoldShiftByConstant(),foldShiftedShift(),foldShiftIntoShiftInAnotherHandOfAndInICmp(),foldShuffleOfUnaryOps(),foldShuffleWithInsert(),foldSignedTruncationCheck(),foldTruncInsEltPair(),foldTruncShuffle(),llvm::InstCombinerImpl::foldUsingDistributiveLaws(),foldVecExtTruncToExtElt(),llvm::InstCombinerImpl::foldVectorBinop(),foldVecTruncToExtElt(),llvm::InstCombinerImpl::freezeOtherUses(),llvm::InsertValueInst::getAggregateOperand(),llvm::GlobalAlias::getAliaseeObject(),getAlternateBinop(),llvm::CallBase::getArgOperand(),llvm::AArch64TTIImpl::getArithmeticInstrCost(),llvm::AllocaInst::getArraySize(),llvm::Loop::LoopBounds::getBounds(),getBranchCondString(),llvm::Loop::LoopBounds::getCanonicalPredicate(),getCastsForInductionPHI(),llvm::AtomicCmpXchgInst::getCompareOperand(),llvm::ExecutionEngine::getConstantValue(),llvm::MemoryUseOrDef::getDefiningAccess(),getExactSDiv(),getExtractedDemandedElts(),getExtractIndex(),getFSqrtDivOptPattern(),getGEPInductionOperand(),llvm::CallBrInst::getIndirectDestLabel(),llvm::Loop::getInductionVariable(),llvm::InsertValueInst::getInsertedValueOperand(),getInvertibleOperands(),llvm::SCEVExpander::getIVIncOperand(),getLoopPhiForCounter(),llvm::SystemZTTIImpl::getMemoryOpCost(),llvm::AtomicCmpXchgInst::getNewValOperand(),llvm::LoadInst::getPointerOperand(),llvm::StoreInst::getPointerOperand(),llvm::AtomicCmpXchgInst::getPointerOperand(),llvm::GetElementPtrInst::getPointerOperand(),llvm::PtrToIntInst::getPointerOperand(),llvm::AddrSpaceCastInst::getPointerOperand(),llvm::GEPOperator::getPointerOperand(),getRecurrenceVar(),llvm::LoopVectorizationCostModel::getReductionPatternCost(),llvm::objcarc::getreturnRVOperand(),getSalvageOpsForBinOp(),getSalvageOpsForIcmpOp(),getSameOpcode(),llvm::NoAliasScopeDeclInst::getScopeList(),getShuffleDemandedElts(),llvm::Constant::getSplatValue(),llvm::ConstantVector::getSplatValue(),llvm::CastInst::getSrcTy(),llvm::GlobalStatus::getStoredOnceValue(),llvm::ScalarEvolution::getStrengthenedNoWrapFlagsFromBinOp(),llvm::SITargetLowering::getTgtMemIntrinsic(),llvm::slpvectorizer::BoUpSLP::getTreeCost(),llvm::CanonicalLoopInfo::getTripCount(),llvm::StoreInst::getValueOperand(),getVectorInterleaveFactor(),llvm::ConstantExpr::getWithOperands(),handleBrSelExpect(),handleIndirectSymViaGOTPCRel(),handlePhiDef(),llvm::GetElementPtrInst::hasAllConstantIndices(),llvm::RISCVDAGToDAGISel::hasAllNBitUsers(),llvm::GetElementPtrInst::hasAllZeroIndices(),hoistConditionalLoadsStores(),hoistInsEltConst(),hoistMulAddAssociation(),INITIALIZE_PASS(),inlineRetainOrClaimRVCalls(),instCombineSVEDup(),isAllocSiteRemovable(),llvm::GCNTTIImpl::isAlwaysUniform(),llvm::AllocaInst::isArrayAllocation(),isCmpSameOrSwapped(),isEqualImpl(),isExtractBitsCandidateUse(),llvm::SystemZTTIImpl::isFoldableLoad(),llvm::InductionDescriptor::isFPInductionPHI(),isGOTEquivalentCandidate(),isHighCostExpansion(),isI128MovedToParts(),isI32Insn(),llvm::CastInst::isIntegerCast(),llvm::ShuffleVectorInst::isInterleave(),isLoopExitTestBasedOn(),llvm::AArch64TargetLowering::isMaskAndCmp0FoldingBeneficial(),llvm::ARMTargetLowering::isMaskAndCmp0FoldingBeneficial(),llvm::RISCVTargetLowering::isMaskAndCmp0FoldingBeneficial(),llvm::SystemZTargetLowering::isMaskAndCmp0FoldingBeneficial(),isModifyingBinopOfNonZero(),llvm::CastInst::isNoopCast(),isNoopPtrIntCastPair(),isPowerOfTwoRecurrence(),llvm::AArch64TargetLowering::isProfitableToHoist(),llvm::PPCTargetLowering::isProfitableToHoist(),llvm::AArch64TTIImpl::isProfitableToSinkOperands(),llvm::ARMTTIImpl::isProfitableToSinkOperands(),isRepeatedByteSequence(),isReturnNonNull(),llvm::isSafeToSpeculativelyExecuteWithOpcode(),isShuffleEquivalentToSelect(),isShuffleExtractingFromLHS(),isSSATMinMaxPattern(),lookThroughCast(),lookThroughCastConst(),llvm::FastISel::lowerCallTo(),llvm::AArch64TargetLowering::lowerInterleavedStore(),llvm::ARMTargetLowering::lowerInterleavedStore(),llvm::RISCVTargetLowering::lowerInterleavedStore(),llvm::IntrinsicLowering::LowerIntrinsicCall(),LowerNegateToMultiply(),lowerShufflePairAsUNPCKAndPermute(),llvm::matchDecomposedSelectPattern(),llvm::InstModificationIRStrategy::mutate(),narrowInsElt(),narrowVectorSelect(),llvm::orc::CtorDtorIterator::operator*(),llvm::FastISel::optimizeCmpPredicate(),OptimizeExtractBits(),optimizeIntegerToVectorInsertions(),OptimizeNoopCopyExpression(),parseGlobalCtors(),llvm::LoopStructure::parseLoopStructure(),llvm::PPCTargetLowering::PerformDAGCombine(),PerformMVEVLDCombine(),performNEONPostLDSTCombine(),performPostLD1Combine(),llvm::BasicTTIImplBase< T >::preferToKeepConstantsAttached(),llvm::AsmPrinter::preprocessXXStructorList(),processAnd(),processAShr(),llvm::JumpThreadingPass::processBranchOnXOR(),processSDiv(),processSRem(),processUGT_ADDCST_ADD(),llvm::InstCombinerImpl::pushFreezeToPreventPoisonFromPropagating(),reassociateFCmps(),llvm::refineInstruction(),removeGlobalCtors(),removeMarkerCall(),replaceConditionalBranchesOnConstant(),replaceExtractElements(),llvm::replaceSignedInst(),llvm::VPValue::replaceUsesWithIf(),reuseTableCompare(),rewriteSingleStoreAlloca(),runImpl(),llvm::ExecutionEngine::runStaticConstructorsDestructors(),scalarize(),llvm::FastISel::selectExtractValue(),setLimitsForBinOp(),ShouldBreakUpSubtract(),llvm::ARMTargetLowering::shouldExpandAtomicCmpXchgInIR(),shouldExpandCmpArithRMWInIR(),shrinkInsertElt(),shrinkSplatShuffle(),simplifyAndOfICmpsWithAdd(),simplifyAndOrOfICmpsWithConstants(),simplifyAssocCastAssoc(),simplifyAssociativeBinOp(),llvm::InstCombinerImpl::SimplifyAssociativeOrCommutative(),llvm::InstCombinerImpl::simplifyBinOpSplats(),llvm::InstCombinerImpl::SimplifyDemandedVectorElts(),simplifyICmpInst(),simplifyICmpWithBinOp(),simplifyOrOfICmpsWithAdd(),llvm::JumpThreadingPass::simplifyPartiallyRedundantLoad(),llvm::InstCombinerImpl::simplifyRangeCheck(),simplifyRelativeLoad(),llvm::InstCombinerImpl::simplifyShrShlDemandedBits(),sinkAndCmp0Expression(),sinkLastInstruction(),sinkMinMaxInBB(),SinkShiftAndTruncate(),llvm::InstCombinerImpl::SliceUpIllegalIntegerPHI(),llvm::Constant::toConstantRange(),tryCombineMULLWithUZP1(),tryGetSecondaryReductionRoot(),tryToFoldExtOfLoad(),TryToShrinkGlobalToBoolean(),llvm::JumpThreadingPass::tryToUnfoldSelect(),tryUnmergingGEPsAcrossIndirectBr(),upgradeAArch64IntrinsicCall(),upgradeARMIntrinsicCall(),upgradeNVVMIntrinsicCall(),upgradeX86BinaryIntrinsics(),upgradeX86ConcatShift(),upgradeX86IntrinsicCall(),upgradeX86Rotate(),llvm::slpvectorizer::BoUpSLP::vectorizeTree(),vectorPseudoHasAllNBitUsers(),llvm::InstCombinerImpl::visitAnd(),llvm::InstCombinerImpl::visitBitCast(),llvm::InstCombinerImpl::visitExtractElementInst(),llvm::InstCombinerImpl::visitFCmpInst(),llvm::InstCombinerImpl::visitFPExt(),llvm::InstCombinerImpl::visitFPTrunc(),DataScalarizerVisitor::visitGetElementPtrInst(),VisitGlobalVariableForEmission(),llvm::InstCombinerImpl::visitIntToPtr(),visitIVCast(),llvm::InstCombinerImpl::visitLandingPadInst(),DataScalarizerVisitor::visitLoadInst(),llvm::InstCombinerImpl::visitLoadInst(),llvm::InstCombinerImpl::visitMul(),llvm::InstCombinerImpl::visitPHINode(),llvm::InstCombinerImpl::visitSExt(),llvm::InstCombinerImpl::visitShl(),llvm::InstCombinerImpl::visitShuffleVectorInst(),llvm::InstCombinerImpl::visitSIToFP(),llvm::InstCombinerImpl::visitTrunc(),llvm::InstCombinerImpl::visitUIToFP(), andllvm::InstCombinerImpl::visitZExt().
| inline |
Definition at line224 of fileUser.h.
ReferencesgetOperandList().
Definition at line221 of fileUser.h.
Referencesllvm::Value::HasHungOffUses.
Referenced byllvm::LandingPadInst::addClause(),llvm::IndirectBrInst::addDestination(),llvm::CatchSwitchInst::addHandler(),getOperand(),getOperandList(),getOperandUse(),op_begin(),op_end(),llvm::SwitchInst::removeCase(),llvm::IndirectBrInst::removeDestination(),setOperand(), andUser().
Definition at line245 of fileUser.h.
Referencesassert(),getOperandList(), andllvm::Value::NumUserOperands.
Definition at line241 of fileUser.h.
Referencesassert(),getOperandList(), andllvm::Value::NumUserOperands.
Referenced bycanSinkInstructions(),despeculateCountZeros(),llvm::SITargetLowering::emitExpandAtomicAddrSpacePredicate(),formLCSSAForInstructionsImpl(),llvm::CallBase::getArgOperandUse(),llvm::AbstractCallSite::getCalleeUseForCallback(),llvm::CallBrInst::getIndirectDestLabelUse(),hoistMulAddAssociation(),isCalleeOperand(),llvm::AArch64TTIImpl::isProfitableToSinkOperands(),llvm::ARMTTIImpl::isProfitableToSinkOperands(),processAnd(),processAShr(),processBinOp(),processCmpIntrinsic(),processMinMaxIntrinsic(),processSExt(),processSIToFP(),replaceOperandIfSame(),sinkLastInstruction(), andwillNotOverflow().
bool llvm::User::isDroppable | ( | ) | const |
A droppable user is a user for which uses can be dropped without affecting correctness and should be dropped rather than preventing a transformation from happening.
Definition at line115 of fileUser.cpp.
Referenced byremoveIntrinsicUsers(), andllvm::InstCombinerImpl::run().
| inline |
Definition at line280 of fileUser.h.
ReferencesgetOperandList().
Referenced byllvm::CallBase::arg_begin(),llvm::ConstantAggregate::ConstantAggregate(),llvm::CallBase::data_operands_begin(),foldGEPOfPhi(),llvm::InstCombinerImpl::foldPHIArgGEPIntoPHI(),getSameOpcode(),llvm::ConstantExpr::getWithOperands(),llvm::GetElementPtrInst::idx_begin(),llvm::GEPOperator::idx_begin(),llvm::CallBase::isBundleOperand(),llvm::CallBase::operandBundleFromBundleOpInfo(),operands(),llvm::CallBase::populateBundleOperandInfos(),llvm::PHINode::removeIncomingValue(),llvm::InnerLoopVectorizer::sinkScalarOperands(), andvalue_op_begin().
| inline |
Definition at line281 of fileUser.h.
ReferencesgetOperandList().
| inline |
Definition at line282 of fileUser.h.
ReferencesgetOperandList(), andllvm::Value::NumUserOperands.
Referenced byllvm::CallBase::data_operands_end(),foldGEPOfPhi(),llvm::InstCombinerImpl::foldPHIArgGEPIntoPHI(),llvm::GetElementPtrInst::idx_end(),llvm::GEPOperator::idx_end(),operands(),llvm::CatchSwitchInst::removeHandler(),llvm::PHINode::removeIncomingValue(),llvm::PHINode::removeIncomingValueIf(),llvm::InnerLoopVectorizer::sinkScalarOperands(), andvalue_op_end().
| inline |
Definition at line285 of fileUser.h.
ReferencesgetOperandList(), andllvm::Value::NumUserOperands.
| inline |
Definition at line312 of fileUser.h.
Referencesllvm::make_range(),value_op_begin(), andvalue_op_end().
Referenced byllvm::GEPOperator::accumulateConstantOffset(),llvm::Constant::isManifestConstant(),operandReferences(), andrematerializeChain().
| inline |
Definition at line333 of fileUser.h.
Referencesllvm::make_range(),value_op_begin(), andvalue_op_end().
| inline |
Definition at line288 of fileUser.h.
Referencesop_begin(), andop_end().
Referenced byareIdenticalUpToCommutativity(),callHasFloatingPointArgument(),callHasFP128Argument(),llvm::objcarc::CanUse(),createRelLookupTable(),DoInitialMatch(),dropAllReferences(),llvm::WebAssemblyAsmPrinter::EmitFunctionAttributes(),findGlobalCtors(),foldGEPOfPhi(),llvm::InstCombinerImpl::foldOpIntoPhi(),llvm::FoldReturnIntoUncondBranch(),getAnyNonZeroConstInt(),llvm::ConstantExpr::getAsInstruction(),getConstantEvolvingPHIOperands(),getExactSDiv(),llvm::SCEVExpander::getIVIncOperand(),llvm::slpvectorizer::BoUpSLP::getSpillCost(),llvm::IRSimilarity::IRInstructionData::initializeInstruction(),isBlockValidForExtraction(),isPowerOfTwoRecurrence(),llvm::LoopInfo::movementPreservesLCSSAForm(),onlySingleValue(),parseGlobalCtors(),performBlockTailMerging(),llvm::PHINode::removeIncomingValueIf(),runImpl(),simplifyUsingControlFlow(),updateSuccessor(),usesOperand(), andllvm::VPlanTransforms::VPInstructionsToVPRecipes().
| inline |
Definition at line291 of fileUser.h.
Referencesop_begin(), andop_end().
LLVM_NO_SANITIZE_MEMORY_ATTRIBUTE void llvm::User::operator delete | ( | void * | Usr | ) |
| inline |
Placement delete - required by std, called if the ctor throws.
Definition at line148 of fileUser.h.
Referencesllvm_unreachable.
| inline |
Placement delete - required by std, called if the ctor throws.
Definition at line161 of fileUser.h.
Referencesllvm_unreachable.
| inline |
Placement delete - required by std, called if the ctor throws.
Definition at line173 of fileUser.h.
Referencesllvm_unreachable.
| protecteddelete |
| protected |
| protected |
| protected |
Replace uses of oneValue with another.
Replaces all references to the "From" definition with references to the "To" definition. Returns whether any uses were replaced.
Definition at line21 of fileUser.cpp.
Referenced byllvm::EpilogueVectorizerEpilogueLoop::createEpilogueVectorizedLoopSkeleton(),llvm::DemotePHIToStack(),llvm::CodeExtractor::findOrCreateBlockForHoisting(),foldOperationIntoSelectOperand(),INITIALIZE_PASS(),llvm::lowerGlobalIFuncUsersAsGlobalCtor(),rematerializeChain(),rematerializeLiveValuesAtUses(),removeEmptyCleanup(),replaceWithTileLoad(),llvm::LoopConstrainer::run(), andllvm::slpvectorizer::BoUpSLP::vectorizeTree().
| inline |
Subclasses with hung off uses need to manage the operand count themselves.
In these instances, the operand count isn't used to find the OperandList, so there's no issue in having the operand count change.
Definition at line261 of fileUser.h.
Referencesassert(),llvm::Value::HasHungOffUses,llvm::Value::NumUserOperands, andllvm::Value::NumUserOperandsBits.
Referenced byllvm::SwitchInst::addCase(),llvm::LandingPadInst::addClause(),llvm::IndirectBrInst::addDestination(),llvm::CatchSwitchInst::addHandler(),llvm::SwitchInst::removeCase(),llvm::IndirectBrInst::removeDestination(),llvm::CatchSwitchInst::removeHandler(),llvm::PHINode::removeIncomingValue(), andllvm::PHINode::removeIncomingValueIf().
Definition at line233 of fileUser.h.
Referencesassert(),getOperandList(), andllvm::Value::NumUserOperands.
Referenced byBreakUpSubtract(),checkOrAndOpImpliedByOther(),ConvertShiftToMul(),llvm::VPlan::execute(),llvm::VPIRBasicBlock::execute(),llvm::InstCombinerImpl::foldPHIArgLoadIntoPHI(),llvm::FoldReturnIntoUncondBranch(),foldShiftedShift(),handleBrSelExpect(),hoistAdd(),hoistSub(),llvm::InlineFunction(),LowerNegateToMultiply(),llvm::InstModificationIRStrategy::mutate(),optimizeDivRem(),llvm::JumpThreadingPass::processBranchOnXOR(),processUMulZExtIdiom(),replaceArgumentUses(),replaceAsyncResumeFunction(),replaceGEPIdxWithZero(),llvm::VPValue::replaceUsesWithIf(),llvm::InnerLoopVectorizer::scalarizeInstruction(),llvm::CallBase::setArgOperand(),llvm::MemoryUseOrDef::setDefiningAccess(),llvm::DbgVariableIntrinsic::setOperand(),llvm::MemoryUse::setOptimized(),llvm::NoAliasScopeDeclInst::setScopeList(),updateOperand(), andDataScalarizerVisitor::visitLoadInst().
| inline |
Definition at line306 of fileUser.h.
Referencesop_begin().
Referenced byllvm::VPWidenRecipe::computeCost(),EliminateDuplicatePHINodesSetBasedImpl(),getHashValueImpl(),hashCallInst(),markAliveBlocks(), andoperand_values().
| inline |
Definition at line327 of fileUser.h.
Referencesop_begin().
| inline |
Definition at line309 of fileUser.h.
Referencesop_end().
Referenced byllvm::VPWidenRecipe::computeCost(),EliminateDuplicatePHINodesSetBasedImpl(),getHashValueImpl(),hashCallInst(),markAliveBlocks(), andoperand_values().
| inline |
| friend |
| friend |