https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112758
--- Comment #4 from Segher Boessenkool <segher at gcc dot gnu.org> --- WORD_REGISTER_OPERATIONS is extremely ill-defined. Or, it is used for other things than what it stands for, whichever way you want to look at it. A backend that defines the macro to non-zero promises that for *any* operation on any values in a smaller than full-register mode, the compiler can instead do the operation in that full-register mode, and all the resulting bits will be well-defined. This is not true for most real non-trivial backends. There is word_register_operation_p to filter out the most obvious and egregious cases where WORD_REGISTER_OPERATIONS is just a foolish thing, but this function isn't used nearly enough, and it doesn't filter out enough either.