From patchwork Fri Oct 28 23:30:56 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 122515 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id A47011007DE for ; Sat, 29 Oct 2011 10:32:11 +1100 (EST) Received: (qmail 26990 invoked by alias); 28 Oct 2011 23:32:09 -0000 Received: (qmail 26967 invoked by uid 22791); 28 Oct 2011 23:32:08 -0000 X-SWARE-Spam-Status: No, hits=-2.2 required=5.0 tests=AWL, BAYES_00, DKIM_SIGNED, DKIM_VALID, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, TW_SV, T_TO_NO_BRKTS_FREEMAIL X-Spam-Check-By: sourceware.org Received: from mail-vw0-f47.google.com (HELO mail-vw0-f47.google.com) (209.85.212.47) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 28 Oct 2011 23:31:39 +0000 Received: by vwe42 with SMTP id 42so4336483vwe.20 for ; Fri, 28 Oct 2011 16:31:39 -0700 (PDT) Received: by 10.52.240.131 with SMTP id wa3mr1027807vdc.95.1319844699070; Fri, 28 Oct 2011 16:31:39 -0700 (PDT) Received: from localhost.localdomain (c-98-203-235-125.hsd1.wa.comcast.net. [98.203.235.125]) by mx.google.com with ESMTPS id el1sm4322960vdc.13.2011.10.28.16.31.38 (version=TLSv1/SSLv3 cipher=OTHER); Fri, 28 Oct 2011 16:31:38 -0700 (PDT) From: Richard Henderson To: gcc-patches@gcc.gnu.org Subject: [trans-mem 3/3] Allow for the original of a tm_clone pair to be optimized away. Date: Fri, 28 Oct 2011 16:30:56 -0700 Message-Id: <1319844656-1558-3-git-send-email-rth@redhat.com> In-Reply-To: <1319844656-1558-1-git-send-email-rth@redhat.com> References: <1319844656-1558-1-git-send-email-rth@redhat.com> X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org * 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 + * 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)