LLVM 17.0.0git
|
Class to represent pointers. More...
#include "llvm/IR/DerivedTypes.h"
Public Member Functions | |
PointerType (const PointerType &)=delete | |
PointerType & | operator= (const PointerType &)=delete |
bool | isOpaque () const |
unsigned | getAddressSpace () const |
Return the address space of the Pointer type. | |
bool | isOpaqueOrPointeeTypeMatches (Type *Ty) |
Return true if either this is an opaque pointer type or if this pointee type matches Ty. | |
bool | hasSameElementTypeAs (PointerType *Other) |
Return true if both pointer types have the same element type. | |
![]() | |
void | print (raw_ostream &O, bool IsForDebug=false, bool NoDetails=false) const |
Print the current type. | |
void | dump () const |
LLVMContext & | getContext () const |
Return the LLVMContext in which this type was uniqued. | |
TypeID | getTypeID () const |
Return the type id for the type. | |
bool | isVoidTy () const |
Return true if this is 'void'. | |
bool | isHalfTy () const |
Return true if this is 'half', a 16-bit IEEE fp type. | |
bool | isBFloatTy () const |
Return true if this is 'bfloat', a 16-bit bfloat type. | |
bool | is16bitFPTy () const |
Return true if this is a 16-bit float type. | |
bool | isFloatTy () const |
Return true if this is 'float', a 32-bit IEEE fp type. | |
bool | isDoubleTy () const |
Return true if this is 'double', a 64-bit IEEE fp type. | |
bool | isX86_FP80Ty () const |
Return true if this is x86 long double. | |
bool | isFP128Ty () const |
Return true if this is 'fp128'. | |
bool | isPPC_FP128Ty () const |
Return true if this is powerpc long double. | |
bool | isIEEELikeFPTy () const |
Return true if this is a well-behaved IEEE-like type, which has a IEEE compatible layout as defined by isIEEE(), and does not have unnormal values. | |
bool | isFloatingPointTy () const |
Return true if this is one of the floating-point types. | |
bool | isMultiUnitFPType () const |
Returns true if this is a floating-point type that is an unevaluated sum of multiple floating-point units. | |
const fltSemantics & | getFltSemantics () const |
bool | isX86_MMXTy () const |
Return true if this is X86 MMX. | |
bool | isX86_AMXTy () const |
Return true if this is X86 AMX. | |
bool | isTargetExtTy () const |
Return true if this is a target extension type. | |
bool | isScalableTargetExtTy () const |
Return true if this is a target extension type with a scalable layout. | |
bool | isScalableTy () const |
Return true if this is a scalable vector type or a target extension type with a scalable layout. | |
bool | isFPOrFPVectorTy () const |
Return true if this is a FP type or a vector of FP. | |
bool | isLabelTy () const |
Return true if this is 'label'. | |
bool | isMetadataTy () const |
Return true if this is 'metadata'. | |
bool | isTokenTy () const |
Return true if this is 'token'. | |
bool | isIntegerTy () const |
True if this is an instance of IntegerType. | |
bool | isIntegerTy (unsigned Bitwidth) const |
Return true if this is an IntegerType of the given width. | |
bool | isIntOrIntVectorTy () const |
Return true if this is an integer type or a vector of integer types. | |
bool | isIntOrIntVectorTy (unsigned BitWidth) const |
Return true if this is an integer type or a vector of integer types of the given width. | |
bool | isIntOrPtrTy () const |
Return true if this is an integer type or a pointer type. | |
bool | isFunctionTy () const |
True if this is an instance of FunctionType. | |
bool | isStructTy () const |
True if this is an instance of StructType. | |
bool | isArrayTy () const |
True if this is an instance of ArrayType. | |
bool | isPointerTy () const |
True if this is an instance of PointerType. | |
bool | isOpaquePointerTy () const |
True if this is an instance of an opaque PointerType. | |
bool | isPtrOrPtrVectorTy () const |
Return true if this is a pointer type or a vector of pointer types. | |
bool | isVectorTy () const |
True if this is an instance of VectorType. | |
bool | canLosslesslyBitCastTo (Type *Ty) const |
Return true if this type could be converted with a lossless BitCast to type 'Ty'. | |
bool | isEmptyTy () const |
Return true if this type is empty, that is, it has no elements or all of its elements are empty. | |
bool | isFirstClassType () const |
Return true if the type is "first class", meaning it is a valid type for a Value. | |
bool | isSingleValueType () const |
Return true if the type is a valid type for a register in codegen. | |
bool | isAggregateType () const |
Return true if the type is an aggregate type. | |
bool | isSized (SmallPtrSetImpl< Type * > *Visited=nullptr) const |
Return true if it makes sense to take the size of this type. | |
TypeSize | getPrimitiveSizeInBits () const LLVM_READONLY |
Return the basic size of this type if it is a primitive type. | |
unsigned | getScalarSizeInBits () const LLVM_READONLY |
If this is a vector type, return the getPrimitiveSizeInBits value for the element type. | |
int | getFPMantissaWidth () const |
Return the width of the mantissa of this type. | |
bool | isIEEE () const |
Return whether the type is IEEE compatible, as defined by the eponymous method in APFloat. | |
Type * | getScalarType () const |
If this is a vector type, return the element type, otherwise return 'this'. | |
subtype_iterator | subtype_begin () const |
subtype_iterator | subtype_end () const |
ArrayRef< Type * > | subtypes () const |
subtype_reverse_iterator | subtype_rbegin () const |
subtype_reverse_iterator | subtype_rend () const |
Type * | getContainedType (unsigned i) const |
This method is used to implement the type iterator (defined at the end of the file). | |
unsigned | getNumContainedTypes () const |
Return the number of types in the derived type. | |
unsigned | getIntegerBitWidth () const |
Type * | getFunctionParamType (unsigned i) const |
unsigned | getFunctionNumParams () const |
bool | isFunctionVarArg () const |
StringRef | getStructName () const |
unsigned | getStructNumElements () const |
Type * | getStructElementType (unsigned N) const |
uint64_t | getArrayNumElements () const |
Type * | getArrayElementType () const |
StringRef | getTargetExtName () const |
Type * | getPointerElementType () const |
This method is deprecated without replacement. | |
Type * | getNonOpaquePointerElementType () const |
Only use this method in code that is not reachable with opaque pointers, or part of deprecated methods that will be removed as part of the opaque pointers transition. | |
Type * | getWithNewType (Type *EltTy) const |
Given vector type, change the element type, whilst keeping the old number of elements. | |
Type * | getWithNewBitWidth (unsigned NewBitWidth) const |
Given an integer or vector type, change the lane bitwidth to NewBitwidth, whilst keeping the old number of lanes. | |
Type * | getExtendedType () const |
Given scalar/vector integer type, returns a type with elements twice as wide as in the original type. | |
unsigned | getPointerAddressSpace () const |
Get the address space of this pointer or pointer vector type. | |
PointerType * | getPointerTo (unsigned AddrSpace=0) const |
Return a pointer to the current type. | |
Static Public Member Functions | |
static PointerType * | get (Type *ElementType, unsigned AddressSpace) |
This constructs a pointer to an object of the specified type in a numbered address space. | |
static PointerType * | get (LLVMContext &C, unsigned AddressSpace) |
This constructs an opaque pointer to an object in a numbered address space. | |
static PointerType * | getUnqual (Type *ElementType) |
This constructs a pointer to an object of the specified type in the default address space (address space zero). | |
static PointerType * | getUnqual (LLVMContext &C) |
This constructs an opaque pointer to an object in the default address space (address space zero). | |
static PointerType * | getWithSamePointeeType (PointerType *PT, unsigned AddressSpace) |
This constructs a pointer type with the same pointee type as input PointerType (or opaque pointer if the input PointerType is opaque) and the given address space. | |
static bool | isValidElementType (Type *ElemTy) |
Return true if the specified type is valid as a element type. | |
static bool | isLoadableOrStorableType (Type *ElemTy) |
Return true if we can load or store from a pointer to this type. | |
static bool | classof (const Type *T) |
Implement support type inquiry through isa, cast, and dyn_cast. | |
![]() | |
static Type * | getPrimitiveType (LLVMContext &C, TypeID IDNumber) |
Return a type based on an identifier. | |
static Type * | getVoidTy (LLVMContext &C) |
static Type * | getLabelTy (LLVMContext &C) |
static Type * | getHalfTy (LLVMContext &C) |
static Type * | getBFloatTy (LLVMContext &C) |
static Type * | getFloatTy (LLVMContext &C) |
static Type * | getDoubleTy (LLVMContext &C) |
static Type * | getMetadataTy (LLVMContext &C) |
static Type * | getX86_FP80Ty (LLVMContext &C) |
static Type * | getFP128Ty (LLVMContext &C) |
static Type * | getPPC_FP128Ty (LLVMContext &C) |
static Type * | getX86_MMXTy (LLVMContext &C) |
static Type * | getX86_AMXTy (LLVMContext &C) |
static Type * | getTokenTy (LLVMContext &C) |
static IntegerType * | getIntNTy (LLVMContext &C, unsigned N) |
static IntegerType * | getInt1Ty (LLVMContext &C) |
static IntegerType * | getInt8Ty (LLVMContext &C) |
static IntegerType * | getInt16Ty (LLVMContext &C) |
static IntegerType * | getInt32Ty (LLVMContext &C) |
static IntegerType * | getInt64Ty (LLVMContext &C) |
static IntegerType * | getInt128Ty (LLVMContext &C) |
template<typename ScalarTy > | |
static Type * | getScalarTy (LLVMContext &C) |
static Type * | getFloatingPointTy (LLVMContext &C, const fltSemantics &S) |
static PointerType * | getHalfPtrTy (LLVMContext &C, unsigned AS=0) |
static PointerType * | getBFloatPtrTy (LLVMContext &C, unsigned AS=0) |
static PointerType * | getFloatPtrTy (LLVMContext &C, unsigned AS=0) |
static PointerType * | getDoublePtrTy (LLVMContext &C, unsigned AS=0) |
static PointerType * | getX86_FP80PtrTy (LLVMContext &C, unsigned AS=0) |
static PointerType * | getFP128PtrTy (LLVMContext &C, unsigned AS=0) |
static PointerType * | getPPC_FP128PtrTy (LLVMContext &C, unsigned AS=0) |
static PointerType * | getX86_MMXPtrTy (LLVMContext &C, unsigned AS=0) |
static PointerType * | getX86_AMXPtrTy (LLVMContext &C, unsigned AS=0) |
static PointerType * | getIntNPtrTy (LLVMContext &C, unsigned N, unsigned AS=0) |
static PointerType * | getInt1PtrTy (LLVMContext &C, unsigned AS=0) |
static PointerType * | getInt8PtrTy (LLVMContext &C, unsigned AS=0) |
static PointerType * | getInt16PtrTy (LLVMContext &C, unsigned AS=0) |
static PointerType * | getInt32PtrTy (LLVMContext &C, unsigned AS=0) |
static PointerType * | getInt64PtrTy (LLVMContext &C, unsigned AS=0) |
static Type * | getWasm_ExternrefTy (LLVMContext &C) |
static Type * | getWasm_FuncrefTy (LLVMContext &C) |
Additional Inherited Members | |
![]() | |
enum | TypeID { HalfTyID = 0 , BFloatTyID , FloatTyID , DoubleTyID , X86_FP80TyID , FP128TyID , PPC_FP128TyID , VoidTyID , LabelTyID , MetadataTyID , X86_MMXTyID , X86_AMXTyID , TokenTyID , IntegerTyID , FunctionTyID , PointerTyID , StructTyID , ArrayTyID , FixedVectorTyID , ScalableVectorTyID , TypedPointerTyID , TargetExtTyID } |
Definitions of all of the base types for the Type system. More... | |
using | subtype_iterator = Type *const * |
using | subtype_reverse_iterator = std::reverse_iterator< subtype_iterator > |
![]() | |
Type (LLVMContext &C, TypeID tid) | |
~Type ()=default | |
unsigned | getSubclassData () const |
void | setSubclassData (unsigned val) |
![]() | |
unsigned | NumContainedTys = 0 |
Keeps track of how many Type*'s there are in the ContainedTys list. | |
Type *const * | ContainedTys = nullptr |
A pointer to the array of Types contained by this Type. | |
Class to represent pointers.
Definition at line 643 of file DerivedTypes.h.
|
delete |
Implement support type inquiry through isa, cast, and dyn_cast.
Definition at line 712 of file DerivedTypes.h.
References llvm::Type::PointerTyID.
|
static |
This constructs an opaque pointer to an object in a numbered address space.
Definition at line 815 of file Type.cpp.
References llvm::LLVMContextImpl::Alloc, llvm::LLVMContextImpl::AS0PointerType, assert(), llvm::CallingConv::C, llvm::LLVMContextImpl::getOpaquePointers(), and llvm::LLVMContextImpl::PointerTypes.
|
static |
This constructs a pointer to an object of the specified type in a numbered address space.
Referenced by llvm::orc::createIRTypedAddress(), DecodeFixedType(), llvm::SelectionDAG::getEVTAlign(), llvm::GetElementPtrInst::getGEPReturnType(), llvm::ConstantExpr::getGetElementPtr(), llvm::getOrCreateSPIRVDeviceEventPointer(), llvm::SPIRVGlobalRegistry::getOrCreateSPIRVPointerType(), llvm::Module::getOrInsertFunction(), llvm::Module::getOrInsertGlobal(), llvm::IRBuilderBase::getPtrTy(), getUnqual(), getWithSamePointeeType(), llvm::CallLowering::insertSRetIncomingArgument(), llvm::CallLowering::insertSRetOutgoingArgument(), isLoadInvariantInLoop(), llvm::TargetLowering::LowerCallTo(), llvm::NVPTXTargetLowering::LowerFormalArguments(), llvm::RandomIRBuilder::newSink(), runImpl(), llvm::InstCombinerImpl::SimplifyAnyMemSet(), llvm::InstCombinerImpl::SimplifyAnyMemTransfer(), and llvm::InstCombinerImpl::visitAllocaInst().
|
inline |
Return the address space of the Pointer type.
Definition at line 693 of file DerivedTypes.h.
References llvm::Type::getSubclassData().
Referenced by llvm::GCNTTIImpl::adjustInliningThreshold(), llvm::MachineIRBuilder::buildGlobalValue(), llvm::CastInst::castIsValid(), llvm::orc::cloneGlobalVariableDecl(), llvm::FunctionComparator::cmpConstants(), llvm::FunctionComparator::cmpTypes(), constantFoldCompareGlobalToNull(), llvm::ConstantFoldGetElementPtr(), llvm::convertToDeclaration(), llvm::GlobalAddressSDNode::getAddressSpace(), llvm::GlobalValue::getAddressSpace(), llvm::AllocaInst::getAddressSpace(), llvm::ConstantExpr::getAddrSpaceCast(), llvm::getAttributeBasedInliningDecision(), llvm::getCallsiteCost(), llvm::X86TTIImpl::getGatherScatterOpCost(), llvm::GetElementPtrInst::getGEPReturnType(), llvm::ConstantExpr::getGetElementPtr(), llvm::SPIRVGlobalRegistry::getOrCreateConstNullPtr(), llvm::isLegalToPromote(), llvm::DataLayout::isNonIntegralPointerType(), isUnmergeableGlobal(), processInternalGlobal(), TryToShrinkGlobalToBoolean(), and llvm::ObjectSizeOffsetVisitor::visitConstantPointerNull().
|
inlinestatic |
This constructs an opaque pointer to an object in the default address space (address space zero).
Definition at line 668 of file DerivedTypes.h.
References llvm::CallingConv::C, and get().
|
inlinestatic |
This constructs a pointer to an object of the specified type in the default address space (address space zero).
Definition at line 662 of file DerivedTypes.h.
References get().
Referenced by llvm::fuzzerop::anyPtrType(), llvm::InlineAsmKeyType::create(), createMalloc(), DecodeFixedType(), llvm::InlineAsm::get(), llvm::ScalarEvolution::getElementSize(), getMemCmpLoad(), llvm::ConstantExpr::getSizeOf(), llvm::PPCTTIImpl::instCombineIntrinsic(), instCombineLD1GatherIndex(), instCombineST1ScatterIndex(), llvm::SparcTargetLowering::LowerF128_LibCallArg(), llvm::SparcTargetLowering::LowerF128Op(), llvm::fuzzerop::sizedPtrType(), llvm::UpgradeIntrinsicCall(), UpgradeMaskedLoad(), and UpgradeMaskedStore().
|
inlinestatic |
This constructs a pointer type with the same pointee type as input PointerType (or opaque pointer if the input PointerType is opaque) and the given address space.
This is only useful during the opaque pointer transition. TODO: remove after opaque pointer transition is complete.
Definition at line 677 of file DerivedTypes.h.
References get(), llvm::Type::getContext(), and isOpaque().
Referenced by llvm::SITargetLowering::emitExpandAtomicRMW(), and llvm::ConstantExpr::getAddrSpaceCast().
|
inline |
Return true if both pointer types have the same element type.
Two opaque pointers are considered to have the same element type, while an opaque and a non-opaque pointer have different element types. TODO: Remove after opaque pointer transition is complete.
Definition at line 707 of file DerivedTypes.h.
References llvm::Other.
Referenced by llvm::ConstantExpr::getAddrSpaceCast(), and llvm::CastInst::isEliminableCastPair().
Return true if we can load or store from a pointer to this type.
Definition at line 851 of file Type.cpp.
References llvm::Type::isFunctionTy(), and isValidElementType().
|
inline |
Definition at line 684 of file DerivedTypes.h.
Referenced by llvm::ConstantFoldGetElementPtr(), llvm::GetElementPtrInst::getGEPReturnType(), llvm::ConstantExpr::getGetElementPtr(), getWithSamePointeeType(), llvm::InductionDescriptor::isInductionPHI(), and isOpaqueOrPointeeTypeMatches().
Return true if either this is an opaque pointer type or if this pointee type matches Ty.
Primarily used for checking if an instruction's pointer operands are valid types. Will be useless after non-opaque pointers are removed.
Definition at line 699 of file DerivedTypes.h.
References isOpaque().
Referenced by llvm::ConstantExpr::getGetElementPtr().
Return true if the specified type is valid as a element type.
Definition at line 845 of file Type.cpp.
References llvm::Type::isLabelTy(), llvm::Type::isMetadataTy(), llvm::Type::isTokenTy(), llvm::Type::isVoidTy(), and llvm::Type::isX86_AMXTy().
Referenced by llvm::GlobalVariable::GlobalVariable(), and isLoadableOrStorableType().
|
delete |