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

Public Member Functions

LLVM_ABI

~MetadataAsValue ()

Metadata *

getMetadata () const

Public Member Functions inherited from llvm::Value

Value (const Value &)=delete

Value &

operator= (const Value &)=delete

LLVM_ABI void

deleteValue ()

Delete a pointer to a generic Value.

LLVM_ABI void

dump () const

Support for debugging, callable in GDB: V->dump()

Type *

getType () const

All values are typed, get the type of this value.

LLVM_ABI LLVMContext &

getContext () const

All values hold a context through their type.

bool

hasName () const

LLVM_ABI ValueName *

getValueName () const

LLVM_ABI void

setValueName (ValueName *VN)

LLVM_ABI StringRef

getName () const

Return a constant reference to the value's name.

LLVM_ABI void

setName (const Twine &Name)

Change the name of the value.

LLVM_ABI void

takeName (Value *V)

Transfer the name from V to this value.

LLVM_ABI std::string

getNameOrAsOperand () const

LLVM_ABI void

replaceAllUsesWith (Value *V)

Change all uses of this to point to a new Value.

LLVM_ABI void

replaceNonMetadataUsesWith (Value *V)

Change non-metadata uses of this to point to a new Value.

LLVM_ABI 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 given Use.

LLVM_ABI 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.

LLVM_ABI void

assertModuleIsMaterializedImpl () const

void

assertModuleIsMaterialized () const

bool

hasUseList () const

Check if this Value has a use-list.

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

const User *

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.

LLVM_ABI bool

hasNUses (unsigned N) const

Return true if this Value has exactly N uses.

LLVM_ABI bool

hasNUsesOrMore (unsigned N) const

Return true if this value has N uses or more.

LLVM_ABI bool

hasOneUser () const

Return true if there is exactly one user of this value.

LLVM_ABI Use *

getSingleUndroppableUse ()

Return true if there is exactly one use of this value that cannot be dropped.

const Use *

getSingleUndroppableUse () const

LLVM_ABI 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).

const User *

getUniqueUndroppableUser () const

LLVM_ABI bool

hasNUndroppableUses (unsigned N) const

Return true if there this value.

LLVM_ABI bool

hasNUndroppableUsesOrMore (unsigned N) const

Return true if this value has N uses or more.

LLVM_ABI void

dropDroppableUses (llvm::function_ref< bool(const Use *)> ShouldDrop=[](const Use *) { return true;})

Remove every uses that can safely be removed.

LLVM_ABI void

dropDroppableUsesIn (User &Usr)

Remove every use of this value in [User](classllvm%5F1%5F1User.html) that can safely be removed.

LLVM_ABI bool

isUsedInBasicBlock (const BasicBlock *BB) const

Check if this value is used in the specified basic block.

LLVM_ABI unsigned

getNumUses () const

This method computes the number of uses of this Value.

void

addUse (Use &U)

