LLVM 20.0.0git
|
A MemorySSAWalker that does AA walks to disambiguate accesses. More...
Public Member Functions | |
CachingWalker (MemorySSA *M, ClobberWalkerBase *W) | |
~CachingWalker () override=default | |
MemoryAccess * | getClobberingMemoryAccess (MemoryAccess *MA, BatchAAResults &BAA, unsigned &UWL) |
MemoryAccess * | getClobberingMemoryAccess (MemoryAccess *MA, const MemoryLocation &Loc, BatchAAResults &BAA, unsigned &UWL) |
MemoryAccess * | getClobberingMemoryAccessWithoutInvariantGroup (MemoryAccess *MA, BatchAAResults &BAA, unsigned &UWL) |
MemoryAccess * | getClobberingMemoryAccess (MemoryAccess *MA, BatchAAResults &BAA) override |
Does the same thing as getClobberingMemoryAccess(const Instruction *I), but takes a MemoryAccess instead of an Instruction. | |
MemoryAccess * | getClobberingMemoryAccess (MemoryAccess *MA, const MemoryLocation &Loc, BatchAAResults &BAA) override |
Given a potentially clobbering memory access and a new location, calling this will give you the nearest dominating clobbering MemoryAccess (by skipping non-aliasing def links). | |
void | invalidateInfo (MemoryAccess *MA) override |
Given a memory access, invalidate anything this walker knows about that access. | |
MemoryAccess * | getClobberingMemoryAccess (const Instruction *I, BatchAAResults &AA) |
Given a memory Mod/Ref/ModRef'ing instruction, calling this will give you the nearest dominating MemoryAccess that Mod's the location the instruction accesses (by skipping any def which AA can prove does not alias the location(s) accessed by the instruction given). | |
virtual MemoryAccess * | getClobberingMemoryAccess (MemoryAccess *, BatchAAResults &AA)=0 |
Does the same thing as getClobberingMemoryAccess(const Instruction *I), but takes a MemoryAccess instead of an Instruction. | |
virtual MemoryAccess * | getClobberingMemoryAccess (MemoryAccess *, const MemoryLocation &, BatchAAResults &AA)=0 |
Given a potentially clobbering memory access and a new location, calling this will give you the nearest dominating clobbering MemoryAccess (by skipping non-aliasing def links). | |
MemoryAccess * | getClobberingMemoryAccess (const Instruction *I) |
MemoryAccess * | getClobberingMemoryAccess (MemoryAccess *MA) |
MemoryAccess * | getClobberingMemoryAccess (MemoryAccess *MA, const MemoryLocation &Loc) |
Public Member Functions inherited from llvm::MemorySSAWalker | |
MemorySSAWalker (MemorySSA *) | |
virtual | ~MemorySSAWalker ()=default |
MemoryAccess * | getClobberingMemoryAccess (const Instruction *I, BatchAAResults &AA) |
Given a memory Mod/Ref/ModRef'ing instruction, calling this will give you the nearest dominating MemoryAccess that Mod's the location the instruction accesses (by skipping any def which AA can prove does not alias the location(s) accessed by the instruction given). | |
virtual MemoryAccess * | getClobberingMemoryAccess (MemoryAccess *, BatchAAResults &AA)=0 |
Does the same thing as getClobberingMemoryAccess(const Instruction *I), but takes a MemoryAccess instead of an Instruction. | |
virtual MemoryAccess * | getClobberingMemoryAccess (MemoryAccess *, const MemoryLocation &, BatchAAResults &AA)=0 |
Given a potentially clobbering memory access and a new location, calling this will give you the nearest dominating clobbering MemoryAccess (by skipping non-aliasing def links). | |
MemoryAccess * | getClobberingMemoryAccess (const Instruction *I) |
MemoryAccess * | getClobberingMemoryAccess (MemoryAccess *MA) |
MemoryAccess * | getClobberingMemoryAccess (MemoryAccess *MA, const MemoryLocation &Loc) |
virtual void | invalidateInfo (MemoryAccess *) |
Given a memory access, invalidate anything this walker knows about that access. | |
Additional Inherited Members | |
Public Types inherited from llvm::MemorySSAWalker | |
using | MemoryAccessSet = SmallVector< MemoryAccess *, 8 > |
Protected Attributes inherited from llvm::MemorySSAWalker | |
MemorySSA * | MSSA |
A MemorySSAWalker that does AA walks to disambiguate accesses.
It no longer does caching on its own, but the name has been retained for the moment.
Definition at line 1012 of file MemorySSA.cpp.
|
inline |
Definition at line 1016 of file MemorySSA.cpp.
|
overridedefault |
|
inline |
Definition at line 1068 of file MemorySSA.h.
|
inline |
Given a memory Mod/Ref/ModRef'ing instruction, calling this will give you the nearest dominating MemoryAccess that Mod's the location the instruction accesses (by skipping any def which AA can prove does not alias the location(s) accessed by the instruction given).
Note that this will return a single access, and it must dominate the Instruction, so if an operand of a MemoryPhi node Mod's the instruction, this will return the MemoryPhi, not the operand. This means that given: if (a) { 1 = MemoryDef(liveOnEntry) store a } else { 2 = MemoryDef(liveOnEntry) store b } 3 = MemoryPhi(2, 1) MemoryUse(3) load a
calling this API on load(a) will return the MemoryPhi, not the MemoryDef in the if (a) branch.
Definition at line 1041 of file MemorySSA.h.
|
virtual |
Does the same thing as getClobberingMemoryAccess(const Instruction *I), but takes a MemoryAccess instead of an Instruction.
Implements llvm::MemorySSAWalker.
|
virtual |
Given a potentially clobbering memory access and a new location, calling this will give you the nearest dominating clobbering MemoryAccess (by skipping non-aliasing def links).
This version of the function is mainly used to disambiguate phi translated pointers, where the value of a pointer may have changed from the initial memory access. Note that this expects to be handed either a MemoryUse, or an already potentially clobbering access. Unlike the above API, if given a MemoryDef that clobbers the pointer as the starting access, it will return that MemoryDef, whereas the above would return the clobber starting from the use side of the memory def.
Implements llvm::MemorySSAWalker.
|
inline |
Definition at line 1073 of file MemorySSA.h.
|
inlineoverridevirtual |
Does the same thing as getClobberingMemoryAccess(const Instruction *I), but takes a MemoryAccess instead of an Instruction.
Implements llvm::MemorySSAWalker.
Definition at line 1037 of file MemorySSA.cpp.
References getClobberingMemoryAccess(), and MaxCheckLimit().
|
inline |
Definition at line 1022 of file MemorySSA.cpp.
Referenced by getClobberingMemoryAccess().
|
inline |
Definition at line 1078 of file MemorySSA.h.
|
inlineoverridevirtual |
Given a potentially clobbering memory access and a new location, calling this will give you the nearest dominating clobbering MemoryAccess (by skipping non-aliasing def links).
This version of the function is mainly used to disambiguate phi translated pointers, where the value of a pointer may have changed from the initial memory access. Note that this expects to be handed either a MemoryUse, or an already potentially clobbering access. Unlike the above API, if given a MemoryDef that clobbers the pointer as the starting access, it will return that MemoryDef, whereas the above would return the clobber starting from the use side of the memory def.
Implements llvm::MemorySSAWalker.
Definition at line 1042 of file MemorySSA.cpp.
References getClobberingMemoryAccess(), and MaxCheckLimit().
|
inline |
Definition at line 1026 of file MemorySSA.cpp.
|
inline |
Definition at line 1032 of file MemorySSA.cpp.
|
inlineoverridevirtual |
Given a memory access, invalidate anything this walker knows about that access.
This API is used by walkers that store information to perform basic cache invalidation. This will be called by MemorySSA at appropriate times for the walker it uses or returns.
Reimplemented from llvm::MemorySSAWalker.
Definition at line 1049 of file MemorySSA.cpp.