"Kewen.Lin" <li...@linux.ibm.com> writes:

> Hi Jeff,
>
> Thanks for the patch, I learned a lot from it.  Some nits embedded.
Thanks for your comments!
>
> on 2019/11/4 下午2:31, Jiufu Guo wrote:
>> Hi,
>> 
>> In this patch, loop unroll adjust hook is introduced for powerpc.  We can do
>> target related hueristic adjustment in this hook. In this patch, small loops
>> is unrolled 2 times for O2 and O3 by default.  With this patch, we can see
>> some improvement for spec2017.  This patch enhanced a little for [Patch V2] 
>> to
>> enable small loops unroll for O3 by default like O2.
>> 
>> Bootstrapped and regtested on powerpc64le.  Is this ok for trunk?
>> 
>> Jiufu
>> BR.
>> 
>> gcc/
>> 2019-11-04  Jiufu Guo  <guoji...@linux.ibm.com>          
>> 
>>      PR tree-optimization/88760
>>      * config/rs6000/rs6000.c (rs6000_option_override_internal): Remove
>>      code which changes PARAM_MAX_UNROLL_TIMES and PARAM_MAX_UNROLLED_INSNS.
>>      (TARGET_LOOP_UNROLL_ADJUST): Add loop unroll adjust hook.
>>      (rs6000_loop_unroll_adjust): New hook for loop unroll adjust.
>>      Unrolling small loop 2 times for -O2 and -O3.
>>      (rs6000_function_specific_save): Save unroll_small_loops flag.
>>      (rs6000_function_specific_restore): Restore unroll_small_loops flag.
>>      * gcc/config/rs6000/rs6000.opt (unroll_small_loops): New internal flag.
>> 
>>      
>> gcc.testsuite/
>> 2019-11-04  Jiufu Guo  <guoji...@linux.ibm.com>
>> 
>>      PR tree-optimization/88760
>>      * gcc.dg/pr59643.c: Update back to r277550.
>> 
>> ---
>>  gcc/config/rs6000/rs6000.c     | 38 ++++++++++++++++++++++++++++----------
>>  gcc/config/rs6000/rs6000.opt   |  7 +++++++
>>  gcc/testsuite/gcc.dg/pr59643.c |  3 ---
>>  3 files changed, 35 insertions(+), 13 deletions(-)
>> 
>> diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
>> index 9ed5151..5e1a75d 100644
>> --- a/gcc/config/rs6000/rs6000.c
>> +++ b/gcc/config/rs6000/rs6000.c
>> @@ -1428,6 +1428,9 @@ static const struct attribute_spec 
>> rs6000_attribute_table[] =
>>  #undef TARGET_VECTORIZE_DESTROY_COST_DATA
>>  #define TARGET_VECTORIZE_DESTROY_COST_DATA rs6000_destroy_cost_data
>>  
>> +#undef TARGET_LOOP_UNROLL_ADJUST
>> +#define TARGET_LOOP_UNROLL_ADJUST rs6000_loop_unroll_adjust
>> +
>>  #undef TARGET_INIT_BUILTINS
>>  #define TARGET_INIT_BUILTINS rs6000_init_builtins
>>  #undef TARGET_BUILTIN_DECL
>> @@ -4540,25 +4543,20 @@ rs6000_option_override_internal (bool global_init_p)
>>                           global_options.x_param_values,
>>                           global_options_set.x_param_values);
>>  
>> -      /* unroll very small loops 2 time if no -funroll-loops.  */
>> +      /* If funroll-loops is not enabled explicitly, then enable small loops
>> +     unrolling for -O2, and do not turn fweb or frename-registers on.  */
>
> "for -O2" -> "for -O2 and up"? since I noticed it checks "optimize
> >=2" later.
Thanks, yes, this would be more clear.
>
>>        if (!global_options_set.x_flag_unroll_loops
>>        && !global_options_set.x_flag_unroll_all_loops)
>>      {
>> -      maybe_set_param_value (PARAM_MAX_UNROLL_TIMES, 2,
>> -                             global_options.x_param_values,
>> -                             global_options_set.x_param_values);
>> -
>> -      maybe_set_param_value (PARAM_MAX_UNROLLED_INSNS, 20,
>> -                             global_options.x_param_values,
>> -                             global_options_set.x_param_values);
>> +      unroll_small_loops = optimize >= 2 ? 1 : 0;
>
> Maybe simpler with "unroll_small_loops = flag_unroll_loops"?
Both would be ok, I think. ;)
>
>>  
>> -      /* If fweb or frename-registers are not specificed in command-line,
>> -         do not turn them on implicitly.  */
>>        if (!global_options_set.x_flag_web)
>>          global_options.x_flag_web = 0;
>>        if (!global_options_set.x_flag_rename_registers)
>>          global_options.x_flag_rename_registers = 0;
>>      }
>> +      else
>> +    unroll_small_loops = 0;
>
> Could we initialize this in rs6000.opt as zero?
We could also set initial value as 0 in rs6000.opt.

BR
Jiufu.

>
>
> BR,
> Kewen

Reply via email to