> 
> I'd rather remove this "hack" and use the inliners code size estimator, like
> that patch from early 2005 (attached)...

Uh yes, I think it is way to go (and additionally making -O2 to
autoinline small functions like -Os does).

The patch would be OK if it still works ;)  Even if CSiBE regress, I
would still rather preffer fixing inliner code size estimations than
keeping the parameter tweaking code.

Honza
> 
> Richard.
> 
> 2005-03-02  Richard Guenther  <[EMAIL PROTECTED]>
> 
>        * opts.c (decode_options): Do not fiddle with inlining
>        parameters in case of optimizing for size.
>        * cgraphunit.c (cgraph_check_inline_limits): If optimizing
>        for size make sure we do not grow the unit-size by inlining.
>        (cgraph_decide_recursive_inlining): Likewise.

> 2005-03-02  Richard Guenther  <[EMAIL PROTECTED]>
> 
>       * opts.c (decode_options): Do not fiddle with inlining
>       parameters in case of optimizing for size.
>       * cgraphunit.c (cgraph_check_inline_limits): If optimizing
>       for size make sure we do not grow the unit-size by inlining.
>       (cgraph_decide_recursive_inlining): Likewise.
> 
> Index: opts.c
> ===================================================================
> RCS file: /cvs/gcc/gcc/gcc/opts.c,v
> retrieving revision 1.94
> diff -c -3 -p -r1.94 opts.c
> *** opts.c    24 Feb 2005 09:24:13 -0000      1.94
> --- opts.c    2 Mar 2005 13:10:58 -0000
> *************** decode_options (unsigned int argc, const
> *** 572,580 ****
>   
>     if (optimize_size)
>       {
> !       /* Inlining of very small functions usually reduces total size.  */
> !       set_param_value ("max-inline-insns-single", 5);
> !       set_param_value ("max-inline-insns-auto", 5);
>         flag_inline_functions = 1;
>   
>         /* We want to crossjump as much as possible.  */
> --- 572,579 ----
>   
>     if (optimize_size)
>       {
> !       /* Inlining of functions reducing size is a good idea regardless
> !      of them being declared inline.  */
>         flag_inline_functions = 1;
>   
>         /* We want to crossjump as much as possible.  */
> Index: cgraphunit.c
> ===================================================================
> RCS file: /cvs/gcc/gcc/gcc/cgraphunit.c,v
> retrieving revision 1.93.2.1
> diff -c -3 -p -r1.93.2.1 cgraphunit.c
> *** cgraphunit.c      2 Mar 2005 10:10:30 -0000       1.93.2.1
> --- cgraphunit.c      2 Mar 2005 13:10:58 -0000
> *************** cgraph_check_inline_limits (struct cgrap
> *** 1184,1189 ****
> --- 1189,1201 ----
>     limit += limit * PARAM_VALUE (PARAM_LARGE_FUNCTION_GROWTH) / 100;
>   
>     newsize = cgraph_estimate_size_after_inlining (times, to, what);
> +   if (optimize_size
> +       && newsize > to->global.insns)
> +     {
> +       if (reason)
> +     *reason = N_("optimizing for size");
> +       return false;
> +     }
>     if (newsize > PARAM_VALUE (PARAM_LARGE_FUNCTION_INSNS)
>         && newsize > limit)
>       {
> *************** cgraph_decide_recursive_inlining (struct
> *** 1279,1284 ****
> --- 1291,1297 ----
>     struct cgraph_node *master_clone;
>     int depth = 0;
>     int n = 0;
> +   int newsize;
>   
>     if (DECL_DECLARED_INLINE_P (node->decl))
>       {
> *************** cgraph_decide_recursive_inlining (struct
> *** 1287,1294 ****
>       }
>   
>     /* Make sure that function is small enough to be considered for inlining. 
>  */
> !   if (!max_depth
> !       || cgraph_estimate_size_after_inlining (1, node, node)  >= limit)
>       return;
>     lookup_recursive_calls (node, node, &first_call, &last_call);
>     if (!first_call)
> --- 1300,1309 ----
>       }
>   
>     /* Make sure that function is small enough to be considered for inlining. 
>  */
> !   newsize = cgraph_estimate_size_after_inlining (1, node, node);
> !   if (! max_depth
> !       || newsize  >= limit
> !       || (optimize_size && newsize > node->global.insns))
>       return;
>     lookup_recursive_calls (node, node, &first_call, &last_call);
>     if (!first_call)

Reply via email to