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

--- Comment #2 from Oleg Endo <olegendo at gcc dot gnu.org> ---
(In reply to Oleg Endo from comment #1)
> 
> Another more radical approach could be to insert an RTL pass that
> pre-allocates the R0 reg for those insns that have "z" constraint
> alternatives, similar to what Kaz did with the mov.{b|w} patterns in
> prepare_move_operands for LRA.

As a start, that pass could walk over all insns and make sure that for operands
with constraints/alternatives no hardregs are used before RA.  For instance

(set (reg:SI 163) (and:SI (reg:SI 5 r5) (const_int 128)))

would be changed to

(set (reg:SI 164) (reg:SI r5)) // 164 is a new pseudo
(set (reg:SI 163) (and:SI (reg:SI 164) (const_int 128)))

I think something like this would be feasible for 5.0.

Reply via email to