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