LLVM 22.0.0git
llvm::MemorySSA::SkipSelfWalker Class Referencefinal
Inheritance diagram for llvm::MemorySSA::SkipSelfWalker:
[legend]

Public Member Functions

 SkipSelfWalker (MemorySSA *M, ClobberWalkerBase *W)
 ~SkipSelfWalker () override=default
MemoryAccessgetClobberingMemoryAccess (MemoryAccess *MA, BatchAAResults &BAA, unsigned &UWL)
MemoryAccessgetClobberingMemoryAccess (MemoryAccess *MA, const MemoryLocation &Loc, BatchAAResults &BAA, unsigned &UWL)
MemoryAccessgetClobberingMemoryAccess (MemoryAccess *MA, BatchAAResults &BAA) override
 Does the same thing as getClobberingMemoryAccess(const Instruction *I), but takes a MemoryAccess instead of an Instruction.
MemoryAccessgetClobberingMemoryAccess (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.
MemoryAccessgetClobberingMemoryAccess (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).
MemoryAccessgetClobberingMemoryAccess (const Instruction *I)
MemoryAccessgetClobberingMemoryAccess (MemoryAccess *MA)
MemoryAccessgetClobberingMemoryAccess (MemoryAccess *MA, const MemoryLocation &Loc)
Public Member Functions inherited from llvm::MemorySSAWalker
LLVM_ABI MemorySSAWalker (MemorySSA *)
virtual ~MemorySSAWalker ()=default
MemoryAccessgetClobberingMemoryAccess (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).
MemoryAccessgetClobberingMemoryAccess (const Instruction *I)
MemoryAccessgetClobberingMemoryAccess (MemoryAccess *MA)
MemoryAccessgetClobberingMemoryAccess (MemoryAccess *MA, const MemoryLocation &Loc)

Additional Inherited Members

Public Types inherited from llvm::MemorySSAWalker
using MemoryAccessSet = SmallVector<MemoryAccess *, 8>
Protected Attributes inherited from llvm::MemorySSAWalker
MemorySSAMSSA

Detailed Description

Definition at line 1055 of file MemorySSA.cpp.

Constructor & Destructor Documentation

◆ SkipSelfWalker()

llvm::MemorySSA::SkipSelfWalker::SkipSelfWalker ( MemorySSA * M,
ClobberWalkerBase * W )
inline

◆ ~SkipSelfWalker()

llvm::MemorySSA::SkipSelfWalker::~SkipSelfWalker ( )
overridedefault

Member Function Documentation

◆ getClobberingMemoryAccess() [1/8]

MemoryAccess * llvm::MemorySSAWalker::getClobberingMemoryAccess ( const Instruction * I)
inline

Definition at line 1080 of file MemorySSA.h.

◆ getClobberingMemoryAccess() [2/8]

MemoryAccess * llvm::MemorySSAWalker::getClobberingMemoryAccess ( const Instruction * I,
BatchAAResults & AA )
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 1053 of file MemorySSA.h.

◆ getClobberingMemoryAccess() [3/8]

MemoryAccess * llvm::MemorySSAWalker::getClobberingMemoryAccess ( MemoryAccess * MA)
inline

Definition at line 1085 of file MemorySSA.h.

◆ getClobberingMemoryAccess() [4/8]

MemoryAccess * llvm::MemorySSA::SkipSelfWalker::getClobberingMemoryAccess ( MemoryAccess * ,
BatchAAResults & AA )
inlineoverridevirtual

Does the same thing as getClobberingMemoryAccess(const Instruction *I), but takes a MemoryAccess instead of an Instruction.

Implements llvm::MemorySSAWalker.

Definition at line 1075 of file MemorySSA.cpp.

References getClobberingMemoryAccess(), and MaxCheckLimit().

◆ getClobberingMemoryAccess() [5/8]

MemoryAccess * llvm::MemorySSA::SkipSelfWalker::getClobberingMemoryAccess ( MemoryAccess * MA,
BatchAAResults & BAA,
unsigned & UWL )
inline

Definition at line 1065 of file MemorySSA.cpp.

Referenced by getClobberingMemoryAccess(), and getClobberingMemoryAccess().

◆ getClobberingMemoryAccess() [6/8]

MemoryAccess * llvm::MemorySSAWalker::getClobberingMemoryAccess ( MemoryAccess * MA,
const MemoryLocation & Loc )
inline

Definition at line 1090 of file MemorySSA.h.

◆ getClobberingMemoryAccess() [7/8]

MemoryAccess * llvm::MemorySSA::SkipSelfWalker::getClobberingMemoryAccess ( MemoryAccess * ,
const MemoryLocation & ,
BatchAAResults & AA )
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 1080 of file MemorySSA.cpp.

References getClobberingMemoryAccess(), and MaxCheckLimit().

◆ getClobberingMemoryAccess() [8/8]

MemoryAccess * llvm::MemorySSA::SkipSelfWalker::getClobberingMemoryAccess ( MemoryAccess * MA,
const MemoryLocation & Loc,
BatchAAResults & BAA,
unsigned & UWL )
inline

Definition at line 1069 of file MemorySSA.cpp.

◆ invalidateInfo()

void llvm::MemorySSA::SkipSelfWalker::invalidateInfo ( MemoryAccess * )
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 1087 of file MemorySSA.cpp.

References llvm::dyn_cast().


The documentation for this class was generated from the following file: