diff options
author | Richard Guenther <rguenth@tat.physik.uni-tuebingen.de> | 2005-03-22 20:53:40 +0000 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2005-03-22 20:53:40 +0000 |
commit | e5c4f28a6c44485134c426d5ad4ba3f90cc26a41 (patch) | |
tree | e6caff86555ce9f9639013c3cd82b4c469828776 /gcc/cgraphunit.c | |
parent | b360e193505ff0cd9ee72bdb8e232654e625731b (diff) | |
download | gcc-e5c4f28a6c44485134c426d5ad4ba3f90cc26a41.zip gcc-e5c4f28a6c44485134c426d5ad4ba3f90cc26a41.tar.gz gcc-e5c4f28a6c44485134c426d5ad4ba3f90cc26a41.tar.bz2 |
cgraphunit.c (cgraph_estimate_size_after_inlining): Compute call cost based on argument sizes.
* cgraphunit.c (cgraph_estimate_size_after_inlining): Compute
call cost based on argument sizes.
(cgraph_mark_inline_edge): Avoid inline unit from shringking by
inlining.
* params.def: (max-inline-inssn-single): Set to 450.
(max-inline-insns-auto): Set to 90.
(max-inline-insns-recursive): Set to 450
(max-inline-insns-recursive-auto): Set to 450.
(large-function-insns): Set to 2700.
(inline-call-cost): New parameter.
* tree-inline.c (estimate_move_cost): New function.
(estimate_num_insns_1): Compute move sizes costs by estimate_move_cost
for non-gimple-regs, set cost to 0 for gimple-regs. Compute call size
based on arguments.
* tree-inline.h (estimate_move_cost): Declare.
* invoke.texi: (max-inline-inssn-single): Change default to 450.
(max-inline-insns-auto): Change default to 90.
(max-inline-insns-recursive): Change default to 450
(max-inline-insns-recursive-auto): Change default to 450.
(large-function-insns): Change default to 2700.
(inline-call-cost): Document new parameter.
* gcc.dg/winline-6.c: Modify so inlined function have nonzero cost.
Co-Authored-By: Jan Hubicka <jh@suse.cz>
From-SVN: r96892
Diffstat (limited to 'gcc/cgraphunit.c')
-rw-r--r-- | gcc/cgraphunit.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c index db0aaaf..6e864d5 100644 --- a/gcc/cgraphunit.c +++ b/gcc/cgraphunit.c @@ -1030,7 +1030,12 @@ static int cgraph_estimate_size_after_inlining (int times, struct cgraph_node *to, struct cgraph_node *what) { - return (what->global.insns - INSNS_PER_CALL) * times + to->global.insns; + tree fndecl = what->decl; + tree arg; + int call_insns = PARAM_VALUE (PARAM_INLINE_CALL_COST); + for (arg = DECL_ARGUMENTS (fndecl); arg; arg = TREE_CHAIN (arg)) + call_insns += estimate_move_cost (TREE_TYPE (arg)); + return (what->global.insns - call_insns) * times + to->global.insns; } /* Estimate the growth caused by inlining NODE into all callees. */ @@ -1124,7 +1129,8 @@ cgraph_mark_inline_edge (struct cgraph_edge *e) to->global.insns = new_insns; } gcc_assert (what->global.inlined_to == to); - overall_insns += new_insns - old_insns; + if (new_insns > old_insns) + overall_insns += new_insns - old_insns; ncalls_inlined++; } |