LLVM 17.0.0git
llvm::GlobalValue Class Reference

#include "llvm/IR/GlobalValue.h"

Inheritance diagram for llvm::GlobalValue:
[legend]
Collaboration diagram for llvm::GlobalValue:
[legend]

## Public Types

}
An enumeration for the kinds of linkage for global values. More...

enum  VisibilityTypes { DefaultVisibility = 0 , HiddenVisibility , ProtectedVisibility }
An enumeration for the kinds of visibility of global values. More...

enum  DLLStorageClassTypes { DefaultStorageClass = 0 , DLLImportStorageClass = 1 , DLLExportStorageClass = 2 }
Storage classes of global values for PE targets. More...

NotThreadLocal = 0 , GeneralDynamicTLSModel , LocalDynamicTLSModel , InitialExecTLSModel ,
LocalExecTLSModel
}

enum class  UnnamedAddr { None , Local , Global }

using GUID = uint64_t
Declare a type to represent a global unique identifier for a global value.

Public Types inherited from llvm::User
using op_iterator = Use *

using const_op_iterator = const Use *

using op_range = iterator_range< op_iterator >

using const_op_range = iterator_range< const_op_iterator >

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 >

## Public Member Functions

GlobalValue (const GlobalValue &)=delete

Returns true if this value's address is not significant in this module.

bool hasComdat () const

const ComdatgetComdat () const

ComdatgetComdat ()

VisibilityTypes getVisibility () const

bool hasDefaultVisibility () const

bool hasHiddenVisibility () const

bool hasProtectedVisibility () const

void setVisibility (VisibilityTypes V)

If the value is "Thread Local", its value isn't shared by the threads.

DLLStorageClassTypes getDLLStorageClass () const

bool hasDLLImportStorageClass () const

bool hasDLLExportStorageClass () const

void setDLLStorageClass (DLLStorageClassTypes C)

bool hasSection () const

StringRef getSection () const

PointerTypegetType () const
Global values are always pointers.

TypegetValueType () const

bool isImplicitDSOLocal () const

void setDSOLocal (bool Local)

bool isDSOLocal () const

bool hasPartition () const

StringRef getPartition () const

void setPartition (StringRef Part)

bool isTagged () const

bool isDefinitionExact () const
Return true if the currently visible definition of this global (if any) is exactly the definition we will see at runtime.

bool hasExactDefinition () const
Return true if this global has an exact defintion.

bool isInterposable () const
Return true if this global's definition can be substituted with an arbitrary definition at link time or load time.

bool canBenefitFromLocalAlias () const

