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

An array constant whose element type is a simple 1/2/4/8-byte integer or float/double, and whose elements are just simple data values (i.e. More...

Public Member Functions

ConstantDataArray (const ConstantDataArray &)=delete

ArrayType *

getType () const

Specialize the getType() method to always return an ArrayType, which reduces the amount of casting needed in parts of the compiler.

- Public Member Functions inherited from llvm::ConstantDataSequential

ConstantDataSequential (const ConstantDataSequential &)=delete

uint64_t

getElementAsInteger (unsigned i) const

If this is a sequential container of integers (of any size), return the specified element in the low bits of a uint64_t.

APInt

getElementAsAPInt (unsigned i) const

If this is a sequential container of integers (of any size), return the specified element as an APInt.

APFloat

getElementAsAPFloat (unsigned i) const

If this is a sequential container of floating point type, return the specified element as an APFloat.

float

getElementAsFloat (unsigned i) const

If this is an sequential container of floats, return the specified element as a float.

double

getElementAsDouble (unsigned i) const

If this is an sequential container of doubles, return the specified element as a double.

Constant *

getElementAsConstant (unsigned i) const

Return a Constant for a specified index's element.

Type *

getElementType () const

Return the element type of the array/vector.

unsigned

getNumElements () const

Return the number of elements in the array or vector.

uint64_t

getElementByteSize () const

Return the size (in bytes) of each element in the array/vector.

bool

isString (unsigned CharSize=8) const

This method returns true if this is an array of CharSize integers.

bool

isCString () const

This method returns true if the array "isString", ends with a null byte, and does not contains any other null bytes.

StringRef

getAsString () const

If this array is isString(), then this method returns the array as a StringRef.

StringRef

getAsCString () const

If this array is [isCString()](classllvm%5F1%5F1ConstantDataSequential.html#aecff3ad6cfa0e4abfd4fc9484d973e7d "This method returns true if the array "isString", ends with a null byte, and does not contains any ot..."), then this method returns the array (without the trailing null byte) as a StringRef.

StringRef

getRawDataValues () const

Return the raw, underlying, bytes of this data.

- Public Member Functions inherited from llvm::ConstantData

void

operator delete (void *Ptr)

ConstantData (const ConstantData &)=delete

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

bool

isThreadDependent () const

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

Constant *

getAggregateElement (unsigned Elt) const

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

Constant *

getAggregateElement (Constant *Elt) const

Constant *

getSplatValue (bool AllowPoison=false) const

If all elements of the vector constant have the same value, return that value.

const APInt &

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

ConstantRange

toConstantRange () const

Convert constant to an approximate constant range.

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.

void

removeDeadConstantUsers () const

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 Constant *

stripPointerCasts () const

Constant *

stripPointerCasts ()

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, HungOffOperandsAllocMarker)

Placement delete - required by std, called if the ctor throws.

void

operator delete (void *Usr, IntrusiveOperandsAllocMarker)

Placement delete - required by std, called if the ctor throws.

void

operator delete (void *Usr, IntrusiveOperandsAndDescriptorAllocMarker)

Placement delete - required by std, called if the ctor throws.

const Use *

getOperandList () const

Use *

getOperandList ()

Value *

getOperand (unsigned i) const

void

setOperand (unsigned i, Value *Val)

const Use &

getOperandUse (unsigned i) const

Use &

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

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

operand_values ()

const_value_op_iterator

value_op_begin () const

const_value_op_iterator

value_op_end () const

iterator_range< const_value_op_iterator >

operand_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

Value &

operator= (const Value &)=delete

void

deleteValue ()

Delete a pointer to a generic Value.

void

dump () const

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

Type *

getType () const

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

LLVMContext &

getContext () const

All values hold a context through their type.

bool

hasName () const

ValueName *

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

void

replaceNonMetadataUsesWith (Value *V)

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

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.

Use *

getSingleUndroppableUse ()

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

const Use *

getSingleUndroppableUse () const

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

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](classllvm%5F1%5F1User.html) 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.

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.

bool

isSwiftError () const

Return true if this value is a swifterror value.

const Value *

stripPointerCasts () const

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

Value *

stripPointerCasts ()

const Value *

stripPointerCastsAndAliases () const

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

Value *

stripPointerCastsAndAliases ()

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

const Value *

stripPointerCastsForAliasAnalysis () const

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

Value *

stripPointerCastsForAliasAnalysis ()

const Value *

stripInBoundsConstantOffsets () const

Strip off pointer casts and all-constant inbounds GEPs.

Value *

stripInBoundsConstantOffsets ()

