This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[trans-mem 3/3] Allow for the original of a tm_clone pair to be optimized away.
- From: Richard Henderson <rth at redhat dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Fri, 28 Oct 2011 16:30:56 -0700
- Subject: [trans-mem 3/3] Allow for the original of a tm_clone pair to be optimized away.
- References: <1319844656-1558-1-git-send-email-rth@redhat.com>
* trans-mem.c (finish_tm_clone_pairs_1): Never create cgraph_nodes
here; allow them to vanish out from under.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/transactional-memory@180637 138bc75d-0d04-0410-961f-82ee72b054a4
---
gcc/ChangeLog.tm | 3 +++
gcc/varasm.c | 6 +++---
2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/gcc/ChangeLog.tm b/gcc/ChangeLog.tm
index dfdf9ee..49ad060 100644
--- a/gcc/ChangeLog.tm
+++ b/gcc/ChangeLog.tm
@@ -1,5 +1,8 @@
2011-10-28 Richard Henderson <rth@redhat.com>
+ * trans-mem.c (finish_tm_clone_pairs_1): Never create cgraph_nodes
+ here; allow them to vanish out from under.
+
* trans-mem.c (ipa_tm_mayenterirr_function): Recurse for aliases.
(ipa_tm_mark_needed_node): Split out of callback_mark_needed.
(ipa_tm_create_version_alias): Rename from callback_mark_needed.
diff --git a/gcc/varasm.c b/gcc/varasm.c
index 65bef8a..9771c80 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -5910,7 +5910,7 @@ finish_tm_clone_pairs_1 (void **slot, void *info ATTRIBUTE_UNUSED)
tree src = map->base.from;
tree dst = map->to;
struct cgraph_node *src_n = cgraph_get_node (src);
- struct cgraph_node *dst_n = cgraph_get_create_node (dst);
+ struct cgraph_node *dst_n = cgraph_get_node (dst);
/* The function ipa_tm_create_version() marks the clone as needed if
the original function was needed. But we also mark the clone as
@@ -5918,12 +5918,12 @@ finish_tm_clone_pairs_1 (void **slot, void *info ATTRIBUTE_UNUSED)
TM_GETTMCLONE. If neither of these are true, we didn't generate
a clone, and we didn't call it indirectly... no sense keeping it
in the clone table. */
- if (!dst_n->needed)
+ if (!dst_n || !dst_n->needed)
return 1;
/* This covers the case where we have optimized the original
function away, and only access the transactional clone. */
- if (!src_n->needed)
+ if (!src_n || !src_n->needed)
return 1;
if (!*switched)
--
1.7.6.4