LLVM 22.0.0git
llvm::MemoryLocation Class Reference

Representation for a specific memory location. More...

#include "llvm/Analysis/MemoryLocation.h"

Public Types

enum  : uint64_t { UnknownSize = ~UINT64_C(0) }
 UnknownSize - This is a special value which can be used with the size arguments in alias queries to indicate that the caller does not know the sizes of the potential memory references. More...

Public Member Functions

void print (raw_ostream &OS) const
 MemoryLocation ()
 MemoryLocation (const Value *Ptr, LocationSize Size, const AAMDNodes &AATags=AAMDNodes())
 MemoryLocation (const Value *Ptr, TypeSize Size, const AAMDNodes &AATags=AAMDNodes())
 MemoryLocation (const Value *Ptr, uint64_t Size, const AAMDNodes &AATags=AAMDNodes())
MemoryLocation getWithNewPtr (const Value *NewPtr) const
MemoryLocation getWithNewSize (LocationSize NewSize) const
MemoryLocation getWithNewSize (uint64_t NewSize) const
MemoryLocation getWithNewSize (TypeSize NewSize) const
MemoryLocation getWithoutAATags () const
bool operator== (const MemoryLocation &Other) const

Static Public Member Functions

static LLVM_ABI MemoryLocation get (const LoadInst *LI)
 Return a location with information about the memory reference by the given instruction.
static LLVM_ABI MemoryLocation get (const StoreInst *SI)
static LLVM_ABI MemoryLocation get (const VAArgInst *VI)
static LLVM_ABI MemoryLocation get (const AtomicCmpXchgInst *CXI)
static LLVM_ABI MemoryLocation get (const AtomicRMWInst *RMWI)
static MemoryLocation get (const Instruction *Inst)
static LLVM_ABI std::optional< MemoryLocationgetOrNone (const Instruction *Inst)
static LLVM_ABI MemoryLocation getForSource (const MemTransferInst *MTI)
 Return a location representing the source of a memory transfer.
static LLVM_ABI MemoryLocation getForSource (const AnyMemTransferInst *MTI)
static LLVM_ABI MemoryLocation getForDest (const MemIntrinsic *MI)
 Return a location representing the destination of a memory set or transfer.
static LLVM_ABI MemoryLocation getForDest (const AnyMemIntrinsic *MI)
static LLVM_ABI std::optional< MemoryLocationgetForDest (const CallBase *CI, const TargetLibraryInfo &TLI)
static LLVM_ABI MemoryLocation getForArgument (const CallBase *Call, unsigned ArgIdx, const TargetLibraryInfo *TLI)
 Return a location representing a particular argument of a call.
static MemoryLocation getForArgument (const CallBase *Call, unsigned ArgIdx, const TargetLibraryInfo &TLI)
static MemoryLocation getAfter (const Value *Ptr, const AAMDNodes &AATags=AAMDNodes())
 Return a location that may access any location after Ptr, while remaining within the underlying object.
static MemoryLocation getBeforeOrAfter (const Value *Ptr, const AAMDNodes &AATags=AAMDNodes())
 Return a location that may access any location before or after Ptr, while remaining within the underlying object.

Public Attributes

const ValuePtr
 The address of the start of the location.
LocationSize Size
 The maximum size of the location, in address-units, or UnknownSize if the size is not known.
AAMDNodes AATags
 The metadata nodes which describes the aliasing of the location (each member is null if that kind of information is unavailable).

Detailed Description

Representation for a specific memory location.

This abstraction can be used to represent a specific location in memory. The goal of the location is to represent enough information to describe abstract aliasing, modification, and reference behaviors of whatever value(s) are stored in memory at the particular location.

The primary user of this interface is LLVM's Alias Analysis, but other memory analyses such as MemoryDependence can use it as well.

Definition at line 216 of file MemoryLocation.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum : uint64_t

UnknownSize - This is a special value which can be used with the size arguments in alias queries to indicate that the caller does not know the sizes of the potential memory references.

Enumerator
UnknownSize 

Definition at line 221 of file MemoryLocation.h.

Constructor & Destructor Documentation

◆ MemoryLocation() [1/4]

◆ MemoryLocation() [2/4]

llvm::MemoryLocation::MemoryLocation ( const Value * Ptr,
LocationSize Size,
const AAMDNodes & AATags = AAMDNodes() )
inlineexplicit

Definition at line 290 of file MemoryLocation.h.

References AATags, Ptr, and Size.

◆ MemoryLocation() [3/4]

llvm::MemoryLocation::MemoryLocation ( const Value * Ptr,
TypeSize Size,
const AAMDNodes & AATags = AAMDNodes() )
inlineexplicit

Definition at line 293 of file MemoryLocation.h.

References AATags, Ptr, and Size.

◆ MemoryLocation() [4/4]

llvm::MemoryLocation::MemoryLocation ( const Value * Ptr,
uint64_t Size,
const AAMDNodes & AATags = AAMDNodes() )
inlineexplicit

Definition at line 296 of file MemoryLocation.h.

References AATags, Ptr, and Size.

Member Function Documentation

