From patchwork Wed Apr 23 12:02:31 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom de Vries X-Patchwork-Id: 341808 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id C08591400CF for ; Wed, 23 Apr 2014 22:02:50 +1000 (EST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :message-id:date:from:mime-version:to:cc:subject:references :in-reply-to:content-type; q=dns; s=default; b=RIiFE9OzlBRlZRQoC 6IRiBiphxykczl5gyTzahcm84c0b03t2l78mWce1F1b/Nv+5nWn06xxU2FdcR+Nt /6/B0SbyK7WNieyxOrbsxNm4o2WSLMnafcUf30nPCSCv836Ey1wM7kVdUyU7pIDJ F478mr9sSuoO3VB49J6djUkLmM= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :message-id:date:from:mime-version:to:cc:subject:references :in-reply-to:content-type; s=default; bh=LUCz731dSV8oUgr5dGZp2v1 beVw=; b=hMwca7V1IcneEdxI1FKR/OkYK8CAyPg/rtz8i/42LTTJY+X7oBoFHuP 6pcHl/9i/JBgfktynNqiRiey/V88stNmIz6wEt9qH96yIQWe5jOq0oOH6mDQolh6 aS4JiI1+faJtUZwzn8UP3K5glR7sO63waVG+29sypLTvXZNE8bn8= Received: (qmail 26881 invoked by alias); 23 Apr 2014 12:02:42 -0000 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 Received: (qmail 26863 invoked by uid 89); 23 Apr 2014 12:02:42 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=AWL, BAYES_00 autolearn=ham version=3.3.2 X-HELO: relay1.mentorg.com Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 23 Apr 2014 12:02:41 +0000 Received: from svr-orw-fem-01.mgc.mentorg.com ([147.34.98.93]) by relay1.mentorg.com with esmtp id 1Wcvsq-000313-Vf from Tom_deVries@mentor.com ; Wed, 23 Apr 2014 05:02:37 -0700 Received: from SVR-IES-FEM-01.mgc.mentorg.com ([137.202.0.104]) by svr-orw-fem-01.mgc.mentorg.com over TLS secured channel with Microsoft SMTPSVC(6.0.3790.4675); Wed, 23 Apr 2014 05:02:36 -0700 Received: from [127.0.0.1] (137.202.0.76) by SVR-IES-FEM-01.mgc.mentorg.com (137.202.0.104) with Microsoft SMTP Server id 14.2.247.3; Wed, 23 Apr 2014 13:02:34 +0100 Message-ID: <5357ABD7.6000708@mentor.com> Date: Wed, 23 Apr 2014 14:02:31 +0200 From: Tom de Vries User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.4.0 MIME-Version: 1.0 To: Eric Botcazou CC: "gcc-patches@gcc.gnu.org" , Richard Sandiford Subject: Add clobber_reg References: <534ED7BC.50300@mentor.com> <534FF0F9.60404@redhat.com> <87lhv4ug7f.fsf@sandifor-thinkpad.stglab.manchester.uk.ibm.com> <53500628.2090802@redhat.com> <5356853D.8050905@mentor.com> In-Reply-To: <5356853D.8050905@mentor.com> On 22-04-14 17:05, Tom de Vries wrote: > I've updated the fuse-caller-save patch series to model non-callee call clobbers > in CALL_INSN_FUNCTION_USAGE. Eric, Richard Sandiford mentioned here ( http://gcc.gnu.org/ml/gcc-patches/2014-04/msg00870.html ): ... Although we really should have a utility function like use_reg, but for clobbers, so that the above would become: clobber_reg (&CALL_INSN_FUNCTION_USAGE (insn), gen_rtx_REG (word_mode, 18)); ... I've implemented a patch that adds clobber_reg and clobber_reg_mode, similar to use_reg and use_reg_mode. Bootstrapped and reg-tested on x86_64 as part of the fuse-caller-save series. OK for trunk? Thanks, - Tom 2014-04-18 Tom de Vries * expr.c (clobber_reg_mode): New function. * expr.h (clobber_reg): New function. diff --git a/gcc/expr.c b/gcc/expr.c index 72e4401..fc58eb7f 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -2396,6 +2396,18 @@ use_reg_mode (rtx *call_fusage, rtx reg, enum machine_mode mode) = gen_rtx_EXPR_LIST (mode, gen_rtx_USE (VOIDmode, reg), *call_fusage); } +/* Add a CLOBBER expression for REG to the (possibly empty) list pointed + to by CALL_FUSAGE. REG must denote a hard register. */ + +void +clobber_reg_mode (rtx *call_fusage, rtx reg, enum machine_mode mode) +{ + gcc_assert (REG_P (reg) && REGNO (reg) < FIRST_PSEUDO_REGISTER); + + *call_fusage + = gen_rtx_EXPR_LIST (mode, gen_rtx_CLOBBER (VOIDmode, reg), *call_fusage); +} + /* Add USE expressions to *CALL_FUSAGE for each of NREGS consecutive regs, starting at REGNO. All of these registers must be hard registers. */ diff --git a/gcc/expr.h b/gcc/expr.h index 524da67..1823feb 100644 --- a/gcc/expr.h +++ b/gcc/expr.h @@ -346,6 +346,7 @@ extern void copy_blkmode_from_reg (rtx, rtx, tree); /* Mark REG as holding a parameter for the next CALL_INSN. Mode is TYPE_MODE of the non-promoted parameter, or VOIDmode. */ extern void use_reg_mode (rtx *, rtx, enum machine_mode); +extern void clobber_reg_mode (rtx *, rtx, enum machine_mode); extern rtx copy_blkmode_to_reg (enum machine_mode, tree); @@ -356,6 +357,13 @@ use_reg (rtx *fusage, rtx reg) use_reg_mode (fusage, reg, VOIDmode); } +/* Mark REG as clobbered by the call with FUSAGE as CALL_INSN_FUNCTION_USAGE. */ +static inline void +clobber_reg (rtx *fusage, rtx reg) +{ + clobber_reg_mode (fusage, reg, VOIDmode); +} + /* Mark NREGS consecutive regs, starting at REGNO, as holding parameters for the next CALL_INSN. */ extern void use_regs (rtx *, int, int);