From patchwork Sun Aug 3 14:27:46 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Sandiford X-Patchwork-Id: 376049 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 79C391400A3 for ; Mon, 4 Aug 2014 00:27:58 +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:from :to:subject:references:date:in-reply-to:message-id:mime-version :content-type; q=dns; s=default; b=bDSF3FbaQD34Q8NtxGjpD9TUTcMCS ngfVCixvRfW04BBnakAQHO2U/y+fX+ww5qhOSsOais7e33Fh5bb1gEDDwwA7X+aN zIgEibSn4ywPB6XH/JuZzenwv9TN6W91jOlLR+GQbJ5CKB6bT1HeMsFxs4s0Yj/X zZo6By/5GLP6TI= 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:from :to:subject:references:date:in-reply-to:message-id:mime-version :content-type; s=default; bh=C1TCGL6DtvtYlSjCcWXhDyLtDHk=; b=MpJ QtjxCsFSKp/OVPj7+HzDbY7nv9Mx/1U+7ZDgrCE3Pb0WG/kJIiK7nxqydUW+9Uw/ Abp+YEQmPqTOBb7s32FLBojW1n6fog98gGxE6ACKxQiObKXCNHd5wP9a0363sQbr N2oxmQ19qcLivFElERsuLAp6xN7FTBUfyxpq2w+o= Received: (qmail 9401 invoked by alias); 3 Aug 2014 14:27:52 -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 9391 invoked by uid 89); 3 Aug 2014 14:27:51 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.5 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-we0-f177.google.com Received: from mail-we0-f177.google.com (HELO mail-we0-f177.google.com) (74.125.82.177) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Sun, 03 Aug 2014 14:27:50 +0000 Received: by mail-we0-f177.google.com with SMTP id w62so6415482wes.22 for ; Sun, 03 Aug 2014 07:27:47 -0700 (PDT) X-Received: by 10.194.84.69 with SMTP id w5mr24606224wjy.0.1407076067407; Sun, 03 Aug 2014 07:27:47 -0700 (PDT) Received: from localhost ([95.145.138.172]) by mx.google.com with ESMTPSA id o2sm30355980wij.24.2014.08.03.07.27.46 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 03 Aug 2014 07:27:46 -0700 (PDT) From: Richard Sandiford To: gcc-patches@gcc.gnu.org Mail-Followup-To: gcc-patches@gcc.gnu.org, rdsandiford@googlemail.com Subject: [PATCH 39/50] rtlanal.c:record_hard_reg_uses References: <87y4v5d77q.fsf@googlemail.com> Date: Sun, 03 Aug 2014 15:27:46 +0100 In-Reply-To: <87y4v5d77q.fsf@googlemail.com> (Richard Sandiford's message of "Sun, 03 Aug 2014 14:38:01 +0100") Message-ID: <87a97l7in1.fsf@googlemail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) MIME-Version: 1.0 find_all_hard_regs seems like a useful function so I split it out of the note_uses callback and exposed it in rtl.h. I have (or had) other patches that make use of it. gcc/ * rtl.h (find_all_hard_regs): Declare. * rtlanal.c (find_all_hard_regs): New function. (record_hard_reg_uses_1): Delete. (record_hard_reg_uses): Use find_all_hard_regs. Index: gcc/rtl.h =================================================================== --- gcc/rtl.h 2014-08-03 11:25:30.745160142 +0100 +++ gcc/rtl.h 2014-08-03 11:25:31.042163078 +0100 @@ -2245,6 +2245,7 @@ extern const_rtx set_of (const_rtx, cons extern void record_hard_reg_sets (rtx, const_rtx, void *); extern void record_hard_reg_uses (rtx *, void *); #ifdef HARD_CONST +extern void find_all_hard_regs (const_rtx, HARD_REG_SET *); extern void find_all_hard_reg_sets (const_rtx, HARD_REG_SET *, bool); #endif extern void note_stores (const_rtx, void (*) (rtx, const_rtx, void *), void *); Index: gcc/rtlanal.c =================================================================== --- gcc/rtlanal.c 2014-08-03 11:25:30.746160151 +0100 +++ gcc/rtlanal.c 2014-08-03 11:25:31.043163088 +0100 @@ -1122,6 +1122,19 @@ set_of (const_rtx pat, const_rtx insn) return data.found; } +/* Add all hard register in X to *PSET. */ +void +find_all_hard_regs (const_rtx x, HARD_REG_SET *pset) +{ + subrtx_iterator::array_type array; + FOR_EACH_SUBRTX (iter, array, x, NONCONST) + { + const_rtx x = *iter; + if (REG_P (x) && REGNO (x) < FIRST_PSEUDO_REGISTER) + add_to_hard_reg_set (pset, GET_MODE (x), REGNO (x)); + } +} + /* This function, called through note_stores, collects sets and clobbers of hard registers in a HARD_REG_SET, which is pointed to by DATA. */ @@ -1155,27 +1168,11 @@ find_all_hard_reg_sets (const_rtx insn, record_hard_reg_sets (XEXP (link, 0), NULL, pset); } -/* A for_each_rtx subroutine of record_hard_reg_uses. */ -static int -record_hard_reg_uses_1 (rtx *px, void *data) -{ - rtx x = *px; - HARD_REG_SET *pused = (HARD_REG_SET *)data; - - if (REG_P (x) && REGNO (x) < FIRST_PSEUDO_REGISTER) - { - int nregs = hard_regno_nregs[REGNO (x)][GET_MODE (x)]; - while (nregs-- > 0) - SET_HARD_REG_BIT (*pused, REGNO (x) + nregs); - } - return 0; -} - /* Like record_hard_reg_sets, but called through note_uses. */ void record_hard_reg_uses (rtx *px, void *data) { - for_each_rtx (px, record_hard_reg_uses_1, data); + find_all_hard_regs (*px, (HARD_REG_SET *) data); } /* Given an INSN, return a SET expression if this insn has only a single SET.