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.