This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: RFA: current_function_funcdef_no vs. target_reinit
- From: "Richard Guenther" <richard dot guenther at gmail dot com>
- To: gcc-patches at gcc dot gnu dot org, rdsandiford at googlemail dot com
- Date: Thu, 26 Jun 2008 23:44:39 +0200
- Subject: Re: RFA: current_function_funcdef_no vs. target_reinit
- References: <87y74roq60.fsf@firetop.home>
On Thu, Jun 26, 2008 at 11:13 PM, Richard Sandiford
<rdsandiford@googlemail.com> wrote:
> I think we should make:
>
> ...switch to a new subtarget...
> target_reinit ();
> ...switch back to the old subtarget...
> target_reinit ();
>
> a no-op sequence as far as possible. For example, PCH files should
> only be sensitive to the target in use for each given function;
> they should not be sensitive the _number_ of target_reinit calls.
>
> This patch fixes one case where the sequence isn't a no-op.
> backend_init_target has the following code:
>
> /* The following initialization functions need to generate rtl, so
> provide a dummy function context for them. */
> init_dummy_function_start ();
>
> And this dummy function gets a unique function definition number,
> meaning that the call leaves a trace in function.c:funcdef_no.
>
> A definition number of 0 should be fine for the dummy function,
> so this patch only allocates a unique number for non-null decls.
>
> Tested on mipsisa64-elfoabi and x86_64-linux-gnu. It fixes some
> PCH regressions caused by another patch that I'm about to post.
> OK to install?
Ok.
Thanks,
Richard.
> Richard
>
>
> gcc/
> * function.c (allocate_struct_function): Only allocate a unique
> funcdef_no if the decl is nonzero.
>
> Index: gcc/function.c
> ===================================================================
> --- gcc/function.c 2008-06-24 17:15:41.000000000 +0100
> +++ gcc/function.c 2008-06-24 17:16:05.000000000 +0100
> @@ -3843,8 +3843,6 @@ allocate_struct_function (tree fndecl, b
>
> cfun = ggc_alloc_cleared (sizeof (struct function));
>
> - current_function_funcdef_no = get_next_funcdef_no ();
> -
> cfun->function_frequency = FUNCTION_FREQUENCY_NORMAL;
>
> init_eh_for_function ();
> @@ -3860,6 +3858,7 @@ allocate_struct_function (tree fndecl, b
> {
> DECL_STRUCT_FUNCTION (fndecl) = cfun;
> cfun->decl = fndecl;
> + current_function_funcdef_no = get_next_funcdef_no ();
>
> result = DECL_RESULT (fndecl);
> if (!abstract_p && aggregate_value_p (result, fndecl))
>