class MemoryPhi
Declaration
class MemoryPhi : public MemoryAccess { /* full declaration omitted */ };
Description
Represents phi nodes for memory accesses. These have the same semantic as regular phi nodes, with the exception that only one phi will ever exist in a given basic block. Guaranteeing one phi per block means guaranteeing there is only ever one valid reaching MemoryDef/MemoryPHI along each path to the phi node. This is ensured by not allowing disambiguation of the RHS of a MemoryDef or a MemoryPhi's operands. That is, given if (a) { store %a store %b } it *must* be transformed into if (a) { 1 = MemoryDef(liveOnEntry) store %a 2 = MemoryDef(1) store %b } and *not* if (a) { 1 = MemoryDef(liveOnEntry) store %a 2 = MemoryDef(liveOnEntry) store %b } even if the two stores do not conflict. Otherwise, both 1 and 2 reach the end of the branch, and if there are not two phi nodes, one will be disconnected completely from the SSA graph below that point. Because MemoryUse's do not generate new definitions, they do not have this issue.
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:493
Inherits from: MemoryAccess
Member Variables
- private const unsigned int ID
- private unsigned int ReservedSpace
Inherited from Value:
- protected SubclassOptionalData
- protected NumUserOperands
- protected IsUsedByMD
- protected HasName
- protected HasMetadata
- protected HasHungOffUses
- protected HasDescriptor
- public static MaxAlignmentExponent = 32
- public static MaximumAlignment = 1ULL << MaxAlignmentExponent
Method Overview
- public MemoryPhi(llvm::LLVMContext & C, llvm::BasicBlock * BB, unsigned int Ver, unsigned int NumPreds = 0)
- public void addIncoming(llvm::MemoryAccess * V, llvm::BasicBlock * BB)
- protected void allocHungoffUses(unsigned int N)
- public llvm::MemoryPhi::block_iterator block_begin()
- public llvm::MemoryPhi::const_block_iterator block_begin() const
- public llvm::MemoryPhi::block_iterator block_end()
- public llvm::MemoryPhi::const_block_iterator block_end() const
- public iterator_range<llvm::MemoryPhi::block_iterator> blocks()
- public iterator_range<llvm::MemoryPhi::const_block_iterator> blocks() const
- public static bool classof(const llvm::Value * V)
- private static void deleteMe(llvm::DerivedUser * Self)
- public int getBasicBlockIndex(const llvm::BasicBlock * BB) const
- public unsigned int getID() const
- public llvm::BasicBlock * getIncomingBlock(const llvm::Use & U) const
- public llvm::BasicBlock * getIncomingBlock(MemoryAccess::const_user_iterator I) const
- public llvm::BasicBlock * getIncomingBlock(unsigned int I) const
- public llvm::MemoryAccess * getIncomingValue(unsigned int I) const
- public llvm::MemoryAccess * getIncomingValueForBlock(const llvm::BasicBlock * BB) const
- public static unsigned int getIncomingValueNumForOperand(unsigned int I)
- public unsigned int getNumIncomingValues() const
- public static unsigned int getOperandNumForIncomingValue(unsigned int I)
- private void growOperands()
- public llvm::User::const_op_range incoming_values() const
- public llvm::User::op_range incoming_values()
- public void print(llvm::raw_ostream & OS) const
- public void setIncomingBlock(unsigned int I, llvm::BasicBlock * BB)
- public void setIncomingValue(unsigned int I, llvm::MemoryAccess * V)
- public void unorderedDeleteIncoming(unsigned int I)
- public void unorderedDeleteIncomingBlock(const llvm::BasicBlock * BB)
- public template <typename Fn>void unorderedDeleteIncomingIf(Fn && Pred)
- public void unorderedDeleteIncomingValue(const llvm::MemoryAccess * MA)
Inherited from MemoryAccess:
- public classof
- public defs_begin
- public defs_begin
- public defs_end
- public defs_end
- public dump
- public getBlock
- public getDefsIterator
- public getDefsIterator
- protected getID
- public getIterator
- public getIterator
- public getReverseDefsIterator
- public getReverseDefsIterator
- public getReverseIterator
- public getReverseIterator
- public print
- protected setBlock
Inherited from DerivedUser:
Inherited from User:
- protected Op
- protected Op
- protected OpFrom
- protected allocHungoffUses
- public classof
- public dropAllReferences
- public getDescriptor
- public getDescriptor
- public getNumOperands
- public getOperand
- public getOperandList
- public getOperandList
- public getOperandUse
- public getOperandUse
- protected growHungoffUses
- public isDroppable
- public op_begin
- public op_begin
- public op_end
- public op_end
- public operand_values
- public operand_values
- public operands
- public operands
- public replaceUsesOfWith
- public setGlobalVariableNumOperands
- public setNumHungOffUseOperands
- public setOperand
- public value_op_begin
- public value_op_begin
- public value_op_end
- public value_op_end
Inherited from Value:
- public DoPHITranslation
- public DoPHITranslation
- protected addMetadata
- protected addMetadata
- public addUse
- public assertModuleIsMaterialized
- public assertModuleIsMaterializedImpl
- public canBeFreed
- protected clearMetadata
- public clearSubclassOptionalData
- public deleteValue
- public dropDroppableUse
- public dropDroppableUses
- public dropDroppableUsesIn
- public dump
- protected eraseMetadata
- protected getAllMetadata
- public getContext
- protected getMetadata
- protected getMetadata
- protected getMetadata
- protected getMetadata
- public getName
- public getNameOrAsOperand
- public getNumUses
- public getPointerAlignment
- public getPointerDereferenceableBytes
- public getRawSubclassOptionalData
- public getSingleUndroppableUse
- public getSingleUndroppableUse
- protected getSubclassDataFromValue
- public getType
- public getUniqueUndroppableUser
- public getUniqueUndroppableUser
- public getValueID
- public getValueName
- protected hasMetadata
- protected hasMetadata
- protected hasMetadata
- public hasNUndroppableUses
- public hasNUndroppableUsesOrMore
- public hasNUses
- public hasNUsesOrMore
- public hasName
- public hasOneUse
- public hasOneUser
- public hasSameSubclassOptionalData
- public hasValueHandle
- public isSwiftError
- public isTransitiveUsedByMetadataOnly
- public isUsedByMetadata
- public isUsedInBasicBlock
- public materialized_use_begin
- public materialized_use_begin
- public materialized_use_empty
- public materialized_user_begin
- public materialized_user_begin
- public materialized_users
- public materialized_users
- public materialized_uses
- public materialized_uses
- public mutateType
- public print
- public print
- public printAsOperand
- public printAsOperand
- public replaceAllUsesWith
- public replaceNonMetadataUsesWith
- public replaceUsesOutsideBlock
- public replaceUsesWithIf
- public reverseUseList
- protected setMetadata
- protected setMetadata
- public setName
- public setValueName
- protected setValueSubclassData
- public sortUseList
- public stripAndAccumulateConstantOffsets
- public stripAndAccumulateConstantOffsets
- public stripAndAccumulateInBoundsConstantOffsets
- public stripAndAccumulateInBoundsConstantOffsets
- public stripInBoundsConstantOffsets
- public stripInBoundsConstantOffsets
- public stripInBoundsOffsets
- public stripInBoundsOffsets
- public stripPointerCasts
- public stripPointerCasts
- public stripPointerCastsAndAliases
- public stripPointerCastsAndAliases
- public stripPointerCastsForAliasAnalysis
- public stripPointerCastsForAliasAnalysis
- public stripPointerCastsSameRepresentation
- public stripPointerCastsSameRepresentation
- public takeName
- public use_begin
- public use_begin
- public use_empty
- public use_end
- public use_end
- public user_back
- public user_back
- public user_begin
- public user_begin
- public user_empty
- public user_end
- public user_end
- public users
- public users
- public uses
- public uses
Methods
¶MemoryPhi(llvm::LLVMContext& C,
llvm::BasicBlock* BB,
unsigned int Ver,
unsigned int NumPreds = 0)
MemoryPhi(llvm::LLVMContext& C,
llvm::BasicBlock* BB,
unsigned int Ver,
unsigned int NumPreds = 0)
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:503
Parameters
- llvm::LLVMContext& C
- llvm::BasicBlock* BB
- unsigned int Ver
- unsigned int NumPreds = 0
¶void addIncoming(llvm::MemoryAccess* V,
llvm::BasicBlock* BB)
void addIncoming(llvm::MemoryAccess* V,
llvm::BasicBlock* BB)
Description
Add an incoming value to the end of the PHI list
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:575
Parameters
¶void allocHungoffUses(unsigned int N)
void allocHungoffUses(unsigned int N)
Description
this is more complicated than the generic User::allocHungoffUses, because we have to allocate Uses for the incoming values and pointers to the incoming blocks, all in one allocation.
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:654
Parameters
- unsigned int N
¶llvm::MemoryPhi::block_iterator block_begin()
llvm::MemoryPhi::block_iterator block_begin()
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:514
¶llvm::MemoryPhi::const_block_iterator
block_begin() const
llvm::MemoryPhi::const_block_iterator
block_begin() const
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:518
¶llvm::MemoryPhi::block_iterator block_end()
llvm::MemoryPhi::block_iterator block_end()
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:522
¶llvm::MemoryPhi::const_block_iterator block_end()
const
llvm::MemoryPhi::const_block_iterator block_end()
const
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:524
¶iterator_range<llvm::MemoryPhi::block_iterator>
blocks()
iterator_range<llvm::MemoryPhi::block_iterator>
blocks()
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:528
¶iterator_range<
llvm::MemoryPhi::const_block_iterator>
blocks() const
iterator_range<
llvm::MemoryPhi::const_block_iterator>
blocks() const
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:532
¶static bool classof(const llvm::Value* V)
static bool classof(const llvm::Value* V)
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:640
Parameters
- const llvm::Value* V
¶static void deleteMe(llvm::DerivedUser* Self)
static void deleteMe(llvm::DerivedUser* Self)
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:672
Parameters
- llvm::DerivedUser* Self
¶int getBasicBlockIndex(
const llvm::BasicBlock* BB) const
int getBasicBlockIndex(
const llvm::BasicBlock* BB) const
Description
Return the first index of the specified basic block in the value list for this PHI. Returns -1 if no instance.
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:586
Parameters
- const llvm::BasicBlock* BB
¶unsigned int getID() const
unsigned int getID() const
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:646
¶llvm::BasicBlock* getIncomingBlock(
const llvm::Use& U) const
llvm::BasicBlock* getIncomingBlock(
const llvm::Use& U) const
Description
Return incoming basic block corresponding to an operand of the PHI.
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:558
Parameters
- const llvm::Use& U
¶llvm::BasicBlock* getIncomingBlock(
MemoryAccess::const_user_iterator I) const
llvm::BasicBlock* getIncomingBlock(
MemoryAccess::const_user_iterator I) const
Description
Return incoming basic block corresponding to value use iterator.
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:565
Parameters
¶llvm::BasicBlock* getIncomingBlock(
unsigned int I) const
llvm::BasicBlock* getIncomingBlock(
unsigned int I) const
Description
Return incoming basic block number @p i.
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:554
Parameters
- unsigned int I
¶llvm::MemoryAccess* getIncomingValue(
unsigned int I) const
llvm::MemoryAccess* getIncomingValue(
unsigned int I) const
Description
Return incoming value number x
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:544
Parameters
- unsigned int I
¶llvm::MemoryAccess* getIncomingValueForBlock(
const llvm::BasicBlock* BB) const
llvm::MemoryAccess* getIncomingValueForBlock(
const llvm::BasicBlock* BB) const
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:593
Parameters
- const llvm::BasicBlock* BB
¶static unsigned int getIncomingValueNumForOperand(
unsigned int I)
static unsigned int getIncomingValueNumForOperand(
unsigned int I)
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:551
Parameters
- unsigned int I
¶unsigned int getNumIncomingValues() const
unsigned int getNumIncomingValues() const
Description
Return the number of incoming edges
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:541
¶static unsigned int getOperandNumForIncomingValue(
unsigned int I)
static unsigned int getOperandNumForIncomingValue(
unsigned int I)
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:550
Parameters
- unsigned int I
¶void growOperands()
void growOperands()
Description
This grows the operand list in response to a push_back style of operation. This grows the number of ops by 1.5 times.
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:665
¶llvm::User::const_op_range incoming_values() const
llvm::User::const_op_range incoming_values() const
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:538
¶llvm::User::op_range incoming_values()
llvm::User::op_range incoming_values()
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:536
¶void print(llvm::raw_ostream& OS) const
void print(llvm::raw_ostream& OS) const
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:644
Parameters
¶void setIncomingBlock(unsigned int I,
llvm::BasicBlock* BB)
void setIncomingBlock(unsigned int I,
llvm::BasicBlock* BB)
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:569
Parameters
- unsigned int I
- llvm::BasicBlock* BB
¶void setIncomingValue(unsigned int I,
llvm::MemoryAccess* V)
void setIncomingValue(unsigned int I,
llvm::MemoryAccess* V)
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:545
Parameters
- unsigned int I
- llvm::MemoryAccess* V
¶void unorderedDeleteIncoming(unsigned int I)
void unorderedDeleteIncoming(unsigned int I)
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:600
Parameters
- unsigned int I
¶void unorderedDeleteIncomingBlock(
const llvm::BasicBlock* BB)
void unorderedDeleteIncomingBlock(
const llvm::BasicBlock* BB)
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:628
Parameters
- const llvm::BasicBlock* BB
¶template <typename Fn>
void unorderedDeleteIncomingIf(Fn&& Pred)
template <typename Fn>
void unorderedDeleteIncomingIf(Fn&& Pred)
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:616
Templates
- Fn
Parameters
- Fn&& Pred
¶void unorderedDeleteIncomingValue(
const llvm::MemoryAccess* MA)
void unorderedDeleteIncomingValue(
const llvm::MemoryAccess* MA)
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:635
Parameters
- const llvm::MemoryAccess* MA