cranelift: Remove booleans (#5031)
Remove the boolean types from cranelift, and the associated instructions breduce, bextend, bconst, and bint. Standardize on using 1/0 for the return value from instructions that produce scalar boolean results, and -1/0 for boolean vector elements. Fixes #3205 Co-authored-by: Afonso Bordado <afonso360@users.noreply.github.com> Co-authored-by: Ulrich Weigand <ulrich.weigand@de.ibm.com> Co-authored-by: Chris Fallin <chris@cfallin.org>
This commit is contained in:
@@ -575,8 +575,6 @@ pub struct ValueTypeSet {
|
||||
pub ints: BitSet8,
|
||||
/// Allowed float widths
|
||||
pub floats: BitSet8,
|
||||
/// Allowed bool widths
|
||||
pub bools: BitSet8,
|
||||
/// Allowed ref widths
|
||||
pub refs: BitSet8,
|
||||
/// Allowed dynamic vectors minimum lane sizes
|
||||
@@ -593,8 +591,6 @@ impl ValueTypeSet {
|
||||
self.ints.contains(l2b)
|
||||
} else if scalar.is_float() {
|
||||
self.floats.contains(l2b)
|
||||
} else if scalar.is_bool() {
|
||||
self.bools.contains(l2b)
|
||||
} else if scalar.is_ref() {
|
||||
self.refs.contains(l2b)
|
||||
} else {
|
||||
@@ -621,10 +617,8 @@ impl ValueTypeSet {
|
||||
types::I32
|
||||
} else if self.floats.max().unwrap_or(0) > 5 {
|
||||
types::F32
|
||||
} else if self.bools.max().unwrap_or(0) > 5 {
|
||||
types::B32
|
||||
} else {
|
||||
types::B1
|
||||
types::I8
|
||||
};
|
||||
t.by(1 << self.lanes.min().unwrap()).unwrap()
|
||||
}
|
||||
@@ -860,7 +854,6 @@ mod tests {
|
||||
lanes: BitSet16::from_range(0, 8),
|
||||
ints: BitSet8::from_range(4, 7),
|
||||
floats: BitSet8::from_range(0, 0),
|
||||
bools: BitSet8::from_range(3, 7),
|
||||
refs: BitSet8::from_range(5, 7),
|
||||
dynamic_lanes: BitSet16::from_range(0, 4),
|
||||
};
|
||||
@@ -870,9 +863,6 @@ mod tests {
|
||||
assert!(vts.contains(I32X4));
|
||||
assert!(vts.contains(I32X4XN));
|
||||
assert!(!vts.contains(F32));
|
||||
assert!(!vts.contains(B1));
|
||||
assert!(vts.contains(B8));
|
||||
assert!(vts.contains(B64));
|
||||
assert!(vts.contains(R32));
|
||||
assert!(vts.contains(R64));
|
||||
assert_eq!(vts.example().to_string(), "i32");
|
||||
@@ -881,7 +871,6 @@ mod tests {
|
||||
lanes: BitSet16::from_range(0, 8),
|
||||
ints: BitSet8::from_range(0, 0),
|
||||
floats: BitSet8::from_range(5, 7),
|
||||
bools: BitSet8::from_range(3, 7),
|
||||
refs: BitSet8::from_range(0, 0),
|
||||
dynamic_lanes: BitSet16::from_range(0, 8),
|
||||
};
|
||||
@@ -891,7 +880,6 @@ mod tests {
|
||||
lanes: BitSet16::from_range(1, 8),
|
||||
ints: BitSet8::from_range(0, 0),
|
||||
floats: BitSet8::from_range(5, 7),
|
||||
bools: BitSet8::from_range(3, 7),
|
||||
refs: BitSet8::from_range(0, 0),
|
||||
dynamic_lanes: BitSet16::from_range(0, 8),
|
||||
};
|
||||
@@ -899,23 +887,18 @@ mod tests {
|
||||
|
||||
let vts = ValueTypeSet {
|
||||
lanes: BitSet16::from_range(2, 8),
|
||||
ints: BitSet8::from_range(0, 0),
|
||||
ints: BitSet8::from_range(3, 7),
|
||||
floats: BitSet8::from_range(0, 0),
|
||||
bools: BitSet8::from_range(3, 7),
|
||||
refs: BitSet8::from_range(0, 0),
|
||||
dynamic_lanes: BitSet16::from_range(0, 8),
|
||||
};
|
||||
assert!(!vts.contains(B32X2));
|
||||
assert!(vts.contains(B32X4));
|
||||
assert!(vts.contains(B16X4XN));
|
||||
assert_eq!(vts.example().to_string(), "b32x4");
|
||||
assert_eq!(vts.example().to_string(), "i32x4");
|
||||
|
||||
let vts = ValueTypeSet {
|
||||
// TypeSet(lanes=(1, 256), ints=(8, 64))
|
||||
lanes: BitSet16::from_range(0, 9),
|
||||
ints: BitSet8::from_range(3, 7),
|
||||
floats: BitSet8::from_range(0, 0),
|
||||
bools: BitSet8::from_range(0, 0),
|
||||
refs: BitSet8::from_range(0, 0),
|
||||
dynamic_lanes: BitSet16::from_range(0, 8),
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user