| //===- llvm/IR/TypedPointerType.h - Typed Pointer Type --------------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file contains typed pointer type information. It is separated out into |
| // a separate file to make it less likely to accidentally use this type. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_IR_TYPEDPOINTERTYPE_H |
| #define LLVM_IR_TYPEDPOINTERTYPE_H |
| |
| #include "llvm/IR/Type.h" |
| |
| namespace llvm { |
| |
| /// A few GPU targets, such as DXIL and SPIR-V, have typed pointers. This |
| /// pointer type abstraction is used for tracking the types of these pointers. |
| /// It is not legal to use this type, or derived types containing this type, in |
| /// LLVM IR. |
| class TypedPointerType : public Type { |
| explicit TypedPointerType(Type *ElType, unsigned AddrSpace); |
| |
| Type *PointeeTy; |
| |
| public: |
| TypedPointerType(const TypedPointerType &) = delete; |
| TypedPointerType &operator=(const TypedPointerType &) = delete; |
| |
| /// This constructs a pointer to an object of the specified type in a numbered |
| /// address space. |
| static TypedPointerType *get(Type *ElementType, unsigned AddressSpace); |
| |
| /// Return true if the specified type is valid as a element type. |
| static bool isValidElementType(Type *ElemTy); |
| |
| /// Return the address space of the Pointer type. |
| unsigned getAddressSpace() const { return getSubclassData(); } |
| |
| Type *getElementType() const { return PointeeTy; } |
| |
| /// Implement support type inquiry through isa, cast, and dyn_cast. |
| static bool classof(const Type *T) { |
| return T->getTypeID() == TypedPointerTyID; |
| } |
| }; |
| |
| } // namespace llvm |
| |
| #endif // LLVM_IR_TYPEDPOINTERTYPE_H |