From patchwork Wed May 31 09:55:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: YunQiang Su X-Patchwork-Id: 1788211 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=sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=cipunited.onmicrosoft.com header.i=@cipunited.onmicrosoft.com header.a=rsa-sha256 header.s=selector1-cipunited-onmicrosoft-com header.b=c7EsX3A6; dkim-atps=neutral Received: from sourceware.org (ip-8-43-85-97.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 (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4QWPml6p4Hz20QD for ; Wed, 31 May 2023 19:56:39 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A8DA43857438 for ; Wed, 31 May 2023 09:56:34 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from APC01-SG2-obe.outbound.protection.outlook.com (mail-sgaapc01on2099.outbound.protection.outlook.com [40.107.215.99]) by sourceware.org (Postfix) with ESMTPS id 96F653858D20 for ; Wed, 31 May 2023 09:56:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 96F653858D20 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=cipunited.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=cipunited.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=P94wEnVjFqWbE523g7ZLXLkNP1HVAeDBiBvkoK0NOYgNMzKaViOBH4GFzp1g5fm4OopQVUN9OM2taCiVuqkAYiIPiK1KSYtcmHH+5uWKPQxImOijewwISCn9teBEqnorPTU4HD9zCfj1ZOPO2Hu7gK+agOFlgDyJLjfmCll9guHB8GB3CzSZd9PTZBSrB8TeQnxd5KSQifOIUBwT0xlHrT4WmLGc43sKCsCKB9Nx1HttqU0C4aC/usOsg8ni0qQSTy2cmOeokj/+mxNPD/n4Ye7YOQ76lVEMKTOTd8t1XsrTnm518YaTx9d2yuEM0+KcjfZYi5XSVGvw+EqNgmhyKw== 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=hCQyzkY/R7pj0jJiO+9l5mdQI2TywUnA1ZQHSL8VmcM=; b=OqKw+3CRdFF20aR/fRD6DzWR/K9zDQ6gNOdsJqmoSlcgtJIcm+LP8mXGD4NoOhmAMRVzmR8pO7WfQIY2vCUh1/zp56z50jhtUvVS9D2VuPjd5AgYKvzUxkSxBIEd5cDsqoxPrHAAlQAPSCfFIFmPW23dw7xKHKmr2OgBTQL+rIEHUjER63L5DGeepPlOEsjCmvUkr+SQN5tm2G5cMXYSP+jJIP9UQn+qmK147wqU180vgfWVSK7IA8aXrcNyQLGZIr9HtcEz2tUWP1HYG70wx7+aVJbCeFzimgVh4OXmiSrenziEvfQSN3Zt9A52eujgH3HIv2T0bn1555Rf/UuCSQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=cipunited.com; dmarc=pass action=none header.from=cipunited.com; dkim=pass header.d=cipunited.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cipunited.onmicrosoft.com; s=selector1-cipunited-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hCQyzkY/R7pj0jJiO+9l5mdQI2TywUnA1ZQHSL8VmcM=; b=c7EsX3A6+KMeuL52et702A8mILciUxiQs4Ef79FYcRKBExraxz9xjRoc4UsnMEUYEwxdu3Bh0+4M0+5sC7tyKpUD7hNT41dtiThIeSgAva+7tIoUfcvp3rtDKaj1AgwEAm3y+1KNs8IIOTzU+VTdCXq+E9VHm4/B7bx9+hM5RYg= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=cipunited.com; Received: from SEZPR04MB6121.apcprd04.prod.outlook.com (2603:1096:101:98::10) by PSBPR04MB3912.apcprd04.prod.outlook.com (2603:1096:301:4::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6455.22; Wed, 31 May 2023 09:56:13 +0000 Received: from SEZPR04MB6121.apcprd04.prod.outlook.com ([fe80::fd0f:3691:40e3:9252]) by SEZPR04MB6121.apcprd04.prod.outlook.com ([fe80::fd0f:3691:40e3:9252%7]) with mapi id 15.20.6455.020; Wed, 31 May 2023 09:56:13 +0000 From: YunQiang Su To: gcc-patches@gcc.gnu.org Cc: macro@orcam.me.uk, jiaxun.yang@flygoat.com, syq@debian.org, richard.sandiford@arm.com, jeffreyalaw@gmail.com, YunQiang Su Subject: [PATCH v2 1/2] MIPS: Use unaligned access to expand block_move on r6 Date: Wed, 31 May 2023 17:55:50 +0800 Message-Id: <20230531095551.1299186-1-yunqiang.su@cipunited.com> X-Mailer: git-send-email 2.30.2 X-ClientProxiedBy: SG2P153CA0041.APCP153.PROD.OUTLOOK.COM (2603:1096:4:c6::10) To SEZPR04MB6121.apcprd04.prod.outlook.com (2603:1096:101:98::10) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SEZPR04MB6121:EE_|PSBPR04MB3912:EE_ X-MS-Office365-Filtering-Correlation-Id: d05359ff-a088-451f-1d90-08db61bd440e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: JtatbVXr/nORsCGnQ+qwwL7QZh6mJiRmARXHvtuMjkrcdIJyvmSaNaWVK5jkLWynjbeeAm8VbS2V5NZ5V+rVJsti7ZTT8vDOxX3bOOarGbm1O0gj4avZujPejnqTrq/U3TpibJVDRDq51f0UlEtlnl2PEGABm9HYYg5lJLhX7rRv6gWCxGWgDfAjOZ6wMmTacpu+23qV9Jzs1A8frMG/5nsZDMORG9FKUTI2WIAWzGbb/3PmutuJpX4B9MZ+6kA82pa08rkugSclwTm/IiU1PlTktYC+5LgVNZ07BLd7C/1zQCk2V9H7HcD9fzvUeetEiRxnme0QMXgSH5YyrjOfAyzE2EGfdf2P/eL2E6wIrkHHXuZ29mfm/v4kJeIdoLMwxbA0OJuD5KekL3q8h5fX41iVwaStVca75zTWGhwUohWvU3W5T+7SYksCSOP2XjXKzbp1hkhK+bVUXgQO+M/2eYCb/vOqYzEYROdqRc7qR0rfHdQ3JecRs5dVf0wDgdTFFyy+G7Vlp2uHTkVcN23hbuZjbeMU2UyW0lxtNW/rpnV+19IdkWXXFAwr771yH62n6tFgMD9t/FnSf2HJmvS26rlHAkw6NunWOVO2PzU4y6s= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SEZPR04MB6121.apcprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(366004)(39830400003)(346002)(136003)(376002)(396003)(451199021)(6506007)(6512007)(1076003)(26005)(107886003)(66946007)(66476007)(66556008)(6916009)(38350700002)(38100700002)(5660300002)(4326008)(36756003)(8676002)(8936002)(86362001)(83380400001)(41300700001)(316002)(52116002)(6666004)(6486002)(186003)(2906002)(478600001)(84970400001)(2616005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 1qLqxr80bsexwg7JvqbqqSe2O73+O9vEgJVRqvj0smwnIPjxfR7uZFWlcM7CMI4h0+sf2XED/xp3nVeDrL3NFmyfovGMLPhUTPeq6brCc4o8SSuhhurtKiGbsj3hw/omDBeUz+Scw7CVw6s+EORPM3zdTrZ55SFrD3DxxtlCTKdDG3kcVz4xmK19/IhVcF06OwsEDqYGSEaysZW1HLdKFSbDHNpUSnfDSjlfQQ1CsX652MmnFB+cK4b4DRO9aUyBJLz7D0Dz83OQV1Qyy8/u6IA2dJGP0q/SAiGuSKYO0k3wkA4x/4dw2e+Xodhayjy9EzRUvzW/r3uJB3spoQ+RH1IGfNl+hWbBiiiJPNKRfQ/MxpjEwnzgWRzY5OkDLVmKiV+ScwwdZKa11F1e6lMA0zs0QKVo6vOgAYzjb4WWSHGSL4VBhV2OB+4ueAlaB7v+awvN9LwoWiLptB7shz5y/9hbaNMY8hwFbMqyflfMYB5RhJ8z2lbr6nWI1MCSjw6GGA/AoF4Rxg1ih6X4yF29CB9hBzTH6Wh42hplu756vxQ3z7MEt2kD1ZSDJrKIX62bHuUsdZ6TH5bN/RF2/M/qNG5mvYGLFnS9OFenqbSp/eEzAWn+fwpGd83oAf5Ntk8VE4/93vAhMDFftKk+g6eXBJPl8Eydcjv21rmjRPB7LgIEbfbSycr2hl+W96uIlFpeA8LzMfWgv0LdZWzKnvoCs5Ei8PYrxQeWaEpF41iD8azkRLSlBgBhhdpkSWVbhGz1qQvTFU7qh542Iur2s9pQvLFJRNeA/P6cxPATsZGGWZzNdMWOIwjHPW/OCaiocCb4dbSww2cOBSWA0KkrXBt6riIvAkNlMrtxk3Dhm+gBtlxOKx8t9ce4yCezjbHqCHg+UHm75kXB0Ze/zaSRXmfKCHxrmPjLpYdS3yzoeBvl+73FifAUpzGzlqEgtvuOV7mjxvZSrp6QN8D+pulmD/xSlz6VWzoVfprOm9atttDjSHfSfRmbgE6zpiCRJT5kBxCj3BGIb3moV10gcR6I1AU24xORdFsoOV+fsYfmxOmyRCTIxxzd8iBnMDnjMocb9WVERaqyhTiFHfJkYd/62K711OZn8rZMZW6oHXAiAWDH4qD6pFTGsIJYhor7D3B/DpEQ8RmWPzeCFqwEsAhq1AYq+Gp5ZlepgxgnkESw7gUN3s0HGMFX5uKPq4+IWUtIdGD21RMqOE8V2hwYi+FfuNLPx/KXZP+KEkl8wSRlrp8BLoNIIxvuk1wEo93SpScuzrBaQCeyVhIK2dL5As0saysh3kKWIqStKDqmX9BpEuSQ3Pez43FCnscgM24/l5nK6XKZsXhiaZt1c1wAtmbvr1rAuaLL4VwIoj4j9iOLE4ON7xDrySzznaBQfQ7rC3kVkRwjgtFjU5qVltwYFPIHKpKAEJRdyvGJKHif2MpAnzJw8h+WI8ybmJnUdgFz83vkH7TIRrDr5v3WCd6dppdp/S0Gg4QWzE5F86PNnWZ6vWhYEwFkSeItk6GBUCZQ5ByRb6hIFdyeoOfqCy5GreERj48TcS8rjEJUnsJqb0+wS+yQRK5iorSy3Bz7Ch4LX11CBsWclGQgBhQhFsbBI6xb4z0jnQ== X-OriginatorOrg: cipunited.com X-MS-Exchange-CrossTenant-Network-Message-Id: d05359ff-a088-451f-1d90-08db61bd440e X-MS-Exchange-CrossTenant-AuthSource: SEZPR04MB6121.apcprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 May 2023 09:56:12.6594 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e31cf5b5-ee69-4d5f-9c69-edeeda2458c0 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: +G4vrfvdxlgoATtqAdwLk1K/QLgJwCvXgUWaBoUhoSKFKwXCV4zT3H7VuekbQIuRShLjaCcNSTH1FioFVawLN9ukRKgMwH6RkJ+4c0ZuAKQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PSBPR04MB3912 X-Spam-Status: No, score=-12.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, KAM_NUMSUBJECT, KAM_SHORT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, 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.29 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 Sender: "Gcc-patches" MIPSr6 support unaligned memory access with normal lh/sh/lw/sw/ld/sd instructions, and thus lwl/lwr/ldl/ldr and swl/swr/sdl/sdr is removed. For microarchitecture, these memory access instructions issue 2 operation if the address is not aligned, which is like what lwl family do. For some situation (such as accessing boundary of pages) on some microarchitectures, the unaligned access may not be good enough, then the kernel should trap&emu it: the kernel may need -mno-unalgined-access option. gcc/ * config/mips/mips.cc (mips_expand_block_move): don't expand for r6 with -mno-unaligned-access option if one or both of src and dest are unaligned. restruct: return directly if length is not const. (mips_block_move_straight): emit_move if ISA_HAS_UNALIGNED_ACCESS. gcc/testsuite/ * gcc.target/mips/expand-block-move-r6-no-unaligned.c: new test. * gcc.target/mips/expand-block-move-r6.c: new test. --- gcc/config/mips/mips.cc | 36 ++++++++++--------- .../mips/expand-block-move-r6-no-unaligned.c | 15 ++++++++ .../gcc.target/mips/expand-block-move-r6.c | 20 +++++++++++ 3 files changed, 54 insertions(+), 17 deletions(-) create mode 100644 gcc/testsuite/gcc.target/mips/expand-block-move-r6-no-unaligned.c create mode 100644 gcc/testsuite/gcc.target/mips/expand-block-move-r6.c diff --git a/gcc/config/mips/mips.cc b/gcc/config/mips/mips.cc index ca491b981a3..ca297e3c1e5 100644 --- a/gcc/config/mips/mips.cc +++ b/gcc/config/mips/mips.cc @@ -8167,8 +8167,9 @@ mips_block_move_straight (rtx dest, rtx src, HOST_WIDE_INT length) For ISA_HAS_LWL_LWR we rely on the lwl/lwr & swl/swr load. Otherwise picking the minimum of alignment or BITS_PER_WORD gets us the desired size for bits. */ - - if (!ISA_HAS_LWL_LWR) + if (ISA_HAS_UNALIGNED_ACCESS) + bits = BITS_PER_WORD; + else if (!ISA_HAS_LWL_LWR) bits = MIN (BITS_PER_WORD, MIN (MEM_ALIGN (src), MEM_ALIGN (dest))); else { @@ -8190,7 +8191,7 @@ mips_block_move_straight (rtx dest, rtx src, HOST_WIDE_INT length) for (offset = 0, i = 0; offset + delta <= length; offset += delta, i++) { regs[i] = gen_reg_rtx (mode); - if (MEM_ALIGN (src) >= bits) + if (ISA_HAS_UNALIGNED_ACCESS || MEM_ALIGN (src) >= bits) mips_emit_move (regs[i], adjust_address (src, mode, offset)); else { @@ -8203,7 +8204,7 @@ mips_block_move_straight (rtx dest, rtx src, HOST_WIDE_INT length) /* Copy the chunks to the destination. */ for (offset = 0, i = 0; offset + delta <= length; offset += delta, i++) - if (MEM_ALIGN (dest) >= bits) + if (ISA_HAS_UNALIGNED_ACCESS || MEM_ALIGN (dest) >= bits) mips_emit_move (adjust_address (dest, mode, offset), regs[i]); else { @@ -8299,25 +8300,26 @@ mips_block_move_loop (rtx dest, rtx src, HOST_WIDE_INT length, bool mips_expand_block_move (rtx dest, rtx src, rtx length) { - if (!ISA_HAS_LWL_LWR + if (!CONST_INT_P (length)) + return false; + + if (mips_isa_rev >= 6 && !ISA_HAS_UNALIGNED_ACCESS && (MEM_ALIGN (src) < MIPS_MIN_MOVE_MEM_ALIGN || MEM_ALIGN (dest) < MIPS_MIN_MOVE_MEM_ALIGN)) return false; - if (CONST_INT_P (length)) + if (INTVAL (length) <= MIPS_MAX_MOVE_BYTES_PER_LOOP_ITER) { - if (INTVAL (length) <= MIPS_MAX_MOVE_BYTES_STRAIGHT) - { - mips_block_move_straight (dest, src, INTVAL (length)); - return true; - } - else if (optimize) - { - mips_block_move_loop (dest, src, INTVAL (length), - MIPS_MAX_MOVE_BYTES_PER_LOOP_ITER); - return true; - } + mips_block_move_straight (dest, src, INTVAL (length)); + return true; } + else if (optimize) + { + mips_block_move_loop (dest, src, INTVAL (length), + MIPS_MAX_MOVE_BYTES_PER_LOOP_ITER); + return true; + } + return false; } diff --git a/gcc/testsuite/gcc.target/mips/expand-block-move-r6-no-unaligned.c b/gcc/testsuite/gcc.target/mips/expand-block-move-r6-no-unaligned.c new file mode 100644 index 00000000000..0fdcac2d30b --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/expand-block-move-r6-no-unaligned.c @@ -0,0 +1,15 @@ +/* { dg-options "isa_rev>=6 -mno-unaligned-access" } */ +/* { dg-final { scan-assembler "memcpy" } } */ + +char a[4097], b[4097]; +#ifdef __mips64 +#define MAX_SIZE 128 +#else +#define MAX_SIZE 64 +#endif + +NOCOMPRESSION void +foo () +{ + __builtin_memcpy(&a[1], &b[1], MAX_SIZE-16); +} diff --git a/gcc/testsuite/gcc.target/mips/expand-block-move-r6.c b/gcc/testsuite/gcc.target/mips/expand-block-move-r6.c new file mode 100644 index 00000000000..9e247b15d06 --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/expand-block-move-r6.c @@ -0,0 +1,20 @@ +/* { dg-options "isa_rev>=6" } */ +/* { dg-skip-if "" { *-*-* } { "-O0" "-Os" } { "" } } */ +/* { dg-final { scan-assembler-not "memcpy" } } */ +/* { dg-final { scan-assembler-not "lb\t" } } */ +/* { dg-final { scan-assembler-not "sb\t" } } */ +/* { dg-final { scan-assembler-not "lh\t" } } */ +/* { dg-final { scan-assembler-not "sh\t" } } */ + +char a[4097], b[4097]; +#ifdef __mips64 +#define MAX_SIZE 128 +#else +#define MAX_SIZE 64 +#endif + +NOCOMPRESSION void +foo () +{ + __builtin_memcpy(&a[1], &b[1], MAX_SIZE-16); +}