From patchwork Wed Feb 6 20:18:27 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Miller X-Patchwork-Id: 218733 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 BF5C82C02B7 for ; Thu, 7 Feb 2013 07:18:57 +1100 (EST) Comment: DKIM? See http://www.dkim.org DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=gcc.gnu.org; s=default; x=1360786738; h=Comment: DomainKey-Signature:Received:Received:Received:Received:Date: Message-Id:To:Cc:Subject:From:In-Reply-To:References: Mime-Version:Content-Type:Content-Transfer-Encoding:Mailing-List: Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:Sender:Delivered-To; bh=bv5lNPVo25mAILQv9hdD9ZaQyCE=; b=h62IcDDF+bfxah5wOdREkopEIuWqht7cWoWZMPQhi42LXQtVDcVVgd4mKaWVyL x9mxnh2FNP6dCnwnnZEZ2mUvUa44BZ5la8d6iWSLP4QusvT9aRnBJMET/vZ8eLfV 9NkXb+NzcgrQPquJQ9NKsAdVfCWZUyjcdF1gn2o4rk83c= Comment: DomainKeys? See http://antispam.yahoo.com/domainkeys DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=default; d=gcc.gnu.org; h=Received:Received:X-SWARE-Spam-Status:X-Spam-Check-By:Received:Received:Date:Message-Id:To:Cc:Subject:From:In-Reply-To:References:Mime-Version:Content-Type:Content-Transfer-Encoding:X-IsSubscribed:Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender:Delivered-To; b=udG6MpAtJrtXJ+dTqcUiPv1RYePNv7ChksqbSXOxhfZxGWYLo1MwFH7YtsQSIT RxSpE01H2MrxAeh/c1WnnbmYH/UgiwzWFdOxW7m9jDRY81ckrA1dFKPx0cC1TkRE RBTmdCBBZjHP6fUmmezfIq7X2j8tn1gf1TwrgcH0KikoQ=; Received: (qmail 25833 invoked by alias); 6 Feb 2013 20:18:38 -0000 Received: (qmail 25816 invoked by uid 22791); 6 Feb 2013 20:18:37 -0000 X-SWARE-Spam-Status: No, hits=-2.9 required=5.0 tests=AWL, BAYES_00, KHOP_THREADED X-Spam-Check-By: sourceware.org Received: from shards.monkeyblade.net (HELO shards.monkeyblade.net) (149.20.54.216) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 06 Feb 2013 20:18:29 +0000 Received: from localhost (nat-pool-rdu.redhat.com [66.187.233.202]) (Authenticated sender: davem-davemloft) by shards.monkeyblade.net (Postfix) with ESMTPSA id 434C3584294; Wed, 6 Feb 2013 12:18:32 -0800 (PST) Date: Wed, 06 Feb 2013 15:18:27 -0500 (EST) Message-Id: <20130206.151827.2124786527100885863.davem@davemloft.net> To: ebotcazou@adacore.com Cc: gcc@gcc.gnu.org, jakub@redhat.com, gcc-patches@gcc.gnu.org Subject: Re: var-tracking wrt. leaf regs on sparc From: David Miller In-Reply-To: <1693970.yNdqDFn8bX@polaris> References: <20130205.181839.2091029648055781108.davem@davemloft.net> <20130205.225315.679498519134231105.davem@davemloft.net> <1693970.yNdqDFn8bX@polaris> Mime-Version: 1.0 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 From: Eric Botcazou Date: Wed, 06 Feb 2013 11:13:30 +0100 > I think testing crtl->uses_only_leaf_regs is sufficient here (and > while you're at it, you could also test the value of > HAVE_window_save, which can be 0 if -mflat is passed on the SPARC), > so > > #ifdef HAVE_window_save > if (HAVE_window_save && !crtl->uses_only_leaf_regs) > { > > } > #endif Yes, this works perfectly, Jakub any objections? gcc/ 2013-02-06 David S. Miller * var-tracking.c (vt_add_function_parameter): Test the presence of HAVE_window_save properly and do not remap argument registers when we have a leaf function. diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c index 714acb69..0db1562 100644 --- a/gcc/var-tracking.c +++ b/gcc/var-tracking.c @@ -9502,31 +9502,34 @@ vt_add_function_parameter (tree parm) /* DECL_INCOMING_RTL uses the INCOMING_REGNO of parameter registers. If the target machine has an explicit window save instruction, the actual entry value is the corresponding OUTGOING_REGNO instead. */ - if (REG_P (incoming) - && HARD_REGISTER_P (incoming) - && OUTGOING_REGNO (REGNO (incoming)) != REGNO (incoming)) + if (HAVE_window_save && !crtl->uses_only_leaf_regs) { - parm_reg_t p; - p.incoming = incoming; - incoming - = gen_rtx_REG_offset (incoming, GET_MODE (incoming), - OUTGOING_REGNO (REGNO (incoming)), 0); - p.outgoing = incoming; - vec_safe_push (windowed_parm_regs, p); - } - else if (MEM_P (incoming) - && REG_P (XEXP (incoming, 0)) - && HARD_REGISTER_P (XEXP (incoming, 0))) - { - rtx reg = XEXP (incoming, 0); - if (OUTGOING_REGNO (REGNO (reg)) != REGNO (reg)) + if (REG_P (incoming) + && HARD_REGISTER_P (incoming) + && OUTGOING_REGNO (REGNO (incoming)) != REGNO (incoming)) { parm_reg_t p; - p.incoming = reg; - reg = gen_raw_REG (GET_MODE (reg), OUTGOING_REGNO (REGNO (reg))); - p.outgoing = reg; + p.incoming = incoming; + incoming + = gen_rtx_REG_offset (incoming, GET_MODE (incoming), + OUTGOING_REGNO (REGNO (incoming)), 0); + p.outgoing = incoming; vec_safe_push (windowed_parm_regs, p); - incoming = replace_equiv_address_nv (incoming, reg); + } + else if (MEM_P (incoming) + && REG_P (XEXP (incoming, 0)) + && HARD_REGISTER_P (XEXP (incoming, 0))) + { + rtx reg = XEXP (incoming, 0); + if (OUTGOING_REGNO (REGNO (reg)) != REGNO (reg)) + { + parm_reg_t p; + p.incoming = reg; + reg = gen_raw_REG (GET_MODE (reg), OUTGOING_REGNO (REGNO (reg))); + p.outgoing = reg; + vec_safe_push (windowed_parm_regs, p); + incoming = replace_equiv_address_nv (incoming, reg); + } } } #endif