Struct wasmtime_environ::ir::Type [−][src]
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
impl Type
[src]
pub fn lane_type(self) -> Type
[src]
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.
pub fn lane_of(self) -> Type
[src]
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.
pub fn log2_lane_bits(self) -> u8
[src]
Get log_2 of the number of bits in a lane.
pub fn lane_bits(self) -> u8
[src]
Get the number of bits in a lane.
pub fn int(bits: u16) -> Option<Type>
[src]
Get an integer type with the requested number of bits.
pub fn as_bool_pedantic(self) -> Type
[src]
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.
pub fn as_bool(self) -> Type
[src]
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.
pub fn half_width(self) -> Option<Type>
[src]
Get a type with the same number of lanes as this type, but with lanes that are half the number of bits.
pub fn double_width(self) -> Option<Type>
[src]
Get a type with the same number of lanes as this type, but with lanes that are twice the number of bits.
pub fn is_invalid(self) -> bool
[src]
Is this the INVALID type?
pub fn is_special(self) -> bool
[src]
Is this a special type?
pub fn is_lane(self) -> bool
[src]
Is this a lane type?
This is a scalar type that can also appear as the lane type of a SIMD vector.
pub fn is_vector(self) -> bool
[src]
Is this a SIMD vector type?
A vector type has 2 or more lanes.
pub fn is_bool(self) -> bool
[src]
Is this a scalar boolean type?
pub fn is_int(self) -> bool
[src]
Is this a scalar integer type?
pub fn is_float(self) -> bool
[src]
Is this a scalar floating point type?
pub fn is_flags(self) -> bool
[src]
Is this a CPU flags type?
pub fn is_ref(self) -> bool
[src]
Is this a ref type?
pub fn log2_lane_count(self) -> u8
[src]
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.
pub fn lane_count(self) -> u16
[src]
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.
pub fn bits(self) -> u16
[src]
Get the total number of bits used to represent this type.
pub fn bytes(self) -> u32
[src]
Get the number of bytes used to store this type in memory.
pub fn by(self, n: u16) -> Option<Type>
[src]
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.
pub fn half_vector(self) -> Option<Type>
[src]
Get a SIMD vector with half the number of lanes.
There is no double_vector()
method. Use t.by(2)
instead.
pub fn split_lanes(self) -> Option<Type>
[src]
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
.
pub fn merge_lanes(self) -> Option<Type>
[src]
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
.
pub fn index(self) -> usize
[src]
Index of this type, for use with hash tables etc.
pub fn wider_or_equal(self, other: Type) -> bool
[src]
True iff:
self.lane_count() == other.lane_count()
andself.lane_bits() >= other.lane_bits()
pub fn triple_pointer_type(triple: &Triple) -> Type
[src]
Return the pointer type for the given target triple.
Trait Implementations
impl Clone for Type
[src]
impl Copy for Type
[src]
impl Debug for Type
[src]
impl Default for Type
[src]
impl<'de> Deserialize<'de> for Type
[src]
pub fn deserialize<__D>(
__deserializer: __D
) -> Result<Type, <__D as Deserializer<'de>>::Error> where
__D: Deserializer<'de>,
[src]
__deserializer: __D
) -> Result<Type, <__D as Deserializer<'de>>::Error> where
__D: Deserializer<'de>,
impl Display for Type
[src]
impl Eq for Type
[src]
impl Hash for Type
[src]
pub fn hash<__H>(&self, state: &mut __H) where
__H: Hasher,
[src]
__H: Hasher,
pub fn hash_slice<H>(data: &[Self], state: &mut H) where
H: Hasher,
1.3.0[src]
H: Hasher,
impl PartialEq<Type> for Type
[src]
impl Serialize for Type
[src]
pub fn serialize<__S>(
&self,
__serializer: __S
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error> where
__S: Serializer,
[src]
&self,
__serializer: __S
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error> where
__S: Serializer,
impl StructuralEq for Type
[src]
impl StructuralPartialEq for Type
[src]
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
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> DeserializeOwned for T where
T: for<'de> Deserialize<'de>,
[src]
T: for<'de> Deserialize<'de>,
impl<Q, K> Equivalent<K> for Q where
K: Borrow<Q> + ?Sized,
Q: Eq + ?Sized,
[src]
K: Borrow<Q> + ?Sized,
Q: Eq + ?Sized,
pub fn equivalent(&self, key: &K) -> bool
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn clone_into(&self, target: &mut T)
[src]
impl<T> ToString for T where
T: Display + ?Sized,
[src]
T: Display + ?Sized,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,