LLVM: lib/Analysis/MemorySSA.cpp File Reference (original) (raw)
Go to the source code of this file.
Classes | |
---|---|
struct | llvm::DenseMapInfo< MemoryLocOrCall > |
class | llvm::MemorySSA::ClobberWalkerBase |
class | llvm::MemorySSA::CachingWalker |
A MemorySSAWalker that does AA walks to disambiguate accesses. More... | |
class | llvm::MemorySSA::SkipSelfWalker |
class | llvm::MemorySSA::OptimizeUses |
This class is a batch walker of all MemoryUse's in the program, and points their defining access at the thing that actually clobbers them. More... | |
class | DOTFuncMSSAInfo |
struct | llvm::GraphTraits< DOTFuncMSSAInfo * > |
struct | llvm::DOTGraphTraits< DOTFuncMSSAInfo * > |
Namespaces | |
---|---|
namespace | llvm |
This is an optimization pass for GlobalISel generic memory operations. | |
Functions | |
---|---|
INITIALIZE_PASS_BEGIN (MemorySSAWrapperPass, "memoryssa", "Memory SSA", false, true) INITIALIZE_PASS_END(MemorySSAWrapperPass | |
Memory static true cl::opt< unsigned > | MaxCheckLimit ("memssa-check-limit", cl::Hidden, cl::init(100), cl::desc("The maximum number of stores/phis MemorySSA" "will consider trying to walk past (default = 100)")) |
static bool | areLoadsReorderable (const LoadInst *Use, const LoadInst *MayClobber) |
This does one-way checks to see if Use could theoretically be hoisted above MayClobber. | |
template | |
static bool | instructionClobbersQuery (const MemoryDef *MD, const MemoryLocation &UseLoc, const Instruction *UseInst, AliasAnalysisType &AA) |
template | |
static bool | instructionClobbersQuery (MemoryDef *MD, const MemoryUseOrDef *MU, const MemoryLocOrCall &UseMLOC, AliasAnalysisType &AA) |
template | |
static bool | isUseTriviallyOptimizableToLiveOnEntry (AliasAnalysisType &AA, const Instruction *I) |
static LLVM_ATTRIBUTE_UNUSED void | checkClobberSanity (const MemoryAccess *Start, MemoryAccess *ClobberAt, const MemoryLocation &StartLoc, const MemorySSA &MSSA, const UpwardsMemoryQuery &Query, BatchAAResults &AA, bool AllowImpreciseClobber=false) |
Verifies that Start is clobbered by ClobberAt, and that nothing inbetween Start and ClobberAt can clobbers Start. | |
static bool | isOrdered (const Instruction *I) |
static const Instruction * | getInvariantGroupClobberingInstruction (Instruction &I, DominatorTree &DT) |
Variables | |
---|---|
static cl::opt< std::string > | DotCFGMSSA ("dot-cfg-mssa", cl::value_desc("file name for generated dot file"), cl::desc("file name for generated dot file"), cl::init("")) |
memoryssa | |
Memory | SSA |
Memory | false |
static cl::opt< bool, true > | VerifyMemorySSAX ("verify-memoryssa", cl::location(VerifyMemorySSA), cl::Hidden, cl::desc("Enable verification of MemorySSA.")) |
static const char | LiveOnEntryStr [] = "liveOnEntry" |
◆ DEBUG_TYPE
#define DEBUG_TYPE "memoryssa"
◆ areLoadsReorderable()
◆ checkClobberSanity()
Verifies that Start
is clobbered by ClobberAt
, and that nothing inbetween Start
and ClobberAt
can clobbers Start
.
This is meant to be as simple and self-contained as possible. Because it uses no cache, etc., it can be relatively expensive.
Parameters
Start | The MemoryAccess that we want to walk from. |
---|---|
ClobberAt | A clobber for Start. |
StartLoc | The MemoryLocation for Start. |
MSSA | The MemorySSA instance that Start and ClobberAt belong to. |
Query | The UpwardsMemoryQuery we used for our search. |
AA | The AliasAnalysis we used for our search. |
AllowImpreciseClobber | Always false, unless we do relaxed verify. |
Definition at line 397 of file MemorySSA.cpp.
References assert(), llvm::def_chain(), llvm::MemorySSA::dominates(), llvm::SmallVectorImpl< T >::emplace_back(), llvm::SmallVectorBase< Size_T >::empty(), llvm::MemorySSA::getDomTree(), llvm::detail::DenseSetImpl< ValueT, MapTy, ValueInfoT >::insert(), instructionClobbersQuery(), llvm::MemorySSA::isLiveOnEntryDef(), llvm::DominatorTree::isReachableFromEntry(), MAP, llvm::SmallVectorImpl< T >::pop_back_val(), llvm::upward_defs_begin(), and llvm::upward_defs_end().
◆ getInvariantGroupClobberingInstruction()
◆ INITIALIZE_PASS_BEGIN()
◆ instructionClobbersQuery() [1/2]
template
◆ instructionClobbersQuery() [2/2]
template
◆ isOrdered()
◆ isUseTriviallyOptimizableToLiveOnEntry()
template
static bool isUseTriviallyOptimizableToLiveOnEntry ( AliasAnalysisType & AA, const Instruction * I ) | static |
---|
◆ MaxCheckLimit()
Memory static true cl::opt< unsigned > MaxCheckLimit ( "memssa-check-limit" , cl::Hidden , cl::init(100) , cl::desc("The maximum number of stores/phis MemorySSA" "will consider trying to walk past (default = 100)") ) | static |
---|
◆ DotCFGMSSA
◆ false
◆ LiveOnEntryStr
◆ SSA
◆ VerifyMemorySSAX
cl::opt< bool, true > VerifyMemorySSAX("verify-memoryssa", cl::location(VerifyMemorySSA), cl::Hidden, cl::desc("Enable verification of MemorySSA.")) ( "verify-memoryssa" , cl::location(VerifyMemorySSA) , cl::Hidden , cl::desc("Enable verification of MemorySSA.") ) | static |
---|