LLVM 17.0.0git
|
#include "llvm/IR/Attributes.h"
Public Types | |
enum | AttrKind { None , EndAttrKinds , EmptyKey , TombstoneKey } |
This enumeration lists the attributes that can be associated with parameters, function results, or the function itself. More... | |
Public Member Functions | |
Attribute ()=default | |
Attribute | getWithNewType (LLVMContext &Context, Type *ReplacementTy) |
For a typed attribute, return the equivalent attribute with the type changed to ReplacementTy . | |
bool | isEnumAttribute () const |
Return true if the attribute is an Attribute::AttrKind type. | |
bool | isIntAttribute () const |
Return true if the attribute is an integer attribute. | |
bool | isStringAttribute () const |
Return true if the attribute is a string (target-dependent) attribute. | |
bool | isTypeAttribute () const |
Return true if the attribute is a type attribute. | |
bool | isValid () const |
Return true if the attribute is any kind of attribute. | |
bool | hasAttribute (AttrKind Val) const |
Return true if the attribute is present. | |
bool | hasAttribute (StringRef Val) const |
Return true if the target-dependent attribute is present. | |
Attribute::AttrKind | getKindAsEnum () const |
Return the attribute's kind as an enum (Attribute::AttrKind). | |
uint64_t | getValueAsInt () const |
Return the attribute's value as an integer. | |
bool | getValueAsBool () const |
Return the attribute's value as a boolean. | |
StringRef | getKindAsString () const |
Return the attribute's kind as a string. | |
StringRef | getValueAsString () const |
Return the attribute's value as a string. | |
Type * | getValueAsType () const |
Return the attribute's value as a Type. | |
MaybeAlign | getAlignment () const |
Returns the alignment field of an attribute as a byte alignment value. | |
MaybeAlign | getStackAlignment () const |
Returns the stack alignment field of an attribute as a byte alignment value. | |
uint64_t | getDereferenceableBytes () const |
Returns the number of dereferenceable bytes from the dereferenceable attribute. | |
uint64_t | getDereferenceableOrNullBytes () const |
Returns the number of dereferenceable_or_null bytes from the dereferenceable_or_null attribute. | |
std::pair< unsigned, std::optional< unsigned > > | getAllocSizeArgs () const |
Returns the argument numbers for the allocsize attribute. | |
unsigned | getVScaleRangeMin () const |
Returns the minimum value for the vscale_range attribute. | |
std::optional< unsigned > | getVScaleRangeMax () const |
Returns the maximum value for the vscale_range attribute or std::nullopt when unknown. | |
UWTableKind | getUWTableKind () const |
AllocFnKind | getAllocKind () const |
MemoryEffects | getMemoryEffects () const |
Returns memory effects. | |
std::string | getAsString (bool InAttrGrp=false) const |
The Attribute is converted to a string of equivalent mnemonic. | |
bool | hasParentContext (LLVMContext &C) const |
Return true if this attribute belongs to the LLVMContext. | |
bool | operator== (Attribute A) const |
Equality and non-equality operators. | |
bool | operator!= (Attribute A) const |
bool | operator< (Attribute A) const |
Less-than operator. Useful for sorting the attributes list. | |
void | Profile (FoldingSetNodeID &ID) const |
void * | getRawPointer () const |
Return a raw pointer that uniquely identifies this attribute. | |
Static Public Attributes | |
static const unsigned | NumIntAttrKinds = LastIntAttr - FirstIntAttr + 1 |
static const unsigned | NumTypeAttrKinds = LastTypeAttr - FirstTypeAttr + 1 |
Definition at line 67 of file Attributes.h.
This enumeration lists the attributes that can be associated with parameters, function results, or the function itself.
Note: The ‘uwtable’ attribute is about the ABI or the user mandating an entry in the unwind table. The ‘nounwind’ attribute is about an exception passing by the function.
In a theoretical system that uses tables for profiling and SjLj for exceptions, they would be fully independent. In a normal system that uses tables for both, the semantics are:
nil = Needs an entry because an exception might pass by. nounwind = No need for an entry uwtable = Needs an entry because the ABI says so and because an exception might pass by. uwtable + nounwind = Needs an entry because the ABI says so.
Enumerator | |
---|---|
None | No attributes have been set. |
EndAttrKinds | Sentinal value useful for loops. |
EmptyKey | |
TombstoneKey |
Definition at line 86 of file Attributes.h.
|
default |
Referenced by fromRawPointer(), and get().
Definition at line 608 of file Attributes.cpp.
References hasAttributeProperty().
Referenced by forceAttributes().
Definition at line 612 of file Attributes.cpp.
References hasAttributeProperty().
Definition at line 616 of file Attributes.cpp.
References hasAttributeProperty().
|
inlinestatic |
Get an attribute from a raw pointer created by getRawPointer.
Definition at line 274 of file Attributes.h.
References Attribute().
Referenced by llvm::unwrap().
|
static |
Definition at line 145 of file Attributes.cpp.
References llvm::LLVMContextImpl::Alloc, assert(), Attribute(), llvm::LLVMContextImpl::AttrsSet, Context, isTypeAttrKind(), and llvm::LLVMContext::pImpl.
|
static |
Return a uniquified Attribute object.
Definition at line 91 of file Attributes.cpp.
References llvm::LLVMContextImpl::Alloc, assert(), Attribute(), llvm::LLVMContextImpl::AttrsSet, Context, isEnumAttrKind(), isIntAttrKind(), and llvm::LLVMContext::pImpl.
Referenced by addAllocTypeAttribute(), llvm::AttrBuilder::addAttribute(), llvm::AttributeList::addAttributeAtIndex(), llvm::AttrBuilder::addRawIntAttr(), llvm::AttrBuilder::addTypeAttr(), adjustByValArgAlignment(), CreateGCStatepointCallCommon(), CreateGCStatepointInvokeCommon(), llvm::OpenMPIRBuilder::createOffloadEntry(), llvm::IRBuilderBase::CreatePreserveArrayAccessIndex(), llvm::IRBuilderBase::CreatePreserveStructAccessIndex(), llvm::AArch64TargetLowering::emitLoadLinked(), llvm::ARMTargetLowering::emitLoadLinked(), llvm::AArch64TargetLowering::emitStoreConditional(), llvm::ARMTargetLowering::emitStoreConditional(), llvm::AttributeList::get(), llvm::IRAttribute< AK, BaseType >::getDeducedAttributes(), getWithAlignment(), getWithAllocSizeArgs(), getWithByRefType(), getWithByValType(), getWithDereferenceableBytes(), getWithDereferenceableOrNullBytes(), getWithInAllocaType(), getWithMemoryEffects(), getWithNewType(), getWithPreallocatedType(), getWithStackAlignment(), getWithStructRetType(), getWithUWTableKind(), getWithVScaleRangeArgs(), LLVMAddTargetDependentFunctionAttr(), LLVMCreateEnumAttribute(), LLVMCreateStringAttribute(), LLVMCreateTypeAttribute(), processCallSite(), setAllocKind(), llvm::codegen::setFunctionAttributes(), llvm::setInlineRemark(), and llvm::VFABI::setVectorVariantNames().
|
static |
Definition at line 122 of file Attributes.cpp.
References llvm::LLVMContextImpl::Alloc, llvm::BumpPtrAllocatorImpl< AllocatorT, SlabSize, SizeThreshold, GrowthDelay >::Allocate(), Attribute(), llvm::LLVMContextImpl::AttrsSet, Context, llvm::StringRef::empty(), llvm::LLVMContext::pImpl, and llvm::StringAttributeImpl::totalSizeToAlloc().
MaybeAlign Attribute::getAlignment | ( | ) | const |
Returns the alignment field of an attribute as a byte alignment value.
Definition at line 336 of file Attributes.cpp.
References assert(), llvm::AttributeImpl::getValueAsInt(), and hasAttribute().
AllocFnKind Attribute::getAllocKind | ( | ) | const |
Definition at line 387 of file Attributes.cpp.
References assert(), llvm::AttributeImpl::getValueAsInt(), and hasAttribute().
Referenced by getAsString().
Returns the argument numbers for the allocsize attribute.
Definition at line 363 of file Attributes.cpp.
References assert(), llvm::AttributeImpl::getValueAsInt(), hasAttribute(), and unpackAllocSizeArgs().
Referenced by getAllocationSize(), and getAsString().
std::string Attribute::getAsString | ( | bool | InAttrGrp = false | ) | const |
The Attribute is converted to a string of equivalent mnemonic.
This is, presumably, for writing out the mnemonics for the assembly writer.
Definition at line 413 of file Attributes.cpp.
References llvm::Aligned, llvm::Alloc, llvm::MemoryEffects::ArgMem, llvm::SmallVectorTemplateCommon< T, typename >::begin(), llvm::Default, llvm::SmallVectorTemplateCommon< T, typename >::end(), llvm::raw_ostream::flush(), llvm::Free, getAllocKind(), getAllocSizeArgs(), getKindAsEnum(), getKindAsString(), getMemoryEffects(), llvm::MemoryEffects::getModRef(), getModRefStr(), getNameFromAttrKind(), getUWTableKind(), getValueAsInt(), llvm::AttributeImpl::getValueAsString(), getValueAsType(), getVScaleRangeMax(), getVScaleRangeMin(), hasAttribute(), llvm::MemoryEffects::InaccessibleMem, isEnumAttribute(), isStringAttribute(), isTypeAttribute(), llvm_unreachable, llvm::MemoryEffects::locations(), Name, llvm::NoModRef, llvm::None, llvm::MemoryEffects::Other, llvm::Type::print(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::Realloc, llvm::StringRef::str(), llvm::Sync, llvm::Uninitialized, llvm::Unknown, and llvm::Zeroed.
|
static |
Definition at line 233 of file Attributes.cpp.
References llvm::StringSwitch< T, R >::Default(), and None.
Referenced by llvm::fillMapFromAssume(), forceAttributes(), llvm::getKnowledgeFromBundle(), llvm::hasAttributeInAssume(), and LLVMGetEnumAttributeKindForName().
uint64_t Attribute::getDereferenceableBytes | ( | ) | const |
Returns the number of dereferenceable bytes from the dereferenceable attribute.
Definition at line 348 of file Attributes.cpp.
References assert(), llvm::AttributeImpl::getValueAsInt(), and hasAttribute().
Referenced by tryToMoveFreeBeforeNullTest().
uint64_t Attribute::getDereferenceableOrNullBytes | ( | ) | const |
Returns the number of dereferenceable_or_null bytes from the dereferenceable_or_null attribute.
Definition at line 355 of file Attributes.cpp.
References assert(), llvm::AttributeImpl::getValueAsInt(), and hasAttribute().
Attribute::AttrKind Attribute::getKindAsEnum | ( | ) | const |
Return the attribute's kind as an enum (Attribute::AttrKind).
This requires the attribute to be an enum, integer, or type attribute.
Definition at line 284 of file Attributes.cpp.
References assert(), llvm::AttributeImpl::getKindAsEnum(), isEnumAttribute(), isIntAttribute(), isTypeAttribute(), and None.
Referenced by llvm::AttrBuilder::addAttribute(), addIfNotExistent(), getAsString(), getWithNewType(), LLVMGetEnumAttributeKind(), and AttributeComparator::operator()().
StringRef Attribute::getKindAsString | ( | ) | const |
Return the attribute's kind as a string.
This requires the attribute to be a string attribute.
Definition at line 305 of file Attributes.cpp.
References assert(), llvm::AttributeImpl::getKindAsString(), and isStringAttribute().
Referenced by llvm::AttrBuilder::addAttribute(), addIfNotExistent(), getAsString(), LLVMGetStringAttributeKind(), and AttributeComparator::operator()().
MemoryEffects Attribute::getMemoryEffects | ( | ) | const |
Returns memory effects.
Definition at line 393 of file Attributes.cpp.
References assert(), llvm::MemoryEffects::createFromIntValue(), llvm::AttributeImpl::getValueAsInt(), and hasAttribute().
Referenced by getAsString().
|
static |
Definition at line 242 of file Attributes.cpp.
References llvm_unreachable, and None.
Referenced by getAsString(), and llvm::hasAttributeInAssume().
|
inline |
Return a raw pointer that uniquely identifies this attribute.
Definition at line 269 of file Attributes.h.
Referenced by llvm::wrap().
MaybeAlign Attribute::getStackAlignment | ( | ) | const |
Returns the stack alignment field of an attribute as a byte alignment value.
Definition at line 342 of file Attributes.cpp.
References assert(), llvm::AttributeImpl::getValueAsInt(), and hasAttribute().
UWTableKind Attribute::getUWTableKind | ( | ) | const |
Definition at line 381 of file Attributes.cpp.
References assert(), llvm::AttributeImpl::getValueAsInt(), and hasAttribute().
Referenced by getAsString().
bool Attribute::getValueAsBool | ( | ) | const |
Return the attribute's value as a boolean.
This requires that the attribute be a string attribute.
Definition at line 298 of file Attributes.cpp.
References assert(), llvm::AttributeImpl::getValueAsBool(), and isStringAttribute().
Referenced by llvm::AMDGPUMachineFunction::AMDGPUMachineFunction(), llvm::TargetLoweringBase::areJTsAllowed(), hasUnsafeFPMath(), llvm::AMDGPULibCalls::isUnsafeMath(), llvm::FastISel::lowerCall(), and SwitchToLookupTable().
uint64_t Attribute::getValueAsInt | ( | ) | const |
Return the attribute's value as an integer.
This requires that the attribute be an integer attribute.
Definition at line 291 of file Attributes.cpp.
References assert(), llvm::AttributeImpl::getValueAsInt(), and isIntAttribute().
Referenced by getAllocFnKind(), getAsString(), and isEqualOrWorse().
StringRef Attribute::getValueAsString | ( | ) | const |
Return the attribute's value as a string.
This requires the attribute to be a string attribute.
Definition at line 312 of file Attributes.cpp.
References assert(), llvm::AttributeImpl::getValueAsString(), and isStringAttribute().
Referenced by adjustCallerStackProbeSize(), adjustMinLegalVectorWidth(), llvm::AMDGPUMachineFunction::AMDGPUMachineFunction(), llvm::getAllocationFamily(), llvm::Function::getDenormalMode(), getDeoptLowering(), llvm::AMDGPUTargetMachine::getFeatureString(), llvm::AMDGPUTargetMachine::getGPUName(), llvm::X86TargetLowering::getStackProbeSymbolName(), llvm::getStringFnAttrAsInt(), llvm::SparcTargetMachine::getSubtargetImpl(), llvm::SystemZTargetMachine::getSubtargetImpl(), llvm::AArch64TargetMachine::getSubtargetImpl(), llvm::ARMBaseTargetMachine::getSubtargetImpl(), llvm::CSKYTargetMachine::getSubtargetImpl(), llvm::HexagonTargetMachine::getSubtargetImpl(), llvm::LoongArchTargetMachine::getSubtargetImpl(), llvm::M68kTargetMachine::getSubtargetImpl(), llvm::MipsTargetMachine::getSubtargetImpl(), llvm::PPCTargetMachine::getSubtargetImpl(), llvm::RISCVTargetMachine::getSubtargetImpl(), llvm::WebAssemblyTargetMachine::getSubtargetImpl(), llvm::X86TargetMachine::getSubtargetImpl(), llvm::VFABI::getVectorVariantNames(), llvm::PPCTargetLowering::hasInlineStackProbe(), llvm::SystemZTargetLowering::hasInlineStackProbe(), llvm::X86TargetLowering::hasInlineStackProbe(), isThumbFunction(), LLVMGetStringAttributeValue(), llvm::CallLowering::lowerCall(), llvm::RISCVTargetLowering::LowerFormalArguments(), llvm::RISCVTargetLowering::LowerReturn(), llvm::parseStatepointDirectivesFromAttrs(), llvm::SITargetLowering::shouldExpandAtomicRMWInIR(), and llvm::AttributeFuncs::updateMinLegalVectorWidthAttr().
Type * Attribute::getValueAsType | ( | ) | const |
Return the attribute's value as a Type.
This requires the attribute to be a type attribute.
Definition at line 319 of file Attributes.cpp.
References assert(), llvm::AttributeImpl::getValueAsType(), and isTypeAttribute().
Referenced by getAsString().
std::optional< unsigned > Attribute::getVScaleRangeMax | ( | ) | const |
Returns the maximum value for the vscale_range attribute or std::nullopt when unknown.
Definition at line 375 of file Attributes.cpp.
References assert(), llvm::AttributeImpl::getValueAsInt(), hasAttribute(), and unpackVScaleRangeArgs().
Referenced by getAsString(), llvm::AArch64TargetMachine::getSubtargetImpl(), llvm::RISCVTargetMachine::getSubtargetImpl(), llvm::InstCombinerImpl::visitSExt(), llvm::InstCombinerImpl::visitTrunc(), and llvm::InstCombinerImpl::visitZExt().
unsigned Attribute::getVScaleRangeMin | ( | ) | const |
Returns the minimum value for the vscale_range attribute.
Definition at line 369 of file Attributes.cpp.
References assert(), llvm::AttributeImpl::getValueAsInt(), hasAttribute(), and unpackVScaleRangeArgs().
Referenced by getAsString(), llvm::AArch64TargetMachine::getSubtargetImpl(), and llvm::RISCVTargetMachine::getSubtargetImpl().
|
static |
Return a uniquified Attribute object that has the specific alignment set.
Definition at line 167 of file Attributes.cpp.
References A, assert(), Context, get(), and llvm::Value::MaximumAlignment.
Referenced by llvm::MatrixBuilder::CreateColumnMajorLoad(), llvm::MatrixBuilder::CreateColumnMajorStore(), llvm::IRBuilderBase::CreateElementUnorderedAtomicMemMove(), llvm::IRBuilderBase::CreateThreadLocalAddress(), LLVMSetInstrParamAlignment(), LLVMSetParamAlignment(), llvm::MemIntrinsicBase< Derived >::setDestAlignment(), and llvm::MemTransferBase< BaseCL >::setSourceAlignment().
|
static |
Definition at line 220 of file Attributes.cpp.
References assert(), Context, get(), and packAllocSizeArgs().
Referenced by setAllocSize().
|
static |
Definition at line 197 of file Attributes.cpp.
|
static |
Definition at line 189 of file Attributes.cpp.
|
static |
Definition at line 177 of file Attributes.cpp.
References assert(), Context, and get().
Referenced by annotateDereferenceableBytes().
|
static |
Definition at line 183 of file Attributes.cpp.
|
static |
Definition at line 205 of file Attributes.cpp.
|
static |
Definition at line 214 of file Attributes.cpp.
References Context, get(), and llvm::MemoryEffects::toIntValue().
Referenced by fixupFPReturnAndCall(), llvm::AMDGPULibFunc::getOrInsertFunction(), runIPSCCP(), llvm::Function::setMemoryEffects(), and llvm::CallBase::setMemoryEffects().
|
inline |
For a typed attribute, return the equivalent attribute with the type changed to ReplacementTy
.
Definition at line 154 of file Attributes.h.
References assert(), Context, get(), getKindAsEnum(), and isTypeAttribute().
Referenced by llvm::AttributeList::replaceAttributeTypeAtIndex().
|
static |
Definition at line 201 of file Attributes.cpp.
|
static |
|
static |
Definition at line 193 of file Attributes.cpp.
|
static |
Definition at line 209 of file Attributes.cpp.
|
static |
Definition at line 227 of file Attributes.cpp.
References Context, get(), and packVScaleRangeArgs().
Return true if the attribute is present.
Definition at line 327 of file Attributes.cpp.
References llvm::AttributeImpl::hasAttribute(), and None.
Referenced by getAlignment(), getAllocKind(), getAllocSizeArgs(), getAsString(), getDereferenceableBytes(), getDereferenceableOrNullBytes(), getMemoryEffects(), getStackAlignment(), getUWTableKind(), getVScaleRangeMax(), getVScaleRangeMin(), and llvm::isStatepointDirectiveAttr().
Return true if the target-dependent attribute is present.
Definition at line 331 of file Attributes.cpp.
References llvm::AttributeImpl::hasAttribute(), and isStringAttribute().
bool Attribute::hasParentContext | ( | LLVMContext & | C | ) | const |
Return true if this attribute belongs to the LLVMContext.
Definition at line 573 of file Attributes.cpp.
References assert(), llvm::CallingConv::C, isValid(), and llvm::AttributeImpl::Profile().
bool Attribute::isEnumAttribute | ( | ) | const |
Return true if the attribute is an Attribute::AttrKind type.
Definition at line 268 of file Attributes.cpp.
References llvm::AttributeImpl::isEnumAttribute().
Referenced by addIfNotExistent(), getAsString(), and getKindAsEnum().
Definition at line 99 of file Attributes.h.
Referenced by get(), and llvm::AttributeImpl::Profile().
Return true if the provided string matches the IR name of an attribute.
example: "noalias" return true but not "NoAlias"
Definition at line 256 of file Attributes.cpp.
References llvm::StringSwitch< T, R >::Default(), and Name.
Referenced by llvm::hasAttributeInAssume().
bool Attribute::isIntAttribute | ( | ) | const |
Return true if the attribute is an integer attribute.
Definition at line 272 of file Attributes.cpp.
References llvm::AttributeImpl::isIntAttribute().
Referenced by addIfNotExistent(), getKindAsEnum(), getValueAsInt(), and isEqualOrWorse().
Definition at line 102 of file Attributes.h.
Referenced by get(), llvm::AttrBuilder::getRawIntAttr(), llvm::hasAttributeInAssume(), llvm::IntAttributeImpl::IntAttributeImpl(), and llvm::AttributeImpl::Profile().
bool Attribute::isStringAttribute | ( | ) | const |
Return true if the attribute is a string (target-dependent) attribute.
Definition at line 276 of file Attributes.cpp.
References llvm::AttributeImpl::isStringAttribute().
Referenced by llvm::AttrBuilder::addAttribute(), addIfNotExistent(), llvm::AMDGPUMachineFunction::AMDGPUMachineFunction(), getAsString(), getKindAsString(), getValueAsBool(), getValueAsString(), hasAttribute(), LLVMIsStringAttribute(), AttributeComparator::operator()(), and llvm::parseStatepointDirectivesFromAttrs().
bool Attribute::isTypeAttribute | ( | ) | const |
Return true if the attribute is a type attribute.
Definition at line 280 of file Attributes.cpp.
References llvm::AttributeImpl::isTypeAttribute().
Referenced by getAsString(), getKindAsEnum(), getValueAsType(), getWithNewType(), and LLVMIsTypeAttribute().
Definition at line 105 of file Attributes.h.
Referenced by addRawAttributeValue(), get(), and llvm::AttrBuilder::getTypeAttr().
|
inline |
Return true if the attribute is any kind of attribute.
Definition at line 185 of file Attributes.h.
Referenced by adjustCallerStackProbeSize(), adjustMinLegalVectorWidth(), llvm::AttrBuilder::contains(), llvm::getAllocationFamily(), getAllocFnKind(), llvm::AMDGPUTargetMachine::getFeatureString(), llvm::CallBase::getFnAttr(), llvm::AMDGPUTargetMachine::getGPUName(), getParameterABIAttributes(), llvm::getStringFnAttrAsInt(), llvm::SparcTargetMachine::getSubtargetImpl(), llvm::SystemZTargetMachine::getSubtargetImpl(), llvm::AArch64TargetMachine::getSubtargetImpl(), llvm::ARMBaseTargetMachine::getSubtargetImpl(), llvm::CSKYTargetMachine::getSubtargetImpl(), llvm::HexagonTargetMachine::getSubtargetImpl(), llvm::LoongArchTargetMachine::getSubtargetImpl(), llvm::M68kTargetMachine::getSubtargetImpl(), llvm::MipsTargetMachine::getSubtargetImpl(), llvm::PPCTargetMachine::getSubtargetImpl(), llvm::RISCVTargetMachine::getSubtargetImpl(), llvm::WebAssemblyTargetMachine::getSubtargetImpl(), llvm::X86TargetMachine::getSubtargetImpl(), hasParentContext(), isThumbFunction(), tryToMoveFreeBeforeNullTest(), and llvm::AttributeFuncs::updateMinLegalVectorWidthAttr().
Definition at line 261 of file Attributes.h.
References A.
Less-than operator. Useful for sorting the attributes list.
Definition at line 581 of file Attributes.cpp.
References A.
void Attribute::Profile | ( | FoldingSetNodeID & | ID | ) | const |
Definition at line 588 of file Attributes.cpp.
Definition at line 96 of file Attributes.h.
Definition at line 97 of file Attributes.h.