summaryrefslogtreecommitdiff
path: root/gcc/trans-mem.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/trans-mem.c')
-rw-r--r--gcc/trans-mem.c17
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);