const Value *

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

Value *

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

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)

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 *) {})

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.

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

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

template

static Constant *

get (LLVMContext &Context, ArrayRef< ElementTy > Elts)

get() constructor - Return a constant with array type with an element count and element type matching the ArrayRef passed in.

template

static Constant *

get (LLVMContext &Context, ArrayTy &Elts)

get() constructor - ArrayTy needs to be compatible with ArrayRef.

static Constant *

getRaw (StringRef Data, uint64_t NumElements, Type *ElementTy)

getRaw() constructor - Return a constant with array type with an element count and element type matching the NumElements and ElementTy parameters passed in.

static Constant *

getFP (Type *ElementType, ArrayRef< uint16_t > Elts)

getFP() constructors - Return a constant of array type with a float element type taken from argument ‘ElementType’, and count taken from argument ‘Elts’.

static Constant *

getFP (Type *ElementType, ArrayRef< uint32_t > Elts)

static Constant *

getFP (Type *ElementType, ArrayRef< uint64_t > Elts)

static Constant *

getString (LLVMContext &Context, StringRef Initializer, bool AddNull=true)

This method constructs a CDS and initializes it with a text string.

static bool

classof (const Value *V)

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

- Static Public Member Functions inherited from llvm::ConstantDataSequential

static bool

isElementTypeCompatible (Type *Ty)

Return true if a ConstantDataSequential can be formed with a vector or array of the specified element type.

static bool

classof (const Value *V)

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

- Static Public Member Functions inherited from llvm::ConstantData

static bool

classof (const Value *V)

Methods to support type inquiry through isa, cast, and dyn_cast.

- Static Public Member Functions inherited from llvm::Constant

static bool

classof (const Value *V)

static Constant *

getNullValue (Type *Ty)

Constructor to create a '0' constant of arbitrary type.

static Constant *

getAllOnesValue (Type *Ty)

static Constant *

getIntegerValue (Type *Ty, const APInt &V)

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

static Constant *

replaceUndefsWith (Constant *C, Constant *Replacement)

Try to replace undefined constant C or undefined elements in C with Replacement.

static Constant *

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

Additional Inherited Members

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

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

ConstantDataSequential (Type *ty, ValueTy VT, const char *Data)

- Protected Member Functions inherited from llvm::ConstantData

ConstantData (Type *Ty, ValueTy VT)

void *

operator new (size_t S)

- Protected Member Functions inherited from llvm::Constant

Constant (Type *ty, ValueTy vty, AllocInfo AllocInfo)

~Constant ()=default

- Protected Member Functions inherited from llvm::User

void *

operator new (size_t Size)=delete

void *

operator new (size_t Size, HungOffOperandsAllocMarker)

Allocate a User with an operand pointer co-allocated.

void *

operator new (size_t Size, IntrusiveOperandsAllocMarker allocTrait)

Allocate a User with the operands co-allocated.

void *

operator new (size_t Size, IntrusiveOperandsAndDescriptorAllocMarker allocTrait)

Allocate a User with the operands co-allocated.

User (Type *ty, unsigned vty, AllocInfo AllocInfo)

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

Use &

Op ()

template

const Use &

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

bool

hasMetadata () const

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

bool

eraseMetadata (unsigned KindID)

Erase all metadata attachments with the given kind.

void

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

Erase all metadata attachments matching the given predicate.

void

clearMetadata ()

Erase all metadata attached to this Value.

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.

MDNode *

getMetadata (StringRef Kind) const

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

bool

hasMetadata (unsigned KindID) const

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

bool

hasMetadata (StringRef Kind) const

void

setMetadata (unsigned KindID, MDNode *Node)

Set a particular kind of metadata attachment.

void

setMetadata (StringRef Kind, MDNode *Node)

void

addMetadata (unsigned KindID, MDNode &MD)

Add a metadata attachment.

void

addMetadata (StringRef Kind, MDNode &MD)

- Static Protected Member Functions inherited from llvm::ConstantDataSequential

static Constant *

getImpl (StringRef Bytes, Type *Ty)

This is the underlying implementation of all of the ConstantDataSequential::get methods.

- Static Protected Member Functions inherited from llvm::User

template<int Idx, typename U >

static Use &

OpFrom (const U *that)

- 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

An array constant whose element type is a simple 1/2/4/8-byte integer or float/double, and whose elements are just simple data values (i.e.

ConstantInt/ConstantFP). This Constant node has no operands because it stores all of the elements of the constant as densely packed data, instead of as Value*'s.

Definition at line 696 of file Constants.h.