◆ get() [1/6]

◆ get() [2/6]

◆ get() [3/6]

MemoryLocation llvm::MemoryLocation::get ( const Instruction * Inst)
inlinestatic

Definition at line 248 of file MemoryLocation.h.

References getOrNone(), and MemoryLocation().

◆ get() [4/6]

◆ get() [5/6]

MemoryLocation MemoryLocation::get ( const StoreInst * SI)
static

Definition at line 45 of file MemoryLocation.cpp.

References DL, MemoryLocation(), and llvm::LocationSize::precise().

◆ get() [6/6]

MemoryLocation MemoryLocation::get ( const VAArgInst * VI)
static

Definition at line 54 of file MemoryLocation.cpp.

References llvm::LocationSize::afterPointer(), and MemoryLocation().

◆ getAfter()

MemoryLocation llvm::MemoryLocation::getAfter ( const Value * Ptr,
const AAMDNodes & AATags = AAMDNodes() )
inlinestatic

Return a location that may access any location after Ptr, while remaining within the underlying object.

Definition at line 276 of file MemoryLocation.h.

References AATags, llvm::LocationSize::afterPointer(), MemoryLocation(), and Ptr.

Referenced by getForArgument(), GetLocation(), and llvm::MemoryDependenceResults::getSimplePointerDependencyFrom().

◆ getBeforeOrAfter()

◆ getForArgument() [1/2]

MemoryLocation llvm::MemoryLocation::getForArgument ( const CallBase * Call,
unsigned ArgIdx,
const TargetLibraryInfo & TLI )
inlinestatic

Definition at line 269 of file MemoryLocation.h.

References Call, getForArgument(), and MemoryLocation().

◆ getForArgument() [2/2]

◆ getForDest() [1/3]

MemoryLocation MemoryLocation::getForDest ( const AnyMemIntrinsic * MI)
static

Definition at line 108 of file MemoryLocation.cpp.

References assert(), getForArgument(), MemoryLocation(), and MI.

◆ getForDest() [2/3]

◆ getForDest() [3/3]

MemoryLocation MemoryLocation::getForDest ( const MemIntrinsic * MI)
static

◆ getForSource() [1/2]

◆ getForSource() [2/2]

MemoryLocation MemoryLocation::getForSource ( const MemTransferInst * MTI)
static

Return a location representing the source of a memory transfer.

Definition at line 95 of file MemoryLocation.cpp.

References llvm::cast(), getForSource(), and MemoryLocation().

Referenced by llvm::AliasSetTracker::add(), getForSource(), llvm::AA::isPotentiallyAffectedByBarrier(), and overreadUndefContents().

◆ getOrNone()

◆ getWithNewPtr()

MemoryLocation llvm::MemoryLocation::getWithNewPtr ( const Value * NewPtr) const
inline

Definition at line 300 of file MemoryLocation.h.

References MemoryLocation().

Referenced by memoryIsNotModifiedBetween().

◆ getWithNewSize() [1/3]

MemoryLocation llvm::MemoryLocation::getWithNewSize ( LocationSize NewSize) const
inline

Definition at line 306 of file MemoryLocation.h.

References MemoryLocation().

Referenced by getWithNewSize(), and getWithNewSize().

◆ getWithNewSize() [2/3]

MemoryLocation llvm::MemoryLocation::getWithNewSize ( TypeSize NewSize) const
inline

◆ getWithNewSize() [3/3]

MemoryLocation llvm::MemoryLocation::getWithNewSize ( uint64_t NewSize) const
inline

◆ getWithoutAATags()

MemoryLocation llvm::MemoryLocation::getWithoutAATags ( ) const
inline

Definition at line 318 of file MemoryLocation.h.

References MemoryLocation().

◆ operator==()

bool llvm::MemoryLocation::operator== ( const MemoryLocation & Other) const
inline

Definition at line 324 of file MemoryLocation.h.

References AATags, MemoryLocation(), llvm::Other, Ptr, and Size.

◆ print()

void llvm::MemoryLocation::print ( raw_ostream & OS) const
inline

Definition at line 239 of file MemoryLocation.h.

References Ptr, and Size.

Member Data Documentation

◆ AATags

◆ Ptr

◆ Size

LocationSize llvm::MemoryLocation::Size

The maximum size of the location, in address-units, or UnknownSize if the size is not known.

Note that an unknown size does not mean the pointer aliases the entire virtual address space, because there are restrictions on stepping out of one object and into another. See http://llvm.org/docs/LangRef.html#pointeraliasing

Definition at line 233 of file MemoryLocation.h.

Referenced by llvm::AAResults::alias(), llvm::BasicAAResult::alias(), llvm::objcarc::ObjCARCAAResult::alias(), llvm::SCEVAAResult::alias(), canSkipClobberingStore(), llvm::DependenceInfo::depends(), getForArgument(), llvm::DenseMapInfo< MemoryLocation >::getHashValue(), isPartialOverwrite(), MemoryLocation(), MemoryLocation(), MemoryLocation(), MemoryLocation(), operator==(), llvm::AliasSet::print(), and print().


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