===================================================================
@@ -1840,6 +1840,8 @@ dump_cgraph_node (FILE *f, struct cgraph
fprintf (f, " only_called_at_exit");
else if (node->alias)
fprintf (f, " alias");
+ if (node->tm_clone)
+ fprintf (f, " tm_clone");
fprintf (f, "\n");
===================================================================
@@ -248,6 +248,11 @@ struct GTY((chain_next ("%h.next"), chai
unsigned only_called_at_startup : 1;
/* True when function can only be called at startup (from static dtor). */
unsigned only_called_at_exit : 1;
+ /* True when function is the transactional clone of a function which
+ is called only from inside transactions. */
+ /* ?? We should be able to remove this. We have enough bits in
+ cgraph to calculate it. */
+ unsigned tm_clone : 1;
};
typedef struct cgraph_node *cgraph_node_ptr;
@@ -1087,4 +1092,14 @@ cgraph_edge_recursive_p (struct cgraph_e
else
return e->caller->decl == callee->decl;
}
+
+/* Return true if the TM_CLONE bit is set for a given FNDECL. */
+static inline bool
+decl_is_tm_clone (const_tree fndecl)
+{
+ struct cgraph_node *n = cgraph_get_node (fndecl);
+ if (n)
+ return n->tm_clone;
+ return false;
+}
#endif /* GCC_CGRAPH_H */
===================================================================
@@ -3466,11 +3466,6 @@ struct GTY(())
#define DECL_NO_INLINE_WARNING_P(NODE) \
(FUNCTION_DECL_CHECK (NODE)->function_decl.no_inline_warning_flag)
-/* Nonzero in a FUNCTION_DECL means this function is the transactional
- clone of a function - called only from inside transactions. */
-#define DECL_IS_TM_CLONE(NODE) \
- (FUNCTION_DECL_CHECK (NODE)->function_decl.tm_clone_flag)
-
/* Nonzero if a FUNCTION_CODE is a TM load/store. */
#define BUILTIN_TM_LOAD_STORE_P(FN) \
((FN) >= BUILT_IN_TM_STORE_1 && (FN) <= BUILT_IN_TM_LOAD_RFW_LDOUBLE)
===================================================================
@@ -701,7 +701,7 @@ dump_gimple_call (pretty_printer *buffer
/* Dump the arguments of _ITM_beginTransaction sanely. */
if (TREE_CODE (fn) == ADDR_EXPR)
fn = TREE_OPERAND (fn, 0);
- if (TREE_CODE (fn) == FUNCTION_DECL && DECL_IS_TM_CLONE (fn))
+ if (TREE_CODE (fn) == FUNCTION_DECL && decl_is_tm_clone (fn))
pp_string (buffer, " [tm-clone]");
if (TREE_CODE (fn) == FUNCTION_DECL
&& DECL_BUILT_IN_CLASS (fn) == BUILT_IN_NORMAL
===================================================================
@@ -1683,7 +1683,7 @@ execute_lower_tm (void)
struct walk_stmt_info wi;
/* Transactional clones aren't created until a later pass. */
- gcc_assert (!DECL_IS_TM_CLONE (current_function_decl));
+ gcc_assert (!decl_is_tm_clone (current_function_decl));
memset (&wi, 0, sizeof (wi));
walk_gimple_seq (gimple_body (current_function_decl),
@@ -1901,7 +1901,7 @@ gate_tm_init (void)
bitmap_obstack_initialize (&tm_obstack);
/* If the function is a TM_CLONE, then the entire function is the region. */
- if (DECL_IS_TM_CLONE (current_function_decl))
+ if (decl_is_tm_clone (current_function_decl))
{
struct tm_region *region = (struct tm_region *)
obstack_alloc (&tm_obstack.obstack, sizeof (struct tm_region));
@@ -4194,11 +4194,8 @@ ipa_tm_create_version_alias (struct cgra
if (DECL_COMDAT (new_decl))
DECL_COMDAT_GROUP (new_decl) = tm_mangle (DECL_COMDAT_GROUP (old_decl));
- /* ??? We should be able to remove DECL_IS_TM_CLONE. We have enough
- bits in cgraph to calculate all this. */
- DECL_IS_TM_CLONE (new_decl) = 1;
-
new_node = cgraph_same_body_alias (NULL, new_decl, info->new_decl);
+ new_node->tm_clone = true;
get_cg_data (node)->clone = new_node;
record_tm_clone_pair (old_decl, new_decl);
@@ -4232,11 +4229,8 @@ ipa_tm_create_version (struct cgraph_nod
if (DECL_COMDAT (new_decl))
DECL_COMDAT_GROUP (new_decl) = tm_mangle (DECL_COMDAT_GROUP (old_decl));
- /* ??? We should be able to remove DECL_IS_TM_CLONE. We have enough
- bits in cgraph to calculate all this. */
- DECL_IS_TM_CLONE (new_decl) = 1;
-
new_node = cgraph_copy_node_for_versioning (old_node, new_decl, NULL, NULL);
+ new_node->tm_clone = 1;
get_cg_data (old_node)->clone = new_node;
if (cgraph_function_body_availability (old_node) >= AVAIL_OVERWRITABLE)
@@ -4418,7 +4412,7 @@ ipa_tm_transform_calls_redirect (struct
/* Fixup recursive calls inside clones. */
/* ??? Why did cgraph_copy_node_for_versioning update the call edges
for recursion but not update the call statements themselves? */
- if (e->caller == e->callee && DECL_IS_TM_CLONE (current_function_decl))
+ if (e->caller == e->callee && decl_is_tm_clone (current_function_decl))
{
gimple_call_set_fndecl (stmt, current_function_decl);
return;
===================================================================
@@ -620,7 +620,7 @@ is_tm_builtin (const_tree fndecl)
if (fndecl == NULL)
return false;
- if (DECL_IS_TM_CLONE (fndecl))
+ if (decl_is_tm_clone (fndecl))
return true;
if (DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL)
===================================================================
@@ -424,7 +424,7 @@ print_node (FILE *file, const char *pref
fputs (" built-in", file);
if (code == FUNCTION_DECL && DECL_STATIC_CHAIN (node))
fputs (" static-chain", file);
- if (TREE_CODE (node) == FUNCTION_DECL && DECL_IS_TM_CLONE (node))
+ if (TREE_CODE (node) == FUNCTION_DECL && decl_is_tm_clone (node))
fputs (" tm-clone", file);
if (code == FIELD_DECL && DECL_PACKED (node))
===================================================================
@@ -6503,7 +6503,7 @@ dump_function_to_file (tree fn, FILE *fi
bool ignore_topmost_bind = false, any_var = false;
basic_block bb;
tree chain;
- bool tmclone = TREE_CODE (fn) == FUNCTION_DECL && DECL_IS_TM_CLONE (fn);
+ bool tmclone = TREE_CODE (fn) == FUNCTION_DECL && decl_is_tm_clone (fn);
fprintf (file, "%s %s(", lang_hooks.decl_printable_name (fn, 2),
tmclone ? "[tm-clone] " : "");