std::string getGlobalIdentifier () const
Return the modified name for this global value suitable to be used as the key for a global lookup (e.g.

GUID getGUID () const
Return a 64-bit global unique ID constructed from global value name (i.e.

bool isDeclaration () const
Return true if the primary definition of this global value is outside of the current translation unit.

Returns true if this global's definition will be the one chosen by the linker.

const GlobalObjectgetAliaseeObject () const

GlobalObjectgetAliaseeObject ()

bool isAbsoluteSymbolRef () const
Returns whether this is a reference to an absolute symbol.

std::optional< ConstantRangegetAbsoluteSymbolRange () const
If this is an absolute symbol reference, returns the range of the symbol, otherwise returns std::nullopt.

void removeFromParent ()
This method unlinks 'this' from the containing module, but does not delete it.

void eraseFromParent ()
This method unlinks 'this' from the containing module and deletes it.

ModulegetParent ()
Get the module that this global value is contained inside of...

const ModulegetParent () const

bool canBeOmittedFromSymbolTable () const
True if GV can be left out of the object symbol table.

Materialization

Materialization is used to construct functions only as they're needed.

This is useful to reduce memory usage in LLVM or parsing work done by the BitcodeReader to load the Module.

bool isMaterializable () const
If this function's Module is being lazily streamed in functions from disk or some other source, this method can be used to check to see if the function has been read in yet or not.

Error materialize ()
Make sure this GlobalValue is fully read.

Public Member Functions inherited from llvm::Constant
void operator= (const Constant &)=delete

Constant (const Constant &)=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.

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

ConstantgetAggregateElement (unsigned Elt) const
For aggregates (struct/array/vector) return the constant that corresponds to the specified element if possible, or null if not.

ConstantgetAggregateElement (Constant *Elt) const

ConstantgetSplatValue (bool AllowUndefs=false) const
If all elements of the vector constant have the same value, return that value.

const APIntgetUniqueInteger () 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.

void destroyConstant ()
Called if some element of this constant is no longer valid.

void handleOperandChange (Value *, Value *)
This method is a special form of User::replaceUsesOfWith (which does not work on constants) that does work on constants.

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.

const ConstantstripPointerCasts () const

ConstantstripPointerCasts ()

bool isManifestConstant () const
Return true if a constant is ConstantData or a ConstantAggregate or ConstantExpr that contain only ConstantData.

Public Member Functions inherited from llvm::User
User (const User &)=delete

void operator delete (void *Usr)
Free memory allocated for User and Use objects.

void operator delete (void *Usr, unsigned)
Placement delete - required by std, called if the ctor throws.

void operator delete (void *Usr, unsigned, unsigned)
Placement delete - required by std, called if the ctor throws.

const UsegetOperandList () const

UsegetOperandList ()

ValuegetOperand (unsigned i) const

void setOperand (unsigned i, Value *Val)

const UsegetOperandUse (unsigned i) const

UsegetOperandUse (unsigned i)

unsigned getNumOperands () const

ArrayRef< const uint8_t > getDescriptor () const
Returns the descriptor co-allocated with this User instance.

MutableArrayRef< uint8_t > getDescriptor ()
Returns the descriptor co-allocated with this User instance.

void setGlobalVariableNumOperands (unsigned NumOps)
Set the number of operands on a GlobalVariable.

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

const_value_op_iterator value_op_begin () const

const_value_op_iterator value_op_end () const

iterator_range< const_value_op_iteratoroperand_values () const

void dropAllReferences ()
Drop all references to operands.

bool replaceUsesOfWith (Value *From, Value *To)
Replace uses of one Value with another.

Public Member Functions inherited from llvm::Value
Value (const Value &)=delete

Valueoperator= (const Value &)=delete

void deleteValue ()
Delete a pointer to a generic Value.

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

TypegetType () const
All values are typed, get the type of this value.

LLVMContextgetContext () const
All values hold a context through their type.

bool hasName () const

ValueNamegetValueName () const

void setValueName (ValueName *VN)

StringRef getName () const
Return a constant reference to the value's name.

void setName (const Twine &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 new Value.

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

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.

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

iterator_range< const_use_iteratormaterialized_uses () const

iterator_range< use_iteratoruses ()

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

Useruser_back ()

const Useruser_back () const

iterator_range< user_iteratormaterialized_users ()

iterator_range< const_user_iteratormaterialized_users () const

iterator_range< user_iteratorusers ()

iterator_range< const_user_iteratorusers () const

bool hasOneUse () const
Return true if there is exactly one use of this value.

bool hasNUses (unsigned N) const
Return true if this Value has exactly N uses.

bool hasNUsesOrMore (unsigned N) 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.

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

const UsegetSingleUndroppableUse () const

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

bool hasNUndroppableUses (unsigned N) const
Return true if there this value.

bool hasNUndroppableUsesOrMore (unsigned N) const
Return true if this value has N uses or more.

void dropDroppableUses (llvm::function_ref< bool(const Use *)> ShouldDrop=[](const Use *) { return true;})
Remove every uses that can safely be removed.

void dropDroppableUsesIn (User &Usr)
Remove every use of this value in User that can safely be removed.

bool isUsedInBasicBlock (const BasicBlock *BB) const
Check if this value is used in the specified basic block.

unsigned getNumUses () const
This method computes the number of uses of this Value.

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.

Return true if there is metadata referencing this value.

bool isSwiftError () const
Return true if this value is a swifterror value.

const ValuestripPointerCasts () const
Strip off pointer casts, all-zero GEPs and address space casts.

ValuestripPointerCasts ()

const ValuestripPointerCastsAndAliases () const
Strip off pointer casts, all-zero GEPs, address space casts, and aliases.

ValuestripPointerCastsAndAliases ()

const ValuestripPointerCastsSameRepresentation () const
Strip off pointer casts, all-zero GEPs and address space casts but ensures the representation of the result stays the same.

ValuestripPointerCastsSameRepresentation ()

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

ValuestripPointerCastsForAliasAnalysis ()

const ValuestripInBoundsConstantOffsets () const
Strip off pointer casts and all-constant inbounds GEPs.

ValuestripInBoundsConstantOffsets ()

const ValuestripAndAccumulateConstantOffsets (const DataLayout &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.

ValuestripAndAccumulateConstantOffsets (const DataLayout &DL, APInt &Offset, bool AllowNonInbounds, bool AllowInvariantGroup=false)

const ValuestripAndAccumulateInBoundsConstantOffsets (const DataLayout &DL, APInt &Offset) const
This is a wrapper around stripAndAccumulateConstantOffsets with the in-bounds requirement set to false.

ValuestripAndAccumulateInBoundsConstantOffsets (const DataLayout &DL, APInt &Offset)

const ValuestripInBoundsOffsets (function_ref< void(const Value *)> Func=[](const Value *) {}) const
Strip off pointer casts and inbounds GEPs.

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

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 (const DataLayout &DL, bool &CanBeNull, bool &CanBeFreed) const
Returns the number of bytes known to be dereferenceable for the pointer value.

Align getPointerAlignment (const DataLayout &DL) const
Returns an alignment of the pointer value.

const ValueDoPHITranslation (const BasicBlock *CurBB, const BasicBlock *PredBB) const
Translate PHI node to its predecessor from the given basic block.

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

void mutateType (Type *Ty)
Mutate the type of this Value 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<< on Value.

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

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.

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

## Static Public Member Functions

Whether the definition of this global may be replaced by something non-equivalent at link time.

Whether the definition of this global may be discarded if it is not used in its compilation unit.

Whether the definition of this global may be replaced at link time.

static StringRef dropLLVMManglingEscape (StringRef Name)
If the given string begins with the GlobalValue name mangling escape character '\1', drop it.

Return the modified name for a global value suitable to be used as the key for a global lookup (e.g.

static GUID getGUID (StringRef GlobalName)
Return a 64-bit global unique ID constructed from global value name (i.e.

static bool classof (const Value *V)

Static Public Member Functions inherited from llvm::Constant
static bool classof (const Value *V)

static ConstantgetNullValue (Type *Ty)
Constructor to create a '0' constant of arbitrary type.

static ConstantgetAllOnesValue (Type *Ty)

static ConstantgetIntegerValue (Type *Ty, const APInt &V)
Return the value for an integer or pointer constant, or a vector thereof, with the given scalar value.

static ConstantreplaceUndefsWith (Constant *C, Constant *Replacement)
Try to replace undefined constant C or undefined elements in C with Replacement.

static ConstantmergeUndefsWith (Constant *C, Constant *Other)
Merges undefs of a Constant with another Constant, along with the undefs already present.

Static Public Member Functions inherited from llvm::User
static bool classof (const Value *V)

Static Public Member Functions inherited from llvm::Value
static void dropDroppableUse (Use &U)
Remove the droppable use U.

## Protected Member Functions

unsigned getGlobalValueSubClassData () const

void setGlobalValueSubClassData (unsigned V)

void setParent (Module *parent)

~GlobalValue ()

void copyAttributesFrom (const GlobalValue *Src)
Copy all additional attributes (those not needed to create a GlobalValue) from the GlobalValue Src to this one.

Protected Member Functions inherited from llvm::Constant
Constant (Type *ty, ValueTy vty, Use *Ops, unsigned NumOps)

~Constant ()=default

Protected Member Functions inherited from llvm::User
void * operator new (size_t Size)
Allocate a User with an operand pointer co-allocated.

void * operator new (size_t Size, unsigned Us)
Allocate a User with the operands co-allocated.

void * operator new (size_t Size, unsigned Us, unsigned DescBytes)
Allocate a User with the operands co-allocated.

User (Type *ty, unsigned vty, Use *, unsigned NumOps)

void allocHungoffUses (unsigned N, bool IsPhi=false)
Allocate the array of Uses, followed by a pointer (with bottom bit set) to the User.

void growHungoffUses (unsigned N, bool IsPhi=false)
Grow the number of hung off uses.

~User ()=default

template<int Idx>
UseOp ()

template<int Idx>
const UseOp () const

Protected Member Functions inherited from llvm::Value
Value (Type *Ty, unsigned scid)

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

void getAllMetadata (SmallVectorImpl< std::pair< unsigned, MDNode * > > &MDs) const
Appends all metadata attached to this value to MDs, sorting by KindID.

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

Erase all metadata attachments with the given kind.

Erase all metadata attached to this Value.

unsigned short getSubclassDataFromValue () const

void setValueSubclassData (unsigned short D)

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

void getMetadata (unsigned KindID, SmallVectorImpl< MDNode * > &MDs) const
Appends all attachments with the given ID to MDs in insertion order.

void getMetadata (StringRef Kind, SmallVectorImpl< MDNode * > &MDs) const

Return true if this value has the given type of metadata attached.

void setMetadata (unsigned KindID, MDNode *Node)
Set a particular kind of metadata attachment.

void setMetadata (StringRef Kind, MDNode *Node)

## Protected Attributes

TypeValueType

unsigned Visibility: 2

unsigned DllStorageClass: 2

unsigned HasLLVMReservedName: 1
True if the function's name starts with "llvm.".

unsigned IsDSOLocal: 1
If true then there is a definition within the same linkage unit and that definition cannot be runtime preempted.

unsigned HasPartition: 1
True if this symbol has a partition name assigned (see https://lld.llvm.org/Partitions.html).

True if this symbol has sanitizer metadata available.

Intrinsic::ID IntID = (Intrinsic::ID)0U
The intrinsic ID for this subclass (which must be a Function).

ModuleParent = nullptr

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 HasHungOffUses: 1

unsigned HasDescriptor: 1

## Static Protected Attributes

static const unsigned GlobalValueSubClassDataBits = 15

## Friends

class Constant

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

Static Protected Member Functions inherited from llvm::User
template<int Idx, typename U >
static UseOpFrom (const U *that)

## Detailed Description

Definition at line 44 of file GlobalValue.h.

## ◆ GUID

 using llvm::GlobalValue::GUID = uint64_t

Declare a type to represent a global unique identifier for a global value.

This is a 64 bits hash that is used by PGO and ThinLTO to have a compact unique way to identify a symbol.

Definition at line 583 of file GlobalValue.h.

## ◆ DLLStorageClassTypes

Storage classes of global values for PE targets.

Enumerator
DefaultStorageClass
DLLImportStorageClass

Function to be imported from DLL.

DLLExportStorageClass

Function to be accessible from DLL.

Definition at line 69 of file GlobalValue.h.

An enumeration for the kinds of linkage for global values.

Enumerator

Externally visible function.

Available for inspection, not emission.

Keep one copy of function when linking (inline)

Same, but only replaced by something equivalent.

Keep one copy of named function when linking (weak)

Same, but only replaced by something equivalent.

Special purpose, only applies to global arrays.

Rename collisions when linking (static functions).

Like Internal, but omit from symbol table.

Tentative definitions.

Definition at line 47 of file GlobalValue.h.

Enumerator
GeneralDynamicTLSModel
LocalDynamicTLSModel
InitialExecTLSModel
LocalExecTLSModel

Definition at line 191 of file GlobalValue.h.

strong
Enumerator
None
Local
Global

Definition at line 205 of file GlobalValue.h.

## ◆ VisibilityTypes

An enumeration for the kinds of visibility of global values.

Enumerator
DefaultVisibility

The GV is visible.

HiddenVisibility

The GV is hidden.

ProtectedVisibility

The GV is protected.

Definition at line 62 of file GlobalValue.h.

## ◆ GlobalValue() [1/2]

 llvm::GlobalValue::GlobalValue ( Type * Ty, ValueTy VTy, Use * Ops, unsigned NumOps, LinkageTypes Linkage, const Twine & Name, unsigned AddressSpace )
inlineprotected

Definition at line 76 of file GlobalValue.h.

## ◆ ~GlobalValue()

 llvm::GlobalValue::~GlobalValue ( )
inlineprotected

Definition at line 186 of file GlobalValue.h.

## ◆ GlobalValue() [2/2]

 llvm::GlobalValue::GlobalValue ( const GlobalValue & )
delete

## ◆ canBenefitFromLocalAlias()

 bool GlobalValue::canBenefitFromLocalAlias ( ) const

Definition at line 109 of file Globals.cpp.

Referenced by llvm::AsmPrinter::getSymbolPreferLocal().

## ◆ canBeOmittedFromSymbolTable()

 bool GlobalValue::canBeOmittedFromSymbolTable ( ) const

True if GV can be left out of the object symbol table.

This is the case for linkonce_odr values whose address is not significant. While legal, it is not normally profitable to omit them from the .o symbol table. Using this analysis makes sense when the information can be passed down to the linker or we are in LTO.

Definition at line 394 of file Globals.cpp.

Referenced by llvm::buildModuleSummaryIndex(), canBeHidden(), and llvm::thinLTOFinalizeInModule().

## ◆ classof()

 static bool llvm::GlobalValue::classof ( const Value * V )
inlinestatic

Definition at line 656 of file GlobalValue.h.

## ◆ copyAttributesFrom()

 void GlobalValue::copyAttributesFrom ( const GlobalValue * Src )
protected

Copy all additional attributes (those not needed to create a GlobalValue) from the GlobalValue Src to this one.

copyAttributesFrom - copy all additional attributes (those not needed to create a GlobalValue) from the GlobalValue Src to this one.

Definition at line 63 of file Globals.cpp.

## ◆ dropLLVMManglingEscape()

 static StringRef llvm::GlobalValue::dropLLVMManglingEscape ( StringRef Name )
inlinestatic

If the given string begins with the GlobalValue name mangling escape character '\1', drop it.

This function applies a specific mangling that is used in PGO profiles, among other things. If you're trying to get a symbol name for an arbitrary GlobalValue, this is not the function you're looking for; see Mangler.h.

Definition at line 562 of file GlobalValue.h.

References Name.

## ◆ eraseFromParent()

 void GlobalValue::eraseFromParent ( )

This method unlinks 'this' from the containing module and deletes it.

Definition at line 88 of file Globals.cpp.

References llvm::Value::getValueID(), and llvm_unreachable.

## ◆ getAbsoluteSymbolRange()

 std::optional< ConstantRange > GlobalValue::getAbsoluteSymbolRange ( ) const

If this is an absolute symbol reference, returns the range of the symbol, otherwise returns std::nullopt.

Definition at line 382 of file Globals.cpp.

inline

## ◆ getAliaseeObject() [1/2]

 GlobalObject * llvm::GlobalValue::getAliaseeObject ( )
inline

Definition at line 632 of file GlobalValue.h.

References getAliaseeObject().

## ◆ getAliaseeObject() [2/2]

 const GlobalObject * GlobalValue::getAliaseeObject ( ) const

## ◆ getComdat() [1/2]

 Comdat * llvm::GlobalValue::getComdat ( )
inline

Definition at line 239 of file GlobalValue.h.

References getComdat().

## ◆ getComdat() [2/2]

 const Comdat * GlobalValue::getComdat ( ) const

Definition at line 185 of file Globals.cpp.

References getAliaseeObject(), and getComdat().

## ◆ getDLLStorageClass()

 DLLStorageClassTypes llvm::GlobalValue::getDLLStorageClass ( ) const
inline

Definition at line 271 of file GlobalValue.h.

References DllStorageClass.

## ◆ getGlobalIdentifier() [1/2]

 std::string GlobalValue::getGlobalIdentifier ( ) const

Return the modified name for this global value suitable to be used as the key for a global lookup (e.g.

profile or ThinLTO).

Definition at line 170 of file Globals.cpp.

References getGlobalIdentifier(), getLinkage(), llvm::Value::getName(), and getParent().

Referenced by getGlobalIdentifier(), getGUID(), llvm::getPGOFuncName(), and llvm::thinLTOInternalizeModule().

## ◆ getGlobalIdentifier() [2/2]

static

Return the modified name for a global value suitable to be used as the key for a global lookup (e.g.

profile or ThinLTO). The value's original name is Name and has linkage of type Linkage. The value is defined in module FileName.

Definition at line 146 of file Globals.cpp.

## ◆ getGlobalValueSubClassData()

 unsigned llvm::GlobalValue::getGlobalValueSubClassData ( ) const
inlineprotected

Definition at line 171 of file GlobalValue.h.

## ◆ getGUID() [1/2]

 GUID llvm::GlobalValue::getGUID ( ) const
inline

Return a 64-bit global unique ID constructed from global value name (i.e.

returned by getGlobalIdentifier()).

Definition at line 591 of file GlobalValue.h.

References getGlobalIdentifier(), and getGUID().

## ◆ getGUID() [2/2]

 static GUID llvm::GlobalValue::getGUID ( StringRef GlobalName )
inlinestatic

Return a 64-bit global unique ID constructed from global value name (i.e.

returned by getGlobalIdentifier()).

Definition at line 587 of file GlobalValue.h.

References llvm::MD5Hash().

inline

inlinestatic

Definition at line 364 of file GlobalValue.h.

inlinestatic

Definition at line 229 of file GlobalValue.h.

References A, B, Global, Local, and None.

## ◆ getParent() [2/2]

 const Module * llvm::GlobalValue::getParent ( ) const
inline

Definition at line 653 of file GlobalValue.h.

References Parent.

## ◆ getPartition()

 StringRef GlobalValue::getPartition ( ) const

Definition at line 206 of file Globals.cpp.

Definition at line 229 of file Globals.cpp.

Referenced by isTagged().

## ◆ getSection()

 StringRef GlobalValue::getSection ( ) const

Definition at line 175 of file Globals.cpp.

References getAliaseeObject().

Referenced by callsShareTOCBase(), and hasSection().

inline

## ◆ getType()

 PointerType * llvm::GlobalValue::getType ( ) const
inline

inline

Definition at line 224 of file GlobalValue.h.

## ◆ getVisibility()

 VisibilityTypes llvm::GlobalValue::getVisibility ( ) const
inline

Definition at line 244 of file GlobalValue.h.

References Visibility.

inlinestatic

Definition at line 367 of file GlobalValue.h.

Referenced by thinLTOResolvePrevailingGUID().

inline

Definition at line 520 of file GlobalValue.h.

inline

Returns true if this value's address is not significant in this module.

This attribute is intended to be used only by the code generator and LTO to allow the linker to decide whether the global needs to be in the symbol table. It should probably not be used in optimizations, as the value may have uses outside the module; use hasGlobalUnnamedAddr() instead.

Definition at line 220 of file GlobalValue.h.

Referenced by canBeOmittedFromSymbolTable().

inline

Definition at line 507 of file GlobalValue.h.

## ◆ hasComdat()

 bool llvm::GlobalValue::hasComdat ( ) const
inline

Definition at line 237 of file GlobalValue.h.

References getComdat().

inline

## ◆ hasDefaultVisibility()

 bool llvm::GlobalValue::hasDefaultVisibility ( ) const
inline

Definition at line 245 of file GlobalValue.h.

References DefaultVisibility, and Visibility.

Referenced by canBenefitFromLocalAlias(), inferDSOLocal(), and isImplicitDSOLocal().

## ◆ hasDLLExportStorageClass()

 bool llvm::GlobalValue::hasDLLExportStorageClass ( ) const
inline

Definition at line 277 of file GlobalValue.h.

References DLLExportStorageClass, and DllStorageClass.

## ◆ hasDLLImportStorageClass()

 bool llvm::GlobalValue::hasDLLImportStorageClass ( ) const
inline

## ◆ hasExactDefinition()

 bool llvm::GlobalValue::hasExactDefinition ( ) const
inline

Return true if this global has an exact defintion.

Definition at line 490 of file GlobalValue.h.

References isDeclaration(), and isDefinitionExact().

inline

inline

Definition at line 524 of file GlobalValue.h.

inline

Definition at line 211 of file GlobalValue.h.

## ◆ hasHiddenVisibility()

 bool llvm::GlobalValue::hasHiddenVisibility ( ) const
inline

inline

Definition at line 521 of file GlobalValue.h.

inline

Definition at line 511 of file GlobalValue.h.

inline

Definition at line 510 of file GlobalValue.h.

inline

Definition at line 514 of file GlobalValue.h.

Referenced by canBeOmittedFromSymbolTable().

## ◆ hasPartition()

 bool llvm::GlobalValue::hasPartition ( ) const
inline

Definition at line 305 of file GlobalValue.h.

References HasPartition.

Referenced by getPartition(), and setPartition().

inline

## ◆ hasProtectedVisibility()

 bool llvm::GlobalValue::hasProtectedVisibility ( ) const
inline

Definition at line 247 of file GlobalValue.h.

References ProtectedVisibility, and Visibility.

inline

Definition at line 351 of file GlobalValue.h.

## ◆ hasSection()

 bool llvm::GlobalValue::hasSection ( ) const
inline

Definition at line 286 of file GlobalValue.h.

References llvm::StringRef::empty(), and getSection().

Referenced by isNonRenamableLocal().

inline

Definition at line 528 of file GlobalValue.h.

inline

Definition at line 518 of file GlobalValue.h.

inline

Definition at line 517 of file GlobalValue.h.

Referenced by llvm::JITSymbolFlags::fromGlobalValue().

inline

Definition at line 519 of file GlobalValue.h.

## ◆ isAbsoluteSymbolRef()

 bool GlobalValue::isAbsoluteSymbolRef ( ) const

Returns whether this is a reference to an absolute symbol.

Definition at line 374 of file Globals.cpp.

inlinestatic

Definition at line 395 of file GlobalValue.h.

inlinestatic

Definition at line 374 of file GlobalValue.h.

inlinestatic

Definition at line 410 of file GlobalValue.h.

## ◆ isDeclaration()

 bool GlobalValue::isDeclaration ( ) const

inline

## ◆ isDefinitionExact()

 bool llvm::GlobalValue::isDefinitionExact ( ) const
inline

Return true if the currently visible definition of this global (if any) is exactly the definition we will see at runtime.

Non-exact linkage types inhibits most non-inlining IPO, since a differently optimized variant of the same function can have different observable or undefined behavior than in the variant currently visible. For instance, we could have started with

void foo(int *v) { int t = 5 / v[0]; (void) t; }

and "refined" it to

void foo(int *v) { }

However, we cannot infer readnone for foo, since that would justify DSE'ing a store to v[0] across a call to foo, which can cause undefined behavior if the linker replaces the actual call destination with the unoptimized foo.

Inlining is okay across non-exact linkage types as long as they're not interposable (see isInterposable), since in such cases the currently visible variant is a correct implementation of the original source function; it just isn't the only correct implementation.

Definition at line 485 of file GlobalValue.h.

Referenced by hasExactDefinition().

inline

Definition at line 543 of file GlobalValue.h.

inlinestatic

Whether the definition of this global may be discarded if it is not used in its compilation unit.

Definition at line 444 of file GlobalValue.h.

Referenced by deleteIfDead(), isGOTEquivalentCandidate(), makeVisible(), and optimizeGlobalsInModule().

## ◆ isDSOLocal()

 bool llvm::GlobalValue::isDSOLocal ( ) const
inline

Definition at line 301 of file GlobalValue.h.

References IsDSOLocal.

inlinestatic

Definition at line 371 of file GlobalValue.h.

inlinestatic

Definition at line 407 of file GlobalValue.h.

## ◆ isImplicitDSOLocal()

 bool llvm::GlobalValue::isImplicitDSOLocal ( ) const
inline

inlinestatic

Definition at line 398 of file GlobalValue.h.

## ◆ isInterposable()

 bool GlobalValue::isInterposable ( ) const

Return true if this global's definition can be substituted with an arbitrary definition at link time or load time.

We cannot do any IPO or inlining across interposable call edges, since the callee can be replaced with something arbitrary.

Definition at line 102 of file Globals.cpp.

inlinestatic

Whether the definition of this global may be replaced by something non-equivalent at link time.

For example, if a function has weak linkage then the code defining it may be replaced by different code.

Definition at line 420 of file GlobalValue.h.

inlinestatic

Definition at line 377 of file GlobalValue.h.

inlinestatic

Definition at line 383 of file GlobalValue.h.

inlinestatic

Definition at line 380 of file GlobalValue.h.

inlinestatic

## ◆ isMaterializable()

 bool GlobalValue::isMaterializable ( ) const

If this function's Module is being lazily streamed in functions from disk or some other source, this method can be used to check to see if the function has been read in yet or not.

Definition at line 42 of file Globals.cpp.

References F.

inlinestatic

Definition at line 401 of file GlobalValue.h.

inline

Returns true if this global's definition will be the one chosen by the linker.

NB! Ideally this should not be used at the IR level at all. If you're interested in optimization constraints implied by the linker's ability to choose an implementation, prefer using hasExactDefinition.

Definition at line 627 of file GlobalValue.h.

## ◆ isTagged()

 bool llvm::GlobalValue::isTagged ( ) const
inline

Definition at line 360 of file GlobalValue.h.

inline

If the value is "Thread Local", its value isn't shared by the threads.

Definition at line 259 of file GlobalValue.h.

inlinestatic

Definition at line 413 of file GlobalValue.h.

inlinestatic

Definition at line 386 of file GlobalValue.h.

inline

Definition at line 547 of file GlobalValue.h.

inlinestatic

Whether the definition of this global may be replaced at link time.

NB: Using this method outside of the code generators is almost always a mistake: when working at the IR level use isInterposable instead as it knows about ODR semantics.

Definition at line 453 of file GlobalValue.h.

inlinestatic

Definition at line 392 of file GlobalValue.h.

inlinestatic

Definition at line 389 of file GlobalValue.h.

## ◆ materialize()

 Error GlobalValue::materialize ( )

Make sure this GlobalValue is fully read.

Definition at line 47 of file Globals.cpp.

References getParent(), and llvm::Module::materialize().

Referenced by llvm::FunctionImporter::importFunctions().

## ◆ removeFromParent()

 void GlobalValue::removeFromParent ( )

This method unlinks 'this' from the containing module, but does not delete it.

Definition at line 76 of file Globals.cpp.

References llvm::Value::getValueID(), and llvm_unreachable.

Definition at line 240 of file Globals.cpp.

Referenced by copyAttributesFrom().

## ◆ setDLLStorageClass()

 void llvm::GlobalValue::setDLLStorageClass ( DLLStorageClassTypes C )
inline

Definition at line 280 of file GlobalValue.h.

## ◆ setDSOLocal()

 void llvm::GlobalValue::setDSOLocal ( bool Local )
inline

Definition at line 299 of file GlobalValue.h.

References IsDSOLocal, and Local.

## ◆ setGlobalValueSubClassData()

 void llvm::GlobalValue::setGlobalValueSubClassData ( unsigned V )
inlineprotected

Definition at line 174 of file GlobalValue.h.

References assert(), and GlobalValueSubClassDataBits.

inline

## ◆ setParent()

 void llvm::GlobalValue::setParent ( Module * parent )
inlineprotected

Definition at line 182 of file GlobalValue.h.

References Parent.

## ◆ setPartition()

 void GlobalValue::setPartition ( StringRef Part )

Definition at line 212 of file Globals.cpp.

Referenced by copyAttributesFrom().

Definition at line 235 of file Globals.cpp.

Referenced by copyAttributesFrom().

 void llvm::GlobalValue::setThreadLocal ( bool Val )
inline

Definition at line 260 of file GlobalValue.h.

inline

Definition at line 263 of file GlobalValue.h.

inline

Definition at line 227 of file GlobalValue.h.

## ◆ setVisibility()

 void llvm::GlobalValue::setVisibility ( VisibilityTypes V )
inline

Definition at line 250 of file GlobalValue.h.

## ◆ Constant

 friend class Constant
friend

Definition at line 125 of file GlobalValue.h.

## ◆ DllStorageClass

 unsigned llvm::GlobalValue::DllStorageClass
protected

Definition at line 97 of file GlobalValue.h.

## ◆ GlobalValueSubClassDataBits

 const unsigned llvm::GlobalValue::GlobalValueSubClassDataBits = 15
staticprotected

Definition at line 90 of file GlobalValue.h.

Referenced by setGlobalValueSubClassData().

## ◆ HasLLVMReservedName

 unsigned llvm::GlobalValue::HasLLVMReservedName
protected

True if the function's name starts with "llvm.".

This corresponds to the value of Function::isIntrinsic(), which may be true even if Function::intrinsicID() returns Intrinsic::not_intrinsic.

Definition at line 105 of file GlobalValue.h.

Referenced by llvm::Function::recalculateIntrinsicID().

## ◆ HasPartition

 unsigned llvm::GlobalValue::HasPartition
protected

True if this symbol has a partition name assigned (see https://lld.llvm.org/Partitions.html).

Definition at line 113 of file GlobalValue.h.

Referenced by hasPartition(), and setPartition().

protected

True if this symbol has sanitizer metadata available.

Should only happen if sanitizers were enabled when building the translation unit which contains this GV.

Definition at line 118 of file GlobalValue.h.

## ◆ IntID

 Intrinsic::ID llvm::GlobalValue::IntID = (Intrinsic::ID)0U
protected

The intrinsic ID for this subclass (which must be a Function).

This member is defined by this class, but not used for anything. Subclasses can use it to store their intrinsic ID, if they have one.

This is stored here to save space in Function on 64-bit hosts.

Definition at line 169 of file GlobalValue.h.

Referenced by llvm::Function::isTargetIntrinsic(), and llvm::Function::recalculateIntrinsicID().

## ◆ IsDSOLocal

 unsigned llvm::GlobalValue::IsDSOLocal
protected

If true then there is a definition within the same linkage unit and that definition cannot be runtime preempted.

Definition at line 109 of file GlobalValue.h.

Referenced by isDSOLocal(), and setDSOLocal().

protected

## ◆ Parent

 Module* llvm::GlobalValue::Parent = nullptr
protected

Definition at line 179 of file GlobalValue.h.

protected

Definition at line 99 of file GlobalValue.h.

protected

Definition at line 96 of file GlobalValue.h.

## ◆ ValueType

 Type* llvm::GlobalValue::ValueType
protected

Definition at line 88 of file GlobalValue.h.

Referenced by getValueType().

## ◆ Visibility

 unsigned llvm::GlobalValue::Visibility
protected

Definition at line 95 of file GlobalValue.h.

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