> The root cause is the bad REG_EQUAL note. I think the most robust > solution is to make the webizer re-compute notes before renaming. > Patch for that is attached.
Thanks for the analysis. However... > Ciao! > Steven > > > PR rtl-optimization/55006 > * web.c (web_main): Add the DF_NOTE problem, and explain whatfor. > > Index: web.c > =================================================================== > --- web.c (revision 193454) > +++ web.c (working copy) > @@ -335,9 +335,16 @@ web_main (void) > unsigned int uses_num = 0; > rtx insn; > > + /* Add the flags and problems we need. The DF_EQ_NOTES flag is set so > + that uses of registers in REG_EQUAL and REG_EQUIV notes are included > + in the web that their DEF belongs to, so that these uses are also > + properly renamed. The DF_NOTE problem is added to make sure that > + all notes are up-to-date and valid: Re-computing the notes problem > + also cleans up all dead REG_EQUAL notes. */ > df_set_flags (DF_NO_HARD_REGS + DF_EQ_NOTES); > df_set_flags (DF_RD_PRUNE_DEAD_DEFS); > df_chain_add_problem (DF_UD_CHAIN); > + df_note_add_problem (); > df_analyze (); > df_set_flags (DF_DEFER_INSN_RESCAN); ... that's not very satisfactory, as web doesn't use the DF_NOTE problem, so adding it just to clean things up in the other kind of notes is weird. Can't we arrange to clean up the REG_EQUAL/REG_EQUIV notes when we use them, i.e. when DF_EQ_NOTES is set? -- Eric Botcazou