From patchwork Wed Aug 28 04:33:30 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Pinski X-Patchwork-Id: 1977584 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=quicinc.com header.i=@quicinc.com header.a=rsa-sha256 header.s=qcppdkim1 header.b=W2kXM7s5; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.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 ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Wts5g0qc2z1yfn for ; Wed, 28 Aug 2024 14:35:03 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 1E554385F032 for ; Wed, 28 Aug 2024 04:35:01 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) by sourceware.org (Postfix) with ESMTPS id 916F4385DDC9 for ; Wed, 28 Aug 2024 04:33:43 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 916F4385DDC9 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=quicinc.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 916F4385DDC9 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1724819625; cv=none; b=DjBG0XPPXiOMnUrFih8DnVzKORppjVAbDTKejFKNR8N36mTUjVyC8BX8ysq95fTgqfsDuQ76gkehJxEbTbx2q+ILm3IASmzC1TDg/sI/aeaRSfLhu4YUAWS7yiZ2RikA0ScFkjX2HGCfmn7Wm5pZb65Hvrdl88yUd3A7XPQl778= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1724819625; c=relaxed/simple; bh=/vTbL/E2CztC8heYJMSB1DcaLv3WFS1afT/85vCbrOw=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=LYRBJGl3iPKzzb+Gs0ghWEUD27OtnTelr9LN9Vdj+iELHhkyiov+clvzzRsuOLMgsVo7QXuxcHdTiN15YaxTL8DxR17naOfoUW9wJclDHQxjzr6K+b5iCNvrRBC2J8Diu8pw8xhYCQN3m0db30TIUlQKOss3Z+p0OSbSEk0RFiI= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 47RLeeov008922 for ; Wed, 28 Aug 2024 04:33:42 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= AwJ9mHyOl/CZOJlM2LbkeH3ho0+xbDOHXoMvmMAtB78=; b=W2kXM7s5pxeh+K2W /wxYgb/rFJIVBfgORO4rQzkL+3U6+u1M0xqLm03w3MsuJNVelMpKNjpMCV2Q0M00 7akYU4BLGznfp1Nf/sU12EbuZXgP96aZw1g9ewuWB5WUb2oXm6Lm0EI787rPHjQC 9NdSyAFIFdT6hjP/rKBRscLcswjKMQ6jhgO90BvH1aRGxz0G0idKmHuYOv6S3ZLL /jjmunWJe+DF8mXEX3jStwlwA2Ud2i2fi/fW94AIsmhg1LxWDthrvIlc0lmbsOts svs+CuyNH9yxvvcY3AcMOrY8zDIQYoCeLOvMZ8EYPl3VaoNCR2w0l6r49/CzyQ83 1/bqOQ== Received: from nasanppmta03.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 419px5gnr0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 28 Aug 2024 04:33:42 +0000 (GMT) Received: from nasanex01c.na.qualcomm.com (nasanex01c.na.qualcomm.com [10.45.79.139]) by NASANPPMTA03.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id 47S4Xfkv008767 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 28 Aug 2024 04:33:41 GMT Received: from hu-apinski-lv.qualcomm.com (10.49.16.6) by nasanex01c.na.qualcomm.com (10.45.79.139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.9; Tue, 27 Aug 2024 21:33:41 -0700 From: Andrew Pinski To: CC: Andrew Pinski Subject: [PATCH 2/3] aarch64: Handle cost for vector add reduction Date: Tue, 27 Aug 2024 21:33:30 -0700 Message-ID: <20240828043331.3359171-2-quic_apinski@quicinc.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240828043331.3359171-1-quic_apinski@quicinc.com> References: <20240828043331.3359171-1-quic_apinski@quicinc.com> MIME-Version: 1.0 X-Originating-IP: [10.49.16.6] X-ClientProxiedBy: nalasex01a.na.qualcomm.com (10.47.209.196) To nasanex01c.na.qualcomm.com (10.45.79.139) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-ORIG-GUID: OnrSG44ePfv8MLC7uPZKLz7XmWP5JaDq X-Proofpoint-GUID: OnrSG44ePfv8MLC7uPZKLz7XmWP5JaDq X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.28.16 definitions=2024-08-28_02,2024-08-27_01,2024-05-17_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 clxscore=1015 adultscore=0 suspectscore=0 lowpriorityscore=0 mlxlogscore=859 spamscore=0 priorityscore=1501 bulkscore=0 mlxscore=0 malwarescore=0 impostorscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2407110000 definitions=main-2408280028 X-Spam-Status: No, score=-13.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org While working on PR 114224 (popcount costs is not modeled), I noticed that addv (vector reduction add) was not handled either. This adds the handling there. Some of the extends are part of the instructions so we need to handle those too. gcc/ChangeLog: * config/aarch64/aarch64.cc (aarch64_rtx_addv_costs): New function. (aarch64_rtx_costs): For unspec_addv, call aarch64_rtx_addv_costs. For unspec_addv under a zero_extend, call aarch64_rtx_addv_costs. Signed-off-by: Andrew Pinski --- gcc/config/aarch64/aarch64.cc | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc index 40dacfcf2e7..7607b85e3cf 100644 --- a/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc @@ -14097,6 +14097,31 @@ aarch64_abd_rtx_p (rtx x) return rtx_equal_p (maxop0, minop0) && rtx_equal_p (maxop1, minop1); } +/* Handle the cost for unspec ADDV (reduction add). + Result is true if the total cost of the operation + has now been calculated. */ +static bool +aarch64_rtx_addv_costs (rtx op0, int *cost, bool speed) +{ + const struct cpu_cost_table *extra_cost + = aarch64_tune_params.insn_extra_cost; + + if (speed) + *cost += extra_cost->vect.alu; + + /* The zero/sign extend part of the reduction is part of the instruction. */ + if (GET_CODE (op0) == ZERO_EXTEND + || GET_CODE (op0) == SIGN_EXTEND) + { + *cost += rtx_cost (XEXP (op0, 0), GET_MODE (XEXP (op0, 0)), + UNSPEC, 0, speed); + return true; + } + + *cost += rtx_cost (op0, GET_MODE (op0), UNSPEC, 0, speed); + return true; +} + /* Calculate the cost of calculating X, storing it in *COST. Result is true if the total cost of the operation has now been calculated. */ static bool @@ -14912,6 +14937,11 @@ cost_plus: case ZERO_EXTEND: op0 = XEXP (x, 0); + /* Addv with an implicit zero extend. */ + if (GET_CODE (op0) == UNSPEC + && XINT (op0, 1) == UNSPEC_ADDV) + return aarch64_rtx_addv_costs (XVECEXP (op0, 0, 0), + cost, speed); /* If a value is written in SI mode, then zero extended to DI mode, the operation will in general be free as a write to a 'w' register implicitly zeroes the upper bits of an 'x' @@ -15378,6 +15408,11 @@ cost_plus: return false; } + /* The vector integer/floating point add reduction instructions. */ + if (XINT (x, 1) == UNSPEC_ADDV + || XINT (x, 1) == UNSPEC_FADDV) + return aarch64_rtx_addv_costs (XVECEXP (x, 0, 0), cost, speed); + break; case TRUNCATE: