diff mbox

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

Message ID CADvRseb9qfJcumjK21BJ4PQE=kCtt5YX-gn9dBbqQkdMjeWsJg@mail.gmail.com
State New
Headers show

Commit Message

Yi Yang Aug. 14, 2014, 8:46 p.m. UTC
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.

Comments

Teresa Johnson Aug. 14, 2014, 8:49 p.m. UTC | #1
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
Yi Yang Aug. 14, 2014, 8:53 p.m. UTC | #2
Thank you. I fixed the typo and committed.

On Thu, Aug 14, 2014 at 1:49 PM, Teresa Johnson <tejohnson@google.com> wrote:
> 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
diff mbox

Patch

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. */
+#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);