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

In order to facilitate speculative execution, many instructions do not invoke immediate undefined behavior when provided with illegal operands, and return a poison value instead. More...

Public Member Functions

PoisonValue (const PoisonValue &)=delete

LLVM_ABI PoisonValue *

getSequentialElement () const

If this poison has array or vector type, return a poison with the right element type.

LLVM_ABI PoisonValue *

getStructElement (unsigned Elt) const

If this poison has struct type, return a poison with the right element type for the specified element.

LLVM_ABI PoisonValue *

getElementValue (Constant *C) const

Return an poison of the right value for the specified GEP index if we can, otherwise return null (e.g.

LLVM_ABI PoisonValue *

getElementValue (unsigned Idx) const

Return an poison of the right value for the specified GEP index.

Public Member Functions inherited from llvm::UndefValue

UndefValue (const UndefValue &)=delete

LLVM_ABI UndefValue *

getSequentialElement () const

If this Undef has array or vector type, return a undef with the right element type.

LLVM_ABI UndefValue *

getStructElement (unsigned Elt) const

If this undef has struct type, return a undef with the right element type for the specified element.

LLVM_ABI UndefValue *

getElementValue (Constant *C) const

Return an undef of the right value for the specified GEP index if we can, otherwise return null (e.g.

LLVM_ABI UndefValue *

getElementValue (unsigned Idx) const

Return an undef of the right value for the specified GEP index.

LLVM_ABI unsigned

getNumElements () const

Return the number of elements in the array, vector, or struct.

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

LLVM_ABI bool

isNullValue () const

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

LLVM_ABI bool

isOneValue () const

Returns true if the value is one.

LLVM_ABI bool

isNotOneValue () const

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

LLVM_ABI bool

isAllOnesValue () const

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

LLVM_ABI bool

isNegativeZeroValue () const

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

LLVM_ABI bool

isZeroValue () const

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

LLVM_ABI bool

isNotMinSignedValue () const

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

LLVM_ABI bool

isMinSignedValue () const

Return true if the value is the smallest signed value.

LLVM_ABI bool

isMaxSignedValue () const

Return true if the value is the largest signed value.

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

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

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

LLVM_ABI bool

isNaN () const

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

LLVM_ABI bool

isElementWiseEqual (Value *Y) const

Return true if this constant and a constant 'Y' are element-wise equal.

LLVM_ABI bool

containsUndefOrPoisonElement () const

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

LLVM_ABI bool

containsPoisonElement () const

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

LLVM_ABI bool

containsUndefElement () const

Return true if this is a vector constant that includes any strictly undef (not poison) elements.

LLVM_ABI bool

containsConstantExpression () const

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

LLVM_ABI bool

isThreadDependent () const

Return true if the value can vary between threads.

LLVM_ABI bool

isDLLImportDependent () const

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

LLVM_ABI bool

isConstantUsed () const

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

LLVM_ABI bool

needsRelocation () const

This method classifies the entry according to whether or not it may generate a relocation entry (either static or dynamic).

LLVM_ABI bool

needsDynamicRelocation () const

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

LLVM_ABI Constant *

getAggregateElement (Constant *Elt) const

LLVM_ABI Constant *

getSplatValue (bool AllowPoison=false) const

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

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

LLVM_ABI ConstantRange

toConstantRange () const

Convert constant to an approximate constant range.

LLVM_ABI void

destroyConstant ()

Called if some element of this constant is no longer valid.

LLVM_ABI void

handleOperandChange (Value *, Value *)

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

LLVM_ABI void

removeDeadConstantUsers () const

If there are any dead constant users dangling off of this constant, remove them.

LLVM_ABI bool

hasOneLiveUse () const

Return true if the constant has exactly one live use.

LLVM_ABI bool

hasZeroLiveUses () const

Return true if the constant has no live uses.

const Constant *

stripPointerCasts () const

Constant *

stripPointerCasts ()

LLVM_ABI 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

LLVM_ABI 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

LLVM_ABI ArrayRef< const uint8_t >

getDescriptor () const

Returns the descriptor co-allocated with this User instance.

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

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

LLVM_ABI 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

LLVM_ABI void

deleteValue ()

Delete a pointer to a generic Value.

LLVM_ABI void

dump () const

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

Type *

getType () const

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

LLVM_ABI LLVMContext &

getContext () const

All values hold a context through their type.

bool

hasName () const

LLVM_ABI ValueName *

getValueName () const

LLVM_ABI void

setValueName (ValueName *VN)

LLVM_ABI StringRef

getName () const

Return a constant reference to the value's name.

LLVM_ABI void

setName (const Twine &Name)

Change the name of the value.

LLVM_ABI void

takeName (Value *V)

Transfer the name from V to this value.

LLVM_ABI std::string

getNameOrAsOperand () const

LLVM_ABI void

replaceAllUsesWith (Value *V)

Change all uses of this to point to a new Value.

LLVM_ABI void

replaceNonMetadataUsesWith (Value *V)

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

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

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

LLVM_ABI void

assertModuleIsMaterializedImpl () const

void

assertModuleIsMaterialized () const

bool

hasUseList () const

Check if this Value has a use-list.

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.

LLVM_ABI bool

hasNUses (unsigned N) const

Return true if this Value has exactly N uses.

LLVM_ABI bool

hasNUsesOrMore (unsigned N) const

Return true if this value has N uses or more.

LLVM_ABI bool

hasOneUser () const

Return true if there is exactly one user of this value.

LLVM_ABI Use *

getSingleUndroppableUse ()

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

const Use *

getSingleUndroppableUse () const

LLVM_ABI 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

LLVM_ABI bool

hasNUndroppableUses (unsigned N) const

Return true if there this value.

LLVM_ABI bool

hasNUndroppableUsesOrMore (unsigned N) const

Return true if this value has N uses or more.

LLVM_ABI void

dropDroppableUses (llvm::function_ref< bool(const Use *)> ShouldDrop=[](const Use *) { return true;})

Remove every uses that can safely be removed.

LLVM_ABI void

dropDroppableUsesIn (User &Usr)

Remove every use of this value in [User](classllvm%5F1%5F1User.html) that can safely be removed.

LLVM_ABI bool

isUsedInBasicBlock (const BasicBlock *BB) const

Check if this value is used in the specified basic block.

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

LLVM_ABI bool

isSwiftError () const

Return true if this value is a swifterror value.

LLVM_ABI const Value *

stripPointerCasts () const

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

Value *

stripPointerCasts ()

LLVM_ABI const Value *

stripPointerCastsAndAliases () const

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

Value *

stripPointerCastsAndAliases ()

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

LLVM_ABI const Value *

stripPointerCastsForAliasAnalysis () const

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

Value *

stripPointerCastsForAliasAnalysis ()

LLVM_ABI const Value *

stripInBoundsConstantOffsets () const

Strip off pointer casts and all-constant inbounds GEPs.

Value *

stripInBoundsConstantOffsets ()

LLVM_ABI const Value *

stripAndAccumulateConstantOffsets (const DataLayout &DL, APInt &Offset, bool AllowNonInbounds, bool AllowInvariantGroup=false, function_ref< bool(Value &Value, APInt &Offset)> ExternalAnalysis=nullptr, bool LookThroughIntToPtr=false) 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, bool LookThroughIntToPtr=false)

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)

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

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

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

