diff options
Diffstat (limited to 'gcc/trans-mem.c')
-rw-r--r-- | gcc/trans-mem.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/gcc/trans-mem.c b/gcc/trans-mem.c index d7e5a40106f..6289ea46a89 100644 --- a/gcc/trans-mem.c +++ b/gcc/trans-mem.c @@ -3933,7 +3933,7 @@ get_cg_data (struct cgraph_node **node, bool traverse_aliases) struct tm_ipa_cg_data *d; if (traverse_aliases && (*node)->symbol.alias) - *node = cgraph_get_node ((*node)->thunk.alias); + *node = cgraph_alias_target (*node); d = (struct tm_ipa_cg_data *) (*node)->symbol.aux; @@ -4681,6 +4681,13 @@ ipa_tm_mark_force_output_node (struct cgraph_node *node) node->symbol.analyzed = true; } +static inline void +ipa_tm_mark_forced_by_abi_node (struct cgraph_node *node) +{ + node->symbol.forced_by_abi = true; + node->symbol.analyzed = true; +} + /* Callback data for ipa_tm_create_version_alias. */ struct create_version_alias_info { @@ -4699,7 +4706,7 @@ ipa_tm_create_version_alias (struct cgraph_node *node, void *data) tree old_decl, new_decl, tm_name; struct cgraph_node *new_node; - if (!node->same_body_alias) + if (!node->symbol.cpp_implicit_alias) return false; old_decl = node->symbol.decl; @@ -4737,6 +4744,8 @@ ipa_tm_create_version_alias (struct cgraph_node *node, void *data) if (info->old_node->symbol.force_output || ipa_ref_list_first_referring (&info->old_node->symbol.ref_list)) ipa_tm_mark_force_output_node (new_node); + if (info->old_node->symbol.forced_by_abi) + ipa_tm_mark_forced_by_abi_node (new_node); return false; } @@ -4792,6 +4801,8 @@ ipa_tm_create_version (struct cgraph_node *old_node) if (old_node->symbol.force_output || ipa_ref_list_first_referring (&old_node->symbol.ref_list)) ipa_tm_mark_force_output_node (new_node); + if (old_node->symbol.forced_by_abi) + ipa_tm_mark_forced_by_abi_node (new_node); /* Do the same thing, but for any aliases of the original node. */ { @@ -5369,7 +5380,7 @@ ipa_tm_execute (void) bool doit = false; node = tm_callees[i]; - if (node->same_body_alias) + if (node->symbol.cpp_implicit_alias) continue; a = cgraph_function_body_availability (node); |