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
- public Constant(const llvm::Constant &)
- protected Constant(llvm::Type * ty, llvm::Value::ValueTy vty, llvm::Use * Ops, unsigned int NumOps)
- public bool canTrap() const
- public static bool classof(const llvm::Value * V)
- public bool containsConstantExpression() const
- public bool containsUndefElement() const
- public void destroyConstant()
- public llvm::Constant * getAggregateElement(llvm::Constant * Elt) const
- public llvm::Constant * getAggregateElement(unsigned int Elt) const
- public static llvm::Constant * getAllOnesValue(llvm::Type * Ty)
- public static llvm::Constant * getIntegerValue(llvm::Type * Ty, const llvm::APInt & V)
- public static llvm::Constant * getNullValue(llvm::Type * Ty)
- public llvm::Constant * getSplatValue(bool AllowUndefs = false) const
- public const llvm::APInt & getUniqueInteger() const
- public void handleOperandChange(llvm::Value *, llvm::Value *)
- public bool hasExactInverseFP() const
- public bool isAllOnesValue() const
- public bool isConstantUsed() const
- public bool isDLLImportDependent() const
- public bool isElementWiseEqual(llvm::Value * Y) const
- public bool isFiniteNonZeroFP() const
- public bool isMinSignedValue() const
- public bool isNaN() const
- public bool isNegativeZeroValue() const
- public bool isNormalFP() const
- public bool isNotMinSignedValue() const
- public bool isNotOneValue() const
- public bool isNullValue() const
- public bool isOneValue() const
- public bool isThreadDependent() const
- public bool isZeroValue() const
- public bool needsRelocation() const
- public void removeDeadConstantUsers() const
- public static llvm::Constant * replaceUndefsWith(llvm::Constant * C, llvm::Constant * Replacement)
- public const llvm::Constant * stripPointerCasts() const
- public llvm::Constant * stripPointerCasts()
Inherited from User:
- protected Op
- protected Op
- protected OpFrom
- protected allocHungoffUses
- public classof
- public dropAllReferences
- public getDescriptor
- public getDescriptor
- public getNumOperands
- public getOperand
- public getOperandList
- public getOperandList
- public getOperandUse
- public getOperandUse
- protected growHungoffUses
- public op_begin
- public op_begin
- public op_end
- public op_end
- public operand_values
- public operand_values
- public operands
- public operands
- public replaceUsesOfWith
- public setGlobalVariableNumOperands
- public setNumHungOffUseOperands
- public setOperand
- public value_op_begin
- public value_op_begin
- public value_op_end
- public value_op_end
Inherited from Value:
- public DoPHITranslation
- public DoPHITranslation
- public addUse
- public assertModuleIsMaterialized
- public assertModuleIsMaterializedImpl
- public clearSubclassOptionalData
- public deleteValue
- public dump
- public getContext
- public getName
- public getNumUses
- public getPointerAlignment
- public getPointerDereferenceableBytes
- public getRawSubclassOptionalData
- protected getSubclassDataFromValue
- public getType
- public getValueID
- public getValueName
- public hasNUses
- public hasNUsesOrMore
- public hasName
- public hasOneUse
- public hasSameSubclassOptionalData
- public hasValueHandle
- public isSwiftError
- public isUsedByMetadata
- public isUsedInBasicBlock
- public materialized_use_begin
- public materialized_use_begin
- public materialized_use_empty
- public materialized_user_begin
- public materialized_user_begin
- public materialized_users
- public materialized_users
- public materialized_uses
- public materialized_uses
- public mutateType
- public print
- public print
- public printAsOperand
- public printAsOperand
- public replaceAllUsesWith
- public replaceNonMetadataUsesWith
- public replaceUsesOutsideBlock
- public replaceUsesWithIf
- public reverseUseList
- public setName
- public setValueName
- protected setValueSubclassData
- public sortUseList
- public stripAndAccumulateConstantOffsets
- public stripAndAccumulateConstantOffsets
- public stripAndAccumulateInBoundsConstantOffsets
- public stripAndAccumulateInBoundsConstantOffsets
- public stripInBoundsConstantOffsets
- public stripInBoundsConstantOffsets
- public stripInBoundsOffsets
- public stripInBoundsOffsets
- public stripPointerCasts
- public stripPointerCasts
- public stripPointerCastsAndAliases
- public stripPointerCastsAndAliases
- public stripPointerCastsAndInvariantGroups
- public stripPointerCastsAndInvariantGroups
- public stripPointerCastsSameRepresentation
- public stripPointerCastsSameRepresentation
- public takeName
- public use_begin
- public use_begin
- public use_empty
- public use_end
- public use_end
- public user_back
- public user_back
- public user_begin
- public user_begin
- public user_empty
- public user_end
- public user_end
- public users
- public users
- public uses
- public uses
Methods
¶Constant(const llvm::Constant&)
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)
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
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)
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
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
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()
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
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
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)
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)
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)
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
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
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*)
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
¶bool hasExactInverseFP() const
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
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
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
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
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
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
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
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
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
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
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
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
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
bool isOneValue() const
Description
Returns true if the value is one.
Declared at: llvm/include/llvm/IR/Constant.h:54
¶bool isThreadDependent() const
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
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
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
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)
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
const llvm::Constant* stripPointerCasts() const
Declared at: llvm/include/llvm/IR/Constant.h:189
¶llvm::Constant* stripPointerCasts()
llvm::Constant* stripPointerCasts()
Declared at: llvm/include/llvm/IR/Constant.h:193