> Yeah, that part is OK, and was the case I was thinking about when
> I said OK yesterday. But now that we allow BITSIZE != PRECISION,
> it's possible for BITSIZE - PRECISION to be more than a full byte,
> in which case the new loop would not initialise every byte of
> the mode.
Ah, I see, so when e.g. BITSIZE == 16 and PRECISION == 1. Luckily
this cannot happen with RVV as all we do is adjust the precision
of the modes that have BITSIZE == 8. I'm going to add an assert.
Juzhe would rather work around that in the backend, though.
The other thing I just noticed is
tree
build_truth_vector_type_for_mode (poly_uint64 nunits, machine_mode mask_mode)
{
gcc_assert (mask_mode != BLKmode);
unsigned HOST_WIDE_INT esize;
if (VECTOR_MODE_P (mask_mode))
{
poly_uint64 vsize = GET_MODE_BITSIZE (mask_mode);
esize = vector_element_size (vsize, nunits);
}
else
esize = 1;
tree bool_type = build_nonstandard_boolean_type (esize);
return make_vector_type (bool_type, nunits, mask_mode);
}
which gives us wrong precision as we rely on the BITSIZE here as well.
This results in a precision of 1 for VNx8BI, 2 for VNx4BI and 4 for
VNx2BI.
Maybe this isn't a problem per se but to me it appears
just wrong.
Regards
Robin