https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113576

--- Comment #32 from Richard Biener <rguenth at gcc dot gnu.org> ---
Btw, AVX512 knotb will invert all 8 bits and there's no knot just affecting
the lowest 4 or 2 bits.

It all feels like desaster waiting to happen ;)

For example BIT_NOT_EXPR is RTL expanded like

    case BIT_NOT_EXPR:
      op0 = expand_expr (treeop0, subtarget,
                         VOIDmode, EXPAND_NORMAL);
      if (modifier == EXPAND_STACK_PARM)
        target = 0;
      /* In case we have to reduce the result to bitfield precision
         for unsigned bitfield expand this as XOR with a proper constant
         instead.  */
      if (reduce_bit_field && TYPE_UNSIGNED (type))
        {
          int_mode = SCALAR_INT_TYPE_MODE (type);
          wide_int mask = wi::mask (TYPE_PRECISION (type),
                                    false, GET_MODE_PRECISION (int_mode));

          temp = expand_binop (int_mode, xor_optab, op0,
                               immed_wide_int_const (mask, int_mode),
                               target, 1, OPTAB_LIB_WIDEN);

so we could, for VECTOR_BOOLEAN_TYPE_P with integer mode and
effective bit-precision set reduce_bit_field and fixup the fallout
(not sure why the above is only for TYPE_UNSIGNED).

At least it feels similar and doing things the opposite for vectors
(fixing up at uses) would be odd?

Reply via email to