> > > > Thanks for explanation. Perhaps we could have this documented, because > > otherwise people will think the option is simply broken. I guess even better > > we could have configure autodetection for the broken linker. > > Committed to mainline with docs as follows.
Thanks, the patch however disables rerodering unconditionally because flag_split_stack is set to -1 at that time. I have comitted the following 2017-06-10 Jan Hubicka <hubi...@ucw.cz> * opts.c (finish_options): Move test for flag_split_stack after it has been initialized. --- trunk/gcc/opts.c 2017/06/11 05:29:34 249104 +++ trunk/gcc/opts.c 2017/06/11 09:33:22 249105 @@ -863,19 +863,6 @@ opts->x_flag_reorder_blocks = 1; } - /* If stack splitting is turned on, and the user did not explicitly - request function partitioning, turn off partitioning, as it - confuses the linker when trying to handle partitioned split-stack - code that calls a non-split-stack functions. But if partitioning - was turned on explicitly just hope for the best. */ - if (opts->x_flag_split_stack - && opts->x_flag_reorder_blocks_and_partition - && !opts_set->x_flag_reorder_blocks_and_partition) - opts->x_flag_reorder_blocks_and_partition = 0; - - if (opts->x_flag_reorder_blocks_and_partition - && !opts_set->x_flag_reorder_functions) - opts->x_flag_reorder_functions = 1; /* Pipelining of outer loops is only possible when general pipelining capabilities are requested. */ @@ -927,6 +914,20 @@ } } + /* If stack splitting is turned on, and the user did not explicitly + request function partitioning, turn off partitioning, as it + confuses the linker when trying to handle partitioned split-stack + code that calls a non-split-stack functions. But if partitioning + was turned on explicitly just hope for the best. */ + if (opts->x_flag_split_stack + && opts->x_flag_reorder_blocks_and_partition + && !opts_set->x_flag_reorder_blocks_and_partition) + opts->x_flag_reorder_blocks_and_partition = 0; + + if (opts->x_flag_reorder_blocks_and_partition + && !opts_set->x_flag_reorder_functions) + opts->x_flag_reorder_functions = 1; + /* Tune vectorization related parametees according to cost model. */ if (opts->x_flag_vect_cost_model == VECT_COST_MODEL_CHEAP) {