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

--- Comment #29 from Segher Boessenkool <segher at gcc dot gnu.org> ---
(In reply to Uroš Bizjak from comment #27)
> FYI, these constraints were used in the past (when combine was allowed to
> propagate hard registers into combined insn) to prevent reload failures,
> where reload was not able to e.g. reload wrong hard reg in the place of
> count reg in the shift insn pattern to %ecx. Nowadays, constraints in the
> patterns of pre-reload insn_and_split are not necessary anymore, and can be
> removed together with ix86_legitimate_combined_insn target hook.

combine still propagates hard registers.  The only thing it does not
combine is single-set register-register copies from a non-fixed hard
register; everything else with hard registers it still does, like if
the *destination* of the move is a hard reg (e.g., in the function
return value).

Does it help the i386 port if we disallow a hard reg dest as well?
RA should be able to handle that just fine as well.

This still will not get rid of *all* (non-fixed) hard registers, you
still can get them from explicit register variables, and target code
(or even generic code) can still put some in non-copies, which combine
will happily propagate further.

Reply via email to