aboutsummaryrefslogtreecommitdiff
path: root/gcc/ipa-inline.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2005-09-24 14:43:30 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2005-09-24 12:43:30 +0000
commit06191a239b2fe34bcc7338dcefdb1f3b9289c239 (patch)
tree65dc8daa11fadff0c648fecf430944f0ddcca2f3 /gcc/ipa-inline.c
parent26b7ebf6bf2dac324aaba62bab4b07863abe2c37 (diff)
downloadgcc-06191a239b2fe34bcc7338dcefdb1f3b9289c239.zip
gcc-06191a239b2fe34bcc7338dcefdb1f3b9289c239.tar.gz
gcc-06191a239b2fe34bcc7338dcefdb1f3b9289c239.tar.bz2
cgraph.c (cgraph_clone_edge): Make the scale gcov_type.
* cgraph.c (cgraph_clone_edge): Make the scale gcov_type. (cgraph_clone_node): Likewise. * cgraph.h (cgraph_clone_edge): Update prototype. (cgraph_mark_inline_edge, cgraph_clone_inlined_nodes): Remove duplicated prototypes; add updating argument. * cgraphunit.c (verify_cgraph_node): Verify that counts are non-negative. * ipa-inline.c (cgraph_clone_inlined_nodes): Allow clonning without updating profile. (cgraph_mark_inline_edge): Likewise. (cgraph_mark_inline): Update use of cgraph_mark_inline_edge. (cgraph_flatten_node): Likewise. (cgraph_decide_recursive_inlining): Likewise. (cgraph_decide_inlining_of_small_function): Likewise. * tree-optimize.c (tree_rest_of_compilation): Likewise. From-SVN: r104601
Diffstat (limited to 'gcc/ipa-inline.c')
-rw-r--r--gcc/ipa-inline.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c
index 927813e..d91ca66 100644
--- a/gcc/ipa-inline.c
+++ b/gcc/ipa-inline.c
@@ -113,7 +113,7 @@ cgraph_estimate_size_after_inlining (int times, struct cgraph_node *to,
clones or re-using node originally representing out-of-line function call.
*/
void
-cgraph_clone_inlined_nodes (struct cgraph_edge *e, bool duplicate)
+cgraph_clone_inlined_nodes (struct cgraph_edge *e, bool duplicate, bool update_original)
{
struct cgraph_node *n;
@@ -131,7 +131,7 @@ cgraph_clone_inlined_nodes (struct cgraph_edge *e, bool duplicate)
}
else if (duplicate)
{
- n = cgraph_clone_node (e->callee, e->count, e->loop_nest, true);
+ n = cgraph_clone_node (e->callee, e->count, e->loop_nest, update_original);
cgraph_redirect_edge_callee (e, n);
}
@@ -143,13 +143,15 @@ cgraph_clone_inlined_nodes (struct cgraph_edge *e, bool duplicate)
/* Recursively clone all bodies. */
for (e = e->callee->callees; e; e = e->next_callee)
if (!e->inline_failed)
- cgraph_clone_inlined_nodes (e, duplicate);
+ cgraph_clone_inlined_nodes (e, duplicate, update_original);
}
-/* Mark edge E as inlined and update callgraph accordingly. */
+/* Mark edge E as inlined and update callgraph accordingly.
+ UPDATE_ORIGINAL specify whether profile of original function should be
+ updated. */
void
-cgraph_mark_inline_edge (struct cgraph_edge *e)
+cgraph_mark_inline_edge (struct cgraph_edge *e, bool update_original)
{
int old_insns = 0, new_insns = 0;
struct cgraph_node *to = NULL, *what;
@@ -161,7 +163,7 @@ cgraph_mark_inline_edge (struct cgraph_edge *e)
DECL_POSSIBLY_INLINED (e->callee->decl) = true;
e->callee->global.inlined = true;
- cgraph_clone_inlined_nodes (e, true);
+ cgraph_clone_inlined_nodes (e, true, update_original);
what = e->callee;
@@ -200,7 +202,7 @@ cgraph_mark_inline (struct cgraph_edge *edge)
next = e->next_caller;
if (e->caller == to && e->inline_failed)
{
- cgraph_mark_inline_edge (e);
+ cgraph_mark_inline_edge (e, true);
if (e == edge)
edge = next;
times++;
@@ -520,7 +522,7 @@ cgraph_flatten_node (struct cgraph_node *node, htab_t cycles)
{
if (dump_file)
fprintf (dump_file, " inlining %s", cgraph_node_name (e->callee));
- cgraph_mark_inline_edge (e);
+ cgraph_mark_inline_edge (e, true);
cgraph_flatten_node (e->callee, cycles);
}
else if (dump_file)
@@ -571,7 +573,7 @@ cgraph_decide_recursive_inlining (struct cgraph_node *node)
master_clone->needed = true;
for (e = master_clone->callees; e; e = e->next_callee)
if (!e->inline_failed)
- cgraph_clone_inlined_nodes (e, true);
+ cgraph_clone_inlined_nodes (e, true, false);
/* Do the inlining and update list of recursive call during process. */
while (!fibheap_empty (heap)
@@ -623,7 +625,7 @@ cgraph_decide_recursive_inlining (struct cgraph_node *node)
fprintf (dump_file, "\n");
}
cgraph_redirect_edge_callee (curr, master_clone);
- cgraph_mark_inline_edge (curr);
+ cgraph_mark_inline_edge (curr, false);
lookup_recursive_calls (node, curr->callee, heap);
n++;
}
@@ -808,7 +810,7 @@ cgraph_decide_inlining_of_small_functions (void)
continue;
}
callee = edge->callee;
- cgraph_mark_inline_edge (edge);
+ cgraph_mark_inline_edge (edge, true);
update_callee_keys (heap, callee, updated_nodes);
}
where = edge->caller;
@@ -930,7 +932,7 @@ cgraph_decide_inlining (void)
if (cgraph_recursive_inlining_p (e->caller, e->callee,
&e->inline_failed))
continue;
- cgraph_mark_inline_edge (e);
+ cgraph_mark_inline_edge (e, true);
if (dump_file)
fprintf (dump_file,
" Inlined into %s which now has %i insns.\n",