LLVM: llvm::MachineMemOperand Class Reference (original) (raw)
A description of a memory reference used in the backend. More...
#include "[llvm/CodeGen/MachineMemOperand.h](MachineMemOperand%5F8h%5Fsource.html)"
| 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 MachinePointerInfo & | getPointerInfo () const |
| const Value * | getValue () const |
| Return the base address of the memory access. | |
| const PseudoSourceValue * | getPseudoValue () 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 MDNode * | getRanges () 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<<. |
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.
◆ 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.
◆ MachineMemOperand() [2/2]
◆ clearRanges()
| void llvm::MachineMemOperand::clearRanges ( ) | inline |
|---|
◆ getAAInfo()
| AAMDNodes llvm::MachineMemOperand::getAAInfo ( ) const | inline |
|---|
◆ getAddrSpace()
| unsigned llvm::MachineMemOperand::getAddrSpace ( ) const | inline |
|---|
◆ getAlign()
| Align MachineMemOperand::getAlign | ( | ) | const |
|---|
Return the minimum known alignment in bytes of the actual memory reference.
getAlign - Return the minimum known alignment in bytes of the actual memory reference.
Definition at line 1166 of file MachineOperand.cpp.
References llvm::commonAlignment(), getBaseAlign(), and getOffset().
Referenced by llvm::TargetLoweringBase::allowsMemoryAccess(), llvm::TargetLoweringBase::allowsMemoryAccess(), llvm::X86TargetLowering::allowsMemoryAccess(), llvm::TargetLoweringBase::allowsMemoryAccessForAlignment(), llvm::AMDGPURegisterBankInfo::applyMappingLoad(), llvm::GIMatchTableExecutor::executeMatchTable(), llvm::GMemOperation::getAlign(), isMemoryOp(), llvm::AMDGPURegisterBankInfo::isScalarLoadLegal(), llvm::AMDGPULegalizerInfo::legalizeLoad(), llvm::CombinerHelper::matchCombineExtractedVectorLoad(), print(), and llvm::AMDGPU::RegBankLegalizeRules::RegBankLegalizeRules().
◆ 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
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(), narrowBitOpRMW(), 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()
| LLT llvm::MachineMemOperand::getMemoryType ( ) const | inline |
|---|
◆ getMergedOrdering()
| AtomicOrdering llvm::MachineMemOperand::getMergedOrdering ( ) const | inline |
|---|
◆ getOffset()
| int64_t llvm::MachineMemOperand::getOffset ( ) const | inline |
|---|
◆ getOpaqueValue()
| const void * llvm::MachineMemOperand::getOpaqueValue ( ) const | inline |
|---|
◆ getPointerInfo()
Definition at line 207 of file MachineMemOperand.h.
Referenced by llvm::SIRegisterInfo::buildSpillLoadStore(), 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::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::getStridedLoadVP(), llvm::SelectionDAG::getStridedStoreVP(), llvm::SelectionDAG::getTruncStoreVP(), llvm::SelectionDAG::getTruncStridedStoreVP(), llvm::LegalizerHelper::lowerLoad(), llvm::LegalizerHelper::lowerStore(), llvm::CombinerHelper::matchCombineExtractedVectorLoad(), llvm::CombinerHelper::matchCombineLoadWithAndMask(), llvm::CombinerHelper::matchLoadOrCombine(), llvm::LegalizerHelper::scalarizeVectorBooleanStore(), tryMemPairCombine(), and llvm::LegalizerHelper::widenScalar().
◆ getPseudoValue()
◆ getRanges()
| const MDNode * llvm::MachineMemOperand::getRanges ( ) const | inline |
|---|
◆ getSize()
| LocationSize llvm::MachineMemOperand::getSize ( ) const | inline |
|---|
Return the size in bytes of the memory reference.
Definition at line 243 of file MachineMemOperand.h.
References llvm::LocationSize::beforeOrAfterPointer(), and llvm::LocationSize::precise().
Referenced by llvm::AMDGPURegisterBankInfo::applyMappingLoad(), llvm::SystemZInstrInfo::areMemAccessesTriviallyDisjoint(), llvm::TargetInstrInfo::describeLoadedValue(), llvm::PPCHazardRecognizer970::EmitInstruction(), llvm::GIMatchTableExecutor::executeMatchTable(), llvm::PPCTargetLowering::expandVSXLoadForLE(), llvm::PPCTargetLowering::expandVSXStoreForLE(), llvm::SystemZInstrInfo::foldMemoryOperandImpl(), llvm::PPCHazardRecognizer970::getHazardType(), llvm::MachineFunction::getMachineMemOperand(), llvm::MachineFunction::getMachineMemOperand(), llvm::GMemOperation::getMemSize(), llvm::AMDGPURegisterBankInfo::isScalarLoadLegal(), llvm::AMDGPULegalizerInfo::legalizeBufferStore(), MemOperandsHaveAlias(), print(), refineAlignment(), and llvm::AMDGPU::RegBankLegalizeRules::RegBankLegalizeRules().
◆ getSizeInBits()
| LocationSize llvm::MachineMemOperand::getSizeInBits ( ) const | inline |
|---|
◆ 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()
| SyncScope::ID llvm::MachineMemOperand::getSyncScopeID ( ) const | inline |
|---|
◆ getType()
| LLT llvm::MachineMemOperand::getType ( ) const | inline |
|---|
◆ 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 |
|---|
◆ isDereferenceable()
| bool llvm::MachineMemOperand::isDereferenceable ( ) const | inline |
|---|
◆ isInvariant()
| bool llvm::MachineMemOperand::isInvariant ( ) const | inline |
|---|
◆ isLoad()
| bool llvm::MachineMemOperand::isLoad ( ) const | inline |
|---|
◆ isNonTemporal()
| bool llvm::MachineMemOperand::isNonTemporal ( ) const | inline |
|---|
◆ isStore()
| bool llvm::MachineMemOperand::isStore ( ) const | inline |
|---|
◆ isUnordered()
| bool llvm::MachineMemOperand::isUnordered ( ) const | inline |
|---|
◆ isVolatile()
| bool llvm::MachineMemOperand::isVolatile ( ) const | inline |
|---|
◆ print()
Support for operator<<.
Definition at line 1170 of file MachineOperand.cpp.
References assert(), llvm::cast(), llvm::PseudoSourceValue::ConstantPool, llvm::PseudoSourceValue::ExternalSymbolCallEntry, llvm::PseudoSourceValue::FixedStack, getAAInfo(), getAddrSpace(), getAlign(), getBaseAlign(), getFailureOrdering(), getFlags(), getMemoryType(), getOffset(), getOpaqueValue(), getPseudoValue(), getRanges(), getSize(), getSuccessOrdering(), getSyncScopeID(), getTargetMMOFlagName(), getValue(), llvm::PseudoSourceValue::GlobalValueCallEntry, llvm::PseudoSourceValue::GOT, isDereferenceable(), isInvariant(), isLoad(), isNonTemporal(), isStore(), isValid(), isVolatile(), isZero(), llvm::PseudoSourceValue::JumpTable, MOTargetFlag1, MOTargetFlag2, MOTargetFlag3, MOTargetFlag4, llvm::NotAtomic, llvm::Metadata::printAsOperand(), llvm::MIRFormatter::printCustomPseudoSourceValue(), printFrameIndex(), llvm::MIRFormatter::printIRValue(), llvm::printLLVMNameWithoutPrefix(), llvm::MachineOperand::printOperandOffset(), printSyncScope(), llvm::PseudoSourceValue::Stack, TII, llvm::toIRString(), and llvm::Align::value().
Referenced by printMemOperand().
◆ refineAlignment()
◆ setFlags()
| void llvm::MachineMemOperand::setFlags ( Flags f) | inline |
|---|
◆ setOffset()
| void llvm::MachineMemOperand::setOffset ( int64_t NewOffset) | inline |
|---|
◆ setType()
| void llvm::MachineMemOperand::setType ( LLT NewTy) | inline |
|---|
◆ setValue() [1/2]
◆ 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!=
◆ operator==
The documentation for this class was generated from the following files:
- include/llvm/CodeGen/MachineMemOperand.h
- lib/CodeGen/MachineOperand.cpp