[Bug rtl-optimization/85925] [7/8/9 regression] Mis-compilation at -02, masking with 257 goes wrong in combine
ebotcazou at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Nov 14 15:25:00 GMT 2018
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
More information about the Gcc-bugs
mailing list