This method should only be used by the Use 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 (const Value *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.

LLVM_ABI bool

isSwiftError () const

Return true if this value is a swifterror value.

LLVM_ABI const Value *

stripPointerCasts () const

Strip off pointer casts, all-zero GEPs and address space casts.

Value *

stripPointerCasts ()

LLVM_ABI const Value *

stripPointerCastsAndAliases () const

Strip off pointer casts, all-zero GEPs, address space casts, and aliases.

Value *

stripPointerCastsAndAliases ()

LLVM_ABI const Value *

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

LLVM_ABI const Value *

stripPointerCastsForAliasAnalysis () const

Strip off pointer casts, all-zero GEPs, single-argument phi nodes and invariant group info.

Value *

stripPointerCastsForAliasAnalysis ()

LLVM_ABI const Value *

stripInBoundsConstantOffsets () const

Strip off pointer casts and all-constant inbounds GEPs.

Value *

stripInBoundsConstantOffsets ()

LLVM_ABI const Value *

stripAndAccumulateConstantOffsets (const DataLayout &DL, APInt &Offset, bool AllowNonInbounds, bool AllowInvariantGroup=false, function_ref< bool(Value &Value, APInt &Offset)> ExternalAnalysis=nullptr, bool LookThroughIntToPtr=false) const

Accumulate the constant offset this value has compared to a base pointer.

Value *

stripAndAccumulateConstantOffsets (const DataLayout &DL, APInt &Offset, bool AllowNonInbounds, bool AllowInvariantGroup=false, function_ref< bool(Value &Value, APInt &Offset)> ExternalAnalysis=nullptr, bool LookThroughIntToPtr=false)

const Value *

stripAndAccumulateInBoundsConstantOffsets (const DataLayout &DL, APInt &Offset) const

This is a wrapper around stripAndAccumulateConstantOffsets with the in-bounds requirement set to false.

Value *

stripAndAccumulateInBoundsConstantOffsets (const DataLayout &DL, APInt &Offset)

LLVM_ABI const Value *

stripInBoundsOffsets (function_ref< void(const Value *)> Func=[](const Value *) {}) const

Strip off pointer casts and inbounds GEPs.

Value *

stripInBoundsOffsets (function_ref< void(const Value *)> Func=[](const Value *) {})

LLVM_ABI std::optional< int64_t >

getPointerOffsetFrom (const Value *Other, const DataLayout &DL) const

If this ptr is provably equal to Other plus a constant offset, return that offset in bytes.

LLVM_ABI 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.

LLVM_ABI uint64_t

getPointerDereferenceableBytes (const DataLayout &DL, bool &CanBeNull, bool &CanBeFreed) const

Returns the number of bytes known to be dereferenceable for the pointer value.

LLVM_ABI Align

getPointerAlignment (const DataLayout &DL) const

Returns an alignment of the pointer value.

LLVM_ABI const Value *

DoPHITranslation (const BasicBlock *CurBB, const BasicBlock *PredBB) const

Translate PHI node to its predecessor from the given basic block.

Value *

DoPHITranslation (const BasicBlock *CurBB, const BasicBlock *PredBB)

void

mutateType (Type *Ty)

Mutate the type of this Value to be of the specified type.

template

void

sortUseList (Compare Cmp)

Sort the use-list.

LLVM_ABI void

reverseUseList ()

Reverse the use-list.

LLVM_ABI void

print (raw_ostream &O, bool IsForDebug=false) const

Implement operator<< on Value.

LLVM_ABI void

print (raw_ostream &O, ModuleSlotTracker &MST, bool IsForDebug=false) const

LLVM_ABI void

printAsOperand (raw_ostream &O, bool PrintType=true, const Module *M=nullptr) const

Print the name of this Value out to the specified raw_ostream.

LLVM_ABI void

printAsOperand (raw_ostream &O, bool PrintType, ModuleSlotTracker &MST) const

Additional Inherited Members

Public Types inherited from llvm::Value

enum

ValueTy

Concrete subclass of this. More...

using

use_iterator = use_iterator_impl<Use>

using

const_use_iterator = use_iterator_impl<const Use>

using

user_iterator = user_iterator_impl<User>

using

const_user_iterator = user_iterator_impl<const User>

Static Public Attributes inherited from llvm::Value

static constexpr unsigned

MaxAlignmentExponent = 32

The maximum alignment for instructions.

static constexpr uint64_t

MaximumAlignment = 1ULL << MaxAlignmentExponent

Protected Types inherited from llvm::Value

enum

: unsigned { NumUserOperandsBits = 27 }

The number of operands in the subclass. More...

Protected Member Functions inherited from llvm::Value

LLVM_ABI

Value (Type *Ty, unsigned scid)

LLVM_ABI

~Value ()

Value's destructor should be virtual by design, but that would require that Value and all of its subclasses have a vtable that effectively duplicates the information in the value ID.

LLVM_ABI void

getAllMetadata (SmallVectorImpl< std::pair< unsigned, MDNode * > > &MDs) const

Appends all metadata attached to this value to MDs, sorting by KindID.

bool

hasMetadata () const

Return true if this value has any metadata attached to it.

LLVM_ABI bool

eraseMetadata (unsigned KindID)

Erase all metadata attachments with the given kind.

LLVM_ABI void

eraseMetadataIf (function_ref< bool(unsigned, MDNode *)> Pred)

Erase all metadata attachments matching the given predicate.

LLVM_ABI void

clearMetadata ()

Erase all metadata attached to this Value.

LLVM_ABI MDNode *

getMetadataImpl (unsigned KindID) const

Get metadata for the given kind, if any.

unsigned short

getSubclassDataFromValue () const

void

setValueSubclassData (unsigned short D)

MDNode *

getMetadata (unsigned KindID) const

Get the current metadata attachments for the given kind, if any.

LLVM_ABI MDNode *

getMetadata (StringRef Kind) const

LLVM_ABI void

getMetadata (unsigned KindID, SmallVectorImpl< MDNode * > &MDs) const

Appends all attachments with the given ID to MDs in insertion order.

LLVM_ABI 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

LLVM_ABI void

setMetadata (unsigned KindID, MDNode *Node)

Set a particular kind of metadata attachment.

LLVM_ABI void

setMetadata (StringRef Kind, MDNode *Node)

LLVM_ABI void

addMetadata (unsigned KindID, MDNode &MD)

Add a metadata attachment.

LLVM_ABI void

addMetadata (StringRef Kind, MDNode &MD)

Protected Attributes inherited from llvm::Value

unsigned char

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

Metadata wrapper in the Value hierarchy.

A member of the Value hierarchy to represent a reference to metadata. This allows, e.g., intrinsics to have metadata as operands.

Notably, this is the only thing in either hierarchy that is allowed to reference LocalAsMetadata.

Definition at line 183 of file Metadata.h.