From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 64082 invoked by alias); 9 Oct 2017 19:35:20 -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 64019 invoked by uid 89); 9 Oct 2017 19:35:19 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-24.1 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LAZY_DOMAIN_SECURITY,RP_MATCHES_RCVD autolearn=ham version=3.3.2 spammy=Hook X-HELO: gcc1-power7.osuosl.org Received: from gcc1-power7.osuosl.org (HELO gcc1-power7.osuosl.org) (140.211.15.137) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 09 Oct 2017 19:35:18 +0000 Received: by gcc1-power7.osuosl.org (Postfix, from userid 10019) id DB02812402F2; Mon, 9 Oct 2017 19:35:16 +0000 (UTC) From: Segher Boessenkool To: gcc-patches@gcc.gnu.org Cc: law@redhat.com, Segher Boessenkool Subject: [PATCH 3/3] Add targetm.insn_cost hook Date: Mon, 09 Oct 2017 19:48:00 -0000 Message-Id: In-Reply-To: References: In-Reply-To: References: X-IsSubscribed: yes X-SW-Source: 2017-10/txt/msg00531.txt.bz2 This adds a new hook that the insn_cost function uses if a target has implemented it (it uses the old pattern_cost nee insn_rtx_cost if not). I'll commit this now; it was okayed by Jeff at https://gcc.gnu.org/ml/gcc-patches/2017-08/msg00204.html . Segher 2017-10-09 Segher Boessenkool * target.def (insn_cost): New hook. * doc/tm.texi.in (TARGET_INSN_COST): New hook. * doc/tm.texi: Regenerate. * rtlanal.c (insn_cost): Use the new hook. --- gcc/doc/tm.texi | 12 ++++++++++++ gcc/doc/tm.texi.in | 2 ++ gcc/rtlanal.c | 3 +++ gcc/target.def | 14 ++++++++++++++ 4 files changed, 31 insertions(+) diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index 8f503e1..0377217 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -6652,6 +6652,18 @@ should probably only be given to addresses with different numbers of registers on machines with lots of registers. @end deftypefn +@deftypefn {Target Hook} int TARGET_INSN_COST (rtx_insn *@var{insn}, bool @var{speed}) +This target hook describes the relative costs of RTL instructions. + +In implementing this hook, you can use the construct +@code{COSTS_N_INSNS (@var{n})} to specify a cost equal to @var{n} fast +instructions. + +When optimizing for code size, i.e.@: when @code{speed} is +false, this target hook should be used to estimate the relative +size cost of an expression, again relative to @code{COSTS_N_INSNS}. +@end deftypefn + @deftypefn {Target Hook} {unsigned int} TARGET_MAX_NOCE_IFCVT_SEQ_COST (edge @var{e}) This hook returns a value in the same units as @code{TARGET_RTX_COSTS}, giving the maximum acceptable cost for a sequence generated by the RTL diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in index 15b3f1f..d2cf68f 100644 --- a/gcc/doc/tm.texi.in +++ b/gcc/doc/tm.texi.in @@ -4600,6 +4600,8 @@ Define this macro if a non-short-circuit operation produced by @hook TARGET_ADDRESS_COST +@hook TARGET_INSN_COST + @hook TARGET_MAX_NOCE_IFCVT_SEQ_COST @hook TARGET_NOCE_CONVERSION_PROFITABLE_P diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c index f01eab5..eadf691 100644 --- a/gcc/rtlanal.c +++ b/gcc/rtlanal.c @@ -5329,6 +5329,9 @@ pattern_cost (rtx pat, bool speed) int insn_cost (rtx_insn *insn, bool speed) { + if (targetm.insn_cost) + return targetm.insn_cost (insn, speed); + return pattern_cost (PATTERN (insn), speed); } diff --git a/gcc/target.def b/gcc/target.def index 80ef746..aac5d27 100644 --- a/gcc/target.def +++ b/gcc/target.def @@ -3715,6 +3715,20 @@ registers on machines with lots of registers.", int, (rtx address, machine_mode mode, addr_space_t as, bool speed), default_address_cost) +/* Compute a cost for INSN. */ +DEFHOOK +(insn_cost, + "This target hook describes the relative costs of RTL instructions.\n\ +\n\ +In implementing this hook, you can use the construct\n\ +@code{COSTS_N_INSNS (@var{n})} to specify a cost equal to @var{n} fast\n\ +instructions.\n\ +\n\ +When optimizing for code size, i.e.@: when @code{speed} is\n\ +false, this target hook should be used to estimate the relative\n\ +size cost of an expression, again relative to @code{COSTS_N_INSNS}.", + int, (rtx_insn *insn, bool speed), NULL) + /* Give a cost, in RTX Costs units, for an edge. Like BRANCH_COST, but with well defined units. */ DEFHOOK -- 1.8.3.1