@@ -50,6 +50,8 @@ static inline int_range<1>
range_true_and_false (tree type)
{
unsigned prec = TYPE_PRECISION (type);
+ if (prec == 1)
+ return int_range<2> (type);
return int_range<2> (type, wi::zero (prec), wi::one (prec));
}
new file mode 100644
@@ -0,0 +1,11 @@
+// { dg-do compile }
+// { dg-options "-mavx512vbmi -O1 -ftree-loop-vectorize" }
+
+void
+foo (_Float16 *r, short int *a)
+{
+ int i;
+
+ for (i = 0; i < 32; ++i)
+ r[i] = !!a[i];
+}
@@ -3437,6 +3437,8 @@ range_tests_misc ()
max.union_ (min);
ASSERT_TRUE (max.varying_p ());
}
+ // Test that we can set a range of true+false for a 1-bit signed int.
+ r0 = range_true_and_false (one_bit_type);
// Test inversion of 1-bit signed integers.
{