LLVM 22.0.0git
llvm::MachineMemOperand Class Reference

A description of a memory reference used in the backend. More...

#include "llvm/CodeGen/MachineMemOperand.h"

Public Types

enum  Flags : uint16_t {
  MONone = 0 , MOLoad = 1u << 0 , MOStore = 1u << 1 , MOVolatile = 1u << 2 ,
  MONonTemporal = 1u << 3 , MODereferenceable = 1u << 4 , MOInvariant = 1u << 5 , MOTargetFlag1 = 1u << 6 ,
  MOTargetFlag2 = 1u << 7 , MOTargetFlag3 = 1u << 8 , MOTargetFlag4 = 1u << 9
}
 Flags values. These may be or'd together. More...

Public Member Functions

LLVM_ABI MachineMemOperand (MachinePointerInfo PtrInfo, Flags flags, LocationSize TS, Align a, const AAMDNodes &AAInfo=AAMDNodes(), const MDNode *Ranges=nullptr, SyncScope::ID SSID=SyncScope::System, AtomicOrdering Ordering=AtomicOrdering::NotAtomic, AtomicOrdering FailureOrdering=AtomicOrdering::NotAtomic)
 Construct a MachineMemOperand object with the specified PtrInfo, flags, size, and base alignment.
LLVM_ABI MachineMemOperand (MachinePointerInfo PtrInfo, Flags flags, LLT type, Align a, const AAMDNodes &AAInfo=AAMDNodes(), const MDNode *Ranges=nullptr, SyncScope::ID SSID=SyncScope::System, AtomicOrdering Ordering=AtomicOrdering::NotAtomic, AtomicOrdering FailureOrdering=AtomicOrdering::NotAtomic)
const MachinePointerInfogetPointerInfo () const
const ValuegetValue () const
 Return the base address of the memory access.
const PseudoSourceValuegetPseudoValue () const
const void * getOpaqueValue () const
Flags getFlags () const
 Return the raw flags of the source value,.
void setFlags (Flags f)
 Bitwise OR the current flags with the given flags.
int64_t getOffset () const
 For normal values, this is a byte offset added to the base address.
unsigned getAddrSpace () const
LLT getMemoryType () const
 Return the memory type of the memory reference.
LocationSize getSize () const
 Return the size in bytes of the memory reference.
LocationSize getSizeInBits () const
 Return the size in bits of the memory reference.
LLT getType () const
LLVM_ABI Align getAlign () const
 Return the minimum known alignment in bytes of the actual memory reference.
Align getBaseAlign () const
 Return the minimum known alignment in bytes of the base address, without the offset.
AAMDNodes getAAInfo () const
 Return the AA tags for the memory reference.
const MDNodegetRanges () const
 Return the range tag for the memory reference.
SyncScope::ID getSyncScopeID () const
 Returns the synchronization scope ID for this memory operation.
AtomicOrdering getSuccessOrdering () const
 Return the atomic ordering requirements for this memory operation.
AtomicOrdering getFailureOrdering () const
 For cmpxchg atomic operations, return the atomic ordering requirements when store does not occur.
AtomicOrdering getMergedOrdering () const
 Return a single atomic ordering that is at least as strong as both the success and failure orderings for an atomic operation.
bool isLoad () const
bool isStore () const
bool isVolatile () const
bool isNonTemporal () const
bool isDereferenceable () const
bool isInvariant () const
bool isAtomic () const
 Returns true if this operation has an atomic ordering requirement of unordered or higher, false otherwise.
bool isUnordered () const
 Returns true if this memory operation doesn't have any ordering constraints other than normal aliasing.
LLVM_ABI void refineAlignment (const MachineMemOperand *MMO)
 Update this MachineMemOperand to reflect the alignment of MMO, if it has a greater alignment.
void setValue (const Value *NewSV)
 Change the SourceValue for this MachineMemOperand.
void setValue (const PseudoSourceValue *NewSV)
void setOffset (int64_t NewOffset)
void setType (LLT NewTy)
 Reset the tracked memory type.
void clearRanges ()
 Unset the tracked range metadata.
LLVM_ABI void print (raw_ostream &OS, ModuleSlotTracker &MST, SmallVectorImpl< StringRef > &SSNs, const LLVMContext &Context, const MachineFrameInfo *MFI, const TargetInstrInfo *TII) const
 Support for operator<<.

Friends

bool operator== (const MachineMemOperand &LHS, const MachineMemOperand &RHS)
bool operator!= (const MachineMemOperand &LHS, const MachineMemOperand &RHS)

Detailed Description

A description of a memory reference used in the backend.

