[llvm] [IR] Add initial support for the byte type (PR #178666)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 19 08:00:39 PST 2026
================
@@ -100,6 +100,59 @@ unsigned Type::getIntegerBitWidth() const {
return cast<IntegerType>(this)->getBitWidth();
}
+/// Class to represent byte types.
+class ByteType : public Type {
+ friend class LLVMContextImpl;
+
+protected:
+ explicit ByteType(LLVMContext &C, unsigned NumBits) : Type(C, ByteTyID) {
+ setSubclassData(NumBits);
+ }
+
+public:
+ /// This enum is just used to hold constants we need for ByteType.
+ enum {
+ MIN_BYTE_BITS = 1, ///< Minimum number of bits that can be specified
+ MAX_BYTE_BITS =
+ (1 << 23) ///< Maximum number of bits that can be specified
+ ///< Note that bit width is stored in the Type classes
+ ///< SubclassData field which has 24 bits. SelectionDAG type
+ ///< legalization can require a power of 2 ByteType, so limit
+ ///< to the largest representable power of 2, 8388608.
+ };
+
+ /// This static method is the primary way of constructing a ByteType.
+ /// If a ByteType with the same NumBits value was previously instantiated,
+ /// that instance will be returned. Otherwise a new one will be created. Only
+ /// one instance with a given NumBits value is ever created.
+ /// Get or create a ByteType instance.
+ LLVM_ABI static ByteType *get(LLVMContext &C, unsigned NumBits);
+
+ /// Returns type twice as wide the input type.
+ ByteType *getExtendedType() const {
+ return Type::getByteNTy(getContext(), 2 * getScalarSizeInBits());
+ }
+
+ /// Get the number of bits in this ByteType
+ unsigned getBitWidth() const { return getSubclassData(); }
+
+ /// Return a bitmask with ones set for all of the bits. This is 0xFF for i8,
+ /// 0xFFFF for i16, etc.
+ uint64_t getBitMask() const { return ~uint64_t(0UL) >> (64 - getBitWidth()); }
----------------
nikic wrote:
I'd omit this unless/until we find it is useful.
getExtendedType() also looks kind of dubious in this context.
https://github.com/llvm/llvm-project/pull/178666
More information about the llvm-commits
mailing list