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

Tom de Vries <vries at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |vmakarov at gcc dot gnu.org

--- Comment #1 from Tom de Vries <vries at gcc dot gnu.org> ---
> However, a bit later in lra we decide to assign r94,r95 to DImode pseudo 833:

This happens because r95 is not marked in the conflict_hard_regs of
lra_reg_info[833] during liveness analysis.

There's code in make_hard_regno_born to set the reg in the conflict_hard_regs
of live pseudos, but at the point that r95 becomes live, the r833 pseudo is not
live.

Then there's code in mark_pseudo_live to set the hard_regs_live in the
conflict_hard_regs of the pseudo, but at the point that r833 becomes live, r95
is not set in hard_regs_live, due to the fact that it's not set in
df_get_live_out (bb2).

OTOH, r95 is set in hard_regs_live at the end of processing bb3. But there's no
effort done to communicate the hard_regs_live findings to df_get_live_in (bb3),
to allow df propagation to df_get_live_out (bb2).

Furthermore, the df functions live_con_fun_0, live_con_fun_n and live_trans_fun
are explicitly setup to ignore hard regs.

Reply via email to