Instead of holding a StoreInst or LoadInst, this class holds the address Value of the reference along with a byte size and offset. This allows it to describe lowered loads and stores. Also, the special PseudoSourceValue objects can be used to represent loads and stores to memory locations that aren't explicit in the regular LLVM IR.

Definition at line 130 of file MachineMemOperand.h.

Member Enumeration Documentation

◆ Flags

Flags values. These may be or'd together.

Enumerator
MONone 
MOLoad 

The memory access reads data.

MOStore 

The memory access writes data.

MOVolatile 

The memory access is volatile.

MONonTemporal 

The memory access is non-temporal.

MODereferenceable 

The memory access is dereferenceable (i.e., doesn't trap).

MOInvariant 

The memory access always returns the same value (or traps).

MOTargetFlag1 
MOTargetFlag2 
MOTargetFlag3 
MOTargetFlag4 

Definition at line 133 of file MachineMemOperand.h.

Constructor & Destructor Documentation

◆ MachineMemOperand() [1/2]

MachineMemOperand::MachineMemOperand ( MachinePointerInfo PtrInfo,
Flags flags,
LocationSize TS,
Align a,
const AAMDNodes & AAInfo = AAMDNodes(),
const MDNode * Ranges = nullptr,
SyncScope::ID SSID = SyncScope::System,
AtomicOrdering Ordering = AtomicOrdering::NotAtomic,
AtomicOrdering FailureOrdering = AtomicOrdering::NotAtomic )

Construct a MachineMemOperand object with the specified PtrInfo, flags, size, and base alignment.

For atomic operations the synchronization scope and atomic ordering requirements must also be specified. For cmpxchg atomic operations the atomic ordering requirements when store does not occur must also be specified.

Definition at line 1106 of file MachineOperand.cpp.

References F, getValue(), and MachineMemOperand().

Referenced by MachineMemOperand(), operator!=, operator==, and refineAlignment().

◆ MachineMemOperand() [2/2]

MachineMemOperand::MachineMemOperand ( MachinePointerInfo PtrInfo,
Flags flags,
LLT type,
Align a,
const AAMDNodes & AAInfo = AAMDNodes(),
const MDNode * Ranges = nullptr,
SyncScope::ID SSID = SyncScope::System,
AtomicOrdering Ordering = AtomicOrdering::NotAtomic,
AtomicOrdering FailureOrdering = AtomicOrdering::NotAtomic )

Member Function Documentation

◆ clearRanges()

void llvm::MachineMemOperand::clearRanges ( )
inline

Unset the tracked range metadata.

Definition at line 339 of file MachineMemOperand.h.

Referenced by llvm::LegalizerHelper::bitcast().

◆ getAAInfo()

AAMDNodes llvm::MachineMemOperand::getAAInfo ( ) const
inline

Return the AA tags for the memory reference.

Definition at line 269 of file MachineMemOperand.h.

Referenced by llvm::MachineFunction::getMachineMemOperand(), llvm::MachineFunction::getMachineMemOperand(), MemOperandsHaveAlias(), and print().

◆ getAddrSpace()

◆ getAlign()

◆ getBaseAlign()

Align llvm::MachineMemOperand::getBaseAlign ( ) const
inline

◆ getFailureOrdering()

AtomicOrdering llvm::MachineMemOperand::getFailureOrdering ( ) const
inline

◆ getFlags()

Flags llvm::MachineMemOperand::getFlags ( ) const
inline

Return the raw flags of the source value,.

See also
Flags.

Definition at line 227 of file MachineMemOperand.h.

Referenced by AddNodeIDCustom(), llvm::TargetLoweringBase::allowsMemoryAccess(), llvm::TargetLoweringBase::allowsMemoryAccess(), llvm::X86TargetLowering::allowsMemoryAccess(), llvm::TargetLoweringBase::allowsMemoryAccessForAlignment(), llvm::SIRegisterInfo::buildSpillLoadStore(), combineMOVDQ2Q(), combineStore(), combineTargetShuffle(), EltsFromConsecutiveLoads(), llvm::SelectionDAG::getAtomic(), llvm::SelectionDAG::getGatherVP(), llvm::SelectionDAG::getGetFPEnv(), llvm::SelectionDAG::getLoad(), llvm::SelectionDAG::getLoadFFVP(), llvm::SelectionDAG::getLoadVP(), llvm::MachineFunction::getMachineMemOperand(), llvm::MachineFunction::getMachineMemOperand(), llvm::MachineFunction::getMachineMemOperand(), llvm::MachineFunction::getMachineMemOperand(), llvm::SelectionDAG::getMaskedGather(), llvm::SelectionDAG::getMaskedHistogram(), llvm::SelectionDAG::getMaskedLoad(), llvm::SelectionDAG::getMaskedScatter(), llvm::SelectionDAG::getMaskedStore(), llvm::SelectionDAG::getMemIntrinsicNode(), llvm::SelectionDAG::getScatterVP(), llvm::SelectionDAG::getSetFPEnv(), llvm::SelectionDAG::getStore(), llvm::SelectionDAG::getStoreVP(), llvm::SelectionDAG::getTruncStoreVP(), llvm::SITargetLowering::isMemOpHasNoClobberedMemOperand(), llvm::AMDGPURegisterBankInfo::isScalarLoadLegal(), lowerFP_TO_SINT_STORE(), llvm::HexagonTargetLowering::LowerLoad(), LowerLoad(), LowerSTORE(), LowerStore(), narrowLoadToVZLoad(), PerformExtractFpToIntStores(), performIntToFpCombine(), llvm::AMDGPUTargetLowering::performLoadCombine(), PerformSplittingMVETruncToNarrowingStores(), PerformSplittingToNarrowingStores(), PerformSTORECombine(), llvm::AMDGPUTargetLowering::performStoreCombine(), PerformTruncatingStoreCombine(), print(), reduceMaskedStoreToScalarStore(), refineAlignment(), llvm::SparcTargetLowering::ReplaceNodeResults(), llvm::TargetLowering::scalarizeExtractedVectorLoad(), splitStores(), and splitStoreSplat().

◆ getMemoryType()

◆ getMergedOrdering()

AtomicOrdering llvm::MachineMemOperand::getMergedOrdering ( ) const
inline

Return a single atomic ordering that is at least as strong as both the success and failure orderings for an atomic operation.

(For operations other than cmpxchg, this is equivalent to getSuccessOrdering().)

Definition at line 295 of file MachineMemOperand.h.

References getFailureOrdering(), llvm::getMergedAtomicOrdering(), and getSuccessOrdering().

◆ getOffset()

int64_t llvm::MachineMemOperand::getOffset ( ) const
inline

For normal values, this is a byte offset added to the base address.

For PseudoSourceValue::FPRel values, this is the FrameIndex number.

Definition at line 234 of file MachineMemOperand.h.

Referenced by llvm::SystemZInstrInfo::areMemAccessesTriviallyDisjoint(), llvm::PPCHazardRecognizer970::EmitInstruction(), getAlign(), llvm::PPCHazardRecognizer970::getHazardType(), llvm::MachineFunction::getMachineMemOperand(), MemOperandsHaveAlias(), and print().

◆ getOpaqueValue()

const void * llvm::MachineMemOperand::getOpaqueValue ( ) const
inline

Definition at line 224 of file MachineMemOperand.h.

Referenced by print().

◆ getPointerInfo()

◆ getPseudoValue()

◆ getRanges()

◆ getSize()

◆ getSizeInBits()

◆ getSuccessOrdering()

AtomicOrdering llvm::MachineMemOperand::getSuccessOrdering ( ) const
inline

Return the atomic ordering requirements for this memory operation.

For cmpxchg atomic operations, return the atomic ordering requirements when store occurs.

Definition at line 282 of file MachineMemOperand.h.

Referenced by llvm::MachineFunction::getMachineMemOperand(), llvm::MachineFunction::getMachineMemOperand(), llvm::MachineFunction::getMachineMemOperand(), llvm::MachineFunction::getMachineMemOperand(), llvm::MachineFunction::getMachineMemOperand(), getMergedOrdering(), isAtomic(), isUnordered(), MachineMemOperand(), and print().

◆ getSyncScopeID()

◆ getType()

LLT llvm::MachineMemOperand::getType ( ) const
inline

Definition at line 256 of file MachineMemOperand.h.

◆ getValue()

const Value * llvm::MachineMemOperand::getValue ( ) const
inline

Return the base address of the memory access.

This may either be a normal LLVM IR Value, or one of the special values used in CodeGen. Special values are those obtained via PseudoSourceValue::getFixedStack(int), PseudoSourceValue::getStack, and other PseudoSourceValue member functions which return objects which stand for frame/stack pointer relative references and other special references which are not representable in the high-level IR.

Definition at line 216 of file MachineMemOperand.h.

References llvm::dyn_cast_if_present().

Referenced by llvm::SystemZInstrInfo::areMemAccessesTriviallyDisjoint(), llvm::PPCHazardRecognizer970::EmitInstruction(), llvm::PPCHazardRecognizer970::getHazardType(), llvm::MachineFunction::getMachineMemOperand(), getMMOFrameID(), llvm::AMDGPU::isUniformMMO(), MachineMemOperand(), MemOperandsHaveAlias(), and print().

◆ isAtomic()

bool llvm::MachineMemOperand::isAtomic ( ) const
inline

Returns true if this operation has an atomic ordering requirement of unordered or higher, false otherwise.

Definition at line 308 of file MachineMemOperand.h.

References getSuccessOrdering(), and llvm::NotAtomic.

Referenced by llvm::MachineIRBuilder::buildAtomicRMW(), llvm::SystemZInstrInfo::foldMemoryOperandImpl(), INITIALIZE_PASS(), llvm::GMemOperation::isAtomic(), isMemoryOp(), and llvm::AMDGPURegisterBankInfo::isScalarLoadLegal().

◆ isDereferenceable()

bool llvm::MachineMemOperand::isDereferenceable ( ) const
inline

Definition at line 303 of file MachineMemOperand.h.

References MODereferenceable.

Referenced by print().

◆ isInvariant()

bool llvm::MachineMemOperand::isInvariant ( ) const
inline

Definition at line 304 of file MachineMemOperand.h.

References MOInvariant.

Referenced by llvm::AMDGPURegisterBankInfo::isScalarLoadLegal(), and print().

◆ isLoad()

bool llvm::MachineMemOperand::isLoad ( ) const
inline

Definition at line 299 of file MachineMemOperand.h.

References MOLoad.

Referenced by MachineMemOperand(), and print().

◆ isNonTemporal()

bool llvm::MachineMemOperand::isNonTemporal ( ) const
inline

Definition at line 302 of file MachineMemOperand.h.

References MONonTemporal.

Referenced by llvm::RISCVInstrInfo::getInstSizeInBytes(), and print().

◆ isStore()

bool llvm::MachineMemOperand::isStore ( ) const
inline

Definition at line 300 of file MachineMemOperand.h.

References MOStore.

Referenced by MachineMemOperand(), and print().

◆ isUnordered()

bool llvm::MachineMemOperand::isUnordered ( ) const
inline

Returns true if this memory operation doesn't have any ordering constraints other than normal aliasing.

Volatile and (ordered) atomic memory operations can't be reordered.

Definition at line 315 of file MachineMemOperand.h.

References getSuccessOrdering(), isVolatile(), llvm::NotAtomic, and llvm::Unordered.

Referenced by llvm::MachineInstr::hasOrderedMemoryRef(), and llvm::GMemOperation::isUnordered().

◆ isVolatile()

◆ print()

◆ refineAlignment()

void MachineMemOperand::refineAlignment ( const MachineMemOperand * MMO)

Update this MachineMemOperand to reflect the alignment of MMO, if it has a greater alignment.

This must only be used when the new alignment applies to all users of this MachineMemOperand.

Definition at line 1120 of file MachineOperand.cpp.

References assert(), getBaseAlign(), getFlags(), getSize(), llvm::LocationSize::hasValue(), and MachineMemOperand().

◆ setFlags()

void llvm::MachineMemOperand::setFlags ( Flags f)
inline

Bitwise OR the current flags with the given flags.

Definition at line 230 of file MachineMemOperand.h.

Referenced by llvm::RISCVDAGToDAGISel::Select().

◆ setOffset()

void llvm::MachineMemOperand::setOffset ( int64_t NewOffset)
inline

Definition at line 331 of file MachineMemOperand.h.

◆ setType()

void llvm::MachineMemOperand::setType ( LLT NewTy)
inline

Reset the tracked memory type.

Definition at line 334 of file MachineMemOperand.h.

Referenced by llvm::LegalizerHelper::bitcast().

◆ setValue() [1/2]

void llvm::MachineMemOperand::setValue ( const PseudoSourceValue * NewSV)
inline

Definition at line 330 of file MachineMemOperand.h.

◆ setValue() [2/2]

void llvm::MachineMemOperand::setValue ( const Value * NewSV)
inline

Change the SourceValue for this MachineMemOperand.

This should only be used when an object is being relocated and all references to it are being updated.

Definition at line 329 of file MachineMemOperand.h.

◆ operator!=

bool operator!= ( const MachineMemOperand & LHS,
const MachineMemOperand & RHS )
friend

Definition at line 362 of file MachineMemOperand.h.

References LHS, MachineMemOperand(), and RHS.

◆ operator==

bool operator== ( const MachineMemOperand & LHS,
const MachineMemOperand & RHS )
friend

Definition at line 349 of file MachineMemOperand.h.

References LHS, MachineMemOperand(), and RHS.


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