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 HasHungOffUses
protected HasDescriptor
public static MaxAlignmentExponent = 29
public static MaximumAlignment = 1U << MaxAlignmentExponent

Method Overview

Inherited from User:

Inherited from Value:

Methods

Constant(const llvm::Constant&)

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

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

bool canTrap() const

Description

Return true if evaluation of this constant could trap. This is true for things like constant expressions that could divide by zero.

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

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:155

Parameters

const llvm::Value* V

bool containsConstantExpression() const

Description

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

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

bool containsUndefElement() const

Description

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

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

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:152

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

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

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:133

Parameters

unsigned int Elt

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

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

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:181

Parameters

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

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

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

Parameters

llvm::Type* Ty

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:139

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:143

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:170

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:88

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:62

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:120

bool isDLLImportDependent() const

Description

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

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

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:98

Parameters

llvm::Value* Y

bool isFiniteNonZeroFP() const

Description

Return true if this is a finite and non-zero floating-point scalar constant or a vector constant with all finite and non-zero elements.

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

bool isMinSignedValue() const

Description

Return true if the value is the smallest signed value.

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

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:92

bool isNegativeZeroValue() const

Description

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

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

bool isNormalFP() const

Description

Return true if this is a normal (as opposed to denormal) floating-point scalar constant or a vector constant with all normal elements.

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

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:73

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:58

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:51

bool isOneValue() const

Description

Returns true if the value is one.

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

bool isThreadDependent() const

Description

Return true if the value can vary between threads.

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

bool isZeroValue() const

Description

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

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

bool needsRelocation() const

Description

This method classifies the entry according to whether or not it may generate a relocation entry. 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:127

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:187

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:200

Parameters

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

const llvm::Constant* stripPointerCasts() const

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

llvm::Constant* stripPointerCasts()

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