From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from APC01-PSA-obe.outbound.protection.outlook.com (mail-psaapc01on2125.outbound.protection.outlook.com [40.107.255.125]) by sourceware.org (Postfix) with ESMTPS id 04D333858C74 for ; Wed, 19 Jul 2023 04:17:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 04D333858C74 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=CEKDSK0kTkVVjb73ViC4dEKeBTGZ/vt3I7O/J7o5Lzn/YPF5EA6l9cy04mwVfW8Q3xVSib3z24/lJnVmuxHoXvYotXS6s9Tkl4IQgZ4eDDu9GG8I2v/wNZS9CH1qdvteLOb/iaw1++mdSK96otGAyWdxEIlRDhYAhCfNlqsq1k1a2z+Vvw3v69Gzr/OdLKHrJXPvdgaVRkb74F9uiYnUHfs2RFAuI9Rwb60OfQf7l/wi6qFWMQEPpFBeeh1VYxyMZ+HxLWANKTg3BylHWvIt1nVsb123B1LSIsQ9yfSIWxXBjuLVlvqw8PHmF8EPre0d+cXJ3DPJ25qCnO5rBmfNnA== 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=5cu3KQ/8oMly6tHNmCG1GgOkWLeeXe/2+o8nUcMgyoA=; b=fxILda/kDqqzRMEibAwD7GWxlRTOWvQ2KTWnMC0eftenVqXXb5rb1Hb9mkQMvvXGSKFzdfM3vnDoNaApjnameke0Vk7/bROTR/BccoyaA/+lnGi+/GJ1DNhFYy2vehChCjo1v2ZyzLDA/JTXMTk8M6J4O+APd/c1Q681+OxkxN7Wq3BWrADSVqr/YiCN66AR+Ow1XJ8CgVVT+289f+nfq/JC5JNqFFuiSm9yVPZzFmMmIxpLYGV+AP2SuzrKtGnHroCSKrgnebODS4yYK3G3c7k7HsDYPjO7dO+ef3uEq8SelpuZSNgbgkQJZbidMmNHtqSUUYBeXgPh7hw9sPY/mw== 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=5cu3KQ/8oMly6tHNmCG1GgOkWLeeXe/2+o8nUcMgyoA=; b=SpXvx3KD1eNvQI8XuI2cAAtgTY+NIHkHb+9ZhvS5JVmClWbh9iv0D5DiARo6CeajxM23kw/PFPmApTUVJnaELIg5U2CXuloG4knIKh1zvq8TFquUUdEzK7AJtF0hkdFbcI4QYcXrhbCO+guLimBlNXc5/7jCr1CBOMM/wN6Dinw= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=cipunited.com; Received: from TYZPR04MB6117.apcprd04.prod.outlook.com (2603:1096:400:25a::9) by KL1PR0401MB6260.apcprd04.prod.outlook.com (2603:1096:820:9a::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6588.33; Wed, 19 Jul 2023 04:16:55 +0000 Received: from TYZPR04MB6117.apcprd04.prod.outlook.com ([fe80::f1d0:38df:fe26:663c]) by TYZPR04MB6117.apcprd04.prod.outlook.com ([fe80::f1d0:38df:fe26:663c%7]) with mapi id 15.20.6588.031; Wed, 19 Jul 2023 04:16:55 +0000 From: YunQiang Su To: gcc-patches@gcc.gnu.org Cc: pinskia@gmail.com, jeffreyalaw@gmail.com, ian@airs.com, rguenther@suse.de, YunQiang Su Subject: [PATCH v2] Store_bit_field_1: Use SUBREG instead of REG if possible Date: Wed, 19 Jul 2023 12:16:39 +0800 Message-Id: <20230719041639.2967597-1-yunqiang.su@cipunited.com> X-Mailer: git-send-email 2.30.2 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: SG2PR01CA0169.apcprd01.prod.exchangelabs.com (2603:1096:4:28::25) To TYZPR04MB6117.apcprd04.prod.outlook.com (2603:1096:400:25a::9) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYZPR04MB6117:EE_|KL1PR0401MB6260:EE_ X-MS-Office365-Filtering-Correlation-Id: d563b310-9706-4813-6502-08db880efca5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: X8LIkoG0gvSAWcHV7SAPSmVSBHWOrXAZkoorwTVwNOT4V2b8z8w8TCvLzvX3qlcjSfgddfGmiF7aVtufqevsOGEiL6faa/7AEVRUWz41AcTg+fhbVF1AEVy0j4mPwK+VkOjUhk9UxY/GBR38NooDabbm9f2uxbtB/wE94ka80pKkKoITesgUl1N7ylCC+28I6QU9CjnaTVHhCrjs1DYjSVWz8xfw704fEseW66sCRfp8B6hPAnAab+9CPwTvg/4DcS1tVm+rcdbPknkdleEVaDeybHX597WsKO+oh1AeVn7oyLSBocFStz9Q3AWHFtXioUm5fqMkSI3vQekVGYwrnHyp4Ja8YTdkyXu+xgNhapmA5PfE34QFZMmJ4eufie2e0RGuzN1t/nFQeAyUCdlgmlBUBIJq9nPduXmgg3bNFnn0JewcGhnLzOiOlpQBmQmHG75HHTRcUd7YjCnO0jC+t74jlItmFzXmyT5WkYG8pxzLCfONSHuISP2NERQMUcDevyg0INgqS32csbG9fB6o7p6XwaDus9O4+aV8V/3XGIm4ts6qrxIcFUtktyOy8eb4d6PZGdaagclLJpHQR/V0oiRSw4s6C6C/YViQ/JGERJM= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYZPR04MB6117.apcprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(39830400003)(376002)(136003)(396003)(366004)(346002)(451199021)(8936002)(8676002)(66476007)(66556008)(41300700001)(6512007)(52116002)(6486002)(66946007)(316002)(84970400001)(6916009)(5660300002)(4326008)(36756003)(6666004)(2906002)(478600001)(83380400001)(26005)(107886003)(6506007)(1076003)(2616005)(38350700002)(38100700002)(86362001)(186003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?dBR2UiRNt3hHDFblHrScBb2dy2+6fDnWVqXgvFp5myjT63bRSgv297VO4xWp?= =?us-ascii?Q?BqiM4kmknjTm6W9yQsBM8212zapR/VvxioodmyV1zfqu2CJDTBbH43Km938Z?= =?us-ascii?Q?/nCxIi2wCOn4AAWesEanO0ebd8xlurQu7STysLbktU2L+0DR3R2mJT7LxVmp?= =?us-ascii?Q?HtOv7yC0fVQ+b+HKywmKUxVJt60IqW0eF5YqJRl746OdwLOuVlEQXBhs5FNZ?= =?us-ascii?Q?SONnpfkeCgW6saUXWDzRN6uZ7hZ6grOOHsEeFiidygk+czkcv+oCNpxf2Qic?= =?us-ascii?Q?6ug4tKOXuZs1xAMRY82H+DvaWdvyW9/lmOb/XTVaBjcJoERFYTMq2ksCae7B?= =?us-ascii?Q?tkilcKvKvJNLOJwtHTuNxPHvFS0BULZowkQZdH3p3zMb8MPDkZl9x6H89mAL?= =?us-ascii?Q?xHP4mpZlWtjXLOqPuSLmwjEdQI+joFWjwpQc42xY1r5mVM6YCYQ3l2j0vsp/?= =?us-ascii?Q?LoASAvSX8dv8Bn8xg4CgMZMWkA3H1gY0+B767a1Um6z+cQ4B75hQ+7XnvwtR?= =?us-ascii?Q?Tlsv7nXW662DZiJ3I76rlZ1czsN1o8cUVsGzXos91OP1e1YXLXCzCi1JXQ69?= =?us-ascii?Q?CHcZO7duUSTdV+HQXvG7e49CRR98Vp6tmmxBStZTGZ4K/ilCnH68jrZPpYg6?= =?us-ascii?Q?n1NxTVfkxma5NVKAEO+9aMYL2BURFjMfN4+yq9uGo/lvXD5nQRYh6HeEFIMH?= =?us-ascii?Q?G+kKuNMwRvAQ4LF6il8EIup8KeLF6sEjlflZU9IIxwVZTZK8ueHfizQL0Kea?= =?us-ascii?Q?jOruk5A2iJ3GR9S4sXGGA1zbAmJl+W03c5xY2zTuFJXDTpK0kH6Z2gQawEMl?= =?us-ascii?Q?OYv/Ee/KUbz+iLXk4toRGzpuDqne8ZBXAf6zHSDlC1BO/o+ix5G7NCrqm6vB?= =?us-ascii?Q?iS2/BoDuNTusL2GgBydAKxn/jJzzyXq/ygIB4FgN0eua3JWCTe48OTgbUkmB?= =?us-ascii?Q?2nlWhBLAmO7vsUxn0q4HKDQq48o9Q96SNsjnbMSIiALNlvrPk2glb61Gxgov?= =?us-ascii?Q?cqFGaXh/5+yvo5c6b1/i9Zaq1HU2GBFkXthLJMf2Sf3WrUW4qnrxXFlywi4L?= =?us-ascii?Q?dW8gxrhrF1O3T4FFoN2vxXsVsFo7sRuJ587rg/otmMwQoRL3DkFWPQSRrEjU?= =?us-ascii?Q?vV0+NM6leh7vmn/7Nep49TNV4V0JxNC4dw6vtRy4ivtGiFmVEulQK3DAzppm?= =?us-ascii?Q?nVQu1V8kdiqq2Clp1kBK5xw6hKkXMmiQGox2HzlI6HoV3kgCBQt8Yoad7Dlv?= =?us-ascii?Q?oT9fXIAWzJhMFOi6B4AV9KIhyg40jpw03lXZf07YA+qDsSBylvQMetWgPUm4?= =?us-ascii?Q?8vDMFzfOpERyF+Su+8s8/3/SU6oYy7be4J/t9leS/Iat0wIaE5Hx0gygC6/4?= =?us-ascii?Q?E9u3QVjwIe9/RszXLOLvu6/gphV+ADWfGNHMZve1hXE8eUzdjO1Hv3qPnzKt?= =?us-ascii?Q?j0RNwTTcehXRx+fpFiUd+7VUrvuX9qTatq1kHavUCdHsNittODVBHczVz3qu?= =?us-ascii?Q?FaVw0JbmfG+KJO4BCImEF5pzyh6E3RXd759GkVVGAqBxmmf4NEyDT0BmFt3V?= =?us-ascii?Q?b/UCTD8wUu2eQIoyPAbFXsMYkGXVmhYY92UNVJO9KuKh1RmkWDNncFTt4Ngp?= =?us-ascii?Q?bg=3D=3D?= X-OriginatorOrg: cipunited.com X-MS-Exchange-CrossTenant-Network-Message-Id: d563b310-9706-4813-6502-08db880efca5 X-MS-Exchange-CrossTenant-AuthSource: TYZPR04MB6117.apcprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jul 2023 04:16:55.4012 (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: 2zjWf4XRm8mM4S9LtDVQO9A+m9szQx1GIZTSvesDX2E91fYS6Dd51Wp9DhLd4/QXvQn2B2PsdQQTOgOfIRbnZMmNB0ued9C+BaeP1gBPjJs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: KL1PR0401MB6260 X-Spam-Status: No, score=-13.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,GIT_PATCH_0,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 List-Id: PR #104914 When work with int val; ((unsigned char*)&val)[3] = *buf; if (val > 0) ... The RTX mode is obtained from REG instead of SUBREG, which make D is used instead of . Thus something wrong happens on sign-extend default architectures, like MIPS64. Let's use str_rtx and mode of str_rtx as the parameters for store_integral_bit_field if: modes of op0 and str_rtx are INT; length of op0 is greater than str_rtx. This patch has been tested on aarch64-linux-gnu, x86_64-linux-gnu, mips64el-linux-gnuabi64 without regression. gcc/ChangeLog: PR: 104914. * expmed.cc(store_bit_field_1): Pass str_rtx and its mode to store_integral_bit_field if the length of op0 is greater than str_rtx. gcc/testsuite/ChangeLog: PR: 104914. * gcc.target/mips/pr104914.c: New testcase. --- gcc/expmed.cc | 20 +++++++++++++++++--- gcc/testsuite/gcc.target/mips/pr104914.c | 17 +++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.target/mips/pr104914.c diff --git a/gcc/expmed.cc b/gcc/expmed.cc index fbd4ce2d42f..5531c19e891 100644 --- a/gcc/expmed.cc +++ b/gcc/expmed.cc @@ -850,6 +850,7 @@ store_bit_field_1 (rtx str_rtx, poly_uint64 bitsize, poly_uint64 bitnum, since that case is valid for any mode. The following cases are only valid for integral modes. */ opt_scalar_int_mode op0_mode = int_mode_for_mode (GET_MODE (op0)); + opt_scalar_int_mode str_mode = int_mode_for_mode (GET_MODE (str_rtx)); scalar_int_mode imode; if (!op0_mode.exists (&imode) || imode != GET_MODE (op0)) { @@ -881,9 +882,22 @@ store_bit_field_1 (rtx str_rtx, poly_uint64 bitsize, poly_uint64 bitnum, op0 = gen_lowpart (op0_mode.require (), op0); } - return store_integral_bit_field (op0, op0_mode, ibitsize, ibitnum, - bitregion_start, bitregion_end, - fieldmode, value, reverse, fallback_p); + /* If MODEs of str_rtx and op0 are INT, and the length of op0 is greater than + str_rtx, it means that str_rtx has a shorter SUBREG: int32 on 64 mach/ABI + is an example. For this case, we should use the mode of SUBREG, otherwise + bad code will generate for sign-extension ports, like MIPS. */ + bool use_str_mode = false; + if (GET_MODE_CLASS (GET_MODE (str_rtx)) == MODE_INT + && GET_MODE_CLASS (GET_MODE (op0)) == MODE_INT + && known_gt (GET_MODE_SIZE (GET_MODE (op0)), + GET_MODE_SIZE (GET_MODE (str_rtx)))) + use_str_mode = true; + + return store_integral_bit_field (use_str_mode ? str_rtx : op0, + use_str_mode ? str_mode : op0_mode, + ibitsize, ibitnum, bitregion_start, + bitregion_end, fieldmode, value, + reverse, fallback_p); } /* Subroutine of store_bit_field_1, with the same arguments, except diff --git a/gcc/testsuite/gcc.target/mips/pr104914.c b/gcc/testsuite/gcc.target/mips/pr104914.c new file mode 100644 index 00000000000..fd6ef6af446 --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/pr104914.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-march=mips64r2 -mabi=64" } */ + +/* { dg-final { scan-assembler-not "\tdins\t" } } */ + +NOMIPS16 int test (const unsigned char *buf) +{ + int val; + ((unsigned char*)&val)[0] = *buf++; + ((unsigned char*)&val)[1] = *buf++; + ((unsigned char*)&val)[2] = *buf++; + ((unsigned char*)&val)[3] = *buf++; + if(val > 0) + return 1; + else + return 0; +} -- 2.30.2