From patchwork Thu Mar 28 10:31:38 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Demin Han X-Patchwork-Id: 1917279 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org 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 4V50G90KXZz1yYR for ; Thu, 28 Mar 2024 21:31:59 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 6CE6A3858401 for ; Thu, 28 Mar 2024 10:31:54 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from CHN02-BJS-obe.outbound.protection.partner.outlook.cn (mail-bjschn02on2092.outbound.protection.partner.outlook.cn [139.219.17.92]) by sourceware.org (Postfix) with ESMTPS id 91AF53858D1E for ; Thu, 28 Mar 2024 10:31:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 91AF53858D1E Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=starfivetech.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=starfivetech.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 91AF53858D1E Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=139.219.17.92 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1711621897; cv=pass; b=UBsbsrTM58htLEUd7iUmHQSImD06mnajYPXNyjvkBFW6i3qYMv0tUgNHsoc5dxkzCpIjKuYbKMJPe46RMHh5YxB6WMon2WEY4YnPBK1/LrsgCmEjW5woLHto+sLKzJS8nG2qIskY+90xXEgLKfWjZv19zMq27oLY++hUqmTAz2I= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1711621897; c=relaxed/simple; bh=rjjsltMHglGX9xR2RUpF8ni0c78dafzA8NvnbYa9DnE=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=Bn4WFadnoL1xoFzD7fgVQZaS7REWi85Tz6Ww/9Cu229JXZnFOebUtUH+Mqye7K4onH8LFrbQZ60I4r/uN6+x2mWHT2WKJ4jwC3vDMdpBMsOhjUYlw9/HbQJx92HmBfwFFtMjvChSmW9SEhLwMBw7pbsUOXvrKnEmuHQT/GiUBhU= ARC-Authentication-Results: i=2; server2.sourceware.org ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NVxGqsV/JDhL72H6NaGgABTTTajFqgInT4spWN4V9cEgOexEqRjeLgewXkVJ0m/xElVg+GnTBWHb1ayvqycFHKQlsOOEaK26j+QGeK/+p6lJs6ugzw2wiIWZ7JpBwn65AeewGieaIJU4185or4W3+HdEMkJHOC8ar505PpELZg1KqXLt3VDSIaRDaXQ8XQwdp8alhVkOPXBKaqj0ASzxuM22Eg8bRUHYREtUzcfUA88sXb2MCVvsN/oP3BSebq2vo2IU7OMoHUbwfXzVSoKeMVAKQdFvQgOs0Po5FR7vYFxJkQRTBEYUt9FvIvCxTGMj9QoHBVwmsof149Hw/miHpA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=acFZbI59eia9naJNOKXdsxOc2nwTHiKn3+Y/ix4f1a0=; b=BpwrNSotkYzWuTVKv1yzB5LreRGSr0p8LuzCm39+UvPWw2X4Ux8Dth79K4nVkOSgiVA1lHHAU6xSyGAc1uy3qIzV1oWkIqvbSVxRpOq8xekl6InRUdwnFt2S9pCh4BGWI7cKMTTtazupFpFztTrhWhJOjzdccTGtB46EyDkXddvUcVADfFrZ3zvcv8rKq0M3JWRx4DPznXDCmiuk/zVQhtR17OPEFqoJVWuQFDcb7xf7PFx9NuaoqJlMAKoXEaYtnfmMTfew2CGJjzBG/MGaTLhPIjp/Hu9Z4smE8/IWZzyvqworCIyZMnaH9mK5bWpdbE4CiHX9YD2WTt9kC4pmYw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=starfivetech.com; dmarc=pass action=none header.from=starfivetech.com; dkim=pass header.d=starfivetech.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=starfivetech.com; Received: from ZQ0PR01MB1063.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:d::13) by ZQ0PR01MB1285.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:1a::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.33; Thu, 28 Mar 2024 10:31:31 +0000 Received: from ZQ0PR01MB1063.CHNPR01.prod.partner.outlook.cn ([fe80::4d0e:1ae2:c855:6645]) by ZQ0PR01MB1063.CHNPR01.prod.partner.outlook.cn ([fe80::4d0e:1ae2:c855:6645%6]) with mapi id 15.20.7409.028; Thu, 28 Mar 2024 10:31:31 +0000 From: "demin.han" To: gcc-patches@gcc.gnu.org Cc: juzhe.zhong@rivai.ai, kito.cheng@gmail.com, pan2.li@intel.com, jeffreyalaw@gmail.com, rdapp.gcc@gmail.com Subject: [PATCH] RISC-V: Refine the condition for add additional vars in RVV cost model Date: Thu, 28 Mar 2024 18:31:38 +0800 Message-ID: <20240328103138.297823-1-demin.han@starfivetech.com> X-Mailer: git-send-email 2.44.0 X-ClientProxiedBy: BJSPR01CA0022.CHNPR01.prod.partner.outlook.cn (2406:e500:c211:c::34) To ZQ0PR01MB1063.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:d::13) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: ZQ0PR01MB1063:EE_|ZQ0PR01MB1285:EE_ X-MS-Office365-Filtering-Correlation-Id: 6573fbe1-8f7d-47a4-e836-08dc4f123ba2 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: IWSs1PJFSlQr1qAtVsH+mYDXf1T55B+kD4R8OMElUIUqxBiVkcHVa+K3v9koDQqQRNnRIfKZ9DTftUQQSUKoD5c99V2z/7h5zCOH1n7tjASlON3kerWwUjHj/5+5yIzRZgDLEyaGbzz5QA9JBw/5Cwz6Ms1n3SQI9q3a88wNg0PVY7hk2JaON4kjaAoKZz21oWA5zF0siaESPKz9MQ9uZNXHcC6dK/Fcso7F/u1hbW8lMk/pRo61w7AUDjyoNeU3imylP68VYCIDQUQ1CcoaW7upeZzD/it92YeWIWiiHohTczFGmkZ7OXtx/Ow3i6Cbn6fYiT8pKjSUkakn+NreMATldsoc9wkoyJLMnLwKB7K08lmT8ZcTA7kBig1og7IXpU/3PW9/ogr6bJhfSF2ioBzmAZZgozaqI78nkum+QRmt1ft6BSW0Ifm7c/XrcgxVfAIuwDLw8hLVYHI0G6TbviExJD7c6E+LljTUWJcG2ZgxJ2OkB8UNKfi4ZCy1FkcIXmO3s+ItGHBjfcey3XAcvBXVpAn3LOmrqQQ2pUoteGJYIGzPR+Ih8dJhBn7iUBtaYsD3bDQ6d8M+3XF7AcjkMvxfshgng4CwmSnLygzb4In+gW/hMRqas7jcK32v53Cc X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:ZQ0PR01MB1063.CHNPR01.prod.partner.outlook.cn; PTR:; CAT:NONE; SFS:(13230031)(52116005)(41320700004)(1800799015)(366007)(38350700005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: JzWMntkcv+5cJ+cia2m0phuFfnQNljlaXJOvDbrFlewzjiC0uBi5Sg+Z50euNgwtEN0cl+vZS2Py0Beze6+iBMYK+JXGzXx4VozEm8yx+WjuPlN6LytzBIkV8UlK76tc1A6ECKB8mXmIptL2C8MGDzSbroqkTeVSXjGIdmrnHRWy509LfTBwlE3uSuDw1HAMEUznJLP33LygavE6xBt5xoMua3oD85d3iuBxcta5R4Xc/QaKbndSQggRDF0bZdOT7JCtgfvzt/8NWqUBLmQ6egLiRhYAWXQGyu8zJnhn6d4gmHxD59RoL9sy2IEin5TTU3/HqBV+LXsMqfr7dhirY8yPBHPEEW2k/gVu/oexCgAKaUsjbX3LjZ+dwae/G+6+AuvYusl5om5Wrugje5OMBIBZ25XmBR1idUZ5AtgRovY9t5ZLbsE8liJBJor/bl32smdwb97g9co3sRG6iHKCb3CHQhLaSoxajRln0tH2Qx7R89y4ppAVHbTVKoNblMkbt9dAi5ZE23h4UwdHfXiU1atUwSZf3TAkeIlzK8mjoppXbwUbvLtA4m+Cku7fIiv1LVHjj5z9AF/oLmOM9AYnZBHrTDqUF868B37SNW02m5H4bLWWCzEcQbYMk1bsRXyuNCCUmYcDQQ2cnhEQjAl18Flsa4u2dTHxjd2H6ZgC63LMiiTyABBMBGRiZu66Oeoa/62vhuDT4HxTv7/UehpjKdLGdthwfo0ZwJTKmwf4Kyr1PUzjR1QNRacPdXsT7zSEAzbvgdUSGJuR1Uqe5mTxkspfceFvGsW42BhoW+Gf8rCoflS7vyJyOQRTbcnifYB83cvYuLbA1ArbX707FNvZ7NKrUZn7eErjZx34qSeU66lTlNa+BJcQvw3GlryZm8gryQEDN1M0Sxs4A3Ii+Yk3C2Hs9b8WHsnrSgeoOxuHZNUdp6YjFoTzkkt9ttpAXovLZa1B2wHH6jjt0TgdgB5VDjNGtqCA5TgAYa1CtSJ7jt92eEaXxkmX+LYEfkyQwGCop9RZHH0icV5QjfVDGMqqtmogdDsS2874CtEjg8xWHYteaRQAXPv1qEHVmODc9r4KGu6GmagXmWW6uGovXshmanrG1jlFZAqLguRX+WBeyvC7e72CqWcXuZPr+r+RIYWS4waKg+2Fl/s5TP1qjx3kjWwzvmwWD+by8EUj2LJXfvrPx5V3yY9pr6frTiU5632AxXbb/47+S2qhuqETCtIG2OkkmygiPUYazmd2XHW35YTT58/kSlZh4sfrEdzIUOiCnaA0EjO7UV4QCEeopLh8rURYPDxg9A5uQQTzfKsO3+Ae/cdt6zvqDyBX3w0gQXXEwjkfgvcLu3/+ihKZcJeajKm3dsuEMWtJ9fYpdqMq2pGM+pjsc9veqwjmh/b8Y1Q8WViv00mGqukJOgrycQ/0WlY0jAHRU4kgxVVuRpkXZy29eFX2xt+rm0SqELx5/XnMwK85jYaiYXnqEXjscEdpGDvMDJrYVabXdfIr0tLHDvbIE8LZU7h5y3i4v9NKZgx73aPKUMgEypHP0UKvApGroBBpKxtfquSnLzEWh/E/iOMGe3QaR/kUp08Eu3SCFAfMeKr34qq3mM3ra+e4FQ9KaQ== X-OriginatorOrg: starfivetech.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6573fbe1-8f7d-47a4-e836-08dc4f123ba2 X-MS-Exchange-CrossTenant-AuthSource: ZQ0PR01MB1063.CHNPR01.prod.partner.outlook.cn X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Mar 2024 10:31:31.4028 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 06fe3fa3-1221-43d3-861b-5a4ee687a85c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: CmiYfgsPxnJWC6DABaBUIbdWdwTPJNqY7GCJ/3taRGAAL7m9HFc7b/or0sVOf79N25szkM0rHion/Q7qJrcIXCduvKiZArLlc9B3Al9BaKQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: ZQ0PR01MB1285 X-Spam-Status: No, score=-12.1 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, SPF_HELO_PASS, SPF_PASS, TXREP 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 The adjacent_dr_p is sufficient and unnecessary condition for contiguous access. So unnecessary live-ranges are added and result in spill. This patch uses MEMORY_ACCESS_TYPE as condition and constrains segment load/store. Tested on RV64 and no regression. PR target/114506 gcc/ChangeLog: * config/riscv/riscv-vector-costs.cc (non_contiguous_memory_access_p): Rename (need_additional_vector_vars_p): Rename and refine condition gcc/testsuite/ChangeLog: * gcc.dg/vect/costmodel/riscv/rvv/pr114506.c: New test. Signed-off-by: demin.han Signed-off-by: demin.han --- gcc/config/riscv/riscv-vector-costs.cc | 25 ++++++++++++------- .../vect/costmodel/riscv/rvv/pr114506.c | 23 +++++++++++++++++ 2 files changed, 39 insertions(+), 9 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr114506.c diff --git a/gcc/config/riscv/riscv-vector-costs.cc b/gcc/config/riscv/riscv-vector-costs.cc index f462c272a6e..9f7fe936a29 100644 --- a/gcc/config/riscv/riscv-vector-costs.cc +++ b/gcc/config/riscv/riscv-vector-costs.cc @@ -563,14 +563,24 @@ get_store_value (gimple *stmt) return gimple_assign_rhs1 (stmt); } -/* Return true if it is non-contiguous load/store. */ +/* Return true if addtional vector vars needed. */ static bool -non_contiguous_memory_access_p (stmt_vec_info stmt_info) +need_additional_vector_vars_p (stmt_vec_info stmt_info) { enum stmt_vec_info_type type = STMT_VINFO_TYPE (vect_stmt_to_vectorize (stmt_info)); - return ((type == load_vec_info_type || type == store_vec_info_type) - && !adjacent_dr_p (STMT_VINFO_DATA_REF (stmt_info))); + if (type == load_vec_info_type || type == store_vec_info_type) + { + if (STMT_VINFO_GATHER_SCATTER_P (stmt_info) + && STMT_VINFO_MEMORY_ACCESS_TYPE (stmt_info) == VMAT_GATHER_SCATTER) + return true; + + machine_mode mode = TYPE_MODE (STMT_VINFO_VECTYPE (stmt_info)); + int lmul = riscv_get_v_regno_alignment (mode); + if (DR_GROUP_SIZE (stmt_info) * lmul > RVV_M8) + return true; + } + return false; } /* Return the LMUL of the current analysis. */ @@ -739,10 +749,7 @@ update_local_live_ranges ( stmt_vec_info stmt_info = vinfo->lookup_stmt (gsi_stmt (si)); enum stmt_vec_info_type type = STMT_VINFO_TYPE (vect_stmt_to_vectorize (stmt_info)); - if (non_contiguous_memory_access_p (stmt_info) - /* LOAD_LANES/STORE_LANES doesn't need a perm indice. */ - && STMT_VINFO_MEMORY_ACCESS_TYPE (stmt_info) - != VMAT_LOAD_STORE_LANES) + if (need_additional_vector_vars_p (stmt_info)) { /* For non-adjacent load/store STMT, we will potentially convert it into: @@ -752,7 +759,7 @@ update_local_live_ranges ( We will be likely using one more vector variable. */ unsigned int max_point - = (*program_points_per_bb.get (bb)).length () - 1; + = (*program_points_per_bb.get (bb)).length (); auto *live_ranges = live_ranges_per_bb.get (bb); bool existed_p = false; tree var = type == load_vec_info_type diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr114506.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr114506.c new file mode 100644 index 00000000000..a88d24b2d2d --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr114506.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ + +float a[32000], b[32000], c[32000], d[32000]; +float aa[256][256], bb[256][256], cc[256][256]; + +void +s2275 () +{ + for (int i = 0; i < 256; i++) + { + for (int j = 0; j < 256; j++) + { + aa[j][i] = aa[j][i] + bb[j][i] * cc[j][i]; + } + a[i] = b[i] + c[i] * d[i]; + } +} + +/* { dg-final { scan-assembler-times {e32,m8} 1 } } */ +/* { dg-final { scan-assembler-not {e32,m4} } } */ +/* { dg-final { scan-assembler-not {csrr} } } */ +/* { dg-final { scan-tree-dump-not "Preferring smaller LMUL loop because it has unexpected spills" "vect" } } */