class Constant

Declaration

class Constant : public User { /* full declaration omitted */ };

Description

This is an important base class in LLVM. It provides the common facilities of all constant values in an LLVM program. A constant is a value that is immutable at runtime. Functions are constants because their address is immutable. Same with global variables. All constants share the capabilities provided in this class. All constants can have a null value. They can have an operand list. Constants can be simple (integer and floating point values), complex (arrays and structures), or expression based (computations yielding a constant value composed of only certain operators and other constant values). Note that Constants are immutable (once created they never change) and are fully shared by structural equivalence. This means that two structurally equivalent constants will always have the same address. Constants are created on demand as needed and never deleted: thus clients don't have to worry about the lifetime of the objects. LLVM Constant Representation

Declared at: llvm/include/llvm/IR/Constant.h:41

Inherits from: User

Member Variables

Inherited from Value:

protected SubclassOptionalData
protected NumUserOperands
protected IsUsedByMD
protected HasName
protected HasMetadata
protected HasHungOffUses
protected HasDescriptor
public static MaxAlignmentExponent = 32
public static MaximumAlignment = 1ULL << MaxAlignmentExponent

Method Overview

Inherited from User:

Inherited from Value:

Methods

Constant(const llvm::Constant&)

Declared at: llvm/include/llvm/IR/Constant.h:50

Parameters

const llvm::Constant&

Constant(llvm::Type* ty,
         llvm::Value::ValueTy vty,
         llvm::Use* Ops,
         unsigned int NumOps)

Declared at: llvm/include/llvm/IR/Constant.h:43

Parameters

llvm::Type* ty
llvm::Value::ValueTy vty
llvm::Use* Ops
unsigned int NumOps

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

Description

/ Methods for support type inquiry through isa, cast, and dyn_cast:

Declared at: llvm/include/llvm/IR/Constant.h:163

Parameters

const llvm::Value* V

bool containsConstantExpression() const

Description

Return true if this is a fixed width vector constant that includes any constant expressions.

Declared at: llvm/include/llvm/IR/Constant.h:116

bool containsPoisonElement() const

Description

Return true if this is a vector constant that includes any poison elements.

Declared at: llvm/include/llvm/IR/Constant.h:112

bool containsUndefOrPoisonElement() const

Description

Return true if this is a vector constant that includes any undef or poison elements. Since it is impossible to inspect a scalable vector element- wise at compile time, this function returns true only if the entire vector is undef or poison.

Declared at: llvm/include/llvm/IR/Constant.h:108

void destroyConstant()

Description

Called if some element of this constant is no longer valid. At this point only other constants may be on the use_list for this constant. Any constants on our Use list must also be destroy'd. The implementation must be sure to remove the constant from the list of available cached constants. Implementations should implement destroyConstantImpl to remove constants from any pools/maps they are contained it.

Declared at: llvm/include/llvm/IR/Constant.h:160

llvm::Constant* getAggregateElement(
    llvm::Constant* Elt) const

Declared at: llvm/include/llvm/IR/Constant.h:142

Parameters

llvm::Constant* Elt

llvm::Constant* getAggregateElement(
    unsigned int Elt) const

Description

For aggregates (struct/array/vector) return the constant that corresponds to the specified element if possible, or null if not. This can return null if the element index is a ConstantExpr, if 'this' is a constant expr or if the constant does not fit into an uint64_t.

Declared at: llvm/include/llvm/IR/Constant.h:141

Parameters

unsigned int Elt

static llvm::Constant* getAllOnesValue(
    llvm::Type* Ty)

Declared at: llvm/include/llvm/IR/Constant.h:185

Parameters

llvm::Type* Ty

Returns

the value for an integer or vector of integer constant of the given type that has all its bits set to true. Get the all ones value

static llvm::Constant* getIntegerValue(
    llvm::Type* Ty,
    const llvm::APInt& V)

Description

Return the value for an integer or pointer constant, or a vector thereof, with the given scalar value.

Declared at: llvm/include/llvm/IR/Constant.h:189

Parameters

llvm::Type* Ty
const llvm::APInt& V

static llvm::Constant* getNullValue(
    llvm::Type* Ty)

Declared at: llvm/include/llvm/IR/Constant.h:180

Parameters

llvm::Type* Ty

llvm::Constant::PossibleRelocationsTy
getRelocationInfo() const

Description

Determine what potential relocations may be needed by this constant.

Declared at: llvm/include/llvm/IR/Constant.h:248

llvm::Constant* getSplatValue(
    bool AllowUndefs = false) const

Description

If all elements of the vector constant have the same value, return that value. Otherwise, return nullptr. Ignore undefined elements by setting AllowUndefs to true.

Declared at: llvm/include/llvm/IR/Constant.h:147

Parameters

bool AllowUndefs = false

const llvm::APInt& getUniqueInteger() const

Description

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.

Declared at: llvm/include/llvm/IR/Constant.h:151

void handleOperandChange(llvm::Value*,
                         llvm::Value*)

Description

This method is a special form of User::replaceUsesOfWith (which does not work on constants) that does work on constants. Basically this method goes through the trouble of building a new constant that is equivalent to the current one, with all uses of From replaced with uses of To. After this construction is completed, all of the users of 'this' are replaced to use the new constant, and then 'this' is deleted. In general, you should not call this method, instead, use Value::replaceAllUsesWith, which automatically dispatches to this method as needed.

Declared at: llvm/include/llvm/IR/Constant.h:178

Parameters

