summaryrefslogtreecommitdiff
path: root/gcc/ipa-inline.c
diff options
context:
space:
mode:
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2014-04-18 19:36:01 +0000
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2014-04-18 19:36:01 +0000
commit3072aa322ea4486ee5a5f20b8ecffa38eb36f373 (patch)
tree567c2bc65a81805dc3e2d84f184eaba4dbf52d6c /gcc/ipa-inline.c
parentb10aade1f02f970b16184c0d66c7e1e24ed455aa (diff)
downloadgcc-3072aa322ea4486ee5a5f20b8ecffa38eb36f373.tar.gz
* ipa-inline.h (INLINE_HINT_known_hot): New hint.
* ipa-inline-analysis.c (dump_inline_hints): Dump it. (do_estimate_edge_time): Compute it. * ipa-inline.c (want_inline_small_function_p): Bypass INLINE_INSNS_AUTO/SINGLE limits for calls that are known to be hot. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@209523 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ipa-inline.c')
-rw-r--r--gcc/ipa-inline.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c
index 1b7a74e0745..65e653320ad 100644
--- a/gcc/ipa-inline.c
+++ b/gcc/ipa-inline.c
@@ -578,18 +578,21 @@ want_inline_small_function_p (struct cgraph_edge *e, bool report)
inline cnadidate. At themoment we allow inline hints to
promote non-inline function to inline and we increase
MAX_INLINE_INSNS_SINGLE 16fold for inline functions. */
- else if (!DECL_DECLARED_INLINE_P (callee->decl)
+ else if ((!DECL_DECLARED_INLINE_P (callee->decl)
+ && (!e->count || !cgraph_maybe_hot_edge_p (e)))
&& inline_summary (callee)->min_size - inline_edge_summary (e)->call_stmt_size
> MAX (MAX_INLINE_INSNS_SINGLE, MAX_INLINE_INSNS_AUTO))
{
e->inline_failed = CIF_MAX_INLINE_INSNS_AUTO_LIMIT;
want_inline = false;
}
- else if (DECL_DECLARED_INLINE_P (callee->decl)
+ else if ((DECL_DECLARED_INLINE_P (callee->decl) || e->count)
&& inline_summary (callee)->min_size - inline_edge_summary (e)->call_stmt_size
> 16 * MAX_INLINE_INSNS_SINGLE)
{
- e->inline_failed = CIF_MAX_INLINE_INSNS_AUTO_LIMIT;
+ e->inline_failed = (DECL_DECLARED_INLINE_P (callee->decl)
+ ? CIF_MAX_INLINE_INSNS_SINGLE_LIMIT
+ : CIF_MAX_INLINE_INSNS_AUTO_LIMIT);
want_inline = false;
}
else
@@ -606,6 +609,7 @@ want_inline_small_function_p (struct cgraph_edge *e, bool report)
&& growth >= MAX_INLINE_INSNS_SINGLE
&& ((!big_speedup
&& !(hints & (INLINE_HINT_indirect_call
+ | INLINE_HINT_known_hot
| INLINE_HINT_loop_iterations
| INLINE_HINT_array_index
| INLINE_HINT_loop_stride)))
@@ -630,6 +634,7 @@ want_inline_small_function_p (struct cgraph_edge *e, bool report)
inlining given function is very profitable. */
else if (!DECL_DECLARED_INLINE_P (callee->decl)
&& !big_speedup
+ && !(hints & INLINE_HINT_known_hot)
&& growth >= ((hints & (INLINE_HINT_indirect_call
| INLINE_HINT_loop_iterations
| INLINE_HINT_array_index