https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92213
--- Comment #4 from H.J. Lu <hjl.tools at gmail dot com> ---
/* The transfer function used by the DF equation solver to propagate
live info through block with BB_INDEX according to the following
equation:
bb.livein = (bb.liveout - bb.kill) OR bb.gen
*/
static bool
live_trans_fun (int bb_index)
{
basic_block bb = get_bb_data_by_index (bb_index)->bb;
bitmap bb_liveout = df_get_live_out (bb);
bitmap bb_livein = df_get_live_in (bb);
bb_data_t bb_info = get_bb_data (bb);
bitmap_and_compl (&temp_bitmap, bb_liveout, &all_hard_regs_bitmap);
^^^^^^^^^^^^^^^^^^^^
This does "temp_bitmap = bb_liveout & ~all_hard_regs_bitmap" which
clears all hard live out registers.
return bitmap_ior_and_compl (bb_livein, &bb_info->gen_pseudos,
&temp_bitmap, &bb_info->killed_pseudos);
}