This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Fix twolf -funroll-loops -O3 miscompilation (a semi-latent web.c bug)
> 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