diff options
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/ipa-inline.c | 9 |
2 files changed, 13 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d58b38f..d2a345c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,13 @@ 2016-04-20 Jan Hubicka <jh@suse.cz> + * ipa-inline.c (can_inline_edge_p): Pass caller info to + ultiimate_alias_target. + (update_callee_keys): Likewise. + (lookup_recursive_calls): Likewise. + (speculation_useful_p): Likewise. + +2016-04-20 Jan Hubicka <jh@suse.cz> + PR ipa/70018 * cgraph.c (cgraph_set_nothrow_flag_1): Rename to ... (set_nothrow_flag_1): ... this; handle interposition correctly; diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c index 55899ef..b855fc7 100644 --- a/gcc/ipa-inline.c +++ b/gcc/ipa-inline.c @@ -313,9 +313,9 @@ can_inline_edge_p (struct cgraph_edge *e, bool report, bool inlinable = true; enum availability avail; - cgraph_node *callee = e->callee->ultimate_alias_target (&avail); cgraph_node *caller = e->caller->global.inlined_to ? e->caller->global.inlined_to : e->caller; + cgraph_node *callee = e->callee->ultimate_alias_target (&avail, caller); tree caller_tree = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (caller->decl); tree callee_tree = callee ? DECL_FUNCTION_SPECIFIC_OPTIMIZATION (callee->decl) : NULL; @@ -1382,7 +1382,7 @@ update_callee_keys (edge_heap_t *heap, struct cgraph_node *node, growth chould have just increased and consequentely badness metric don't need updating. */ if (e->inline_failed - && (callee = e->callee->ultimate_alias_target (&avail)) + && (callee = e->callee->ultimate_alias_target (&avail, e->caller)) && inline_summaries->get (callee)->inlinable && avail >= AVAIL_AVAILABLE && !bitmap_bit_p (updated_nodes, callee->uid)) @@ -1425,7 +1425,7 @@ lookup_recursive_calls (struct cgraph_node *node, struct cgraph_node *where, for (e = where->callees; e; e = e->next_callee) if (e->callee == node - || (e->callee->ultimate_alias_target (&avail) == node + || (e->callee->ultimate_alias_target (&avail, e->caller) == node && avail > AVAIL_INTERPOSABLE)) { /* When profile feedback is available, prioritize by expected number @@ -1624,7 +1624,8 @@ bool speculation_useful_p (struct cgraph_edge *e, bool anticipate_inlining) { enum availability avail; - struct cgraph_node *target = e->callee->ultimate_alias_target (&avail); + struct cgraph_node *target = e->callee->ultimate_alias_target (&avail, + e->caller); struct cgraph_edge *direct, *indirect; struct ipa_ref *ref; |