llvm::Value*
llvm::Value*

bool hasExactInverseFP() const

Description

Return true if this scalar has an exact multiplicative inverse or this vector has an exact multiplicative inverse for each element in the vector.

Declared at: llvm/include/llvm/IR/Constant.h:92

bool hasNLiveUses(unsigned int N) const

Declared at: llvm/include/llvm/IR/Constant.h:250

Parameters

unsigned int N

bool hasOneLiveUse() const

Description

Return true if the constant has exactly one live use. This returns the same result as calling Value::hasOneUse after Constant::removeDeadConstantUsers, but doesn't remove dead constants.

Declared at: llvm/include/llvm/IR/Constant.h:201

bool hasZeroLiveUses() const

Description

Return true if the constant has no live uses. This returns the same result as calling Value::use_empty after Constant::removeDeadConstantUsers, but doesn't remove dead constants.

Declared at: llvm/include/llvm/IR/Constant.h:207

bool isAllOnesValue() const

Description

Return true if this is the value that would be returned by getAllOnesValue.

Declared at: llvm/include/llvm/IR/Constant.h:64

bool isConstantUsed() const

Description

Return true if the constant has users other than constant expressions and other dangling things.

Declared at: llvm/include/llvm/IR/Constant.h:126

bool isDLLImportDependent() const

Description

Return true if the value is dependent on a dllimport variable.

Declared at: llvm/include/llvm/IR/Constant.h:122

bool isElementWiseEqual(llvm::Value* Y) const

Description

Return true if this constant and a constant 'Y' are element-wise equal. This is identical to just comparing the pointers, with the exception that for vectors, if only one of the constants has an `undef` element in some lane, the constants still match.

Declared at: llvm/include/llvm/IR/Constant.h:102

Parameters

llvm::Value* Y

bool isFiniteNonZeroFP() const

Description

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.

Declared at: llvm/include/llvm/IR/Constant.h:83

bool isManifestConstant() const

Description

Return true if a constant is ConstantData or a ConstantAggregate or ConstantExpr that contain only ConstantData.

Declared at: llvm/include/llvm/IR/Constant.h:230

bool isMinSignedValue() const

Description

Return true if the value is the smallest signed value.

Declared at: llvm/include/llvm/IR/Constant.h:78

bool isNaN() const

Description

Return true if this is a floating-point NaN constant or a vector floating-point constant with all NaN elements.

Declared at: llvm/include/llvm/IR/Constant.h:96

bool isNegativeZeroValue() const

Description

Return true if the value is what would be returned by getZeroValueForNegation.

Declared at: llvm/include/llvm/IR/Constant.h:68

bool isNormalFP() const

Description

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. See APFloat::isNormal.

Declared at: llvm/include/llvm/IR/Constant.h:88

bool isNotMinSignedValue() const

Description

Return true if the value is not the smallest signed value, or, for vectors, does not contain smallest signed value elements.

Declared at: llvm/include/llvm/IR/Constant.h:75

bool isNotOneValue() const

Description

Return true if the value is not the one value, or, for vectors, does not contain one value elements.

Declared at: llvm/include/llvm/IR/Constant.h:60

bool isNullValue() const

Description

Return true if this is the value that would be returned by getNullValue.

Declared at: llvm/include/llvm/IR/Constant.h:53

bool isOneValue() const

Description

Returns true if the value is one.

Declared at: llvm/include/llvm/IR/Constant.h:56

bool isThreadDependent() const

Description

Return true if the value can vary between threads.

Declared at: llvm/include/llvm/IR/Constant.h:119

bool isZeroValue() const

Description

Return true if the value is negative zero or null value.

Declared at: llvm/include/llvm/IR/Constant.h:71

static llvm::Constant* mergeUndefsWith(
    llvm::Constant* C,
    llvm::Constant* Other)

Description

Merges undefs of a Constant with another Constant, along with the undefs already present. Other doesn't have to be the same type as C, but both must either be scalars or vectors with the same element count. If no changes are made, the constant C is returned.

Declared at: llvm/include/llvm/IR/Constant.h:226

Parameters

llvm::Constant* C
llvm::Constant* Other

bool needsDynamicRelocation() const

Declared at: llvm/include/llvm/IR/Constant.h:135

bool needsRelocation() const

Description

This method classifies the entry according to whether or not it may generate a relocation entry (either static or dynamic). This must be conservative, so if it might codegen to a relocatable entry, it should say so. FIXME: This really should not be in IR.

Declared at: llvm/include/llvm/IR/Constant.h:134

void removeDeadConstantUsers() const

Description

If there are any dead constant users dangling off of this constant, remove them. This method is useful for clients that want to check to see if a global is unused, but don't want to deal with potentially dead constants hanging off of the globals.

Declared at: llvm/include/llvm/IR/Constant.h:195

static llvm::Constant* replaceUndefsWith(
    llvm::Constant* C,
    llvm::Constant* Replacement)

Description

Try to replace undefined constant C or undefined elements in C with Replacement. If no changes are made, the constant C is returned.

Declared at: llvm/include/llvm/IR/Constant.h:220

Parameters

llvm::Constant* C
llvm::Constant* Replacement

llvm::Constant* stripPointerCasts()

Declared at: llvm/include/llvm/IR/Constant.h:213

const llvm::Constant* stripPointerCasts() const

Declared at: llvm/include/llvm/IR/Constant.h:209

~Constant()

Declared at: llvm/include/llvm/IR/Constant.h:46