An instruction for storing to memory.More...
#include "llvm/IR/Instructions.h"
Public Member Functions | |
StoreInst (Value *Val,Value *Ptr,InsertPosition InsertBefore) | |
StoreInst (Value *Val,Value *Ptr,boolisVolatile,InsertPosition InsertBefore) | |
StoreInst (Value *Val,Value *Ptr,boolisVolatile,AlignAlign,InsertPosition InsertBefore=nullptr) | |
StoreInst (Value *Val,Value *Ptr,boolisVolatile,AlignAlign,AtomicOrdering Order,SyncScope::ID SSID=SyncScope::System,InsertPosition InsertBefore=nullptr) | |
void * | operator new (size_t S) |
void | operator delete (void *Ptr) |
bool | isVolatile ()const |
Return true if this is a store to a volatile memory location. | |
void | setVolatile (bool V) |
Specify whether this is a volatile store or not. | |
DECLARE_TRANSPARENT_OPERAND_ACCESSORS (Value) | |
Transparently provide more efficient getOperand methods. | |
Align | getAlign ()const |
void | setAlignment (AlignAlign) |
AtomicOrdering | getOrdering ()const |
Returns the ordering constraint of this store instruction. | |
void | setOrdering (AtomicOrdering Ordering) |
Sets the ordering constraint of this store instruction. | |
SyncScope::ID | getSyncScopeID ()const |
Returns the synchronization scope ID of this store instruction. | |
void | setSyncScopeID (SyncScope::ID SSID) |
Sets the synchronization scope ID of this store instruction. | |
void | setAtomic (AtomicOrdering Ordering,SyncScope::ID SSID=SyncScope::System) |
Sets the ordering constraint and the synchronization scope ID of this store instruction. | |
bool | isSimple ()const |
bool | isUnordered ()const |
Value * | getValueOperand () |
constValue * | getValueOperand ()const |
Value * | getPointerOperand () |
constValue * | getPointerOperand ()const |
Type * | getPointerOperandType ()const |
unsigned | getPointerAddressSpace ()const |
Returns the address space of the pointer operand. | |
![]() | |
iterator_range<simple_ilist<DbgRecord >::iterator > | cloneDebugInfoFrom (constInstruction *From, std::optional<simple_ilist<DbgRecord >::iterator > FromHere=std::nullopt,bool InsertAtHead=false) |
Clone any debug-info attached toFrom onto this instruction. | |
iterator_range<simple_ilist<DbgRecord >::iterator > | getDbgRecordRange ()const |
Return a range over the DbgRecords attached to this instruction. | |
std::optional<simple_ilist<DbgRecord >::iterator > | getDbgReinsertionPosition () |
Return an iterator to the position of the "Next"DbgRecord after this instruction, or std::nullopt. | |
bool | hasDbgRecords ()const |
Returns true if any DbgRecords are attached to this instruction. | |
void | adoptDbgRecords (BasicBlock *BB,InstListType::iterator It,bool InsertAtHead) |
Transfer any DbgRecords on the positionIt onto this instruction, by simply adopting the sequence of DbgRecords (which is efficient) if possible, by merging two sequences otherwise. | |
void | dropDbgRecords () |
Erase any DbgRecords attached to this instruction. | |
void | dropOneDbgRecord (DbgRecord *I) |
Erase a singleDbgRecordI that is attached to this instruction. | |
void | handleMarkerRemoval () |
Handle the debug-info implications of this instruction being removed. | |
Instruction (constInstruction &)=delete | |
Instruction & | operator= (constInstruction &)=delete |
Instruction * | user_back () |
Specialize the methods defined inValue, as we know that an instruction can only be used by other instructions. | |
constInstruction * | user_back ()const |
constModule * | getModule ()const |
Return the module owning the function this instruction belongs to or nullptr it the function does not have a module. | |
Module * | getModule () |
constFunction * | getFunction ()const |
Return the function this instruction belongs to. | |
Function * | getFunction () |
constDataLayout & | getDataLayout ()const |
Get the data layout of the module this instruction belongs to. | |
void | removeFromParent () |
This method unlinks 'this' from the containing basic block, but does not delete it. | |
InstListType::iterator | eraseFromParent () |
This method unlinks 'this' from the containing basic block and deletes it. | |
void | insertBefore (Instruction *InsertPos) |
Insert an unlinked instruction into a basic block immediately before the specified instruction. | |
void | insertBefore (InstListType::iterator InsertPos) |
Insert an unlinked instruction into a basic block immediately before the specified position. | |
void | insertAfter (Instruction *InsertPos) |
Insert an unlinked instruction into a basic block immediately after the specified instruction. | |
void | insertAfter (InstListType::iterator InsertPos) |
Insert an unlinked instruction into a basic block immediately after the specified position. | |
InstListType::iterator | insertInto (BasicBlock *ParentBB,InstListType::iterator It) |
Inserts an unlinked instruction intoParentBB at positionIt and returns the iterator of the inserted instruction. | |
void | insertBefore (BasicBlock &BB,InstListType::iterator InsertPos) |
void | moveBefore (Instruction *MovePos) |
Unlink this instruction from its current basic block and insert it into the basic block that MovePos lives in, right before MovePos. | |
void | moveBefore (InstListType::iterator InsertPos) |
Unlink this instruction from its current basic block and insert it into the basic block that MovePos lives in, right before MovePos. | |
void | moveBeforePreserving (InstListType::iterator MovePos) |
Perform amoveBefore operation, while signalling that the caller intends to preserve the original ordering of instructions. | |
void | moveBeforePreserving (BasicBlock &BB,InstListType::iteratorI) |
Perform amoveBefore operation, while signalling that the caller intends to preserve the original ordering of instructions. | |
void | moveBeforePreserving (Instruction *MovePos) |
Perform amoveBefore operation, while signalling that the caller intends to preserve the original ordering of instructions. | |
void | moveBefore (BasicBlock &BB,InstListType::iteratorI) |
Unlink this instruction and insert into BB before I. | |
void | moveAfter (Instruction *MovePos) |
Unlink this instruction from its current basic block and insert it into the basic block that MovePos lives in, right after MovePos. | |
void | moveAfter (InstListType::iterator MovePos) |
Unlink this instruction from its current basic block and insert it into the basic block that MovePos lives in, right after MovePos. | |
void | moveAfterPreserving (Instruction *MovePos) |
SeemoveBeforePreserving . | |
bool | comesBefore (constInstruction *Other)const |
Given an instruction Other in the same basic block as this instruction, return true if this instruction comes before Other. | |
std::optional<InstListType::iterator > | getInsertionPointAfterDef () |
Get the first insertion point at which the result of this instruction is defined. | |
unsigned | getOpcode ()const |
Returns a member of one of the enums like Instruction::Add. | |
constchar * | getOpcodeName ()const |
bool | isTerminator ()const |
bool | isUnaryOp ()const |
bool | isBinaryOp ()const |
bool | isIntDivRem ()const |
bool | isFPDivRem ()const |
bool | isShift ()const |
bool | isCast ()const |
bool | isFuncletPad ()const |
bool | isSpecialTerminator ()const |
bool | isOnlyUserOfAnyOperand () |
It checks if this instruction is the only user of at least one of its operands. | |
bool | isLogicalShift ()const |
Return true if this is a logical shift left or a logical shift right. | |
bool | isArithmeticShift ()const |
Return true if this is an arithmetic shift right. | |
bool | isBitwiseLogicOp ()const |
Return true if this is and/or/xor. | |
bool | hasMetadata ()const |
Return true if this instruction has any metadata attached to it. | |
bool | hasNonDebugLocLoopMetadata ()const |
bool | hasMetadataOtherThanDebugLoc ()const |
Return true if this instruction has metadata attached to it other than a debug location. | |
bool | hasMetadata (unsigned KindID)const |
Return true if this instruction has the given type of metadata attached. | |
bool | hasMetadata (StringRef Kind)const |
Return true if this instruction has the given type of metadata attached. | |
MDNode * | getMetadata (unsigned KindID)const |
Get the metadata of given kind attached to thisInstruction. | |
MDNode * | getMetadata (StringRef Kind)const |
Get the metadata of given kind attached to thisInstruction. | |
void | getAllMetadata (SmallVectorImpl< std::pair<unsigned,MDNode * > > &MDs)const |
Get all metadata attached to thisInstruction. | |
void | getAllMetadataOtherThanDebugLoc (SmallVectorImpl< std::pair<unsigned,MDNode * > > &MDs)const |
This does the same thing as getAllMetadata, except that it filters out the debug location. | |
void | setMetadata (unsigned KindID,MDNode *Node) |
Set the metadata of the specified kind to the specified node. | |
void | setMetadata (StringRef Kind,MDNode *Node) |
void | copyMetadata (constInstruction &SrcInst,ArrayRef<unsigned > WL=ArrayRef<unsigned >()) |
Copy metadata fromSrcInst to this instruction. | |
void | eraseMetadataIf (function_ref<bool(unsigned,MDNode *)> Pred) |
Erase all metadata that matches the predicate. | |
void | swapProfMetadata () |
If the instruction has "branch_weights" MD_prof metadata and theMDNode has three operands (including name string), swap the order of the metadata. | |
void | addAnnotationMetadata (StringRef Annotation) |
Adds an !annotation metadata node withAnnotation to this instruction. | |
void | addAnnotationMetadata (SmallVector<StringRef >Annotations) |
Adds an !annotation metadata node with an array ofAnnotations as a tuple to this instruction. | |
AAMDNodes | getAAMetadata ()const |
Returns theAA metadata for this instruction. | |
void | setAAMetadata (constAAMDNodes &N) |
Sets theAA metadata on this instruction from theAAMDNodes structure. | |
void | setNoSanitizeMetadata () |
Sets the nosanitize metadata on this instruction. | |
bool | extractProfTotalWeight (uint64_t &TotalVal)const |
Retrieve total raw weight values of a branch. | |
void | setDebugLoc (DebugLoc Loc) |
Set the debug location information for this instruction. | |
constDebugLoc & | getDebugLoc ()const |
Return the debug location for this node as aDebugLoc. | |
constDebugLoc & | getStableDebugLoc ()const |
Fetch the debug location for this node, unless this is a debug intrinsic, in which case fetch the debug location of the next non-debug node. | |
void | setHasNoUnsignedWrap (bool b=true) |
Set or clear the nuw flag on this instruction, which must be an operator which supports this flag. | |
void | setHasNoSignedWrap (bool b=true) |
Set or clear the nsw flag on this instruction, which must be an operator which supports this flag. | |
void | setIsExact (bool b=true) |
Set or clear the exact flag on this instruction, which must be an operator which supports this flag. | |
void | setNonNeg (bool b=true) |
Set or clear the nneg flag on this instruction, which must be a zext instruction. | |
bool | hasNoUnsignedWrap ()constLLVM_READONLY |
Determine whether the no unsigned wrap flag is set. | |
bool | hasNoSignedWrap ()constLLVM_READONLY |
Determine whether the no signed wrap flag is set. | |
bool | hasNonNeg ()constLLVM_READONLY |
Determine whether the the nneg flag is set. | |
bool | hasPoisonGeneratingFlags ()constLLVM_READONLY |
Return true if this operator has flags which may cause this instruction to evaluate to poison despite having non-poison inputs. | |
void | dropPoisonGeneratingFlags () |
Drops flags that may cause this instruction to evaluate to poison despite having non-poison inputs. | |
bool | hasPoisonGeneratingMetadata ()constLLVM_READONLY |
Return true if this instruction has poison-generating metadata. | |
void | dropPoisonGeneratingMetadata () |
Drops metadata that may generate poison. | |
bool | hasPoisonGeneratingReturnAttributes ()constLLVM_READONLY |
Return true if this instruction has poison-generating attribute. | |
void | dropPoisonGeneratingReturnAttributes () |
Drops return attributes that may generate poison. | |
bool | hasPoisonGeneratingAnnotations ()const |
Return true if this instruction has poison-generating flags, return attributes or metadata. | |
void | dropPoisonGeneratingAnnotations () |
Drops flags, return attributes and metadata that may generate poison. | |
void | dropUBImplyingAttrsAndUnknownMetadata (ArrayRef<unsigned > KnownIDs={}) |
This function drops non-debug unknown metadata (through dropUnknownNonDebugMetadata). | |
void | dropUBImplyingAttrsAndMetadata () |
Drop any attributes or metadata that can cause immediate undefined behavior. | |
bool | isExact ()constLLVM_READONLY |
Determine whether the exact flag is set. | |
void | setFast (boolB) |
Set or clear all fast-math-flags on this instruction, which must be an operator which supports this flag. | |
void | setHasAllowReassoc (boolB) |
Set or clear the reassociation flag on this instruction, which must be an operator which supports this flag. | |
void | setHasNoNaNs (boolB) |
Set or clear the no-nans flag on this instruction, which must be an operator which supports this flag. | |
void | setHasNoInfs (boolB) |
Set or clear the no-infs flag on this instruction, which must be an operator which supports this flag. | |
void | setHasNoSignedZeros (boolB) |
Set or clear the no-signed-zeros flag on this instruction, which must be an operator which supports this flag. | |
void | setHasAllowReciprocal (boolB) |
Set or clear the allow-reciprocal flag on this instruction, which must be an operator which supports this flag. | |
void | setHasAllowContract (boolB) |
Set or clear the allow-contract flag on this instruction, which must be an operator which supports this flag. | |
void | setHasApproxFunc (boolB) |
Set or clear the approximate-math-functions flag on this instruction, which must be an operator which supports this flag. | |
void | setFastMathFlags (FastMathFlags FMF) |
Convenience function for setting multiple fast-math flags on this instruction, which must be an operator which supports these flags. | |
void | copyFastMathFlags (FastMathFlags FMF) |
Convenience function for transferring all fast-math flag values to this instruction, which must be an operator which supports these flags. | |
bool | isFast ()constLLVM_READONLY |
Determine whether all fast-math-flags are set. | |
bool | hasAllowReassoc ()constLLVM_READONLY |
Determine whether the allow-reassociation flag is set. | |
bool | hasNoNaNs ()constLLVM_READONLY |
Determine whether the no-NaNs flag is set. | |
bool | hasNoInfs ()constLLVM_READONLY |
Determine whether the no-infs flag is set. | |
bool | hasNoSignedZeros ()constLLVM_READONLY |
Determine whether the no-signed-zeros flag is set. | |
bool | hasAllowReciprocal ()constLLVM_READONLY |
Determine whether the allow-reciprocal flag is set. | |
bool | hasAllowContract ()constLLVM_READONLY |
Determine whether the allow-contract flag is set. | |
bool | hasApproxFunc ()constLLVM_READONLY |
Determine whether the approximate-math-functions flag is set. | |
FastMathFlags | getFastMathFlags ()constLLVM_READONLY |
Convenience function for getting all the fast-math flags, which must be an operator which supports these flags. | |
void | copyFastMathFlags (constInstruction *I) |
Copy I's fast-math flags. | |
void | copyIRFlags (constValue *V,bool IncludeWrapFlags=true) |
Convenience method to copy supported exact, fast-math, and (optionally) wrapping flags from V to this instruction. | |
void | andIRFlags (constValue *V) |
Logical 'and' of any supported wrapping, exact, and fast-math flags of V and this instruction. | |
void | applyMergedLocation (DILocation *LocA,DILocation *LocB) |
Merge 2 debug locations and apply it to theInstruction. | |
void | updateLocationAfterHoist () |
Updates the debug location given that the instruction has been hoisted from a block to a predecessor of that block. | |
void | dropLocation () |
Drop the instruction's debug location. | |
void | mergeDIAssignID (ArrayRef<constInstruction * > SourceInstructions) |
Merge theDIAssignID metadata from this instruction and those attached to instructions inSourceInstructions . | |
bool | isAssociative ()constLLVM_READONLY |
Return true if the instruction is associative: | |
bool | isCommutative ()constLLVM_READONLY |
Return true if the instruction is commutative: | |
bool | isIdempotent ()const |
Return true if the instruction is idempotent: | |
bool | isNilpotent ()const |
Return true if the instruction is nilpotent: | |
bool | mayWriteToMemory ()constLLVM_READONLY |
Return true if this instruction may modify memory. | |
bool | mayReadFromMemory ()constLLVM_READONLY |
Return true if this instruction may read memory. | |
bool | mayReadOrWriteMemory ()const |
Return true if this instruction may read or write memory. | |
bool | isAtomic ()constLLVM_READONLY |
Return true if this instruction has an AtomicOrdering of unordered or higher. | |
bool | hasAtomicLoad ()constLLVM_READONLY |
Return true if this atomic instruction loads from memory. | |
bool | hasAtomicStore ()constLLVM_READONLY |
Return true if this atomic instruction stores to memory. | |
bool | isVolatile ()constLLVM_READONLY |
Return true if this instruction has a volatile memory access. | |
Type * | getAccessType ()constLLVM_READONLY |
Return the type this instruction accesses in memory, if any. | |
bool | mayThrow (bool IncludePhaseOneUnwind=false)constLLVM_READONLY |
Return true if this instruction may throw an exception. | |
bool | isFenceLike ()const |
Return true if this instruction behaves like a memory fence: it can load or store to memory location without being given a memory location. | |
bool | mayHaveSideEffects ()constLLVM_READONLY |
Return true if the instruction may have side effects. | |
bool | isSafeToRemove ()constLLVM_READONLY |
Return true if the instruction can be removed if the result is unused. | |
bool | willReturn ()constLLVM_READONLY |
Return true if the instruction will return (unwinding is considered as a form of returning control flow here). | |
bool | isEHPad ()const |
Return true if the instruction is a variety of EH-block. | |
bool | isLifetimeStartOrEnd ()constLLVM_READONLY |
Return true if the instruction is a llvm.lifetime.start or llvm.lifetime.end marker. | |
bool | isLaunderOrStripInvariantGroup ()constLLVM_READONLY |
Return true if the instruction is a llvm.launder.invariant.group or llvm.strip.invariant.group. | |
bool | isDebugOrPseudoInst ()constLLVM_READONLY |
Return true if the instruction is aDbgInfoIntrinsic orPseudoProbeInst. | |
constInstruction * | getNextNonDebugInstruction (bool SkipPseudoOp=false)const |
Return a pointer to the next non-debug instruction in the same basic block as 'this', or nullptr if no such instruction exists. | |
Instruction * | getNextNonDebugInstruction (bool SkipPseudoOp=false) |
constInstruction * | getPrevNonDebugInstruction (bool SkipPseudoOp=false)const |
Return a pointer to the previous non-debug instruction in the same basic block as 'this', or nullptr if no such instruction exists. | |
Instruction * | getPrevNonDebugInstruction (bool SkipPseudoOp=false) |
Instruction * | clone ()const |
Create a copy of 'this' instruction that is identical in all ways except the following: | |
bool | isIdenticalTo (constInstruction *I)constLLVM_READONLY |
Return true if the specified instruction is exactly identical to the current one. | |
bool | isIdenticalToWhenDefined (constInstruction *I,bool IntersectAttrs=false)constLLVM_READONLY |
This is like isIdenticalTo, except that it ignores the SubclassOptionalData flags, which may specify conditions under which the instruction's result is undefined. | |
bool | isSameOperationAs (constInstruction *I,unsigned flags=0)constLLVM_READONLY |
This function determines if the specified instruction executes the same operation as the current one. | |
bool | hasSameSpecialState (constInstruction *I2,bool IgnoreAlignment=false,bool IntersectAttrs=false)constLLVM_READONLY |
This function determines if the speficied instruction has the same "special" characteristics as the current one. | |
bool | isUsedOutsideOfBlock (constBasicBlock *BB)constLLVM_READONLY |
Return true if there are any uses of this instruction in blocks other than the specified block. | |
unsigned | getNumSuccessors ()constLLVM_READONLY |
Return the number of successors that this instruction has. | |
BasicBlock * | getSuccessor (unsignedIdx)constLLVM_READONLY |
Return the specified successor. This instruction must be a terminator. | |
void | setSuccessor (unsignedIdx,BasicBlock *BB) |
Update the specified successor to point at the provided block. | |
void | replaceSuccessorWith (BasicBlock *OldBB,BasicBlock *NewBB) |
Replace specified successor OldBB to point at the provided block. | |
void | dropUnknownNonDebugMetadata (ArrayRef<unsigned > KnownIDs={}) |
Drop all unknown metadata except for debug locations. | |
![]() | |
User (constUser &)=delete | |
void | operator delete (void *Usr) |
Free memory allocated forUser andUse 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. | |
constUse * | getOperandList ()const |
Use * | getOperandList () |
Value * | getOperand (unsigned i)const |
void | setOperand (unsigned i,Value *Val) |
constUse & | getOperandUse (unsigned i)const |
Use & | getOperandUse (unsigned i) |
unsigned | getNumOperands ()const |
ArrayRef<constuint8_t > | getDescriptor ()const |
Returns the descriptor co-allocated with thisUser instance. | |
MutableArrayRef<uint8_t > | getDescriptor () |
Returns the descriptor co-allocated with thisUser 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 oneValue with another. | |
![]() | |
Value (constValue &)=delete | |
Value & | operator= (constValue &)=delete |
void | deleteValue () |
Delete a pointer to a genericValue. | |
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 (constTwine &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 newValue. | |
void | replaceNonMetadataUsesWith (Value *V) |
Change non-metadata uses of this to point to a newValue. | |
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 givenUse. | |
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 () |
constUser * | 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 (unsignedN)const |
Return true if thisValue has exactly N uses. | |
bool | hasNUsesOrMore (unsignedN)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. | |
constUse * | 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). | |
constUser * | getUniqueUndroppableUser ()const |
bool | hasNUndroppableUses (unsignedN)const |
Return true if there this value. | |
bool | hasNUndroppableUsesOrMore (unsignedN)const |
Return true if this value has N uses or more. | |
void | dropDroppableUses (llvm::function_ref<bool(constUse *)> ShouldDrop=[](constUse *) { returntrue;}) |
Remove every uses that can safely be removed. | |
void | dropDroppableUsesIn (User &Usr) |
Remove every use of this value inUser that can safely be removed. | |
bool | isUsedInBasicBlock (constBasicBlock *BB)const |
Check if this value is used in the specified basic block. | |
unsigned | getNumUses ()const |
This method computes the number of uses of thisValue. | |
void | addUse (Use &U) |
This method should only be used by theUse 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 (constValue *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. | |
constValue * | stripPointerCasts ()const |
Strip off pointer casts, all-zero GEPs and address space casts. | |
Value * | stripPointerCasts () |
constValue * | stripPointerCastsAndAliases ()const |
Strip off pointer casts, all-zero GEPs, address space casts, and aliases. | |
Value * | stripPointerCastsAndAliases () |
constValue * | 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 () |
constValue * | stripPointerCastsForAliasAnalysis ()const |
Strip off pointer casts, all-zero GEPs, single-argument phi nodes and invariant group info. | |
Value * | stripPointerCastsForAliasAnalysis () |
constValue * | stripInBoundsConstantOffsets ()const |
Strip off pointer casts and all-constant inbounds GEPs. | |
Value * | stripInBoundsConstantOffsets () |
constValue * | stripAndAccumulateConstantOffsets (constDataLayout &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 (constDataLayout &DL,APInt &Offset,bool AllowNonInbounds,bool AllowInvariantGroup=false,function_ref<bool(Value &Value,APInt &Offset)> ExternalAnalysis=nullptr) |
constValue * | stripAndAccumulateInBoundsConstantOffsets (constDataLayout &DL,APInt &Offset)const |
This is a wrapper around stripAndAccumulateConstantOffsets with the in-bounds requirement set to false. | |
Value * | stripAndAccumulateInBoundsConstantOffsets (constDataLayout &DL,APInt &Offset) |
constValue * | stripInBoundsOffsets (function_ref< void(constValue *)> Func=[](constValue *) {})const |
Strip off pointer casts and inbounds GEPs. | |
Value * | stripInBoundsOffsets (function_ref< void(constValue *)> Func=[](constValue *) {}) |
std::optional< int64_t > | getPointerOffsetFrom (constValue *Other,constDataLayout &DL)const |
If this ptr is provably equal toOther 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 (constDataLayout &DL,bool &CanBeNull,bool &CanBeFreed)const |
Returns the number of bytes known to be dereferenceable for the pointer value. | |
Align | getPointerAlignment (constDataLayout &DL)const |
Returns an alignment of the pointer value. | |
constValue * | DoPHITranslation (constBasicBlock *CurBB,constBasicBlock *PredBB)const |
Translate PHI node to its predecessor from the given basic block. | |
Value * | DoPHITranslation (constBasicBlock *CurBB,constBasicBlock *PredBB) |
void | mutateType (Type *Ty) |
Mutate the type of thisValue to be of the specified type. | |
template<class Compare > | |
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<< onValue. | |
void | print (raw_ostream &O,ModuleSlotTracker &MST,bool IsForDebug=false)const |
void | printAsOperand (raw_ostream &O,bool PrintType=true,constModule *M=nullptr)const |
Print the name of thisValue out to the specifiedraw_ostream. | |
void | printAsOperand (raw_ostream &O,bool PrintType,ModuleSlotTracker &MST)const |
![]() | |
Instruction * | getPrevNode () |
constInstruction * | getPrevNode ()const |
Get the previous node, ornullptr for the list head. | |
Instruction * | getNextNode () |
Get the next node, ornullptr for the list tail. | |
constInstruction * | getNextNode ()const |
Get the next node, ornullptr for the list tail. | |
![]() | |
self_iterator | getIterator () |
const_self_iterator | getIterator ()const |
reverse_self_iterator | getReverseIterator () |
const_reverse_self_iterator | getReverseIterator ()const |
bool | isSentinel ()const |
Check whether this is the sentinel node. | |
![]() | |
const ParentTy * | getParent ()const |
ParentTy * | getParent () |
void | setParent (ParentTy *Parent) |
Static Public Member Functions | |
staticunsigned | getPointerOperandIndex () |
staticbool | classof (constInstruction *I) |
staticbool | classof (constValue *V) |
![]() | |
staticconstchar * | getOpcodeName (unsigned Opcode) |
staticbool | isTerminator (unsigned Opcode) |
staticbool | isUnaryOp (unsigned Opcode) |
staticbool | isBinaryOp (unsigned Opcode) |
staticbool | isIntDivRem (unsigned Opcode) |
staticbool | isFPDivRem (unsigned Opcode) |
staticbool | isShift (unsigned Opcode) |
Determine if the Opcode is one of the shift instructions. | |
staticbool | isBitwiseLogicOp (unsigned Opcode) |
Determine if the Opcode is and/or/xor. | |
staticbool | isCast (unsigned Opcode) |
Determine if the Opcode is one of theCastInst instructions. | |
staticbool | isFuncletPad (unsigned Opcode) |
Determine if the Opcode is one of theFuncletPadInst instructions. | |
staticbool | isSpecialTerminator (unsigned Opcode) |
Returns true if the Opcode is a "special" terminator that does more than branch to a successor (e.g. | |
staticbool | isAssociative (unsigned Opcode) |
staticbool | isCommutative (unsigned Opcode) |
staticbool | isIdempotent (unsigned Opcode) |
staticbool | isNilpotent (unsigned Opcode) |
staticbool | classof (constValue *V) |
Methods for support type inquiry through isa, cast, and dyn_cast: | |
![]() | |
staticbool | classof (constValue *V) |
![]() | |
static void | dropDroppableUse (Use &U) |
Remove the droppable useU . | |
Protected Member Functions | |
StoreInst * | cloneImpl ()const |
![]() | |
~Instruction () | |
template<typename BitfieldElement > | |
BitfieldElement::Type | getSubclassData ()const |
template<typename BitfieldElement > | |
void | setSubclassData (typename BitfieldElement::TypeValue) |
Instruction (Type *Ty,unsigned iType,AllocInfoAllocInfo,InsertPosition InsertBefore=nullptr) | |
![]() | |
void * | operator new (size_tSize)=delete |
void * | operator new (size_tSize,HungOffOperandsAllocMarker) |
Allocate aUser with an operand pointer co-allocated. | |
void * | operator new (size_tSize,IntrusiveOperandsAllocMarker allocTrait) |
Allocate aUser with the operands co-allocated. | |
void * | operator new (size_tSize,IntrusiveOperandsAndDescriptorAllocMarker allocTrait) |
Allocate aUser with the operands co-allocated. | |
User (Type *ty,unsigned vty,AllocInfoAllocInfo) | |
void | allocHungoffUses (unsignedN,bool IsPhi=false) |
Allocate the array of Uses, followed by a pointer (with bottom bit set) to theUser. | |
void | growHungoffUses (unsignedN,bool IsPhi=false) |
Grow the number of hung off uses. | |
~User ()=default | |
template<int Idx> | |
Use & | Op () |
template<int Idx> | |
constUse & | Op ()const |
![]() | |
Value (Type *Ty,unsigned scid) | |
~Value () | |
Value's destructor should be virtual by design, but that would require thatValue 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 toMDs , 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 thisValue. | |
MDNode * | getMetadataImpl (unsigned KindID)const |
Get metadata for the given kind, if any. | |
unsigned short | getSubclassDataFromValue ()const |
void | setValueSubclassData (unsigned shortD) |
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 toMDs 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) |
![]() | |
ilist_node_with_parent ()=default | |
![]() | |
ilist_node_impl ()=default | |
Friends | |
class | Instruction |
Additional Inherited Members | |
![]() | |
enum | OperationEquivalenceFlags {CompareIgnoringAlignment = 1 << 0,CompareUsingScalarTypes = 1 << 1,CompareUsingIntersectedAttrs = 1 << 2 } |
When checking for operation equivalence (using isSameOperationAs) it is sometimes useful to ignore certain attributes.More... | |
enum | TermOps |
enum | UnaryOps |
enum | BinaryOps |
enum | MemoryOps |
enum | CastOps |
enum | FuncletPadOps |
enum | OtherOps |
using | InstListType =SymbolTableList<Instruction,ilist_iterator_bits<true >,ilist_parent<BasicBlock > > |
![]() | |
using | op_iterator =Use * |
using | const_op_iterator =constUse * |
using | op_range =iterator_range<op_iterator > |
using | const_op_range =iterator_range<const_op_iterator > |
![]() | |
enum | ValueTy |
Concrete subclass of this.More... | |
using | use_iterator = use_iterator_impl<Use > |
using | const_use_iterator = use_iterator_impl<constUse > |
using | user_iterator = user_iterator_impl<User > |
using | const_user_iterator = user_iterator_impl<constUser > |
![]() | |
DbgMarker * | DebugMarker = nullptr |
Optional marker recording the position for debugging information that takes effect immediately before this instruction. | |
![]() | |
static constexprunsigned | MaxAlignmentExponent = 32 |
The maximum alignment for instructions. | |
static constexpruint64_t | MaximumAlignment = 1ULL <<MaxAlignmentExponent |
![]() | |
using | OpaqueField =Bitfield::Element<uint16_t, 0, 15 > |
template<unsigned Offset> | |
using | AlignmentBitfieldElementT = typenameBitfield::Element<unsigned,Offset, 6,Value::MaxAlignmentExponent > |
template<unsigned Offset> | |
using | BoolBitfieldElementT = typenameBitfield::Element<bool,Offset, 1 > |
template<unsigned Offset> | |
using | AtomicOrderingBitfieldElementT = typenameBitfield::Element<AtomicOrdering,Offset, 3,AtomicOrdering::LAST > |
![]() | |
enum | : unsigned {NumUserOperandsBits = 27 } |
The number of operands in the subclass.More... | |
![]() | |
using | self_iterator = typenameilist_select_iterator_type< OptionsT::has_iterator_bits,ilist_detail::compute_node_options<T, Options... >::type, false, false >::type |
using | const_self_iterator = typenameilist_select_iterator_type< OptionsT::has_iterator_bits,ilist_detail::compute_node_options<T, Options... >::type, false,true >::type |
using | reverse_self_iterator = typenameilist_select_iterator_type< OptionsT::has_iterator_bits,ilist_detail::compute_node_options<T, Options... >::type,true, false >::type |
using | const_reverse_self_iterator = typenameilist_select_iterator_type< OptionsT::has_iterator_bits,ilist_detail::compute_node_options<T, Options... >::type,true,true >::type |
![]() | |
template<int Idx, typename U > | |
staticUse & | OpFrom (const U *that) |
![]() | |
unsignedchar | 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 instruction for storing to memory.
Definition at line292 of fileInstructions.h.
StoreInst::StoreInst | ( | Value * | Val, |
Value * | Ptr, | ||
InsertPosition | InsertBefore | ||
) |
Definition at line1297 of fileInstructions.cpp.
StoreInst::StoreInst | ( | Value * | Val, |
Value * | Ptr, | ||
bool | isVolatile, | ||
InsertPosition | InsertBefore | ||
) |
Definition at line1300 of fileInstructions.cpp.
StoreInst::StoreInst | ( | Value * | Val, |
Value * | Ptr, | ||
bool | isVolatile, | ||
Align | Align, | ||
InsertPosition | InsertBefore =nullptr | ||
) |
Definition at line1306 of fileInstructions.cpp.
StoreInst::StoreInst | ( | Value * | Val, |
Value * | Ptr, | ||
bool | isVolatile, | ||
Align | Align, | ||
AtomicOrdering | Order, | ||
SyncScope::ID | SSID =SyncScope::System , | ||
InsertPosition | InsertBefore =nullptr | ||
) |
Definition at line1311 of fileInstructions.cpp.
ReferencesisVolatile(),setAlignment(),setAtomic(), andsetVolatile().
| inlinestatic |
Definition at line395 of fileInstructions.h.
Referencesclassof().
| protected |
Definition at line4301 of fileInstructions.cpp.
ReferencesgetAlign(),llvm::User::getOperand(),getOrdering(),getSyncScopeID(), andisVolatile().
llvm::StoreInst::DECLARE_TRANSPARENT_OPERAND_ACCESSORS | ( | Value | ) |
Transparently provide more efficient getOperand methods.
| inline |
Definition at line333 of fileInstructions.h.
ReferencesAlign.
Referenced bycloneImpl(),isSafeToSpeculateStore(), andmergeConditionalStoreToAddress().
| inline |
Returns the ordering constraint of this store instruction.
Definition at line342 of fileInstructions.h.
Referenced bycloneImpl(),llvm::AAResults::getModRefInfo(), andisUnordered().
| inline |
Returns the address space of the pointer operand.
Definition at line387 of fileInstructions.h.
Referencesllvm::Type::getPointerAddressSpace(), andgetPointerOperandType().
| inline |
Definition at line381 of fileInstructions.h.
Referencesllvm::User::getOperand().
Referenced byllvm::RecurrenceDescriptor::AddReductionVar(),llvm::VNCoercion::analyzeLoadFromClobberingStore(),getPointerOperandType(),llvm::LoopVectorizationLegality::isInvariantAddressOfReduction(), andisSafeToSpeculateStore().
Definition at line382 of fileInstructions.h.
Referencesllvm::User::getOperand().
| inlinestatic |
Definition at line383 of fileInstructions.h.
Referenced bydoPromotion(),FindAllMemoryUses(),findArgParts(),llvm::promoteLoopAccessesToScalars(), andsinkCommonCodeFromPredecessors().
| inline |
Definition at line384 of fileInstructions.h.
ReferencesgetPointerOperand(), andllvm::Value::getType().
Referenced bygetPointerAddressSpace().
| inline |
Returns the synchronization scope ID of this store instruction.
Definition at line353 of fileInstructions.h.
Referenced bycloneImpl().
| inline |
Definition at line378 of fileInstructions.h.
Referencesllvm::User::getOperand().
Referenced byllvm::RecurrenceDescriptor::AddReductionVar(),llvm::VNCoercion::analyzeLoadFromClobberingStore(),forwardStoredOnceStore(),isPointerValueDeadOnEntryToFunction(),isSafeToSpeculateStore(),mergeConditionalStoreToAddress(),llvm::InstCombinerImpl::mergeStoreIntoSuccessor(), andtryToMergePartialOverlappingStores().
Definition at line379 of fileInstructions.h.
Referencesllvm::User::getOperand().
| inline |
Definition at line370 of fileInstructions.h.
Referencesllvm::Instruction::isAtomic(), andisVolatile().
Referenced byisSafeToSpeculateStore().
| inline |
Definition at line372 of fileInstructions.h.
ReferencesgetOrdering(),isVolatile(),llvm::NotAtomic, andllvm::Unordered.
Referenced bymergeConditionalStoreToAddress().
| inline |
Return true if this is a store to a volatile memory location.
Definition at line325 of fileInstructions.h.
Referenced bycloneImpl(),isSimple(),isUnordered(), andStoreInst().
| inline |
Definition at line322 of fileInstructions.h.
ReferencesPtr.
| inline |
Definition at line321 of fileInstructions.h.
| inline |
Definition at line337 of fileInstructions.h.
Referencesllvm::Log2().
Referenced byllvm::OpenMPIRBuilder::createOrderedDepend(),llvm::InstCombinerImpl::SimplifyAnyMemSet(),llvm::InstCombinerImpl::SimplifyAnyMemTransfer(),StoreInst(), andDataScalarizerVisitor::visitStoreInst().
| inline |
Sets the ordering constraint and the synchronization scope ID of this store instruction.
Definition at line364 of fileInstructions.h.
ReferencessetOrdering(), andsetSyncScopeID().
Referenced bycombineStoreToNewValue(),llvm::OpenMPIRBuilder::createAtomicWrite(), andStoreInst().
| inline |
Sets the ordering constraint of this store instruction.
May not be Acquire or AcquireRelease.
Definition at line348 of fileInstructions.h.
Referenced bysetAtomic(),llvm::InstCombinerImpl::SimplifyAnyMemSet(), andllvm::InstCombinerImpl::SimplifyAnyMemTransfer().
| inline |
Sets the synchronization scope ID of this store instruction.
Definition at line358 of fileInstructions.h.
Referenced bysetAtomic().
| inline |
Specify whether this is a volatile store or not.
Definition at line328 of fileInstructions.h.
Referenced byllvm::InstCombinerImpl::SimplifyAnyMemTransfer(), andStoreInst().
| friend |
Definition at line306 of fileInstructions.h.