>
> 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)