From patchwork Fri Jan 31 17:13:43 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aleksandar Rakic X-Patchwork-Id: 105778 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 4F97B385770A for ; Fri, 31 Jan 2025 17:57:16 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4F97B385770A Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=htecgroup.com header.i=@htecgroup.com header.a=rsa-sha256 header.s=selector1 header.b=hcKvKQgF X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on20725.outbound.protection.outlook.com [IPv6:2a01:111:f403:2613::725]) by sourceware.org (Postfix) with ESMTPS id BDC513858410 for ; Fri, 31 Jan 2025 17:14:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org BDC513858410 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=htecgroup.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=htecgroup.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org BDC513858410 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=2a01:111:f403:2613::725 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1738343681; cv=pass; b=pOgher6fbzJVTI8udPMVGE0nTV92wvig8aUeZvjDPkXtD9BiNto+QGJ+jMWFWOLa8GorMtq/6ZWj66vfTVRrmVCgbSsR1kQ7IkI1DuY7Quf/kFKruOgUAco+ReXqWMVbkQh9SBJlbH0syL18dXYcSqD0q0sqjuYEYODEjBE+pW4= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1738343681; c=relaxed/simple; bh=TOBTddb8gNKlft31NDNrCTZMmvXslnCZA+fVMFMpVGs=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=PFKVpwxvWDr3izfIgfS/TiCIrrGyF7UY+GLGE6u1axIwFzBRqXCIueLT5dIEQX1I/Cvqc5ggVeGPI8Nqm9hH1rog3cNl7biDAJko6a11x08GshEtI3U0V3u62wTXHQ4VVvo0LKHCRtSwAy4Fet7cau6DkW6Ogkk5CkUxVg2PK0U= ARC-Authentication-Results: i=2; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BDC513858410 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=WTDtZ777v9Uw/B2Y3Lz2dOksJL57SAnXWDfn14m4m4s17InM8XjnqcECgmrJHFUmXMRTujSDRAvQx0Zsp9094ZQRzKN+lWdVGx1V+MT6emrFQdMbHZ32zXNmAby4w+G2twJgdbfbe219lXKbE3/Y7jwf6oQlWg+XEZvDtwHCDAKXZ35kRYbxQedW2uuqlKePNDVUDv6J0ddCYoXEPmnhkNmHZJgTU57Wp/2g7tZZXkG8wvLN33EwLBMnaUsolyvdBf87nrMNyLg7k7H6jv4jh1XNqvCXn4EjVcB7uLgn9RDv7hgQM7jko9rI+BVhiBPMpFPY/zd9jCLMj/vlRFA8gg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=wWWHGb9ue6bc4e3N5npwDIdxyX2ELI0UN3uiyr/4DWM=; b=GvDgpdgHjoNzQwlDvNr3vQtjOji8HQAasgDaEnFdZVdgwGl8EcKxM5wRL5Vs2MsGR+ZC5Pr9463FK/oSY5fZEwdIE9wbJTqy9nYxiFgtIJhdJM4fSVPaL+qF2oXe0MS68Cm7cvJMcoY4ckswllViJ6sgSOWoi4kerL9yUcmybGwf4EMSVKRAfOb+99TIlKt47OjqGwXouaCnmz+f7++BJyCd6uKyopgHARvwDXOAlbAx8GbVr8HXAghOq5U2w8BM1s5gpnRLOujuAI5JKE3tUvjZTZWdGOIXrb3zBPka6UiBear3LCJF6bA/MouMgy2mZy4bJ5Mo5faNVMa2ZQVblA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=htecgroup.com; dmarc=pass action=none header.from=htecgroup.com; dkim=pass header.d=htecgroup.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=htecgroup.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wWWHGb9ue6bc4e3N5npwDIdxyX2ELI0UN3uiyr/4DWM=; b=hcKvKQgF1vhqDu1MOwCeuIy8FoJuNAra/ozurc4tyTexsywSk+/Of6fMjIQttCI50X4QSwV0fWbbrOaR+aadb5KYCyZQ90DUfdxbyLZQ4LZ+0XL07fj+CZjvyoBtbA6/zRYl4ueXflcOsBf0QnHJc9AEZF10A6hDFxaYVGzb5sER5ojTVnfX5ShbeR5br9Jenuj3nrWiXjpBlLRzJVsrF+1+f8bYruglDX0pGbyZFlRhzJVuQqzgATcb5PV8nzAGX+WdrlTYi0P6v3FgQt02pCownCiBgKeECdPVEA1U9Nr0EiTf6sJQIjNJpdjwAYTiFuQawkLBTzhDzcOQCaTwBw== Received: from PA4PR09MB4864.eurprd09.prod.outlook.com (2603:10a6:102:ed::17) by GVXPR09MB7727.eurprd09.prod.outlook.com (2603:10a6:150:1e2::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8398.21; Fri, 31 Jan 2025 17:14:09 +0000 Received: from PA4PR09MB4864.eurprd09.prod.outlook.com ([fe80::a02b:9d5c:eca5:e024]) by PA4PR09MB4864.eurprd09.prod.outlook.com ([fe80::a02b:9d5c:eca5:e024%6]) with mapi id 15.20.8398.020; Fri, 31 Jan 2025 17:14:09 +0000 From: Aleksandar Rakic To: "gcc-patches@gcc.gnu.org" CC: Djordje Todorovic , "cfu@mips.com" , dragan.mladjenovic , Faraz Shahbazker , Aleksandar Rakic Subject: [PATCH 46/61] nanoMIPS: unnecessary AND following an EXT Thread-Topic: [PATCH 46/61] nanoMIPS: unnecessary AND following an EXT Thread-Index: AQHbdAN6psR0NuKp40m11SSweWgd2g== Date: Fri, 31 Jan 2025 17:13:43 +0000 Message-ID: <20250131171232.1018281-48-aleksandar.rakic@htecgroup.com> References: <20250131171232.1018281-1-aleksandar.rakic@htecgroup.com> In-Reply-To: <20250131171232.1018281-1-aleksandar.rakic@htecgroup.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=htecgroup.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PA4PR09MB4864:EE_|GVXPR09MB7727:EE_ x-ms-office365-filtering-correlation-id: af32db7f-3594-46db-ec64-08dd421aad28 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|376014|1800799024|366016|38070700018; x-microsoft-antispam-message-info: =?iso-8859-1?q?kY1uIB5+q3OzwMi+PWcMiz79DQ?= =?iso-8859-1?q?1sQoEBpSAj1ogBH1FXBrgLJOiUCTF2kh6daAsS6BTopUrAbm/GcKOgMvcu6g?= =?iso-8859-1?q?Q9m1Wb4L3Ym6umcO5mcFGBXg5HUyzODLYR8e9kGLVMB7Sc2MtAjJeBSz+CPy?= =?iso-8859-1?q?t4iGkLiD8EkEWjLBK8w8pkTUvpqAqhPyh2KMmtxOH20x6vm67O67aF5kL3Iw?= =?iso-8859-1?q?sXTnZSwXKWPJ6/ZQ8wX3Vhv2DnUN085ONMITH+r2z0v7cCplJFY5KE8iG6Qs?= =?iso-8859-1?q?+SdM5dsdZfe4o4WSqo8T9NYuT1iieGzesZOXfEZEbi/7w+wY/VZ216FRbZfs?= =?iso-8859-1?q?93LOKVaeKPRue0tSmvNAaPPrIuSsObDQ+ahJ47KFjvh4/yCTwAkRtQT34Hf8?= =?iso-8859-1?q?qL3ws8lnq/s6eGTHKGxVgd/5U1nyS1QQhvICZfzZ9DiunCJBwWMjugAI+LbN?= =?iso-8859-1?q?MSzlR2ZFTLalhQ0g759Vqu/B07WogWyCQezfHa5u+M0hxGwyDsvYz3XeMK13?= =?iso-8859-1?q?vxesQ2efDZiG73dEAAyYlj9ImQrIaw0E3mPfnb51gYEJ1uYygIj3OqUZVa+N?= =?iso-8859-1?q?j0CZzsO9ajHW7IcM744CqFzNnoF5HSHyGeRgoVfLFY2E5UEqbSdhoEXim+Um?= =?iso-8859-1?q?+mEn3LK+4Dti2/+VGFX5f2rdrWc7aQNs987wclwuoeqGdRZdCiyUTG7JLvg8?= =?iso-8859-1?q?kYptQG3BDHAtXyDsTEeFOhO8CNmSO5I5i0ngz0VDcNVOE4olKNan5sHYPMwe?= =?iso-8859-1?q?r8+kQ7AHjVrWvDK/+gBT2ft47Bek3v4XC+/AiwI5aFDxEet4735CX6vsnBRS?= =?iso-8859-1?q?snX6hXBRt1SXLRYZDEEkPaYotx9gvFBNCQt27gpahDRLyEEiWztNV6w7yyuQ?= =?iso-8859-1?q?Jv9+GnXrC4cOIYI8qW5NVQrgx0uKeP3z2IbyuaGXPkXCKfUgunVTwCO1vsys?= =?iso-8859-1?q?0E2TtYFz793301w4R1kkgLIbVSaqrEgoAmHIQJ5WLAycm3uRyAha+kE2hCq3?= =?iso-8859-1?q?CRCCSCUL22GpQCXcvxW5jMpXVUyPtpqdMJvdYQkHRlNgLHNtiqHHyb/VqBIq?= =?iso-8859-1?q?MpU0PYove8g8kT08mAtYt9ZaVi9hvFNz9Wqx3EdrWFXfAOD13fQywxw4uqqo?= =?iso-8859-1?q?P0hDgzDEueyhTPhbLY8Z7/7yJ9l4F8mnx7J2DV8BCq2GZMEvXilk5vFW1E/s?= =?iso-8859-1?q?ooP2XeuIuooyBSLqSLTq7R79xkdA/ls+df6KimVOHv9x/BNeLUL2IO2H2y15?= =?iso-8859-1?q?G7Lf/XExav1O2HMVAJurTeoqGq0gFcbo8tdo7DU1Qy9qXP34XrGtvFUCDJGk?= =?iso-8859-1?q?sKwRCDXYSt49SFIQDNz02qHSL3H3wr56FuEW/qGSZb/X+0dZK+QHTKSai32E?= =?iso-8859-1?q?m7wJRZNNzJHhKmPadnCX/+c8afk+Q56fraTu+cvH1R/pZDFVC8DmQtlCyU7m?= =?iso-8859-1?q?d4?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PA4PR09MB4864.eurprd09.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016)(38070700018); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?q?8XXUCGWA9kJhbyJbwQYwvN1?= =?iso-8859-1?q?EreVe5wwebFmB/38rrGNhllYrK396nvTj9ijgROaK2lIiCEroxeRQreytD1q?= =?iso-8859-1?q?cXUw+IwraENLxso8PjMgEQ4YpnhqEONkNiawQFguNSudPOO/N0A6N21kLh+u?= =?iso-8859-1?q?XZZcf5hpM5MMFRzpgUB8ELWN4UIJJLHaxWqSMDuXAEnRQVQIYiIJPor55Q9w?= =?iso-8859-1?q?6EpJ70MfPa1rmLcNk/TTIbgfSAoqI5FRPGRe7NKx97hEe9Q7L2it657TkW3d?= =?iso-8859-1?q?KkEMAsL8t6BNSOh/zKScXTLXv1Rwj3Ohjf6V65gTNDmTgCcJelXcpd7JWb8+?= =?iso-8859-1?q?dlHv1/wDMI31slOL920pZbSvyw1f1G498CwQi1cW46QsPqQcwNQUDTK0Y106?= =?iso-8859-1?q?d9g0UGUwbcJawicTnWw5wB7gja/Mgu5J9R2BPRntUC7LxvQWlwjGBq/fulfV?= =?iso-8859-1?q?4kIuUE0pa6vKKroXuI5QejqaG3YMdkz0FBNfczK6GytHmHKn33asqutNpHpl?= =?iso-8859-1?q?AJlIaF2jJKJLaYjy4th9BaHY0FF9ZeHqDsxN8f6vJZxRj/KLcxfnCT+9JNzx?= =?iso-8859-1?q?Zewn3cx/zzoXsWTR/B4O3XMQXQr1+6JgK1nh6fH66w17x7npUyfbvyDj6CtF?= =?iso-8859-1?q?1nZCcRR374eKs8bLumb/JM4G3nP7VMhhYw1DuUKvc7jye2dt0mSVPnN0YIQz?= =?iso-8859-1?q?UqfgsREF8YHoCokeFP18sTaH7h4IJoh6yEbwhv6rd5zw/Aqm57VgqIl3Vu13?= =?iso-8859-1?q?lxurGFzJPovFButj3XwIrQgaRoHfEV2aM0IKLE1YwjgyAPzqxeWJgrcg1xqd?= =?iso-8859-1?q?1xiSb6xK0cQAuRflavJH0XvVt/QXBNcb78PDaH4bhV1Lqpj1S9Jc7SrTZy+p?= =?iso-8859-1?q?sJ38OLpqafOlEf9dzqRc/E0tEXMd7Up7/xyhAuVkPVqmb3cJlFKE9iOyZ54e?= =?iso-8859-1?q?+skl9X4/OEbTAg44BjV73MODgUGiDGGNPMVDx+FQt7Otg3HI34+LiFmgnXSV?= =?iso-8859-1?q?lkGabPgnvkjIsP5tHtJR4Zll6LkuwzcPv1hLbPhqTCZCP83v06UyzctulKrT?= =?iso-8859-1?q?PtSCH7kV6my1Bld+VOanVNeOeGvlK6s3pmE08LqVgD7gRKgqoE2NfAY3qtdO?= =?iso-8859-1?q?zOJUvk+PRslNI+sOEJH1Q4DNV/9jkck2dsZ9OWTjahwLFEAbWEwy/VDEufjX?= =?iso-8859-1?q?rL/7dMj8eCBW1EcDyePnaMR9e/MBmqcjuUiaBKDb50o91h40+P8SipPEToeI?= =?iso-8859-1?q?vaCzKcThKiE6Bj08PAArt3159e3gGfXW+i1fxmoKR2xY6Ar6QyQj+L4+DWuR?= =?iso-8859-1?q?5rBRRWMpCuDh9NJiN9KYFX6DwjOyBIqpR1+dekGdFYXkTa9jsi72z7jFvPIh?= =?iso-8859-1?q?wGACL7OgLW3XOdyGL8cQQNC1kCiPmnKCKD1GYZCWtdOmYTkUJIFUqotIM92b?= =?iso-8859-1?q?Y8GdXz0IAYrkIgeIavxwM429bKhBNgy/wdyt73JWUBmbCroZdd6SZ/P3hf5j?= =?iso-8859-1?q?MFk/GkQ+DZvpnKFf3YPY9cw7GfWLVHrAwBAL6Il6ZlRoGnsOqGEeJsrz7P/G?= =?iso-8859-1?q?ebndkR5YMa2OmDDA4JMrylluaBZmGuMqrNrzB60rXeMx7X3R/N67dWfxAZ/Z?= =?iso-8859-1?q?Z6Z97gc/qLNe4yqeXSQdjiuTbx+7wNmZ+GtQb3Ee+p36QcF7BIZpXjxk3PHk?= =?iso-8859-1?q?=3D?= MIME-Version: 1.0 X-OriginatorOrg: htecgroup.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PA4PR09MB4864.eurprd09.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: af32db7f-3594-46db-ec64-08dd421aad28 X-MS-Exchange-CrossTenant-originalarrivaltime: 31 Jan 2025 17:13:43.0149 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 9f85665b-7efd-4776-9dfe-b6bfda2565ee X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: ktCza5uCWcOfnD3MwVHrqz0m7cPIT5g1PLRxujOijTGuy3iUwbYE9uIvEzPpn6XS7IVJXXCzOHE4Watp47GYT4B9t5hwanTtheXBtdECIlY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GVXPR09MB7727 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, KAM_SHORT, RCVD_IN_DNSWL_NONE, 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~patchwork=sourceware.org@gcc.gnu.org From: "dragan.mladjenovic" The fwprop1 introduces a new use of Y by replacing the (subreg:QI (reg:SI X)) with (reg:QI Y) preventing the optimization of zero_extend later during the combine. This patch prevents this replacement in two new cases. A: (set (subreg:SI (reg:QI Y)) (zero_extract:SI Z (const_int 8) (const_int ?))) B: (set (reg:SI X) (zero_extend:SI (reg:QI Y))) C: (... (subreg:QI (reg:SI X)) ...) D: (... (reg:SI X) ...) A: (set (reg:SI Y) (zero_extract:SI Z (const_int 8) (const_int ?))) B: (set (reg:SI X) (zero_extend:SI (reg:QI Y))) C: (... (subreg:QI (reg:SI X)) ...) D: (... (reg:SI X) ...) gcc/ * fwprop.cc (free_load_extend): Renamed to ... (free_extend): Handle zero/sign_extract sources. (forward_propagate_subreg): Use free_extend. gcc/testsuite/ * gcc.target/mips/union-zext.c: New. Cherry-picked a76808b917661f102d4b5f6256f76a1a1e580676 from https://github.com/MIPS/gcc Signed-off-by: Dragan Mladjenovic Signed-off-by: Faraz Shahbazker Signed-off-by: Aleksandar Rakic --- gcc/fwprop.cc | 38 ++++++++++++++++++---- gcc/testsuite/gcc.target/mips/union-zext.c | 29 +++++++++++++++++ 2 files changed, 60 insertions(+), 7 deletions(-) create mode 100644 gcc/testsuite/gcc.target/mips/union-zext.c diff --git a/gcc/fwprop.cc b/gcc/fwprop.cc index 8cba6b7ce9f..717415a4fb6 100644 --- a/gcc/fwprop.cc +++ b/gcc/fwprop.cc @@ -614,15 +614,14 @@ try_fwprop_subst (use_info *use, set_info *def, /* For the given single_set INSN, containing SRC known to be a ZERO_EXTEND or SIGN_EXTEND of a register, return true if INSN - is redundant due to the register being set by a LOAD_EXTEND_OP - load from memory. */ + is redundant due to the register being set by ZERO_EXTRACT or + SIGN_EXTRACT of appropriate size or by LOAD_EXTEND_OP load + from memory. */ static bool -free_load_extend (rtx src, insn_info *insn) +free_extend (rtx src, insn_info *insn) { rtx reg = XEXP (src, 0); - if (load_extend_op (GET_MODE (reg)) != GET_CODE (src)) - return false; def_info *def = nullptr; for (use_info *use : insn->uses ()) @@ -644,10 +643,35 @@ free_load_extend (rtx src, insn_info *insn) { rtx patt = PATTERN (def_rtl); - if (GET_CODE (patt) == SET + if (GET_CODE (patt) != SET) + return false; + +#ifdef LOAD_EXTEND_OP + if (LOAD_EXTEND_OP (GET_MODE (reg)) == GET_CODE (src) && GET_CODE (SET_SRC (patt)) == MEM && rtx_equal_p (SET_DEST (patt), reg)) return true; +#endif + + int extract_code = GET_CODE (src) == ZERO_EXTEND + ? ZERO_EXTRACT : SIGN_EXTRACT; + + if (GET_CODE (SET_SRC (patt)) == extract_code + && GET_MODE (SET_SRC (patt)) == GET_MODE (src) + && INTVAL (XEXP (SET_SRC (patt), 1)) + <= GET_MODE_BITSIZE (GET_MODE (reg)).to_constant ()) + { + if (GET_CODE (SET_DEST (patt)) == SUBREG + && GET_MODE (SET_DEST (patt)) == GET_MODE (src) + && rtx_equal_p (XEXP (SET_DEST (patt), 0), reg)) + return true; + + if (REG_P (SET_DEST (patt)) + && GET_MODE (SET_DEST (patt)) == GET_MODE (src) + && REGNO (SET_DEST (patt)) == REGNO (reg)) + return true; + } + } return false; } @@ -709,7 +733,7 @@ forward_propagate_subreg (use_info *use, set_info *def, && REG_P (XEXP (src, 0)) && REGNO (XEXP (src, 0)) >= FIRST_PSEUDO_REGISTER && GET_MODE (XEXP (src, 0)) == use_mode - && !free_load_extend (src, def->insn ()) + && !free_extend (src, def->insn ()) && (targetm.mode_rep_extended (int_use_mode, src_mode) != (int) GET_CODE (src))) return try_fwprop_subst (use, def, loc, use_reg, XEXP (src, 0)); diff --git a/gcc/testsuite/gcc.target/mips/union-zext.c b/gcc/testsuite/gcc.target/mips/union-zext.c new file mode 100644 index 00000000000..6728d415f5a --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/union-zext.c @@ -0,0 +1,29 @@ +/* { dg-do compile } */ +/* { dg-options "(HAS_INS) -mgp32" } */ +/* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */ +/* { dg-final { scan-assembler-not "\tandi\t"} } */ + +typedef struct bits +{ + unsigned B0:8, B1:8, B2:8, B3:8; +} bits_t; + +typedef union +{ + unsigned v; + bits_t b; +} bitfields_t; + +void * +strcpy (void *__restrict__ dst, const void *__restrict__ _a) +{ + unsigned x = *(unsigned *) _a; + bitfields_t bx; + bx.v = x; + + unsigned char v2 = (unsigned char) bx.b.B2; + ((unsigned char *) (dst))[2] = (v2); + if (v2 == 0) + return 0; + return dst; +}