class MemorySSA
Declaration
class MemorySSA { /* full declaration omitted */ };
Description
Encapsulates MemorySSA, including all data associated with memory accesses.
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:704
Method Overview
- public MemorySSA(llvm::MemorySSA &&)
- public MemorySSA(llvm::Function &, llvm::AliasAnalysis *, llvm::DominatorTree *)
- protected llvm::MemoryUseOrDef * createDefinedAccess(llvm::Instruction *, llvm::MemoryAccess *, const llvm::MemoryUseOrDef * Template = nullptr, bool CreationMustSucceed = true)
- public bool dominates(const llvm::MemoryAccess * A, const llvm::Use & B) const
- public bool dominates(const llvm::MemoryAccess * A, const llvm::MemoryAccess * B) const
- public void dump() const
- public const llvm::MemorySSA::AccessList * getBlockAccesses(const llvm::BasicBlock * BB) const
- public const llvm::MemorySSA::DefsList * getBlockDefs(const llvm::BasicBlock * BB) const
- public inline llvm::MemoryAccess * getLiveOnEntryDef() const
- public llvm::MemoryUseOrDef * getMemoryAccess(const llvm::Instruction * I) const
- public llvm::MemoryPhi * getMemoryAccess(const llvm::BasicBlock * BB) const
- public llvm::MemorySSAWalker * getSkipSelfWalker()
- public llvm::MemorySSAWalker * getWalker()
- protected llvm::MemorySSA::AccessList * getWritableBlockAccesses(const llvm::BasicBlock * BB) const
- protected llvm::MemorySSA::DefsList * getWritableBlockDefs(const llvm::BasicBlock * BB) const
- protected void insertIntoListsBefore(llvm::MemoryAccess *, const llvm::BasicBlock *, AccessList::iterator)
- protected void insertIntoListsForBlock(llvm::MemoryAccess *, const llvm::BasicBlock *, llvm::MemorySSA::InsertionPlace)
- public inline bool isLiveOnEntryDef(const llvm::MemoryAccess * MA) const
- public bool locallyDominates(const llvm::MemoryAccess * A, const llvm::MemoryAccess * B) const
- protected void moveTo(llvm::MemoryUseOrDef * What, llvm::BasicBlock * BB, AccessList::iterator Where)
- protected void moveTo(llvm::MemoryAccess * What, llvm::BasicBlock * BB, llvm::MemorySSA::InsertionPlace Point)
- public void print(llvm::raw_ostream &) const
- protected void removeFromLists(llvm::MemoryAccess *, bool ShouldDelete = true)
- protected void removeFromLookups(llvm::MemoryAccess *)
- protected void renamePass(llvm::BasicBlock * BB, llvm::MemoryAccess * IncomingVal, SmallPtrSetImpl<llvm::BasicBlock *> & Visited)
- protected void verifyDominationNumbers(const llvm::Function & F) const
- public void verifyMemorySSA() const
- protected void verifyOrderingDominationAndDefUses(llvm::Function & F) const
- protected void verifyPrevDefInPhis(llvm::Function & F) const
- public ~MemorySSA()
Methods
¶MemorySSA(llvm::MemorySSA&&)
MemorySSA(llvm::MemorySSA&&)
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:710
Parameters
¶MemorySSA(llvm::Function&,
llvm::AliasAnalysis*,
llvm::DominatorTree*)
MemorySSA(llvm::Function&,
llvm::AliasAnalysis*,
llvm::DominatorTree*)
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:706
Parameters
¶llvm::MemoryUseOrDef* createDefinedAccess(
llvm::Instruction*,
llvm::MemoryAccess*,
const llvm::MemoryUseOrDef* Template =
nullptr,
bool CreationMustSucceed = true)
llvm::MemoryUseOrDef* createDefinedAccess(
llvm::Instruction*,
llvm::MemoryAccess*,
const llvm::MemoryUseOrDef* Template =
nullptr,
bool CreationMustSucceed = true)
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:832
Parameters
- llvm::Instruction*
- llvm::MemoryAccess*
- const llvm::MemoryUseOrDef* Template = nullptr
- bool CreationMustSucceed = true
¶bool dominates(const llvm::MemoryAccess* A,
const llvm::Use& B) const
bool dominates(const llvm::MemoryAccess* A,
const llvm::Use& B) const
Description
Given a MemoryAccess and a Use, determine whether MemoryAccess \p A dominates Use \p B.
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:781
Parameters
- const llvm::MemoryAccess* A
- const llvm::Use& B
¶bool dominates(const llvm::MemoryAccess* A,
const llvm::MemoryAccess* B) const
bool dominates(const llvm::MemoryAccess* A,
const llvm::MemoryAccess* B) const
Description
Given two memory accesses in potentially different blocks, determine whether MemoryAccess \p A dominates MemoryAccess \p B.
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:777
Parameters
- const llvm::MemoryAccess* A
- const llvm::MemoryAccess* B
¶void dump() const
void dump() const
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:729
¶const llvm::MemorySSA::AccessList*
getBlockAccesses(const llvm::BasicBlock* BB) const
const llvm::MemorySSA::AccessList*
getBlockAccesses(const llvm::BasicBlock* BB) const
Description
Return the list of MemoryAccess's for a given basic block. This list is not modifiable by the user.
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:759
Parameters
- const llvm::BasicBlock* BB
¶const llvm::MemorySSA::DefsList* getBlockDefs(
const llvm::BasicBlock* BB) const
const llvm::MemorySSA::DefsList* getBlockDefs(
const llvm::BasicBlock* BB) const
Description
Return the list of MemoryDef's and MemoryPhi's for a given basic block. This list is not modifiable by the user.
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:767
Parameters
- const llvm::BasicBlock* BB
¶inline llvm::MemoryAccess* getLiveOnEntryDef()
const
inline llvm::MemoryAccess* getLiveOnEntryDef()
const
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:743
¶llvm::MemoryUseOrDef* getMemoryAccess(
const llvm::Instruction* I) const
llvm::MemoryUseOrDef* getMemoryAccess(
const llvm::Instruction* I) const
Description
Given a memory Mod/Ref'ing instruction, get the MemorySSA access associated with it. If passed a basic block gets the memory phi node that exists for that block, if there is one. Otherwise, this will get a MemoryUseOrDef.
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:721
Parameters
- const llvm::Instruction* I
¶llvm::MemoryPhi* getMemoryAccess(
const llvm::BasicBlock* BB) const
llvm::MemoryPhi* getMemoryAccess(
const llvm::BasicBlock* BB) const
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:725
Parameters
- const llvm::BasicBlock* BB
¶llvm::MemorySSAWalker* getSkipSelfWalker()
llvm::MemorySSAWalker* getSkipSelfWalker()
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:715
¶llvm::MemorySSAWalker* getWalker()
llvm::MemorySSAWalker* getWalker()
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:714
¶llvm::MemorySSA::AccessList*
getWritableBlockAccesses(
const llvm::BasicBlock* BB) const
llvm::MemorySSA::AccessList*
getWritableBlockAccesses(
const llvm::BasicBlock* BB) const
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:802
Parameters
- const llvm::BasicBlock* BB
¶llvm::MemorySSA::DefsList* getWritableBlockDefs(
const llvm::BasicBlock* BB) const
llvm::MemorySSA::DefsList* getWritableBlockDefs(
const llvm::BasicBlock* BB) const
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:808
Parameters
- const llvm::BasicBlock* BB
¶void insertIntoListsBefore(
llvm::MemoryAccess*,
const llvm::BasicBlock*,
AccessList::iterator)
void insertIntoListsBefore(
llvm::MemoryAccess*,
const llvm::BasicBlock*,
AccessList::iterator)
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:830
Parameters
¶void insertIntoListsForBlock(
llvm::MemoryAccess*,
const llvm::BasicBlock*,
llvm::MemorySSA::InsertionPlace)
void insertIntoListsForBlock(
llvm::MemoryAccess*,
const llvm::BasicBlock*,
llvm::MemorySSA::InsertionPlace)
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:828
Parameters
- llvm::MemoryAccess*
- const llvm::BasicBlock*
- llvm::MemorySSA::InsertionPlace
¶inline bool isLiveOnEntryDef(
const llvm::MemoryAccess* MA) const
inline bool isLiveOnEntryDef(
const llvm::MemoryAccess* MA) const
Description
Return true if \p MA represents the live on entry value Loads and stores from pointer arguments and other global values may be defined by memory operations that do not occur in the current function, so they may be live on entry to the function. MemorySSA represents such memory state by the live on entry definition, which is guaranteed to occur before any other memory access in the function.
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:739
Parameters
- const llvm::MemoryAccess* MA
¶bool locallyDominates(
const llvm::MemoryAccess* A,
const llvm::MemoryAccess* B) const
bool locallyDominates(
const llvm::MemoryAccess* A,
const llvm::MemoryAccess* B) const
Description
Given two memory accesses in the same basic block, determine whether MemoryAccess \p A dominates MemoryAccess \p B.
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:773
Parameters
- const llvm::MemoryAccess* A
- const llvm::MemoryAccess* B
¶void moveTo(llvm::MemoryUseOrDef* What,
llvm::BasicBlock* BB,
AccessList::iterator Where)
void moveTo(llvm::MemoryUseOrDef* What,
llvm::BasicBlock* BB,
AccessList::iterator Where)
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:817
Parameters
- llvm::MemoryUseOrDef* What
- llvm::BasicBlock* BB
- AccessList::iterator Where
¶void moveTo(llvm::MemoryAccess* What,
llvm::BasicBlock* BB,
llvm::MemorySSA::InsertionPlace Point)
void moveTo(llvm::MemoryAccess* What,
llvm::BasicBlock* BB,
llvm::MemorySSA::InsertionPlace Point)
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:818
Parameters
- llvm::MemoryAccess* What
- llvm::BasicBlock* BB
- llvm::MemorySSA::InsertionPlace Point
¶void print(llvm::raw_ostream&) const
void print(llvm::raw_ostream&) const
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:730
Parameters
¶void removeFromLists(llvm::MemoryAccess*,
bool ShouldDelete = true)
void removeFromLists(llvm::MemoryAccess*,
bool ShouldDelete = true)
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:827
Parameters
- llvm::MemoryAccess*
- bool ShouldDelete = true
¶void removeFromLookups(llvm::MemoryAccess*)
void removeFromLookups(llvm::MemoryAccess*)
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:826
Parameters
¶void renamePass(
llvm::BasicBlock* BB,
llvm::MemoryAccess* IncomingVal,
SmallPtrSetImpl<llvm::BasicBlock*>& Visited)
void renamePass(
llvm::BasicBlock* BB,
llvm::MemoryAccess* IncomingVal,
SmallPtrSetImpl<llvm::BasicBlock*>& Visited)
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:821
Parameters
- llvm::BasicBlock* BB
- llvm::MemoryAccess* IncomingVal
- SmallPtrSetImpl<llvm::BasicBlock*>& Visited
¶void verifyDominationNumbers(
const llvm::Function& F) const
void verifyDominationNumbers(
const llvm::Function& F) const
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:798
Parameters
- const llvm::Function& F
¶void verifyMemorySSA() const
void verifyMemorySSA() const
Description
Verify that MemorySSA is self consistent (IE definitions dominate all uses, uses appear in the right places). This is used by unit tests.
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:785
¶void verifyOrderingDominationAndDefUses(
llvm::Function& F) const
void verifyOrderingDominationAndDefUses(
llvm::Function& F) const
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:797
Parameters
¶void verifyPrevDefInPhis(llvm::Function& F) const
void verifyPrevDefInPhis(llvm::Function& F) const
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:799
Parameters
¶~MemorySSA()
~MemorySSA()
Declared at: llvm/include/llvm/Analysis/MemorySSA.h:712