Ok, thanks. This seems reasonable. Can you send the patch to trunk as well? Teresa
On Mon, Aug 11, 2014 at 12:35 PM, Yi Yang <ahyan...@google.com> wrote: > Patch v2 > > .. > > diff --git gcc/bb-reorder.c gcc/bb-reorder.c > index fa6f62f..a1b3e65 100644 > --- gcc/bb-reorder.c > +++ gcc/bb-reorder.c > @@ -95,7 +95,6 @@ > #include "expr.h" > #include "params.h" > #include "diagnostic-core.h" > -#include "toplev.h" /* user_defined_section_attribute */ > #include "tree-pass.h" > #include "df.h" > #include "bb-reorder.h" > @@ -2555,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) > - && !user_defined_section_attribute); > + && !DECL_SECTION_NAME (current_function_decl)); > } > > /* This function is the main 'entrance' for the optimization that > diff --git gcc/c-family/c-common.c gcc/c-family/c-common.c > index 65c25bf..9923928 100644 > --- gcc/c-family/c-common.c > +++ gcc/c-family/c-common.c > @@ -7378,8 +7378,6 @@ handle_section_attribute (tree *node, tree > ARG_UNUSED (name), tree args, > > if (targetm_common.have_named_sections) > { > - user_defined_section_attribute = true; > - > if ((TREE_CODE (decl) == FUNCTION_DECL > || TREE_CODE (decl) == VAR_DECL) > && TREE_CODE (TREE_VALUE (args)) == STRING_CST) > diff --git gcc/final.c gcc/final.c > index 9af0b2b..38c90b2 100644 > --- gcc/final.c > +++ gcc/final.c > @@ -4501,8 +4501,6 @@ rest_of_handle_final (void) > > assemble_end_function (current_function_decl, fnname); > > - user_defined_section_attribute = false; > - > /* Free up reg info memory. */ > free_reg_info (); > > diff --git gcc/toplev.c gcc/toplev.c > index 9b8d313..4c8c965 100644 > --- gcc/toplev.c > +++ gcc/toplev.c > @@ -153,11 +153,6 @@ HOST_WIDE_INT random_seed; > the support provided depends on the backend. */ > rtx stack_limit_rtx; > > -/* True if the user has tagged the function with the 'section' > - attribute. */ > - > -bool user_defined_section_attribute = false; > - > struct target_flag_state default_target_flag_state; > #if SWITCHABLE_TARGET > struct target_flag_state *this_target_flag_state = > &default_target_flag_state; > diff --git gcc/toplev.h gcc/toplev.h > index 0290be3..65e38e7 100644 > --- gcc/toplev.h > +++ gcc/toplev.h > @@ -53,11 +53,6 @@ extern void target_reinit (void); > /* A unique local time stamp, might be zero if none is available. */ > extern unsigned local_tick; > > -/* True if the user has tagged the function with the 'section' > - attribute. */ > - > -extern bool user_defined_section_attribute; > - > /* See toplev.c. */ > extern int flag_rerun_cse_after_global_opts; > > -- > > On Mon, Aug 11, 2014 at 12:22 PM, Yi Yang <ahyan...@google.com> wrote: >> Thanks for pointing out this! >> >> It seems to me that this user_defined_section_attribute variable is >> useless now and should be removed. It is intended to work in this way: >> >> for each function { >> parse into tree (setting user_defined_section_attribute) >> do tree passes >> do RTL passes (using user_defined_section_attribute) >> resetting (user_defined_section_attribute = false) >> } >> >> But now GCC works this way: >> >> for each function { >> parse into tree (setting user_defined_section_attribute) >> } >> do IPA passes >> for each function { >> do tree passes >> do RTL passes (using user_defined_section_attribute) >> resetting (user_defined_section_attribute = false) >> } >> >> Therefore the first function will use the actual >> user_defined_section_attribute of the last function, and all other >> functions will always see user_defined_section_attribute=0. >> >> I suggest removing user_defined_section_attribute and simply check >> !DECL_SECTION_NAME (current_function_decl). >> >> On Mon, Aug 11, 2014 at 8:00 AM, Teresa Johnson <tejohn...@google.com> wrote: >>> On Fri, Aug 8, 2014 at 3:22 PM, Yi Yang <ahyan...@google.com> wrote: >>>> Friendly ping. >>> >>> Sorry, was OOO. >>> >>> The solution of preventing splitting for named sections is good - but >>> it looks like there is already code that should prevent this. See the >>> user_defined_section_attribute check here - why is that not set? Looks >>> like it should be set in handle_section_attribute() in >>> c-family/c-common.c. >>> >>> Teresa >>> >>>> >>>> >>>> On Wed, Aug 6, 2014 at 5:20 PM, Dehao Chen <de...@google.com> wrote: >>>>> >>>>> OK for google-4_8 and google-4_9. David and Teresa may have further >>>>> comments. >>>>> >>>>> Dehao >>>>> >>>>> On Wed, Aug 6, 2014 at 3:36 PM, Yi Yang <ahyan...@google.com> wrote: >>>>> > This currently puts split sections together again in the specified >>>>> > section and breaks DWARF output. This patch disables the partitioning >>>>> > for such functions. >>>>> > >>>>> > -- >>>>> > >>>>> > 2014-08-06 Yi Yang <ahyan...@google.com> >>>>> > >>>>> > gcc: >>>>> > * bb-reorder.c (gate_handle_partition_blocks): Add a check for >>>>> > "section" >>>>> > attribute. >>>>> > >>>>> > diff --git gcc/bb-reorder.c gcc/bb-reorder.c >>>>> > index fa6f62f..09449c6 100644 >>>>> > --- gcc/bb-reorder.c >>>>> > +++ gcc/bb-reorder.c >>>>> > @@ -2555,6 +2555,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) >>>>> > && !user_defined_section_attribute); >>>>> > } >>>> >>>> >>> >>> >>> >>> -- >>> Teresa Johnson | Software Engineer | tejohn...@google.com | 408-460-2413 -- Teresa Johnson | Software Engineer | tejohn...@google.com | 408-460-2413