aboutsummaryrefslogtreecommitdiff
path: root/gcc/ipa-inline-analysis.c
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2015-02-03 17:57:20 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2015-02-03 16:57:20 +0000
commitebc8f0bb3a8ac745dd710c7ce5cc918d998560c6 (patch)
tree408b784036755534b78b84759445181515b9be75 /gcc/ipa-inline-analysis.c
parent901e59b2bd947255b6a3fdacf387f37b4440aa0e (diff)
downloadgcc-ebc8f0bb3a8ac745dd710c7ce5cc918d998560c6.zip
gcc-ebc8f0bb3a8ac745dd710c7ce5cc918d998560c6.tar.gz
gcc-ebc8f0bb3a8ac745dd710c7ce5cc918d998560c6.tar.bz2
ipa-inline-analysis.c (simple_edge_hints): Fix check for cross-module inlining.
* ipa-inline-analysis.c (simple_edge_hints): Fix check for cross-module inlining. * cgraph.h (cgraph_node): Add flag merged. * ipa-icf.c (sem_function::merge): Maintain it. * lto-symtab.c (lto_cgraph_replace_node): Maintain merged flag. From-SVN: r220372
Diffstat (limited to 'gcc/ipa-inline-analysis.c')
-rw-r--r--gcc/ipa-inline-analysis.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/gcc/ipa-inline-analysis.c b/gcc/ipa-inline-analysis.c
index ffa559c..a628a9e 100644
--- a/gcc/ipa-inline-analysis.c
+++ b/gcc/ipa-inline-analysis.c
@@ -3702,13 +3702,16 @@ simple_edge_hints (struct cgraph_edge *edge)
int hints = 0;
struct cgraph_node *to = (edge->caller->global.inlined_to
? edge->caller->global.inlined_to : edge->caller);
+ struct cgraph_node *callee = edge->callee->ultimate_alias_target ();
if (inline_summaries->get (to)->scc_no
- && inline_summaries->get (to)->scc_no == inline_summaries->get (edge->callee)->scc_no
+ && inline_summaries->get (to)->scc_no
+ == inline_summaries->get (callee)->scc_no
&& !edge->recursive_p ())
hints |= INLINE_HINT_same_scc;
- if (to->lto_file_data && edge->callee->lto_file_data
- && to->lto_file_data != edge->callee->lto_file_data)
+ if (callee->lto_file_data && edge->caller->lto_file_data
+ && edge->caller->lto_file_data != callee->lto_file_data
+ && !callee->merged)
hints |= INLINE_HINT_cross_module;
return hints;