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

--- Comment #15 from Eric Botcazou <ebotcazou at gcc dot gnu.org> ---
OK, it's probably time to concede final defeat, although this will bring back
quite a few redundant extensions on RISC architectures like ARM and SPARC.

For the records, here's a bit of history about this stuff: in the early days,
the code was straightforward and just looked inside paradoxical SUBREGs on
targets for which WORD_REGISTER_OPERATIONS is defined:

nonzero_bits:

#ifndef WORD_REGISTER_OPERATIONS
  /* On many CISC machines, accessing an object in a wider mode
     causes the high-order bits to become undefined.  So they are
     not known to be zero.  */
  if (GET_MODE_SIZE (GET_MODE (x))
      > GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))
    nonzero |= (GET_MODE_MASK (GET_MODE (x))
                & ~ GET_MODE_MASK (GET_MODE (SUBREG_REG (x))));
#endif

num_sign_bit_copies:

#ifdef WORD_REGISTER_OPERATIONS
  /* For paradoxical SUBREGs on machines where all register operations
 affect the entire register, just look inside.  Note that we are
  5473     kenner        passing MODE to the recursive call, so the number of
sign bit copies
  5473     kenner        will remain relative to that mode, not the inner mode.
 */
  2189     kenner 
  2189     kenner       if (GET_MODE_SIZE (GET_MODE (x))
  2189     kenner         > GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))
  2189     kenner       return num_sign_bit_copies (SUBREG_REG (x), mode);
  2189     kenner #endif

Reply via email to