> 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