[GOOGLE] Fix the bug where implicit section names prevents function splitting

Teresa Johnson tejohnson@google.com
Thu Aug 14 20:49:00 GMT 2014


On Thu, Aug 14, 2014 at 1:46 PM, Yi Yang <ahyangyi@google.com> wrote:
> Patch v2.
>
> Trunk no longer set SECTION_NAME for implicit section names, so this
> probably does not apply to trunk. It's probably not necessary for
> trunk either.
>
> Tested for Google 4.8(albeit unnecessary) and 4.9 branch.
>
> diff --git gcc/bb-reorder.c gcc/bb-reorder.c
> index a1b3e65..b9a829e 100644
> --- gcc/bb-reorder.c
> +++ gcc/bb-reorder.c
> @@ -2554,7 +2554,7 @@ gate_handle_partition_blocks (void)
>       we are going to omit the reordering.  */
>    && optimize_function_for_speed_p (cfun)
>    && !DECL_ONE_ONLY (current_function_decl)
> -  && !DECL_SECTION_NAME (current_function_decl));
> +  && !DECL_HAS_EXPLICIT_SECTION_NAME_P(current_function_decl));
>  }
>
>  /* This function is the main 'entrance' for the optimization that
> diff --git gcc/tree.h gcc/tree.h
> index b656b7b..308eef8 100644
> --- gcc/tree.h
> +++ gcc/tree.h
> @@ -2405,6 +2405,11 @@ extern void decl_value_expr_insert (tree, tree);
>  #define DECL_HAS_IMPLICIT_SECTION_NAME_P(NODE) \
>    (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.implicit_section_name_p)
>
> +/* Speficy whether the section name was explicitly set with decl_attributes. */

Typo "Specify".

Otherwise looks ok to me.

Thanks,
Teresa

> +#define DECL_HAS_EXPLICIT_SECTION_NAME_P(NODE) \
> +  (DECL_SECTION_NAME(NODE) != NULL_TREE \
> +   && !DECL_HAS_IMPLICIT_SECTION_NAME_P(NODE))
> +
>  extern tree decl_debug_expr_lookup (tree);
>  extern void decl_debug_expr_insert (tree, tree);
>
> --
>
> On Thu, Aug 14, 2014 at 11:25 AM, Teresa Johnson <tejohnson@google.com> wrote:
>> On Wed, Aug 13, 2014 at 9:03 PM, Yi Yang <ahyangyi@google.com> wrote:
>>> This bug is caused by my last patch, which did not differentiate
>>> between explicit section names (via attributes) and implicit section
>>> names (via -ffunction-section).
>>>
>>> This patch fixes that.
>>>
>>> --
>>>
>>> diff --git gcc/bb-reorder.c gcc/bb-reorder.c
>>> index 8f8c420..2115b01 100644
>>> --- gcc/bb-reorder.c
>>> +++ gcc/bb-reorder.c
>>> @@ -2505,7 +2505,7 @@ gate_handle_partition_blocks (void)
>>>              we are going to omit the reordering.  */
>>>           && optimize_function_for_speed_p (cfun)
>>>           && !DECL_ONE_ONLY (current_function_decl)
>>> -         && !DECL_SECTION_NAME (current_function_decl));
>>> +         && !DECL_HAS_EXPLICIT_SECTION_NAME_P(current_function_decl));
>>>  }
>>>
>>>  /* This function is the main 'entrance' for the optimization that
>>> diff --git gcc/tree.h gcc/tree.h
>>> index 817507f..738675a 100644
>>> --- gcc/tree.h
>>> +++ gcc/tree.h
>>> @@ -3201,6 +3201,11 @@ struct GTY(()) tree_parm_decl {
>>>  #define DECL_HAS_IMPLICIT_SECTION_NAME_P(NODE) \
>>>    (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.implicit_section_name_p)
>>>
>>> +/* Speficy whether the section name was explicitly set with decl_attributes. */
>>> +#define DECL_HAS_EXPLICIT_SECTION_NAME_P(NODE) \
>>> +  (DECL_HAS_IMPLICIT_SECTION_NAME_P(NODE)? false: \
>>> +   !!DECL_SECTION_NAME(NODE))
>>
>> Personally, I think it is clearer to simply write this as:
>>
>> #define DECL_HAS_EXPLICIT_SECTION_NAME_P(NODE) \
>>     (DECL_SECTION_NAME(NODE) != NULL_TREE \
>>      && !DECL_HAS_IMPLICIT_SECTION_NAME_P(NODE))
>>
>> Teresa
>>
>>> +
>>>  struct GTY(()) tree_decl_with_vis {
>>>   struct tree_decl_with_rtl common;
>>>   tree assembler_name;
>>> --
>>
>>
>>
>> --
>> Teresa Johnson | Software Engineer | tejohnson@google.com | 408-460-2413



-- 
Teresa Johnson | Software Engineer | tejohnson@google.com | 408-460-2413



More information about the Gcc-patches mailing list