LLVM 20.0.0git |
The address of a basic block.More...
#include "llvm/IR/Constants.h"
Public Member Functions | |
void | operator delete (void *Ptr) |
DECLARE_TRANSPARENT_OPERAND_ACCESSORS (Value) | |
Transparently provide more efficient getOperand methods. | |
Function * | getFunction ()const |
BasicBlock * | getBasicBlock ()const |
![]() | |
void | operator= (constConstant &)=delete |
Constant (constConstant &)=delete | |
bool | isNullValue ()const |
Return true if this is the value that would be returned by getNullValue. | |
bool | isOneValue ()const |
Returns true if the value is one. | |
bool | isNotOneValue ()const |
Return true if the value is not the one value, or, for vectors, does not contain one value elements. | |
bool | isAllOnesValue ()const |
Return true if this is the value that would be returned by getAllOnesValue. | |
bool | isNegativeZeroValue ()const |
Return true if the value is what would be returned by getZeroValueForNegation. | |
bool | isZeroValue ()const |
Return true if the value is negative zero or null value. | |
bool | isNotMinSignedValue ()const |
Return true if the value is not the smallest signed value, or, for vectors, does not contain smallest signed value elements. | |
bool | isMinSignedValue ()const |
Return true if the value is the smallest signed value. | |
bool | isFiniteNonZeroFP ()const |
Return true if this is a finite and non-zero floating-point scalar constant or a fixed width vector constant with all finite and non-zero elements. | |
bool | isNormalFP ()const |
Return true if this is a normal (as opposed to denormal, infinity, nan, or zero) floating-point scalar constant or a vector constant with all normal elements. | |
bool | hasExactInverseFP ()const |
Return true if this scalar has an exact multiplicative inverse or this vector has an exact multiplicative inverse for each element in the vector. | |
bool | isNaN ()const |
Return true if this is a floating-point NaN constant or a vector floating-point constant with all NaN elements. | |
bool | isElementWiseEqual (Value *Y)const |
Return true if this constant and a constant 'Y' are element-wise equal. | |
bool | containsUndefOrPoisonElement ()const |
Return true if this is a vector constant that includes any undef or poison elements. | |
bool | containsPoisonElement ()const |
Return true if this is a vector constant that includes any poison elements. | |
bool | containsUndefElement ()const |
Return true if this is a vector constant that includes any strictly undef (not poison) elements. | |
bool | containsConstantExpression ()const |
Return true if this is a fixed width vector constant that includes any constant expressions. | |
bool | isThreadDependent ()const |
Return true if the value can vary between threads. | |
bool | isDLLImportDependent ()const |
Return true if the value is dependent on a dllimport variable. | |
bool | isConstantUsed ()const |
Return true if the constant has users other than constant expressions and other dangling things. | |
bool | needsRelocation ()const |
This method classifies the entry according to whether or not it may generate a relocation entry (either static or dynamic). | |
bool | needsDynamicRelocation ()const |
Constant * | getAggregateElement (unsigned Elt)const |
For aggregates (struct/array/vector) return the constant that corresponds to the specified element if possible, or null if not. | |
Constant * | getAggregateElement (Constant *Elt)const |
Constant * | getSplatValue (bool AllowPoison=false)const |
If all elements of the vector constant have the same value, return that value. | |
constAPInt & | getUniqueInteger ()const |
If C is a constant integer then return its value, otherwise C must be a vector of constant integers, all equal, and the common value is returned. | |
ConstantRange | toConstantRange ()const |
Convert constant to an approximate constant range. | |
void | destroyConstant () |
Called if some element of this constant is no longer valid. | |
void | handleOperandChange (Value *,Value *) |
This method is a special form ofUser::replaceUsesOfWith (which does not work on constants) that does work on constants. | |
void | removeDeadConstantUsers ()const |
If there are any dead constant users dangling off of this constant, remove them. | |
bool | hasOneLiveUse ()const |
Return true if the constant has exactly one live use. | |
bool | hasZeroLiveUses ()const |
Return true if the constant has no live uses. | |
constConstant * | stripPointerCasts ()const |
Constant * | stripPointerCasts () |
bool | isManifestConstant ()const |
Return true if a constant isConstantData or aConstantAggregate orConstantExpr that contain onlyConstantData. | |
![]() | |
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 | |
staticBlockAddress * | get (Function *F,BasicBlock *BB) |
Return aBlockAddress for the specified function and basic block. | |
staticBlockAddress * | get (BasicBlock *BB) |
Return aBlockAddress for the specified basic block. | |
staticBlockAddress * | lookup (constBasicBlock *BB) |
Lookup an existingBlockAddress constant for the givenBasicBlock. | |
staticbool | classof (constValue *V) |
Methods for support type inquiry through isa, cast, and dyn_cast: | |
![]() | |
staticbool | classof (constValue *V) |
staticConstant * | getNullValue (Type *Ty) |
Constructor to create a '0' constant of arbitrary type. | |
staticConstant * | getAllOnesValue (Type *Ty) |
staticConstant * | getIntegerValue (Type *Ty,constAPInt &V) |
Return the value for an integer or pointer constant, or a vector thereof, with the given scalar value. | |
staticConstant * | replaceUndefsWith (Constant *C,Constant *Replacement) |
Try to replace undefined constant C or undefined elements in C with Replacement. | |
staticConstant * | mergeUndefsWith (Constant *C,Constant *Other) |
Merges undefs of aConstant with anotherConstant, along with the undefs already present. | |
![]() | |
staticbool | classof (constValue *V) |
![]() | |
static void | dropDroppableUse (Use &U) |
Remove the droppable useU . | |
Friends | |
class | Constant |
Additional Inherited Members | |
![]() | |
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 > |
![]() | |
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... | |
![]() | |
Constant (Type *ty,ValueTy vty,AllocInfoAllocInfo) | |
~Constant ()=default | |
![]() | |
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) |
![]() | |
template<int Idx, typename U > | |
staticUse & | OpFrom (const U *that) |
![]() | |
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 |
The address of a basic block.
Definition at line893 of fileConstants.h.
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition at line927 of fileConstants.h.
llvm::BlockAddress::DECLARE_TRANSPARENT_OPERAND_ACCESSORS | ( | Value | ) |
Transparently provide more efficient getOperand methods.
| static |
Return aBlockAddress for the specified basic block.
The basic block must be embedded into a function.
Definition at line1892 of fileConstants.cpp.
Referencesassert(),get(), andllvm::BasicBlock::getParent().
| static |
Return aBlockAddress for the specified function and basic block.
Definition at line1897 of fileConstants.cpp.
Referencesassert(),F, andgetFunction().
Referenced byllvm::CloneFunctionBodyInto(),computeFunctionSummary(),get(),llvm::sandboxir::BlockAddress::get(),hasAddressTakenAndUsed(),llvm::isInlineViable(),LLVMBlockAddress(), andllvm::MergeBasicBlockIntoOnlyPred().
| inline |
Definition at line924 of fileConstants.h.
Referenced byllvm::FunctionComparator::cmpConstants(),llvm::AsmPrinter::GetBlockAddressSymbol(), andprocessBlockAddr().
| inline |
Definition at line923 of fileConstants.h.
Referenced byllvm::FunctionComparator::cmpConstants(),get(), andllvm::MachineOperand::print().
| static |
Lookup an existingBlockAddress
constant for the givenBasicBlock.
!BB->hasAddressTaken()
, otherwise theBlockAddress
.Definition at line1915 of fileConstants.cpp.
Referencesassert(),F,llvm::BasicBlock::getParent(), andllvm::BasicBlock::hasAddressTaken().
Referenced byfindPartitions(), andllvm::sandboxir::BlockAddress::lookup().
| inline |
Definition at line906 of fileConstants.h.
ReferencesPtr.
| friend |
Definition at line894 of fileConstants.h.