From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16338 invoked by alias); 14 Nov 2016 08:01:56 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 16258 invoked by uid 89); 14 Nov 2016 08:01:55 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_FAIL autolearn=no version=3.3.2 spammy=is_a_helper, datum, 2016-11-14 X-HELO: eggs.gnu.org Received: from eggs.gnu.org (HELO eggs.gnu.org) (208.118.235.92) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 14 Nov 2016 08:01:45 +0000 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1c6CCn-0006hK-5m for gcc-patches@gcc.gnu.org; Mon, 14 Nov 2016 03:01:30 -0500 Received: from [2600:3c03::f03c:91ff:fe6e:c625] (port=48156 helo=paperclip.tbsaunde.org) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1c6CCn-0006ff-0o for gcc-patches@gcc.gnu.org; Mon, 14 Nov 2016 03:01:29 -0500 Received: from keg.corp.tor1.mozilla.com (unknown [IPv6:2607:f0c8:8000:80e0:56ee:75ff:fe52:afb9]) by paperclip.tbsaunde.org (Postfix) with ESMTPSA id C97A9C1A9 for ; Mon, 14 Nov 2016 08:01:28 +0000 (UTC) From: tbsaunde+gcc@tbsaunde.org To: gcc-patches@gcc.gnu.org Subject: [PATCH 11/11] make find_reg{,no}_fusage take rtx_insn * Date: Mon, 14 Nov 2016 08:01:00 -0000 Message-Id: <20161114080934.19056-12-tbsaunde+gcc@tbsaunde.org> In-Reply-To: <20161114080934.19056-1-tbsaunde+gcc@tbsaunde.org> References: <20161114080934.19056-1-tbsaunde+gcc@tbsaunde.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2600:3c03::f03c:91ff:fe6e:c625 X-IsSubscribed: yes X-SW-Source: 2016-11/txt/msg01293.txt.bz2 From: Trevor Saunders gcc/ChangeLog: 2016-11-14 Trevor Saunders * config/arm/arm-protos.h: Adjust prototype. * config/arm/arm.c (use_return_insn): Change argument type to rtx_insn *. * rtl.h (is_a_helper ::test): New specialization. * rtlanal.c (reg_set_p): Adjust. (find_reg_fusage): Change argument type to rtx_insn *. (find_regno_fusage): Likewise. --- gcc/config/arm/arm-protos.h | 2 +- gcc/config/arm/arm.c | 2 +- gcc/rtl.h | 12 ++++++++++-- gcc/rtlanal.c | 23 +++++++++++++---------- 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/gcc/config/arm/arm-protos.h b/gcc/config/arm/arm-protos.h index 95bae5e..539588b 100644 --- a/gcc/config/arm/arm-protos.h +++ b/gcc/config/arm/arm-protos.h @@ -23,7 +23,7 @@ #define GCC_ARM_PROTOS_H extern enum unwind_info_type arm_except_unwind_info (struct gcc_options *); -extern int use_return_insn (int, rtx); +extern int use_return_insn (int, rtx_insn *); extern bool use_simple_return_p (void); extern enum reg_class arm_regno_class (int); extern void arm_load_pic_register (unsigned long); diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 3e63330..7f8ab8e 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -3737,7 +3737,7 @@ arm_trampoline_adjust_address (rtx addr) call. SIBLING is the call insn, so we can examine its register usage. */ int -use_return_insn (int iscond, rtx sibling) +use_return_insn (int iscond, rtx_insn *sibling) { int regno; unsigned int func_type; diff --git a/gcc/rtl.h b/gcc/rtl.h index 03c1157..f8b6b95 100644 --- a/gcc/rtl.h +++ b/gcc/rtl.h @@ -907,6 +907,14 @@ is_a_helper ::test (rtx rt) template <> template <> inline bool +is_a_helper ::test (const_rtx rt) +{ + return CALL_P (rt); +} + +template <> +template <> +inline bool is_a_helper ::test (rtx_insn *insn) { return CALL_P (insn); @@ -3013,8 +3021,8 @@ extern rtx find_reg_note (const_rtx, enum reg_note, const_rtx); extern rtx find_regno_note (const_rtx, enum reg_note, unsigned int); extern rtx find_reg_equal_equiv_note (const rtx_insn *); extern rtx find_constant_src (const rtx_insn *); -extern int find_reg_fusage (const_rtx, enum rtx_code, const_rtx); -extern int find_regno_fusage (const_rtx, enum rtx_code, unsigned int); +extern int find_reg_fusage (const rtx_insn *, enum rtx_code, const_rtx); +extern int find_regno_fusage (const rtx_insn *, enum rtx_code, unsigned int); extern rtx alloc_reg_note (enum reg_note, rtx, rtx); extern void add_reg_note (rtx, enum reg_note, rtx); extern void add_int_reg_note (rtx_insn *, enum reg_note, int); diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c index 9cd24bb..e85da56 100644 --- a/gcc/rtlanal.c +++ b/gcc/rtlanal.c @@ -1196,14 +1196,17 @@ reg_set_p (const_rtx reg, const_rtx insn) /* We can be passed an insn or part of one. If we are passed an insn, check if a side-effect of the insn clobbers REG. */ if (INSN_P (insn) - && (FIND_REG_INC_NOTE (insn, reg) - || (CALL_P (insn) - && ((REG_P (reg) - && REGNO (reg) < FIRST_PSEUDO_REGISTER - && overlaps_hard_reg_set_p (regs_invalidated_by_call, - GET_MODE (reg), REGNO (reg))) - || MEM_P (reg) - || find_reg_fusage (insn, CLOBBER, reg))))) + && FIND_REG_INC_NOTE (insn, reg)) + return true; + + const rtx_call_insn *call = dyn_cast (insn); + if (call + && ((REG_P (reg) + && REGNO (reg) < FIRST_PSEUDO_REGISTER + && overlaps_hard_reg_set_p (regs_invalidated_by_call, + GET_MODE (reg), REGNO (reg))) + || MEM_P (reg) + || find_reg_fusage (call, CLOBBER, reg))) return true; return set_of (reg, insn) != NULL_RTX; @@ -2165,7 +2168,7 @@ find_constant_src (const rtx_insn *insn) in the CALL_INSN_FUNCTION_USAGE information of INSN. */ int -find_reg_fusage (const_rtx insn, enum rtx_code code, const_rtx datum) +find_reg_fusage (const rtx_insn *insn, enum rtx_code code, const_rtx datum) { /* If it's not a CALL_INSN, it can't possibly have a CALL_INSN_FUNCTION_USAGE field, so don't bother checking. */ @@ -2210,7 +2213,7 @@ find_reg_fusage (const_rtx insn, enum rtx_code code, const_rtx datum) in the CALL_INSN_FUNCTION_USAGE information of INSN. */ int -find_regno_fusage (const_rtx insn, enum rtx_code code, unsigned int regno) +find_regno_fusage (const rtx_insn *insn, enum rtx_code code, unsigned int regno) { rtx link; -- 2.9.3.dirty