[llvm] [IR] Add initial support for the byte type (PR #178666)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 10 08:51:23 PST 2026
================
@@ -13010,15 +13050,36 @@ is always a *no-op cast* because no bits change with this
conversion. The conversion is done as if the ``value`` had been stored
to memory and read back as type ``ty2``. Pointer (or vector of
pointers) types may only be converted to other pointer (or vector of
-pointers) types with the same address space through this instruction.
-To convert pointers to other types, use the :ref:`inttoptr <i_inttoptr>`
-or :ref:`ptrtoint <i_ptrtoint>` instructions first.
+pointers) types with the same address space or byte (or vector of bytes) types
+through this instruction. To convert pointers to other types, use the
+:ref:`inttoptr <i_inttoptr>` or :ref:`ptrtoint <i_ptrtoint>` instructions first.
There is a caveat for bitcasts involving vector types in relation to
endianness. For example ``bitcast <2 x i8> <value> to i16`` puts element zero
of the vector in the least significant bits of the i16 for little-endian while
element zero ends up in the most significant bits for big-endian.
+If ``value`` is of the :ref:`byte type <t_byte>`:
+
+* If ``value`` contains at least one ``poison`` bit, the cast result is
+ ``poison``.
----------------
nikic wrote:
This isn't quite right for casts to vector types, where only the lanes with the poison bits would be poison.
https://github.com/llvm/llvm-project/pull/178666
More information about the llvm-commits
mailing list