This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: df_insn_refs_record's handling of global_regs[]


On 10/19/07, David Miller <davem@davemloft.net> wrote:
> From: "Seongbae Park (박성배, 朴成培)" <seongbae.park@gmail.com>
> Date: Tue, 16 Oct 2007 22:56:49 -0700
>
> > Did you replace the DF_REF_REG_USE with DEF ?
> > If so, that's not correct.  We need to add DEF as well as USE:
>  ...
> > Then, we'll need to change the df_invalidated_by_call loop
> > not to add global_regs[] again (with MAY_CLOBBER bits).
>
> Seongbae-ssi, I've done full regstraps of mainline with the
> following patch on sparc-linux-gnu and sparc64-linux-gnu.

I've been testing this on x86-64 on top of 4.3,
and I see one regression in libgomp which I'm trying to find out
whether it's this patch or some other external cause.

> Do you mind if I check in this fix?  I would also like to
> pursue getting this installed on the gcc-4.2 branch as well,
> as I stated I've already done several regstraps of the 4.2
> backport of this fix as well.

If you're not in a hurry, can you wait
till I run the regtest against 4.2 on x86-64 ?
I've already discussed the patch with Kenny
and we agreed that this is the right approach,
but I'd like to see the clean regtest on x86 for both 4.2 and 4.3
before I approve.
Thanks,

Seongbae

> Thank you.
>
> 2007-10-18  Seongbae Park <seongbae.park@gmail.com>
>         David S. Miller  <davem@davemloft.net>
>
>         * df-scan.c (df_get_call_refs): Mark global registers as both a
>         DF_REF_REG_USE and a non-clobber DF_REF_REG_DEF.
>
> --- df-scan.c.ORIG      2007-10-18 16:56:19.000000000 -0700
> +++ df-scan.c   2007-10-18 16:56:50.000000000 -0700
> @@ -3109,18 +3109,22 @@
>       so they are recorded as used.  */
>    for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
>      if (global_regs[i])
> -      df_ref_record (collection_rec, regno_reg_rtx[i],
> -                    NULL, bb, insn, DF_REF_REG_USE, flags);
> +      {
> +       df_ref_record (collection_rec, regno_reg_rtx[i],
> +                      NULL, bb, insn, DF_REF_REG_USE, flags);
> +       df_ref_record (collection_rec, regno_reg_rtx[i],
> +                      NULL, bb, insn, DF_REF_REG_DEF, flags);
> +      }
>
>    is_sibling_call = SIBLING_CALL_P (insn);
>    EXECUTE_IF_SET_IN_BITMAP (df_invalidated_by_call, 0, ui, bi)
>      {
> -      if ((!bitmap_bit_p (defs_generated, ui))
> +      if (!global_regs[ui]
> +         && (!bitmap_bit_p (defs_generated, ui))
>           && (!is_sibling_call
>               || !bitmap_bit_p (df->exit_block_uses, ui)
>               || refers_to_regno_p (ui, ui+1,
>                                     current_function_return_rtx, NULL)))
> -
>          df_ref_record (collection_rec, regno_reg_rtx[ui],
>                        NULL, bb, insn, DF_REF_REG_DEF, DF_REF_MAY_CLOBBER | flags);
>      }

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]