LLVM_ABI uint64_t

getPointerDereferenceableBytes (const DataLayout &DL, bool &CanBeNull, bool &CanBeFreed) const

Returns the number of bytes known to be dereferenceable for the pointer value.

LLVM_ABI Align

getPointerAlignment (const DataLayout &DL) const

Returns an alignment of the pointer value.

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

LLVM_ABI void

reverseUseList ()

Reverse the use-list.

LLVM_ABI void

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

Implement operator<< on Value.

LLVM_ABI void

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

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

LLVM_ABI void

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

Static Public Member Functions

static LLVM_ABI PoisonValue *

get (Type *T)

Static factory methods - Return an 'poison' object of the specified 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::UndefValue

static LLVM_ABI UndefValue *

get (Type *T)

Static factory methods - Return an 'undef' object of the specified 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 LLVM_ABI Constant *

getNullValue (Type *Ty)

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

static LLVM_ABI Constant *

getAllOnesValue (Type *Ty)

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

replaceUndefsWith (Constant *C, Constant *Replacement)

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

static LLVM_ABI 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 LLVM_ABI 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::UndefValue

UndefValue (Type *T, ValueTy vty)

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

LLVM_ABI void *

operator new (size_t Size, HungOffOperandsAllocMarker)

Allocate a User with an operand pointer co-allocated.

LLVM_ABI void *

operator new (size_t Size, IntrusiveOperandsAllocMarker allocTrait)

Allocate a User with the operands co-allocated.

LLVM_ABI void *

operator new (size_t Size, IntrusiveOperandsAndDescriptorAllocMarker allocTrait)

Allocate a User with the operands co-allocated.

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

LLVM_ABI void

allocHungoffUses (unsigned N, bool IsPhi=false)

Allocate the array of Uses, followed by a pointer (with bottom bit set) to the User.

LLVM_ABI 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

LLVM_ABI

Value (Type *Ty, unsigned scid)

LLVM_ABI

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

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

LLVM_ABI bool

eraseMetadata (unsigned KindID)

Erase all metadata attachments with the given kind.

LLVM_ABI void

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

Erase all metadata attachments matching the given predicate.

LLVM_ABI void

clearMetadata ()

Erase all metadata attached to this Value.

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

LLVM_ABI MDNode *

getMetadata (StringRef Kind) const

LLVM_ABI void

getMetadata (unsigned KindID, SmallVectorImpl< MDNode * > &MDs) const

Appends all attachments with the given ID to MDs in insertion order.

LLVM_ABI 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

LLVM_ABI void

setMetadata (unsigned KindID, MDNode *Node)

Set a particular kind of metadata attachment.

LLVM_ABI void

setMetadata (StringRef Kind, MDNode *Node)

LLVM_ABI void

addMetadata (unsigned KindID, MDNode &MD)

Add a metadata attachment.

LLVM_ABI void

addMetadata (StringRef Kind, MDNode &MD)

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

In order to facilitate speculative execution, many instructions do not invoke immediate undefined behavior when provided with illegal operands, and return a poison value instead.

see LangRef.html#poisonvalues for details.

Definition at line 1478 of file Constants.h.