pub struct Type(_);
Expand description
The type of an SSA value.
The INVALID
type isn’t a real type, and is used as a placeholder in the IR where a type
field is present put no type is needed, such as the controlling type variable for a
non-polymorphic instruction.
Basic integer types: I8
, I16
, I32
, I64
, and I128
. These types are sign-agnostic.
Basic floating point types: F32
and F64
. IEEE single and double precision.
Boolean types: B1
, B8
, B16
, B32
, B64
, and B128
. These all encode ‘true’ or ‘false’. The
larger types use redundant bits.
SIMD vector types have power-of-two lanes, up to 256. Lanes can be any int/float/bool type.
Implementations
sourceimpl Type
impl Type
sourcepub fn lane_type(self) -> Type
pub fn lane_type(self) -> Type
Get the lane type of this SIMD vector type.
A lane type is the same as a SIMD vector type with one lane, so it returns itself.
sourcepub fn lane_of(self) -> Type
pub fn lane_of(self) -> Type
The type transformation that returns the lane type of a type variable; it is just a renaming of lane_type() to be used in context where we think in terms of type variable transformations.
sourcepub fn log2_lane_bits(self) -> u8
pub fn log2_lane_bits(self) -> u8
Get log_2 of the number of bits in a lane.
sourcepub fn as_bool_pedantic(self) -> Type
pub fn as_bool_pedantic(self) -> Type
Get a type with the same number of lanes as this type, but with the lanes replaced by booleans of the same size.
Lane types are treated as vectors with one lane, so they are converted to the multi-bit boolean types.
sourcepub fn as_bool(self) -> Type
pub fn as_bool(self) -> Type
Get a type with the same number of lanes as this type, but with the lanes replaced by booleans of the same size.
Scalar types are all converted to b1
which is usually what you want.
sourcepub fn half_width(self) -> Option<Type>
pub fn half_width(self) -> Option<Type>
Get a type with the same number of lanes as this type, but with lanes that are half the number of bits.
sourcepub fn double_width(self) -> Option<Type>
pub fn double_width(self) -> Option<Type>
Get a type with the same number of lanes as this type, but with lanes that are twice the number of bits.
sourcepub fn is_invalid(self) -> bool
pub fn is_invalid(self) -> bool
Is this the INVALID type?
sourcepub fn is_special(self) -> bool
pub fn is_special(self) -> bool
Is this a special type?
sourcepub fn is_lane(self) -> bool
pub fn is_lane(self) -> bool
Is this a lane type?
This is a scalar type that can also appear as the lane type of a SIMD vector.
sourcepub fn log2_lane_count(self) -> u8
pub fn log2_lane_count(self) -> u8
Get log_2 of the number of lanes in this SIMD vector type.
All SIMD types have a lane count that is a power of two and no larger than 256, so this will be a number in the range 0-8.
A scalar type is the same as a SIMD vector type with one lane, so it returns 0.
sourcepub fn lane_count(self) -> u16
pub fn lane_count(self) -> u16
Get the number of lanes in this SIMD vector type.
A scalar type is the same as a SIMD vector type with one lane, so it returns 1.
sourcepub fn by(self, n: u16) -> Option<Type>
pub fn by(self, n: u16) -> Option<Type>
Get a SIMD vector type with n
times more lanes than this one.
If this is a scalar type, this produces a SIMD type with this as a lane type and n
lanes.
If this is already a SIMD vector type, this produces a SIMD vector type with n * self.lane_count()
lanes.
sourcepub fn half_vector(self) -> Option<Type>
pub fn half_vector(self) -> Option<Type>
Get a SIMD vector with half the number of lanes.
There is no double_vector()
method. Use t.by(2)
instead.
sourcepub fn split_lanes(self) -> Option<Type>
pub fn split_lanes(self) -> Option<Type>
Split the lane width in half and double the number of lanes to maintain the same bit-width.
If this is a scalar type of n
bits, it produces a SIMD vector type of (n/2)x2
.
sourcepub fn merge_lanes(self) -> Option<Type>
pub fn merge_lanes(self) -> Option<Type>
Merge lanes to half the number of lanes and double the lane width to maintain the same bit-width.
If this is a scalar type, it will return None
.
sourcepub fn wider_or_equal(self, other: Type) -> bool
pub fn wider_or_equal(self, other: Type) -> bool
True iff:
self.lane_count() == other.lane_count()
andself.lane_bits() >= other.lane_bits()
sourcepub fn triple_pointer_type(triple: &Triple) -> Type
pub fn triple_pointer_type(triple: &Triple) -> Type
Return the pointer type for the given target triple.
Trait Implementations
sourceimpl<'de> Deserialize<'de> for Type
impl<'de> Deserialize<'de> for Type
sourcepub fn deserialize<__D>(
__deserializer: __D
) -> Result<Type, <__D as Deserializer<'de>>::Error> where
__D: Deserializer<'de>,
pub fn deserialize<__D>(
__deserializer: __D
) -> Result<Type, <__D as Deserializer<'de>>::Error> where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
sourceimpl Serialize for Type
impl Serialize for Type
sourcepub fn serialize<__S>(
&self,
__serializer: __S
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error> where
__S: Serializer,
pub fn serialize<__S>(
&self,
__serializer: __S
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error> where
__S: Serializer,
Serialize this value into the given Serde serializer. Read more
impl Copy for Type
impl Eq for Type
impl StructuralEq for Type
impl StructuralPartialEq for Type
Auto Trait Implementations
impl RefUnwindSafe for Type
impl Send for Type
impl Sync for Type
impl Unpin for Type
impl UnwindSafe for Type
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcepub fn borrow_mut(&mut self) -> &mut T
pub fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> CallHasher for T where
T: Hash + ?Sized,
impl<T> CallHasher for T where
T: Hash + ?Sized,
sourceimpl<Q, K> Equivalent<K> for Q where
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Q where
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
sourcepub fn equivalent(&self, key: &K) -> bool
pub fn equivalent(&self, key: &K) -> bool
Compare self to key
and return true
if they are equal.
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcepub fn to_owned(&self) -> T
pub fn to_owned(&self) -> T
Creates owned data from borrowed data, usually by cloning. Read more
sourcepub fn clone_into(&self, target: &mut T)
pub fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more