From patchwork Wed Oct 7 22:57:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Modra X-Patchwork-Id: 1378323 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=sourceware.org; envelope-from=gcc-patches-bounces@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gcc.gnu.org Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=tPmbpPRB; dkim-atps=neutral Received: from sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4C68rz6dMGz9sS8 for ; Thu, 8 Oct 2020 09:58:43 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 7A3863846035; Wed, 7 Oct 2020 22:58:38 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7A3863846035 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1602111518; bh=V9XOcuMXLFK9ZnwG2EUBtJqSxWpOgK55R67pqKSNWLI=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=tPmbpPRB4fJk9vH2zOSgqwCfifqGVLFDVu+P3salh2jWDi45NeyXRllov2a/0iVLA Qkm/GahmqEdEvnRrTH/LsxeK7J5mJH0N15m2WqCwcjaGFO6jFRbc1F/K4phq+3Cckw ZZ2qmBQvWs11edIELM9K53U/i6y7+NdAiTLHvFPI= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-pf1-x430.google.com (mail-pf1-x430.google.com [IPv6:2607:f8b0:4864:20::430]) by sourceware.org (Postfix) with ESMTPS id C36BF3851C2A for ; Wed, 7 Oct 2020 22:58:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org C36BF3851C2A Received: by mail-pf1-x430.google.com with SMTP id x22so2341963pfo.12 for ; Wed, 07 Oct 2020 15:58:35 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=V9XOcuMXLFK9ZnwG2EUBtJqSxWpOgK55R67pqKSNWLI=; b=jH6+88uKS4aHykf4DwxBRBcQ0E5rlXcfIH+eYQE/pHw9P6MSjsRP5cGy10dkMCVS0t 69d2wcmoBKXeOpVfWYAhu1uzHRC0Uo9d0Zz8vjQ23yb9XG75wFPk+d/rdmhw2vAuvDGK C0JyD3eq1Kc2AAB5fFS6pEgA6BrDZHWN5Po7FiNylxs8tHuujhH4BgkwLGoJl1npvB6Y uA96yGE/DIqGxQ1mczigkv+I/B9Ch4GEaFQTtzkRrJh7mOHhMDVvIp0or6nbzUB9Om8f koYjVKRePwTBcsRFNqKIUB+V6X50yWbvL78xaYxqXw14ZItfwmcD89POF/ADBE11/qGL 2hqg== X-Gm-Message-State: AOAM531WSTKJrEFG27gNRI7hChHETyC1h1m1lXlbPcM4rbPD4u8an8Ck cE5kctL4MYNDszln9A8Qnaq1PNiPtr6K/g== X-Google-Smtp-Source: ABdhPJx5Qspg6BQDqnUAMUNyF3a5jZrNtKBgH1+GtLl75VUcCLGT83WoUTLCNF0Dm7lHIGagt1pAmg== X-Received: by 2002:a63:de0a:: with SMTP id f10mr4944793pgg.49.1602111512719; Wed, 07 Oct 2020 15:58:32 -0700 (PDT) Received: from bubble.grove.modra.org ([2406:3400:51d:8cc0:e872:ea73:2f18:2dba]) by smtp.gmail.com with ESMTPSA id u15sm4451348pfm.61.2020.10.07.15.58.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Oct 2020 15:58:27 -0700 (PDT) To: gcc-patches@gcc.gnu.org Subject: [PATCH 1/8] [RS6000] rs6000_rtx_costs comment Date: Thu, 8 Oct 2020 09:27:53 +1030 Message-Id: <20201007225800.9536-2-amodra@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201007225800.9536-1-amodra@gmail.com> References: <20201007225800.9536-1-amodra@gmail.com> X-Spam-Status: No, score=-9.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Alan Modra via Gcc-patches From: Alan Modra Reply-To: Alan Modra Cc: segher@kernel.crashing.org Errors-To: gcc-patches-bounces@gcc.gnu.org Sender: "Gcc-patches" This lays out the ground rules for following patches. * config/rs6000/rs6000.c (rs6000_rtx_costs): Expand comment. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index b58eeae2b98..97180bb3819 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -21208,7 +21208,46 @@ rs6000_cannot_copy_insn_p (rtx_insn *insn) /* Compute a (partial) cost for rtx X. Return true if the complete cost has been computed, and false if subexpressions should be - scanned. In either case, *TOTAL contains the cost result. */ + scanned. In either case, *TOTAL contains the cost result. + + 1) Calls from places like optabs.c:avoid_expensive_constant will + come here with OUTER_CODE set to an operation such as AND with X + being a CONST_INT or other CONSTANT_P type. This will be compared + against set_src_cost, where we'll come here with OUTER_CODE as SET + and X the same constant. + + 2) Calls from places like combine.c:distribute_and_simplify_rtx are + asking whether a possibly quite complex SET_SRC can be implemented + more cheaply than some other logically equivalent SET_SRC. + + 3) Calls from places like ifcvt.c:default_noce_conversion_profitable_p + will come here via seq_cost which calls set_rtx_cost on single set + insns. set_rtx_cost passes the pattern of a SET insn in X with + OUTER_CODE as INSN. The overall cost should be comparable to + rs6000_insn_cost since the code is comparing one insn sequence + (some of which may be costed by insn_cost) against another sequence. + Note the difference between set_rtx_cost, which costs the entire + SET, and set_src_cost, which costs just the SET_SRC. + + 4) Calls from places like cprop.c:try_replace_reg will also come + here via set_rtx_cost, with X either a valid pattern of a SET or + one where some registers have been replaced with constants. The + replacements may make the SET invalid, for example if + (set (reg1) (and (reg2) (const_int 0xfff))) + has reg2 replaced as + (set (reg1) (and (symbol_ref) (const_int 0xfff))) + then the replacement can't be implemented in one instruction and + really the cost should be higher by one instruction. However, + the cost for invalid insns doesn't matter much except that a + higher cost may lead to their rejection earlier. + + 5) fwprop.c:should_replace_address puts yet another wrinkle on this + function, where we prefer an address calculation that is more + complex yet has the same address_cost. In this case "more + complex" is determined by having a higher set_src_cost. So for + example, if we want a plain (reg) address to be replaced with + (plus (reg) (const)) when possible then PLUS needs to cost more + than zero here. */ static bool rs6000_rtx_costs (rtx x, machine_mode mode, int outer_code, From patchwork Wed Oct 7 22:57:54 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Modra X-Patchwork-Id: 1378324 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=sourceware.org; envelope-from=gcc-patches-bounces@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gcc.gnu.org Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=ddhKVR2L; dkim-atps=neutral Received: from sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4C68s24kWRz9sPB for ; Thu, 8 Oct 2020 09:58:46 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A2F79386F45F; Wed, 7 Oct 2020 22:58:39 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A2F79386F45F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1602111519; bh=0vAPiy+SjU5gBNGW+eMw8ff4kmLINq7KRXrAQ3wywOw=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=ddhKVR2LcmTaYUs/C66KZIqL+CukJZtLuP7dfKSIddFM7BmAg7QDfJnp0PXgn8wbR qhF1D70NzKhwKo0MU5AwFdnXWIUn4wyI4tfMTIDrCYe380nCfu5/MIzJXcloKFQIDB L1ty/71U3M2P2zYqeAAOhWSPKOSCEAp9KLgllZLw= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-pg1-x534.google.com (mail-pg1-x534.google.com [IPv6:2607:f8b0:4864:20::534]) by sourceware.org (Postfix) with ESMTPS id 0B9C53851C2A for ; Wed, 7 Oct 2020 22:58:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 0B9C53851C2A Received: by mail-pg1-x534.google.com with SMTP id 7so2556730pgm.11 for ; Wed, 07 Oct 2020 15:58:38 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=0vAPiy+SjU5gBNGW+eMw8ff4kmLINq7KRXrAQ3wywOw=; b=nLe9/j5m+9z0g0hz8sL41YV/5QndGchGLZdl6YyuC3f1OV9/HNep1zRwfNQp2x7dcv V+trDPyQlT/DfUh1WuG0upCJAsg8Hkq0P7fvyKW60mUs0QPJHBYkTttiN+JOvYoLZeAp n+Tg2lD04p+Ra+nJ/TOociLFwKB1e5DVMGn0ZYScC3q8ZkfrTGkjyYFDo1jTDWyFy2ll v2IcWNivLb06M/5FwE2eLiU54X31AfvSPFYBBakHPHsT71oiNEsNpHvE1s7bu9kOo02m BnePSXFgT/8h0G+U2t1uUGc2iRZSbmZKh8niidOAh4UHq0UyRLmysGdJIHiQTzsloeuZ 2/0A== X-Gm-Message-State: AOAM532VK8ALNy77i+e/xjCbI8ihXhmvhU5Dl0x1t+v/FcbyeYh1ZbBh agv0WSl9oCO5WjSmO2oUYMxYtRjqag+MvQ== X-Google-Smtp-Source: ABdhPJyPLbrtJg0VHvqwk1zkdIxWoK5ir1T7a0AifkL0HMIePJHW2sPx0c2fQ/LSPwshYNnvR3JHdw== X-Received: by 2002:a63:584e:: with SMTP id i14mr2690907pgm.329.1602111516742; Wed, 07 Oct 2020 15:58:36 -0700 (PDT) Received: from bubble.grove.modra.org ([2406:3400:51d:8cc0:e872:ea73:2f18:2dba]) by smtp.gmail.com with ESMTPSA id u15sm4451348pfm.61.2020.10.07.15.58.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Oct 2020 15:58:36 -0700 (PDT) To: gcc-patches@gcc.gnu.org Subject: [PATCH 2/8] [RS6000] rs6000_rtx_costs for AND Date: Thu, 8 Oct 2020 09:27:54 +1030 Message-Id: <20201007225800.9536-3-amodra@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201007225800.9536-1-amodra@gmail.com> References: <20201007225800.9536-1-amodra@gmail.com> X-Spam-Status: No, score=-10.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Alan Modra via Gcc-patches From: Alan Modra Reply-To: Alan Modra Cc: segher@kernel.crashing.org Errors-To: gcc-patches-bounces@gcc.gnu.org Sender: "Gcc-patches" The existing "case AND" in this function is not sufficient for optabs.c:avoid_expensive_constant usage, where the AND is passed in outer_code. We'd like to cost AND of rs6000_is_valid_and_mask or rs6000_is_valid_2insn_and variety there, so that those masks aren't seen as expensive (ie. better to load to a reg then AND). * config/rs6000/rs6000.c (rs6000_rtx_costs): Combine CONST_INT AND handling with IOR/XOR. Move costing for AND with rs6000_is_valid_and_mask or rs6000_is_valid_2insn_and to CONST_INT. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 97180bb3819..e870ba0039a 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -21264,16 +21264,13 @@ rs6000_rtx_costs (rtx x, machine_mode mode, int outer_code, || outer_code == MINUS) && (satisfies_constraint_I (x) || satisfies_constraint_L (x))) - || (outer_code == AND - && (satisfies_constraint_K (x) - || (mode == SImode - ? satisfies_constraint_L (x) - : satisfies_constraint_J (x)))) - || ((outer_code == IOR || outer_code == XOR) + || ((outer_code == AND || outer_code == IOR || outer_code == XOR) && (satisfies_constraint_K (x) || (mode == SImode ? satisfies_constraint_L (x) : satisfies_constraint_J (x)))) + || (outer_code == AND + && rs6000_is_valid_and_mask (x, mode)) || outer_code == ASHIFT || outer_code == ASHIFTRT || outer_code == LSHIFTRT @@ -21310,7 +21307,9 @@ rs6000_rtx_costs (rtx x, machine_mode mode, int outer_code, || outer_code == IOR || outer_code == XOR) && (INTVAL (x) - & ~ (unsigned HOST_WIDE_INT) 0xffffffff) == 0)) + & ~ (unsigned HOST_WIDE_INT) 0xffffffff) == 0) + || (outer_code == AND + && rs6000_is_valid_2insn_and (x, mode))) { *total = COSTS_N_INSNS (1); return true; @@ -21448,26 +21447,6 @@ rs6000_rtx_costs (rtx x, machine_mode mode, int outer_code, *total += COSTS_N_INSNS (1); return true; } - - /* rotate-and-mask (no rotate), andi., andis.: 1 insn. */ - HOST_WIDE_INT val = INTVAL (XEXP (x, 1)); - if (rs6000_is_valid_and_mask (XEXP (x, 1), mode) - || (val & 0xffff) == val - || (val & 0xffff0000) == val - || ((val & 0xffff) == 0 && mode == SImode)) - { - *total = rtx_cost (left, mode, AND, 0, speed); - *total += COSTS_N_INSNS (1); - return true; - } - - /* 2 insns. */ - if (rs6000_is_valid_2insn_and (XEXP (x, 1), mode)) - { - *total = rtx_cost (left, mode, AND, 0, speed); - *total += COSTS_N_INSNS (2); - return true; - } } *total = COSTS_N_INSNS (1); From patchwork Wed Oct 7 22:57:55 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Modra X-Patchwork-Id: 1378325 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=sourceware.org; envelope-from=gcc-patches-bounces@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gcc.gnu.org Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=Zkk0JMos; dkim-atps=neutral Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4C68s558Jjz9sPB for ; Thu, 8 Oct 2020 09:58:49 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 40D7E386F467; Wed, 7 Oct 2020 22:58:43 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 40D7E386F467 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1602111523; bh=ZtANg1a8h3UPhamCtLOSTWUREt8v6gTqgRvU62mQlkI=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=Zkk0JMosEK5RkFrRPLIJRJjO/ZDKnLiXNVo3bMG0Jk/nol3T+q6eG7Dq6VrUBPM0H 7LD+q7VoLKeABUIowUdYGZRcg2IhYKX3JfQVrsHI5pntI9H4AsjQnuU5TuhgVRIo61 xBA9/U36K1joOy+iLI2Mo9b3xhclGcpXcl1B48r0= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-pg1-x542.google.com (mail-pg1-x542.google.com [IPv6:2607:f8b0:4864:20::542]) by sourceware.org (Postfix) with ESMTPS id 9978338618BD for ; Wed, 7 Oct 2020 22:58:40 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 9978338618BD Received: by mail-pg1-x542.google.com with SMTP id 7so2556841pgm.11 for ; Wed, 07 Oct 2020 15:58:40 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ZtANg1a8h3UPhamCtLOSTWUREt8v6gTqgRvU62mQlkI=; b=gQ1HdfRXvPCJ28EdDv2IAoh+XAV+wYCNsqNy9DW5uBg78IPkBSnm6k7S6/Iklm8cit cKok07PlppMDABFvQWGdiFNxNH03npZVXwGXKPU5poDsujoSUJPeZzElRDf7NkjnE+eD 52gxuErYicPJvfS6IaCVOtefOj5H6VW1+qsvHfsjnsHLLbz5HdIBp1mxt72gQrAzclXb xh9LPd03pUwIyWZp++tuy9j8btvVT4K/4kJzXuMLiCVF4dQ5gvK2oI9x/gZx1psFz0aF 9jReCmgG4HBWi+Z05zvScivgjRF2C7muNDQXIlKl7hYq44b85I8pc43jh20Jc0RtH9N0 zxtA== X-Gm-Message-State: AOAM530jWZbjXciWET/MVEmFkM6Xq9QVqapsoBmCmA9eaKh44/wO6YPX guiEXRbuxr3+uf0bdHiV0STwpTxv2Fpjow== X-Google-Smtp-Source: ABdhPJxUmoCeItPcvMxmS/putZdwqBnjZj9ZYJ+JEMRDcBaD8wAjWco/GIV0v33NEClHyIV0Y5Ig1Q== X-Received: by 2002:a65:688a:: with SMTP id e10mr3326024pgt.347.1602111519418; Wed, 07 Oct 2020 15:58:39 -0700 (PDT) Received: from bubble.grove.modra.org ([2406:3400:51d:8cc0:e872:ea73:2f18:2dba]) by smtp.gmail.com with ESMTPSA id u15sm4451348pfm.61.2020.10.07.15.58.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Oct 2020 15:58:38 -0700 (PDT) To: gcc-patches@gcc.gnu.org Subject: [PATCH 3/8] [RS6000] rs6000_rtx_costs tidy AND Date: Thu, 8 Oct 2020 09:27:55 +1030 Message-Id: <20201007225800.9536-4-amodra@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201007225800.9536-1-amodra@gmail.com> References: <20201007225800.9536-1-amodra@gmail.com> X-Spam-Status: No, score=-10.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Alan Modra via Gcc-patches From: Alan Modra Reply-To: Alan Modra Cc: segher@kernel.crashing.org Errors-To: gcc-patches-bounces@gcc.gnu.org Sender: "Gcc-patches" * config/rs6000/rs6000.c (rs6000_rtx_costs): Tidy AND code. Don't avoid recursion on const_int shift count. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index e870ba0039a..bc5e51aa5ce 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -21253,6 +21253,7 @@ static bool rs6000_rtx_costs (rtx x, machine_mode mode, int outer_code, int opno ATTRIBUTE_UNUSED, int *total, bool speed) { + rtx right; int code = GET_CODE (x); switch (code) @@ -21430,7 +21431,9 @@ rs6000_rtx_costs (rtx x, machine_mode mode, int outer_code, return false; case AND: - if (CONST_INT_P (XEXP (x, 1))) + *total = COSTS_N_INSNS (1); + right = XEXP (x, 1); + if (CONST_INT_P (right)) { rtx left = XEXP (x, 0); rtx_code left_code = GET_CODE (left); @@ -21439,17 +21442,13 @@ rs6000_rtx_costs (rtx x, machine_mode mode, int outer_code, if ((left_code == ROTATE || left_code == ASHIFT || left_code == LSHIFTRT) - && rs6000_is_valid_shift_mask (XEXP (x, 1), left, mode)) + && rs6000_is_valid_shift_mask (right, left, mode)) { - *total = rtx_cost (XEXP (left, 0), mode, left_code, 0, speed); - if (!CONST_INT_P (XEXP (left, 1))) - *total += rtx_cost (XEXP (left, 1), SImode, left_code, 1, speed); - *total += COSTS_N_INSNS (1); + *total += rtx_cost (XEXP (left, 0), mode, left_code, 0, speed); + *total += rtx_cost (XEXP (left, 1), SImode, left_code, 1, speed); return true; } } - - *total = COSTS_N_INSNS (1); return false; case IOR: From patchwork Wed Oct 7 22:57:56 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Modra X-Patchwork-Id: 1378326 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=sourceware.org; envelope-from=gcc-patches-bounces@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gcc.gnu.org Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=gcwC67Or; dkim-atps=neutral Received: from sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4C68sB0Sdwz9sPB for ; Thu, 8 Oct 2020 09:58:54 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id D5163386F810; Wed, 7 Oct 2020 22:58:45 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D5163386F810 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1602111525; bh=9/ZFM1H40aFEBcJAst5BpM6/k2F3ZCRjMZln7+IL8BI=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=gcwC67OrqMV9OX5inv7xSHK+p7Q52TmXKEovAmMSz3unRwsLsrfuiC7xZVfCtnYbE Bud4Lnvv6bGRBVOskWhHYNPdFl65eaqvpATUffgyzqwAYiZd1lZ7L2LRqxZ7OJ/5j+ KZ+59jwN2kW6NdXtePDVa05gsMTHDXLbsnbF4LGo= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-pf1-x442.google.com (mail-pf1-x442.google.com [IPv6:2607:f8b0:4864:20::442]) by sourceware.org (Postfix) with ESMTPS id 1B35C386F810 for ; Wed, 7 Oct 2020 22:58:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 1B35C386F810 Received: by mail-pf1-x442.google.com with SMTP id l126so2367514pfd.5 for ; Wed, 07 Oct 2020 15:58:44 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=9/ZFM1H40aFEBcJAst5BpM6/k2F3ZCRjMZln7+IL8BI=; b=QoBYXuii86/PTBFtXKC3LTvsVjC5o4hyRvfZHvV0oEkV0aHdQ4IPFBhlpGZst+RdTa VjWFq5DV7ulFnFr48RqdNghc2VA3nl5zOSND7cshfV4bGVUJiND4UrPtIscFIY/k2vLP 77U7uPinr1r5bCpsgn/axgPV3DX+uQwLQILg25d4XzkLPH2IIUuxkTrVbBiVGBOr2V2k PLJ6VFA598CqPBPnOvNb+UedkVN1p50a8w5KBLgCWORr44Ooa3nV1ZVrsChnQPZUsNu1 Bjof4hbZsMaXknE7t57q4s8798DXdA0DCt3QNoOmaxwj1gPFkMh2Lzp9nm7OQyBpnZsp J/mA== X-Gm-Message-State: AOAM533EI4XKYdL9bCaLURbnxpluF4Wn2bK65nnfkls7LmSVh2Wyz6GZ 2Zv6J+ODeKoYSEjvR8R35dsAK8RBGZiKGQ== X-Google-Smtp-Source: ABdhPJy2a/N2i2i/jPxcopi91cDFAjR4eaaTGmh8UP4tagdFPodK76YDD4EUgJJss/VoDPzKNZj2SA== X-Received: by 2002:a62:2985:0:b029:142:2501:35d3 with SMTP id p127-20020a6229850000b0290142250135d3mr4975280pfp.51.1602111522242; Wed, 07 Oct 2020 15:58:42 -0700 (PDT) Received: from bubble.grove.modra.org ([2406:3400:51d:8cc0:e872:ea73:2f18:2dba]) by smtp.gmail.com with ESMTPSA id u15sm4451348pfm.61.2020.10.07.15.58.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Oct 2020 15:58:41 -0700 (PDT) To: gcc-patches@gcc.gnu.org Subject: [PATCH 4/8] [RS6000] rs6000_rtx_costs tidy break/return Date: Thu, 8 Oct 2020 09:27:56 +1030 Message-Id: <20201007225800.9536-5-amodra@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201007225800.9536-1-amodra@gmail.com> References: <20201007225800.9536-1-amodra@gmail.com> X-Spam-Status: No, score=-10.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Alan Modra via Gcc-patches From: Alan Modra Reply-To: Alan Modra Cc: segher@kernel.crashing.org Errors-To: gcc-patches-bounces@gcc.gnu.org Sender: "Gcc-patches" Most cases use "return false" rather than breaking out of the switch. Do so in all cases. * config/rs6000/rs6000.c (rs6000_rtx_costs): Tidy break/return. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index bc5e51aa5ce..383d2901c9f 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -21371,7 +21371,7 @@ rs6000_rtx_costs (rtx x, machine_mode mode, int outer_code, *total = rs6000_cost->fp; else *total = rs6000_cost->dmul; - break; + return false; case DIV: case MOD: @@ -21539,7 +21539,7 @@ rs6000_rtx_costs (rtx x, machine_mode mode, int outer_code, *total = rs6000_cost->fp; return false; } - break; + return false; case NE: case EQ: @@ -21577,13 +21577,11 @@ rs6000_rtx_costs (rtx x, machine_mode mode, int outer_code, *total = 0; return true; } - break; + return false; default: - break; + return false; } - - return false; } /* Debug form of r6000_rtx_costs that is selected if -mdebug=cost. */ From patchwork Wed Oct 7 22:57:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Modra X-Patchwork-Id: 1378327 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=sourceware.org; envelope-from=gcc-patches-bounces@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gcc.gnu.org Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=H7fkysgj; dkim-atps=neutral Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4C68sF748Yz9sPB for ; Thu, 8 Oct 2020 09:58:57 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 7979A3870865; Wed, 7 Oct 2020 22:58:49 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7979A3870865 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1602111529; bh=qkXPA+TpwA2OkiNnehumLEvw3Q/fJtYqrfDq5PqfT7U=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=H7fkysgjU8cPNmBfffl7n4fK5qGE8qUSN1M4ftXUqDDGM8uFu9o2+/XanIXfAsrOV aAPfGsorjLqpbThmyIxTwmlq1xYARDqfJG4ta0uUsZ7iJ+6CBOknqwRIBUeO+OkLYP +TdeKptCPiW2R9L87iNk5ThXkq+GtuPT39k87oWE= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-pf1-x431.google.com (mail-pf1-x431.google.com [IPv6:2607:f8b0:4864:20::431]) by sourceware.org (Postfix) with ESMTPS id 6B61B386F83E for ; Wed, 7 Oct 2020 22:58:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 6B61B386F83E Received: by mail-pf1-x431.google.com with SMTP id 144so2368558pfb.4 for ; Wed, 07 Oct 2020 15:58:46 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=qkXPA+TpwA2OkiNnehumLEvw3Q/fJtYqrfDq5PqfT7U=; b=OmG2sgrdIj2dl//OHHgh8mBSZ+jhXDEZ6T36U9CCjRrClg9kClZ0biZ895hZ7G3wHI CnUbVODg3+vXXiU+NRaGymt6aLFUVItzYQcvjcFdgSAGL/7S2FJYSEzDTCCFjzIXAkHg X0I8mPlO9OVWqPRjSD4GwgwYCjMoHlaJ/Sx6Se7Aqz7zkpQ95/ZUA9aIQjdISk6Jc2q+ WNk+VebxHLx3qr70p27dyvcNVpcLdn20dnrkna3EIg2F7Pf0pu6yKlwUP6UU8xA+JAMe 8npM33AwxZlYhV3UG8Hs51QOqv5F/Yziz+sdH0ik9ZLJ0CPybv4nJvmh3MOPpjLrU2Cf aPQg== X-Gm-Message-State: AOAM532RRdnqU0+icYZLNqdlkrMEODR1hLzYjcZ+Z/4lGcec4UUNUd8H 0XKuVJhUrZMj9ncjbotEUXDmVfRb7/98KQ== X-Google-Smtp-Source: ABdhPJzFTACB/aQxGX40HjoOlZY9T/ucwH2igYAyYgnd+h9LCEYWFkyMECoYpXZs31Rj9Ap389pmWQ== X-Received: by 2002:a17:90b:408b:: with SMTP id jb11mr5088462pjb.164.1602111525048; Wed, 07 Oct 2020 15:58:45 -0700 (PDT) Received: from bubble.grove.modra.org ([2406:3400:51d:8cc0:e872:ea73:2f18:2dba]) by smtp.gmail.com with ESMTPSA id u15sm4451348pfm.61.2020.10.07.15.58.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Oct 2020 15:58:44 -0700 (PDT) To: gcc-patches@gcc.gnu.org Subject: [PATCH 5/8] [RS6000] rs6000_rtx_costs cost IOR Date: Thu, 8 Oct 2020 09:27:57 +1030 Message-Id: <20201007225800.9536-6-amodra@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201007225800.9536-1-amodra@gmail.com> References: <20201007225800.9536-1-amodra@gmail.com> X-Spam-Status: No, score=-10.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Alan Modra via Gcc-patches From: Alan Modra Reply-To: Alan Modra Cc: segher@kernel.crashing.org Errors-To: gcc-patches-bounces@gcc.gnu.org Sender: "Gcc-patches" * config/rs6000/rs6000.c (rotate_insert_cost): New function. (rs6000_rtx_costs): Cost IOR. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 383d2901c9f..15a806fe307 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -21206,6 +21206,91 @@ rs6000_cannot_copy_insn_p (rtx_insn *insn) && get_attr_cannot_copy (insn); } +/* Handle rtx_costs for scalar integer rotate and insert insns. */ + +static bool +rotate_insert_cost (rtx left, rtx right, machine_mode mode, bool speed, + int *total) +{ + if (GET_CODE (right) == AND + && CONST_INT_P (XEXP (right, 1)) + && UINTVAL (XEXP (left, 1)) + UINTVAL (XEXP (right, 1)) + 1 == 0) + { + rtx leftop = XEXP (left, 0); + rtx rightop = XEXP (right, 0); + + /* rotlsi3_insert_5. */ + if (REG_P (leftop) + && REG_P (rightop) + && mode == SImode + && UINTVAL (XEXP (left, 1)) != 0 + && UINTVAL (XEXP (right, 1)) != 0 + && rs6000_is_valid_mask (XEXP (left, 1), NULL, NULL, mode)) + return true; + /* rotldi3_insert_6. */ + if (REG_P (leftop) + && REG_P (rightop) + && mode == DImode + && exact_log2 (-UINTVAL (XEXP (left, 1))) > 0) + return true; + /* rotldi3_insert_7. */ + if (REG_P (leftop) + && REG_P (rightop) + && mode == DImode + && exact_log2 (-UINTVAL (XEXP (right, 1))) > 0) + return true; + + rtx mask = 0; + rtx shift = leftop; + rtx_code shift_code = GET_CODE (shift); + /* rotl3_insert. */ + if (shift_code == ROTATE + || shift_code == ASHIFT + || shift_code == LSHIFTRT) + mask = right; + else + { + shift = rightop; + shift_code = GET_CODE (shift); + /* rotl3_insert_2. */ + if (shift_code == ROTATE + || shift_code == ASHIFT + || shift_code == LSHIFTRT) + mask = left; + } + if (mask + && CONST_INT_P (XEXP (shift, 1)) + && rs6000_is_valid_insert_mask (XEXP (mask, 1), shift, mode)) + { + *total += rtx_cost (XEXP (shift, 0), mode, shift_code, 0, speed); + *total += rtx_cost (XEXP (mask, 0), mode, AND, 0, speed); + return true; + } + } + /* rotl3_insert_3. */ + if (GET_CODE (right) == ASHIFT + && CONST_INT_P (XEXP (right, 1)) + && (INTVAL (XEXP (right, 1)) + == exact_log2 (UINTVAL (XEXP (left, 1)) + 1))) + { + *total += rtx_cost (XEXP (left, 0), mode, AND, 0, speed); + *total += rtx_cost (XEXP (right, 0), mode, ASHIFT, 0, speed); + return true; + } + /* rotl3_insert_4. */ + if (GET_CODE (right) == LSHIFTRT + && CONST_INT_P (XEXP (right, 1)) + && mode == SImode + && (INTVAL (XEXP (right, 1)) + + exact_log2 (-UINTVAL (XEXP (left, 1)))) == 32) + { + *total += rtx_cost (XEXP (left, 0), mode, AND, 0, speed); + *total += rtx_cost (XEXP (right, 0), mode, LSHIFTRT, 0, speed); + return true; + } + return false; +} + /* Compute a (partial) cost for rtx X. Return true if the complete cost has been computed, and false if subexpressions should be scanned. In either case, *TOTAL contains the cost result. @@ -21253,7 +21338,7 @@ static bool rs6000_rtx_costs (rtx x, machine_mode mode, int outer_code, int opno ATTRIBUTE_UNUSED, int *total, bool speed) { - rtx right; + rtx left, right; int code = GET_CODE (x); switch (code) @@ -21435,7 +21520,7 @@ rs6000_rtx_costs (rtx x, machine_mode mode, int outer_code, right = XEXP (x, 1); if (CONST_INT_P (right)) { - rtx left = XEXP (x, 0); + left = XEXP (x, 0); rtx_code left_code = GET_CODE (left); /* rotate-and-mask: 1 insn. */ @@ -21452,9 +21537,16 @@ rs6000_rtx_costs (rtx x, machine_mode mode, int outer_code, return false; case IOR: - /* FIXME */ *total = COSTS_N_INSNS (1); - return true; + left = XEXP (x, 0); + if (GET_CODE (left) == AND + && CONST_INT_P (XEXP (left, 1))) + { + right = XEXP (x, 1); + if (rotate_insert_cost (left, right, mode, speed, total)) + return true; + } + return false; case CLZ: case XOR: From patchwork Wed Oct 7 22:57:58 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Modra X-Patchwork-Id: 1378328 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=sourceware.org; envelope-from=gcc-patches-bounces@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gcc.gnu.org Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=TeJ2tO//; dkim-atps=neutral Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4C68sL1xdSz9sPB for ; Thu, 8 Oct 2020 09:59:02 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 1E1C6386F83E; Wed, 7 Oct 2020 22:58:51 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1E1C6386F83E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1602111531; bh=RBuXOtdzSTndDwbkYLHHWBCKQMZOUzkw+ROxoJIt4PU=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=TeJ2tO//o9/70vYjbgdjXTiuO1/wT+q+Mqc+JBe1/LcA0b0oO6hM1um+HMyJiPjZg hVHK80Jrxv3OAUeC4Ka6ycMr7GgdHEc+1SLtn0Q/WMHKoSBTzTemQlUKN8ZZFf8YWv JQ72oZsDYXN5YPRwA9WOCvxWN9XwPRU75KthGzzE= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-pg1-x52f.google.com (mail-pg1-x52f.google.com [IPv6:2607:f8b0:4864:20::52f]) by sourceware.org (Postfix) with ESMTPS id 162DF386F45B for ; Wed, 7 Oct 2020 22:58:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 162DF386F45B Received: by mail-pg1-x52f.google.com with SMTP id x16so2591867pgj.3 for ; Wed, 07 Oct 2020 15:58:49 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=RBuXOtdzSTndDwbkYLHHWBCKQMZOUzkw+ROxoJIt4PU=; b=HPfH5MBW0C4iextZvm4bLcb6a/8mMFHo1DKfCv0sQsdr17/xzuRd+af0IRTZ1BRsfd M2nmADnGM6b/bxoqnrBbiovhCFZseJsR15yLRjbEX+eXkXY62q3Qalq1AhS0hqAvzOzV 8JHkZuDlceZPuGm5rujGV+ETDitjXvu0SsIEEPqPUWlcgd4jeDXCX3Hk1wM0yRQ53rRd jCYygiEij/nUmkre6OKhtRGWfgddlTlh7cvBTqH3vEgXNs8PQo5RA0vBLpEemRS6Hga4 dGl8+LLiWcj6KM8RLYchzW4kcoCl5zMnsp2axamSU/bU4v/2UuIPrW+bzbCYF0K+gyCB h1Wg== X-Gm-Message-State: AOAM532a1uZqmawqjewmF0PG79G0xQ8UxPYgFU/TuDko2CUGY1kLvwl+ UM/jydb/GrcXN7WLQYeCDGymvPlOpvh1Bg== X-Google-Smtp-Source: ABdhPJy9/Im+mZqbHOdWB0nRtraKndgxquA3QlCFbPosVXDvHARjBBqz9ThgF/R3bTstjlnDHceMrw== X-Received: by 2002:a63:2120:: with SMTP id h32mr4894538pgh.276.1602111527835; Wed, 07 Oct 2020 15:58:47 -0700 (PDT) Received: from bubble.grove.modra.org ([2406:3400:51d:8cc0:e872:ea73:2f18:2dba]) by smtp.gmail.com with ESMTPSA id u15sm4451348pfm.61.2020.10.07.15.58.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Oct 2020 15:58:47 -0700 (PDT) To: gcc-patches@gcc.gnu.org Subject: [PATCH 6/8] [RS6000] rs6000_rtx_costs multi-insn constants Date: Thu, 8 Oct 2020 09:27:58 +1030 Message-Id: <20201007225800.9536-7-amodra@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201007225800.9536-1-amodra@gmail.com> References: <20201007225800.9536-1-amodra@gmail.com> X-Spam-Status: No, score=-10.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Alan Modra via Gcc-patches From: Alan Modra Reply-To: Alan Modra Cc: segher@kernel.crashing.org Errors-To: gcc-patches-bounces@gcc.gnu.org Sender: "Gcc-patches" This small patch to rs6000_rtx_costs considerably improves code generated for large constants in 64-bit code, teaching gcc that it is better to load a constant from memory than to generate a sequence of up to five dependent instructions. Note that the rs6000 backend does generate large constants as loads from memory at expand time but optimisation passes replace them with SETs of the value due to not having correct costs. PR 94393 * config/rs6000/rs6000.c (rs6000_rtx_costs): Cost multi-insn constants. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 15a806fe307..76aedbfae6f 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -21343,7 +21343,9 @@ rs6000_rtx_costs (rtx x, machine_mode mode, int outer_code, switch (code) { - /* On the RS/6000, if it is valid in the insn, it is free. */ + /* (reg) is costed at zero by rtlanal.c:rtx_cost. That sets a + baseline for rtx costs: If a constant is valid in an insn, + it is free. */ case CONST_INT: if (((outer_code == SET || outer_code == PLUS @@ -21404,6 +21406,17 @@ rs6000_rtx_costs (rtx x, machine_mode mode, int outer_code, case CONST_DOUBLE: case CONST_WIDE_INT: + /* Subtract one insn here for consistency with the above code + that returns one less than the actual number of insns for + SETs. Don't subtract one for other than SETs, because other + operations will require the constant to be loaded to a + register before performing the operation. All special cases + for codes other than SET must be handled before we get + here. */ + *total = COSTS_N_INSNS (num_insns_constant (x, mode) + - (outer_code == SET ? 1 : 0)); + return true; + case CONST: case HIGH: case SYMBOL_REF: From patchwork Wed Oct 7 22:57:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Modra X-Patchwork-Id: 1378329 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=sourceware.org; envelope-from=gcc-patches-bounces@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gcc.gnu.org Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=Jli65S68; dkim-atps=neutral Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4C68sQ3t6Wz9sS8 for ; Thu, 8 Oct 2020 09:59:06 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id AA4D9387088F; Wed, 7 Oct 2020 22:58:54 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org AA4D9387088F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1602111534; bh=XGF/Wo3emnYynpFhGrKcFEjvrKFdrr6q9ioLFujt/1Q=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=Jli65S68uin7t/deqey+WvAiHNC0r2fyJ6VX4IOAZwctM+86txAkdgYLCgIYqlZSL +wch7Sce+wvLxoygVk/o5vBxMrQtC0DKQY5nPAwMTUBiU+1d9ZQ6d59L0dIQsurahV Jec03Y76na5QLXjzm/7RUFeSErxElZeOcCkczeuA= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-pg1-x532.google.com (mail-pg1-x532.google.com [IPv6:2607:f8b0:4864:20::532]) by sourceware.org (Postfix) with ESMTPS id 061F53870883 for ; Wed, 7 Oct 2020 22:58:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 061F53870883 Received: by mail-pg1-x532.google.com with SMTP id o25so2602515pgm.0 for ; Wed, 07 Oct 2020 15:58:51 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=XGF/Wo3emnYynpFhGrKcFEjvrKFdrr6q9ioLFujt/1Q=; b=pNRvnbunFkVQgUwP69JINIzw6h4RVZxyRhe84pPKNgCMC0EI+Rj3Ff51HWemRi0HvN lRwVNyLRbO9tI3OT6jAVR9O6wkK+ylshN0HhYrvN4+SAYmWHpfovM1m3n+k9M46QS8XA V/pkPXZ5TuL1PyNj4AQDYG1+ccdjbx5QVC2YUg43Et3FI6CBsDapJ9MfFYJmMW/VV0t6 rI+q8d/gPL67AG7lepkPRS/EZf6Da3JE81Zyhg8pJm6p5ArqqcdHoE8/rDjmYFIwG2nh 8Y0z6YKy6+DWkkkfumiNUSyD7VUTRepLiaUtDZX+CDRwD8zdvHLrd+qv/CzMrG2eK5mD G53w== X-Gm-Message-State: AOAM531eL1aum0b6FiAOkdnC6NfIcAjpPM0vKyDnK0vMEeqiON1HwrXa U7O+lR2mEs0p+h0YlhO8rvfHwmBoDadang== X-Google-Smtp-Source: ABdhPJwICrJtrpUEGpG/lH67dWHSKVpfdlXbWW2RYW0HpWN0uphVFPhNzUbniNqDaacr015uf/3Dag== X-Received: by 2002:a17:90a:17c9:: with SMTP id q67mr4930320pja.128.1602111530820; Wed, 07 Oct 2020 15:58:50 -0700 (PDT) Received: from bubble.grove.modra.org ([2406:3400:51d:8cc0:e872:ea73:2f18:2dba]) by smtp.gmail.com with ESMTPSA id u15sm4451348pfm.61.2020.10.07.15.58.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Oct 2020 15:58:50 -0700 (PDT) To: gcc-patches@gcc.gnu.org Subject: [PATCH 7/8] [RS6000] rs6000_rtx_costs reduce cost for SETs Date: Thu, 8 Oct 2020 09:27:59 +1030 Message-Id: <20201007225800.9536-8-amodra@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201007225800.9536-1-amodra@gmail.com> References: <20201007225800.9536-1-amodra@gmail.com> X-Spam-Status: No, score=-10.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Alan Modra via Gcc-patches From: Alan Modra Reply-To: Alan Modra Cc: segher@kernel.crashing.org Errors-To: gcc-patches-bounces@gcc.gnu.org Sender: "Gcc-patches" The aim of this patch is to make rtx_costs for SETs closer to insn_cost for SETs. One visible effect on powerpc code is increased if-conversion. * config/rs6000/rs6000.c (rs6000_rtx_costs): Reduce cost of SET operands. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 76aedbfae6f..d455aa52427 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -21684,6 +21684,35 @@ rs6000_rtx_costs (rtx x, machine_mode mode, int outer_code, } return false; + case SET: + /* On entry the value in *TOTAL is the number of general purpose + regs being set, multiplied by COSTS_N_INSNS (1). Handle + costing of set operands specially since in most cases we have + an instruction rather than just a piece of RTL and should + return a cost comparable to insn_cost. That's a little + complicated because in some cases the cost of SET operands is + non-zero, see point 5 above and cost of PLUS for example, and + in others it is zero, for example for (set (reg) (reg)). + But (set (reg) (reg)) has the same insn_cost as + (set (reg) (plus (reg) (reg))). Hack around this by + subtracting COSTS_N_INSNS (1) from the operand cost in cases + were we add at least COSTS_N_INSNS (1) for some operation. + However, don't do so for constants. Constants might cost + more than zero when they require more than one instruction, + and we do want the cost of extra instructions. */ + { + rtx_code src_code = GET_CODE (SET_SRC (x)); + if (src_code == CONST_INT + || src_code == CONST_DOUBLE + || src_code == CONST_WIDE_INT) + return false; + int set_cost = (rtx_cost (SET_SRC (x), mode, SET, 1, speed) + + rtx_cost (SET_DEST (x), mode, SET, 0, speed)); + if (set_cost >= COSTS_N_INSNS (1)) + *total += set_cost - COSTS_N_INSNS (1); + return true; + } + default: return false; } From patchwork Wed Oct 7 22:58:00 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Modra X-Patchwork-Id: 1378330 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=sourceware.org; envelope-from=gcc-patches-bounces@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gcc.gnu.org Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=fOOzN/gA; dkim-atps=neutral Received: from sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4C68sW0phTz9sPB for ; Thu, 8 Oct 2020 09:59:11 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B82D63870896; Wed, 7 Oct 2020 22:58:58 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B82D63870896 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1602111538; bh=0Rd6qm7wr25sShQrRRJgZCvsggbfXXe2ntI9dfWTSqM=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=fOOzN/gAVrhKqd40Ff/ktC5+1cJ28M/RsE26dSOWn84v1rhbSuoFbcocs+McpV1YX DNkZEOSAzeUM58EwM+v1etuuXmhz9joOisbZFAB/IqoO+I+pW1wLwNy0HdlVaZzhXJ IGIHYObnx8QTlvQ3zKF0PnKDpqWvw9hE81FBXcqA= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-pf1-x432.google.com (mail-pf1-x432.google.com [IPv6:2607:f8b0:4864:20::432]) by sourceware.org (Postfix) with ESMTPS id E31B03870896 for ; Wed, 7 Oct 2020 22:58:54 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org E31B03870896 Received: by mail-pf1-x432.google.com with SMTP id g10so2361373pfc.8 for ; Wed, 07 Oct 2020 15:58:54 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=0Rd6qm7wr25sShQrRRJgZCvsggbfXXe2ntI9dfWTSqM=; b=BOLxHAyIsZRfCfyUt8CovFjHPVq37nwvxPxZXGJVrykSw5h9l/l5M2t+CCwb+AVm/E 2faifuTiU+p3mI7T2EHheLeYg055wt7pODaVDsqLs6IXNcbP2MhR2mpjFeF/1WqQHuZQ IEAuQKZVOplIMDkYcls3EzUfziRZcbO5S2doJRWhOqEQtA9xCYEpgyQiUb6idcGbpgV9 lzAdZmAVVstPOK+FNvM9QVAaAhcHvS2s6dE9tr2cEpNkQXTT4lM+sVbZ2Wcm1rj2a94n EK16L8SICv/4S3Z5PQIKR1r09KmlQ8Ed0N6RNQIreK7Q6PywMRxeyfI+N6GHZAA88YJs 1Gkw== X-Gm-Message-State: AOAM532bRw8GnPv67eNxdGqC/uu3GOVbQmljBeuiYpBw9DubjjsuC6aD u1tyUpqz4MCoi7+wbk2E2F66ElchMhuLbw== X-Google-Smtp-Source: ABdhPJzkychtYfJu/xD8nqZFm7/xa66cjVpd9yI2OVNenRTIqjtr8OwnMswX7XLAq0qw+3w1NoLOGA== X-Received: by 2002:a63:4611:: with SMTP id t17mr4829354pga.225.1602111533501; Wed, 07 Oct 2020 15:58:53 -0700 (PDT) Received: from bubble.grove.modra.org ([2406:3400:51d:8cc0:e872:ea73:2f18:2dba]) by smtp.gmail.com with ESMTPSA id u15sm4451348pfm.61.2020.10.07.15.58.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Oct 2020 15:58:52 -0700 (PDT) To: gcc-patches@gcc.gnu.org Subject: [PATCH 8/8] [RS6000] rs6000_rtx_costs for !speed Date: Thu, 8 Oct 2020 09:28:00 +1030 Message-Id: <20201007225800.9536-9-amodra@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201007225800.9536-1-amodra@gmail.com> References: <20201007225800.9536-1-amodra@gmail.com> X-Spam-Status: No, score=-10.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Alan Modra via Gcc-patches From: Alan Modra Reply-To: Alan Modra Cc: segher@kernel.crashing.org Errors-To: gcc-patches-bounces@gcc.gnu.org Sender: "Gcc-patches" When optimizing for size we shouldn't be using metrics based on speed or vice-versa. rtlanal.c:get_full_rtx_cost wants both speed and size metric from rs6000_rtx_costs independent of the global optimize_size. Note that the patch changes param_simultaneous_prefetches, param_l1_cache_size, param_l1_cache_line_size and param_l2_cache_size, which were previously all set to zero for optimize_size. I think that was a bug. Those params are a function of the processor. * config/rs6000/rs6000.h (rs6000_cost): Don't declare. (struct processor_costs): Move to.. * config/rs6000/rs6000.c: ..here. (rs6000_cost): Make static. (rs6000_option_override_internal): Ignore optimize_size when setting up rs6000_cost. (rs6000_insn_cost): Take into account optimize_size here instead. (rs6000_emit_parity): Likewise. (rs6000_rtx_costs): Don't use rs6000_cost when !speed. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index d455aa52427..14ecbad5df4 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -497,7 +497,26 @@ rs6000_store_data_bypass_p (rtx_insn *out_insn, rtx_insn *in_insn) /* Processor costs (relative to an add) */ -const struct processor_costs *rs6000_cost; +struct processor_costs { + const int mulsi; /* cost of SImode multiplication. */ + const int mulsi_const; /* cost of SImode multiplication by constant. */ + const int mulsi_const9; /* cost of SImode mult by short constant. */ + const int muldi; /* cost of DImode multiplication. */ + const int divsi; /* cost of SImode division. */ + const int divdi; /* cost of DImode division. */ + const int fp; /* cost of simple SFmode and DFmode insns. */ + const int dmul; /* cost of DFmode multiplication (and fmadd). */ + const int sdiv; /* cost of SFmode division (fdivs). */ + const int ddiv; /* cost of DFmode division (fdiv). */ + const int cache_line_size; /* cache line size in bytes. */ + const int l1_cache_size; /* size of l1 cache, in kilobytes. */ + const int l2_cache_size; /* size of l2 cache, in kilobytes. */ + const int simultaneous_prefetches; /* number of parallel prefetch + operations. */ + const int sfdf_convert; /* cost of SF->DF conversion. */ +}; + +static const struct processor_costs *rs6000_cost; /* Instruction size costs on 32bit processors. */ static const @@ -4618,131 +4637,128 @@ rs6000_option_override_internal (bool global_init_p) } /* Initialize rs6000_cost with the appropriate target costs. */ - if (optimize_size) - rs6000_cost = TARGET_POWERPC64 ? &size64_cost : &size32_cost; - else - switch (rs6000_tune) - { - case PROCESSOR_RS64A: - rs6000_cost = &rs64a_cost; - break; + switch (rs6000_tune) + { + case PROCESSOR_RS64A: + rs6000_cost = &rs64a_cost; + break; - case PROCESSOR_MPCCORE: - rs6000_cost = &mpccore_cost; - break; + case PROCESSOR_MPCCORE: + rs6000_cost = &mpccore_cost; + break; - case PROCESSOR_PPC403: - rs6000_cost = &ppc403_cost; - break; + case PROCESSOR_PPC403: + rs6000_cost = &ppc403_cost; + break; - case PROCESSOR_PPC405: - rs6000_cost = &ppc405_cost; - break; + case PROCESSOR_PPC405: + rs6000_cost = &ppc405_cost; + break; - case PROCESSOR_PPC440: - rs6000_cost = &ppc440_cost; - break; + case PROCESSOR_PPC440: + rs6000_cost = &ppc440_cost; + break; - case PROCESSOR_PPC476: - rs6000_cost = &ppc476_cost; - break; + case PROCESSOR_PPC476: + rs6000_cost = &ppc476_cost; + break; - case PROCESSOR_PPC601: - rs6000_cost = &ppc601_cost; - break; + case PROCESSOR_PPC601: + rs6000_cost = &ppc601_cost; + break; - case PROCESSOR_PPC603: - rs6000_cost = &ppc603_cost; - break; + case PROCESSOR_PPC603: + rs6000_cost = &ppc603_cost; + break; - case PROCESSOR_PPC604: - rs6000_cost = &ppc604_cost; - break; + case PROCESSOR_PPC604: + rs6000_cost = &ppc604_cost; + break; - case PROCESSOR_PPC604e: - rs6000_cost = &ppc604e_cost; - break; + case PROCESSOR_PPC604e: + rs6000_cost = &ppc604e_cost; + break; - case PROCESSOR_PPC620: - rs6000_cost = &ppc620_cost; - break; + case PROCESSOR_PPC620: + rs6000_cost = &ppc620_cost; + break; - case PROCESSOR_PPC630: - rs6000_cost = &ppc630_cost; - break; + case PROCESSOR_PPC630: + rs6000_cost = &ppc630_cost; + break; - case PROCESSOR_CELL: - rs6000_cost = &ppccell_cost; - break; + case PROCESSOR_CELL: + rs6000_cost = &ppccell_cost; + break; - case PROCESSOR_PPC750: - case PROCESSOR_PPC7400: - rs6000_cost = &ppc750_cost; - break; + case PROCESSOR_PPC750: + case PROCESSOR_PPC7400: + rs6000_cost = &ppc750_cost; + break; - case PROCESSOR_PPC7450: - rs6000_cost = &ppc7450_cost; - break; + case PROCESSOR_PPC7450: + rs6000_cost = &ppc7450_cost; + break; - case PROCESSOR_PPC8540: - case PROCESSOR_PPC8548: - rs6000_cost = &ppc8540_cost; - break; + case PROCESSOR_PPC8540: + case PROCESSOR_PPC8548: + rs6000_cost = &ppc8540_cost; + break; - case PROCESSOR_PPCE300C2: - case PROCESSOR_PPCE300C3: - rs6000_cost = &ppce300c2c3_cost; - break; + case PROCESSOR_PPCE300C2: + case PROCESSOR_PPCE300C3: + rs6000_cost = &ppce300c2c3_cost; + break; - case PROCESSOR_PPCE500MC: - rs6000_cost = &ppce500mc_cost; - break; + case PROCESSOR_PPCE500MC: + rs6000_cost = &ppce500mc_cost; + break; - case PROCESSOR_PPCE500MC64: - rs6000_cost = &ppce500mc64_cost; - break; + case PROCESSOR_PPCE500MC64: + rs6000_cost = &ppce500mc64_cost; + break; - case PROCESSOR_PPCE5500: - rs6000_cost = &ppce5500_cost; - break; + case PROCESSOR_PPCE5500: + rs6000_cost = &ppce5500_cost; + break; - case PROCESSOR_PPCE6500: - rs6000_cost = &ppce6500_cost; - break; + case PROCESSOR_PPCE6500: + rs6000_cost = &ppce6500_cost; + break; - case PROCESSOR_TITAN: - rs6000_cost = &titan_cost; - break; + case PROCESSOR_TITAN: + rs6000_cost = &titan_cost; + break; - case PROCESSOR_POWER4: - case PROCESSOR_POWER5: - rs6000_cost = &power4_cost; - break; + case PROCESSOR_POWER4: + case PROCESSOR_POWER5: + rs6000_cost = &power4_cost; + break; - case PROCESSOR_POWER6: - rs6000_cost = &power6_cost; - break; + case PROCESSOR_POWER6: + rs6000_cost = &power6_cost; + break; - case PROCESSOR_POWER7: - rs6000_cost = &power7_cost; - break; + case PROCESSOR_POWER7: + rs6000_cost = &power7_cost; + break; - case PROCESSOR_POWER8: - rs6000_cost = &power8_cost; - break; + case PROCESSOR_POWER8: + rs6000_cost = &power8_cost; + break; - case PROCESSOR_POWER9: - case PROCESSOR_POWER10: - rs6000_cost = &power9_cost; - break; + case PROCESSOR_POWER9: + case PROCESSOR_POWER10: + rs6000_cost = &power9_cost; + break; - case PROCESSOR_PPCA2: - rs6000_cost = &ppca2_cost; - break; + case PROCESSOR_PPCA2: + rs6000_cost = &ppca2_cost; + break; - default: - gcc_unreachable (); - } + default: + gcc_unreachable (); + } if (global_init_p) { @@ -21438,15 +21454,17 @@ rs6000_rtx_costs (rtx x, machine_mode mode, int outer_code, case PLUS: case MINUS: - if (FLOAT_MODE_P (mode)) + if (speed && FLOAT_MODE_P (mode)) *total = rs6000_cost->fp; else *total = COSTS_N_INSNS (1); return false; case MULT: - if (CONST_INT_P (XEXP (x, 1)) - && satisfies_constraint_I (XEXP (x, 1))) + if (!speed) + *total = COSTS_N_INSNS (1); + else if (CONST_INT_P (XEXP (x, 1)) + && satisfies_constraint_I (XEXP (x, 1))) { if (INTVAL (XEXP (x, 1)) >= -256 && INTVAL (XEXP (x, 1)) <= 255) @@ -21465,7 +21483,9 @@ rs6000_rtx_costs (rtx x, machine_mode mode, int outer_code, return false; case FMA: - if (mode == SFmode) + if (!speed) + *total = COSTS_N_INSNS (1); + else if (mode == SFmode) *total = rs6000_cost->fp; else *total = rs6000_cost->dmul; @@ -21475,8 +21495,10 @@ rs6000_rtx_costs (rtx x, machine_mode mode, int outer_code, case MOD: if (FLOAT_MODE_P (mode)) { - *total = mode == DFmode ? rs6000_cost->ddiv - : rs6000_cost->sdiv; + if (!speed) + *total = COSTS_N_INSNS (1); + else + *total = mode == DFmode ? rs6000_cost->ddiv : rs6000_cost->sdiv; return false; } /* FALLTHRU */ @@ -21495,7 +21517,9 @@ rs6000_rtx_costs (rtx x, machine_mode mode, int outer_code, } else { - if (GET_MODE (XEXP (x, 1)) == DImode) + if (!speed) + *total = COSTS_N_INSNS (1); + else if (GET_MODE (XEXP (x, 1)) == DImode) *total = rs6000_cost->divdi; else *total = rs6000_cost->divsi; @@ -21587,7 +21611,9 @@ rs6000_rtx_costs (rtx x, machine_mode mode, int outer_code, if (outer_code == TRUNCATE && GET_CODE (XEXP (x, 0)) == MULT) { - if (mode == DImode) + if (!speed) + *total = COSTS_N_INSNS (1); + else if (mode == DImode) *total = rs6000_cost->muldi; else *total = rs6000_cost->mulsi; @@ -21622,11 +21648,16 @@ rs6000_rtx_costs (rtx x, machine_mode mode, int outer_code, case FIX: case UNSIGNED_FIX: case FLOAT_TRUNCATE: - *total = rs6000_cost->fp; + if (!speed) + *total = COSTS_N_INSNS (1); + else + *total = rs6000_cost->fp; return false; case FLOAT_EXTEND: - if (mode == DFmode) + if (!speed) + *total = COSTS_N_INSNS (1); + else if (mode == DFmode) *total = rs6000_cost->sfdf_convert; else *total = rs6000_cost->fp; @@ -21773,6 +21804,10 @@ rs6000_insn_cost (rtx_insn *insn, bool speed) n = length / 4; } + const struct processor_costs *proc_cost = rs6000_cost; + if (optimize_size) + proc_cost = TARGET_POWERPC64 ? &size64_cost : &size32_cost; + enum attr_type type = get_attr_type (insn); switch (type) @@ -21787,16 +21822,16 @@ rs6000_insn_cost (rtx_insn *insn, bool speed) switch (get_attr_size (insn)) { case SIZE_8: - cost = COSTS_N_INSNS (n - 1) + rs6000_cost->mulsi_const9; + cost = COSTS_N_INSNS (n - 1) + proc_cost->mulsi_const9; break; case SIZE_16: - cost = COSTS_N_INSNS (n - 1) + rs6000_cost->mulsi_const; + cost = COSTS_N_INSNS (n - 1) + proc_cost->mulsi_const; break; case SIZE_32: - cost = COSTS_N_INSNS (n - 1) + rs6000_cost->mulsi; + cost = COSTS_N_INSNS (n - 1) + proc_cost->mulsi; break; case SIZE_64: - cost = COSTS_N_INSNS (n - 1) + rs6000_cost->muldi; + cost = COSTS_N_INSNS (n - 1) + proc_cost->muldi; break; default: gcc_unreachable (); @@ -21806,10 +21841,10 @@ rs6000_insn_cost (rtx_insn *insn, bool speed) switch (get_attr_size (insn)) { case SIZE_32: - cost = COSTS_N_INSNS (n - 1) + rs6000_cost->divsi; + cost = COSTS_N_INSNS (n - 1) + proc_cost->divsi; break; case SIZE_64: - cost = COSTS_N_INSNS (n - 1) + rs6000_cost->divdi; + cost = COSTS_N_INSNS (n - 1) + proc_cost->divdi; break; default: gcc_unreachable (); @@ -21817,16 +21852,16 @@ rs6000_insn_cost (rtx_insn *insn, bool speed) break; case TYPE_FP: - cost = n * rs6000_cost->fp; + cost = n * proc_cost->fp; break; case TYPE_DMUL: - cost = n * rs6000_cost->dmul; + cost = n * proc_cost->dmul; break; case TYPE_SDIV: - cost = n * rs6000_cost->sdiv; + cost = n * proc_cost->sdiv; break; case TYPE_DDIV: - cost = n * rs6000_cost->ddiv; + cost = n * proc_cost->ddiv; break; case TYPE_SYNC: @@ -22388,7 +22423,7 @@ rs6000_emit_parity (rtx dst, rtx src) if (mode == SImode) { /* Is mult+shift >= shift+xor+shift+xor? */ - if (rs6000_cost->mulsi_const >= COSTS_N_INSNS (3)) + if (!optimize_size && rs6000_cost->mulsi_const >= COSTS_N_INSNS (3)) { rtx tmp1, tmp2, tmp3, tmp4; @@ -22411,7 +22446,7 @@ rs6000_emit_parity (rtx dst, rtx src) else { /* Is mult+shift >= shift+xor+shift+xor+shift+xor? */ - if (rs6000_cost->muldi >= COSTS_N_INSNS (5)) + if (!optimize_size && rs6000_cost->muldi >= COSTS_N_INSNS (5)) { rtx tmp1, tmp2, tmp3, tmp4, tmp5, tmp6; diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index bbd8060e143..9daf55adc02 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -1869,29 +1869,6 @@ extern scalar_int_mode rs6000_pmode; #define REVERSE_CONDITION(CODE, MODE) rs6000_reverse_condition (MODE, CODE) -/* Target cpu costs. */ - -struct processor_costs { - const int mulsi; /* cost of SImode multiplication. */ - const int mulsi_const; /* cost of SImode multiplication by constant. */ - const int mulsi_const9; /* cost of SImode mult by short constant. */ - const int muldi; /* cost of DImode multiplication. */ - const int divsi; /* cost of SImode division. */ - const int divdi; /* cost of DImode division. */ - const int fp; /* cost of simple SFmode and DFmode insns. */ - const int dmul; /* cost of DFmode multiplication (and fmadd). */ - const int sdiv; /* cost of SFmode division (fdivs). */ - const int ddiv; /* cost of DFmode division (fdiv). */ - const int cache_line_size; /* cache line size in bytes. */ - const int l1_cache_size; /* size of l1 cache, in kilobytes. */ - const int l2_cache_size; /* size of l2 cache, in kilobytes. */ - const int simultaneous_prefetches; /* number of parallel prefetch - operations. */ - const int sfdf_convert; /* cost of SF->DF conversion. */ -}; - -extern const struct processor_costs *rs6000_cost; - /* Control the assembler format that we output. */ /* A C string constant describing how to begin a comment in the target