From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by sourceware.org (Postfix) with ESMTPS id CCC4D385701B for ; Fri, 16 Jun 2023 07:57:27 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org CCC4D385701B Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1686902248; x=1718438248; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version; bh=QKv8mulX0TyFz+yWGF3phm/3/fv9mEPlE2aE8Dy0yjQ=; b=Xwwp2eaZWJYJ8Ocur9XWh5mJX3d8fwwutzB1j5MfpWCxf5SNRSxe+Ddm 3s+wRaVCxzD82FethIcOF5ej7YSGsWczhwMYe1/ld51t06vQtz/op+ZiA CFQlCMHZXmIeCS9Q1qZPOPTw2l2uPYFy4ifuIptDt0B3KE3WtG0OYuzMi 71tUvJC+KnS98UqNJfKe41fYREQIaHdVj7FWS353h8DkuFJUvEx7lx0Ro qIW264NkIUGWlV/64b5KT/GRSlGuYNinXABeeITdFQAL4kogvcj3T0jdv s5RcYqb7xVsEHscbP8OL0P0J5MQpkopELGfRw8Rt/35uLzftOQG4IJdgR g==; X-IronPort-AV: E=McAfee;i="6600,9927,10742"; a="358031085" X-IronPort-AV: E=Sophos;i="6.00,247,1681196400"; d="scan'208,217";a="358031085" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Jun 2023 00:57:07 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10742"; a="782811709" X-IronPort-AV: E=Sophos;i="6.00,247,1681196400"; d="scan'208,217";a="782811709" Received: from orsmsx601.amr.corp.intel.com ([10.22.229.14]) by fmsmga004.fm.intel.com with ESMTP; 16 Jun 2023 00:57:07 -0700 Received: from orsmsx611.amr.corp.intel.com (10.22.229.24) by ORSMSX601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Fri, 16 Jun 2023 00:57:06 -0700 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX611.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Fri, 16 Jun 2023 00:57:06 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23 via Frontend Transport; Fri, 16 Jun 2023 00:57:06 -0700 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (104.47.55.171) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.23; Fri, 16 Jun 2023 00:57:05 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UshV57miLM7Bl3MhPyueoUm48KLTvniBhMISCgPI/HnQ6xiOwEoh1o3DjfScUoiejkVr3pyCYrEdz6GFSwaaCKUuaWwyLn96QCRgOgOBD0iwYS7B4Axzy3+yeRb+Tlk9pyp2PuuiiW96nHw7PzoAg57l3Gpx8wiqChxfkDJpeKmLme4bML8pljyvEwFqBjQbXBStL+GLfq2NzgkwA2Hh1nrDjTkzhfpG3JOs5IwsnU2Ga7HGz3XTbmNUYKItfpEQGUB9rmT2zhz+9slmriAzkBcvXdVYmOd+u//bVSua3dO0bXJ9wmgzjm44/yL6rO4i+TQEZAJHJ8W76BrgCgWunw== 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=HCGhY6aQapTqkf35fsWR9knQL3nWQhCX7C40B14+7FQ=; b=fNif1qXAfbjhlMM3hvY5iyi4qtZVH8fRo3TmqXsRRkG0ivB+pEPIXpdJTRVL/9n3ApfiEtYnNorBFTcFe/i0nRXIiouBTBj8C/aoRkI+iMbxWC+y8aKRs6BdM65Pp3Mp3AvMOx2XvXjjhj3cRbNlzrDDJf14ztxigyNe1RNUg82O8loLGjI+Du9ZNGXCxYuIf3xcp0f4dYVJayl0AIoBpmah4PDzR6cpK5DIkr21FphsHTVqfP0CaLWGDOxGR0X/WhHCfPnW/uaB6hCN+3mNPv7gLZcSo4txEgsc2zNX/nQ62ng7/whodaaZqobRQ0oG2YEywG4z5ps1A0adHrJvjg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from MW5PR11MB5908.namprd11.prod.outlook.com (2603:10b6:303:194::10) by BN0PR11MB5696.namprd11.prod.outlook.com (2603:10b6:408:14b::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6500.27; Fri, 16 Jun 2023 07:56:56 +0000 Received: from MW5PR11MB5908.namprd11.prod.outlook.com ([fe80::127c:f4cc:e699:8f73]) by MW5PR11MB5908.namprd11.prod.outlook.com ([fe80::127c:f4cc:e699:8f73%6]) with mapi id 15.20.6500.029; Fri, 16 Jun 2023 07:56:55 +0000 From: "Li, Pan2" To: "juzhe.zhong@rivai.ai" , gcc-patches CC: Robin Dapp , jeffreyalaw , "Wang, Yanzhang" , kito.cheng Subject: RE: [PATCH v1] RISC-V: Bugfix for RVV integer reduction in ZVE32/64. Thread-Topic: [PATCH v1] RISC-V: Bugfix for RVV integer reduction in ZVE32/64. Thread-Index: AQHZoCQynKaPeCZqJ0ipg48suyOhFq+NDY7ggAABz3A= Date: Fri, 16 Jun 2023 07:56:55 +0000 Message-ID: References: <20230616072834.3754201-1-pan2.li@intel.com> <7EE250C8ACA728FB+20230616154733852295101@rivai.ai> In-Reply-To: <7EE250C8ACA728FB+20230616154733852295101@rivai.ai> 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=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MW5PR11MB5908:EE_|BN0PR11MB5696:EE_ x-ms-office365-filtering-correlation-id: 5288f019-a2cf-43cc-721b-08db6e3f4131 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: icisq881XFHAopj2A4EnJr5i5sobQZQn6ePJEAD/wjA4kO2grmA+KYqQn6q8Bh8xUDWER2RjwVGe/SnCQmDuHOTFpxQDksAWIDUBZrH+4RbeTsqTiR2MHAGHdweOCZ2IQV/SuBld5EjxIYvhl3Sybk+NMa9Na/oqZ4+jGEUw/WSUy8U0OTgvCBeumBBsPbjjT7hQ80MrPvbfrHcwz52VDR4oC0OaGTFWwc8hkpZvo5NVEGHHUKOKrsHI6SqFfTYXCedIr7gBbYOLWwQDSax5rGkWE/SLLZ49rO7yRhqBAo3r+olWETJb5UKyUpmd7Ot//+gi7DztSLOVcjFdznrO1SQFCLJqTlT/VRiWhxzxTdkcYhb2U2oqYTLi1/AjsHOmerJUJwWbfJ9Kq0OZIG0bXYk41Abqej3xX9VjhJTla8Ba+n3H7AEA+aZTR5PtbPiOFfDqRemEdqoMdBSAfL7+VXYS4MRBA2AcDS4T0ZTXTthZPNVhK7y76t4F9yKD8T0ECiya1DyHhYcJYN4MSmBwVXwEQy1NomJ14hzzvLo0TVAmP4p3Kh/vtymAo8XpiKftoYqB8B0WJSorJX9cjYbEnaP+d3Lxe3BGkFjzBApRzwI= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW5PR11MB5908.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(136003)(366004)(39860400002)(376002)(396003)(346002)(451199021)(110136005)(54906003)(83380400001)(38070700005)(66946007)(38100700002)(76116006)(122000001)(4326008)(478600001)(82960400001)(66446008)(66476007)(66556008)(2906002)(64756008)(84970400001)(71200400001)(33656002)(316002)(186003)(7696005)(30864003)(26005)(86362001)(8676002)(8936002)(53546011)(6506007)(9686003)(41300700001)(52536014)(5660300002)(55016003)(579004)(559001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?ixYkZMIF0HjCwFpWr4OHL8kdxUT2OO6CY+HlOYao24payqhLi4e3nEID1qSL?= =?us-ascii?Q?+sQpO4uek6EGYEtmpOrSz0a8xTYP3dOfCNYQ3kJaCVkHdix9WFMMZUa/5kFO?= =?us-ascii?Q?/Qh1YQHUgTURrOo8+DvL5xpQwW+9MAVryighsrQQLQ6RZ3zn/w30DXfPD+Cl?= =?us-ascii?Q?PI7XVTX+3L5tebuUU4ROoBl+oVqu8QV402uvT0zwL8mmSb+TMo5/XNC+IHeu?= =?us-ascii?Q?S9y3KSCSLBx/6rnCXTzV5cMgMo/SVD42K7lpNfpsllwwRGQvCAOtO5qn+RUC?= =?us-ascii?Q?YS7L7Z0FkObahTD7qGWxoVSb+LpQEkwTOf20aRXXPQDf/KvLiFpQwLlRgjPT?= =?us-ascii?Q?DGaI34f2abbNwPEzElOyYdm4bXfjYGHoA5i5HF5Oumyg/U2yuZ0Pxs8Oboda?= =?us-ascii?Q?pc6ikeOm24TPHrGfMR0ySQt8dlfFImhjcQNrTsJETYIlNeirW0ATnasbMYtV?= =?us-ascii?Q?DkhW51Vjlr2QwpcGqZYhOlh37pCG89Ta6iHM+/fGhc2gsrYXKTVHhVkKsFSx?= =?us-ascii?Q?c7Pc0CtKZYt7DZ2qm+HaVrYQ0oQlNCqLB0NJu+TTHeY5guRhRAFXqKK+D8q0?= =?us-ascii?Q?OEnNl/NCSexBJd/9JPYiFEsLK5uE8GUvge2MrdtwQd8SgW2wcPzo+e/1eoSO?= =?us-ascii?Q?6NNlAak0WunFEViWef1RwIpcFH5G4l8Y7fjFVAYUUTwSXRJCF+LtuNpFsN1u?= =?us-ascii?Q?eUVo9RZCJX/uFFFPg5kT0GnQuA8/vSSyt2UH/L/MuVbOptcrJvJlk7GPdwmm?= =?us-ascii?Q?ZOSNefOB0RkvGE4lJ/INv9BtpdU4A81YeJWV7aSgBWfZ1IxpDX9freWTeZZK?= =?us-ascii?Q?NTqMv4pIqr7adq43y+l9I8WEzwYxrT6cTJXy9//cGrFe4MSkSfyxpxMHInkx?= =?us-ascii?Q?P0GzYRmtzhDE2gIRQ9l3BkzGaT7DDRUeOW2RTS+pcqrFlaahYmYIuClMYe49?= =?us-ascii?Q?xpvmvHYPz7ZNd3ANc0sihvmYvQE4MEtF8FsnoqjaF41ov/8vEVFWPxDMqzlz?= =?us-ascii?Q?URTDNn4KUf8TJKALrivDW8Nlbo4Z52vONUi3ZPLzpC0nQZ/5pfAfvQt5RNw4?= =?us-ascii?Q?QMt74c96YWXuwiR9cAIHUUanPlovfLn8JiOOKFmijwUU8ATyuYeFoHWc/axr?= =?us-ascii?Q?RwVBXS6e+4nzP7aYGnyh6KcOygYWuL7lQqm45bEWbhPNnZpriohA0xyJbV36?= =?us-ascii?Q?TJlHom362n8jaLMVpna/SUKwHD54IVDZd0/RLUzrrFXzc/6MNkNvquU09zWB?= =?us-ascii?Q?UXUNyaFOzM8H7uuJI++KlDSqzJu8pWbGo03qCpjqUMGLyXnIB4MdHxm+Iqvj?= =?us-ascii?Q?i8ToJJtRL94zXMgdaq6uXrqGQQNGCEYUqDJ/rXhEyz/NxJ9xpm1vBox6SwAq?= =?us-ascii?Q?JyNBDAlk1fpsspSBq9ayzlJWixVOPjTLwqwzoK+Z1Xp2Y6MRdBWq2XpYVDTr?= =?us-ascii?Q?TWg/Lmw+JwT/WBC58uP+8ng+xmzlGMLT5aT3nzXn+W9zE9mQQ0Eq6DVFreZL?= =?us-ascii?Q?QXUfyjtaDUYAYau7yEkix+SD20JeSMX1FR/X4bogqjsHcWZSOJckJ7c776cQ?= =?us-ascii?Q?d4SM4UeMCyo3a3E2ST4=3D?= Content-Type: multipart/alternative; boundary="_000_MW5PR11MB59084FA922B26B98F0A52FB2A958AMW5PR11MB5908namp_" MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW5PR11MB5908.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5288f019-a2cf-43cc-721b-08db6e3f4131 X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Jun 2023 07:56:55.8442 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: rLGwIxvJv7HbDFcBqKTrwgqiPLFF5KJr2ZNeRj6tl9yDoVXfvaeSP/c6uospyVBoO3kr29C25g8g6uaFzj1c9Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN0PR11MB5696 X-OriginatorOrg: intel.com X-Spam-Status: No, score=-12.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,HTML_MESSAGE,KAM_SHORT,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 List-Id: --_000_MW5PR11MB59084FA922B26B98F0A52FB2A958AMW5PR11MB5908namp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable VECTOR_FLOAT_MODE_P referenced from expand, will remove it as it will be re= moved shortly. Pan From: juzhe.zhong@rivai.ai Sent: Friday, June 16, 2023 3:48 PM To: Li, Pan2 ; gcc-patches Cc: Robin Dapp ; jeffreyalaw ; = Li, Pan2 ; Wang, Yanzhang ; kit= o.cheng Subject: Re: [PATCH v1] RISC-V: Bugfix for RVV integer reduction in ZVE32/6= 4. +/* Nonzero if MODE is a vector float mode. */ +#define VECTOR_FLOAT_MODE_P(MODE) \ + (GET_MODE_CLASS (MODE) =3D=3D MODE_VECTOR_FLOAT) Why you add this? Remove it. Otherwise, LGTM. ________________________________ juzhe.zhong@rivai.ai From: pan2.li Date: 2023-06-16 15:28 To: gcc-patches CC: juzhe.zhong; rdapp.gcc; jeffreyalaw; pan2.li; yanzhang.wang; kito.cheng Subject: [PATCH v1] RISC-V: Bugfix for RVV integer reduction in ZVE32/64. From: Pan Li > The rvv integer reduction has 3 different patterns for zve128+, zve64 and zve32. They take the same iterator with different attributions. However, we need the generated function code_for_reduc (code, mode1, mode2). The implementation of code_for_reduc may look like below. code_for_reduc (code, mode1, mode2) { if (code =3D=3D max && mode1 =3D=3D VNx1QI && mode2 =3D=3D VNx1QI) return CODE_FOR_pred_reduc_maxvnx1qivnx16qi; // ZVE128+ if (code =3D=3D max && mode1 =3D=3D VNx1QI && mode2 =3D=3D VNx1QI) return CODE_FOR_pred_reduc_maxvnx1qivnx8qi; // ZVE64 if (code =3D=3D max && mode1 =3D=3D VNx1QI && mode2 =3D=3D VNx1QI) return CODE_FOR_pred_reduc_maxvnx1qivnx4qi; // ZVE32 } Thus there will be a problem here. For example zve32, we will have code_for_reduc (max, VNx1QI, VNx1QI) which will return the code of the ZVE128+ instead of the ZVE32 logically. This patch will merge the 3 patterns into one pattern, and pass both the input_vector and the ret_vector of code_for_reduc. For example, ZVE32 will = be code_for_reduc (max, VNx1Q1, VNx4QI), then the correct code of ZVE32 will be returned as expectation. Signed-off-by: Pan Li > Co-Authored by: Juzhe-Zhong > PR 110265 gcc/ChangeLog: PR target/110265 * config/riscv/riscv-vector-builtins-bases.cc: Add ret_mode for integer reduction expand. * config/riscv/vector-iterators.md: Add VQI, VHI, VSI and VDI, and the LMUL1 attr respectively. * config/riscv/vector.md. (@pred_reduc_): Removed. (@pred_reduc_): Likewise. (@pred_reduc_): Likewise. (@pred_reduc_): New pattern. (@pred_reduc_): Likewise. (@pred_reduc_): Likewise. (@pred_reduc_): Likewise. * machmode.h (VECTOR_FLOAT_MODE_P): New macro. gcc/testsuite/ChangeLog: PR target/110265 * gcc.target/riscv/rvv/base/pr110265-1.c: New test. * gcc.target/riscv/rvv/base/pr110265-1.h: New test. * gcc.target/riscv/rvv/base/pr110265-2.c: New test. * gcc.target/riscv/rvv/base/pr110265-2.h: New test. * gcc.target/riscv/rvv/base/pr110265-3.c: New test. --- .../riscv/riscv-vector-builtins-bases.cc | 13 +- gcc/config/riscv/vector-iterators.md | 61 +++++ gcc/config/riscv/vector.md | 208 +++++++++++++----- gcc/machmode.h | 4 + .../gcc.target/riscv/rvv/base/pr110265-1.c | 13 ++ .../gcc.target/riscv/rvv/base/pr110265-1.h | 65 ++++++ .../gcc.target/riscv/rvv/base/pr110265-2.c | 14 ++ .../gcc.target/riscv/rvv/base/pr110265-2.h | 57 +++++ .../gcc.target/riscv/rvv/base/pr110265-3.c | 14 ++ 9 files changed, 389 insertions(+), 60 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/pr110265-1.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/pr110265-1.h create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/pr110265-2.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/pr110265-2.h create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/pr110265-3.c diff --git a/gcc/config/riscv/riscv-vector-builtins-bases.cc b/gcc/config/r= iscv/riscv-vector-builtins-bases.cc index 87a684dd127..a77933d60d5 100644 --- a/gcc/config/riscv/riscv-vector-builtins-bases.cc +++ b/gcc/config/riscv/riscv-vector-builtins-bases.cc @@ -1396,8 +1396,17 @@ public: rtx expand (function_expander &e) const override { - return e.use_exact_insn ( - code_for_pred_reduc (CODE, e.vector_mode (), e.vector_mode ())); + machine_mode mode =3D e.vector_mode (); + machine_mode ret_mode =3D e.ret_mode (); + + /* TODO: we will use ret_mode after all types of PR110265 are addresse= d. */ + if (VECTOR_FLOAT_MODE_P (mode) + || GET_MODE_INNER (mode) !=3D GET_MODE_INNER (ret_mode)) + return e.use_exact_insn ( + code_for_pred_reduc (CODE, e.vector_mode (), e.vector_mode ())); + else + return e.use_exact_insn ( + code_for_pred_reduc (CODE, e.vector_mode (), e.ret_mode ())); } }; diff --git a/gcc/config/riscv/vector-iterators.md b/gcc/config/riscv/vector= -iterators.md index 8c71c9e22cc..e2c8ade98eb 100644 --- a/gcc/config/riscv/vector-iterators.md +++ b/gcc/config/riscv/vector-iterators.md @@ -929,6 +929,67 @@ (define_mode_iterator V64T [ (VNx2x64QI "TARGET_MIN_VLEN >=3D 128") ]) +(define_mode_iterator VQI [ + (VNx1QI "TARGET_MIN_VLEN < 128") + VNx2QI + VNx4QI + VNx8QI + VNx16QI + VNx32QI + (VNx64QI "TARGET_MIN_VLEN > 32") + (VNx128QI "TARGET_MIN_VLEN >=3D 128") +]) + +(define_mode_iterator VHI [ + (VNx1HI "TARGET_MIN_VLEN < 128") + VNx2HI + VNx4HI + VNx8HI + VNx16HI + (VNx32HI "TARGET_MIN_VLEN > 32") + (VNx64HI "TARGET_MIN_VLEN >=3D 128") +]) + +(define_mode_iterator VSI [ + (VNx1SI "TARGET_MIN_VLEN < 128") + VNx2SI + VNx4SI + VNx8SI + (VNx16SI "TARGET_MIN_VLEN > 32") + (VNx32SI "TARGET_MIN_VLEN >=3D 128") +]) + +(define_mode_iterator VDI [ + (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN < 128") + (VNx2DI "TARGET_VECTOR_ELEN_64") + (VNx4DI "TARGET_VECTOR_ELEN_64") + (VNx8DI "TARGET_VECTOR_ELEN_64") + (VNx16DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >=3D 128") +]) + +(define_mode_iterator VQI_LMUL1 [ + (VNx16QI "TARGET_MIN_VLEN >=3D 128") + (VNx8QI "TARGET_MIN_VLEN =3D=3D 64") + (VNx4QI "TARGET_MIN_VLEN =3D=3D 32") +]) + +(define_mode_iterator VHI_LMUL1 [ + (VNx8HI "TARGET_MIN_VLEN >=3D 128") + (VNx4HI "TARGET_MIN_VLEN =3D=3D 64") + (VNx2HI "TARGET_MIN_VLEN =3D=3D 32") +]) + +(define_mode_iterator VSI_LMUL1 [ + (VNx4SI "TARGET_MIN_VLEN >=3D 128") + (VNx2SI "TARGET_MIN_VLEN =3D=3D 64") + (VNx1SI "TARGET_MIN_VLEN =3D=3D 32") +]) + +(define_mode_iterator VDI_LMUL1 [ + (VNx2DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >=3D 128") + (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN =3D=3D 64") +]) + (define_mode_attr VLMULX2 [ (VNx1QI "VNx2QI") (VNx2QI "VNx4QI") (VNx4QI "VNx8QI") (VNx8QI "VNx16QI")= (VNx16QI "VNx32QI") (VNx32QI "VNx64QI") (VNx64QI "VNx128QI") (VNx1HI "VNx2HI") (VNx2HI "VNx4HI") (VNx4HI "VNx8HI") (VNx8HI "VNx16HI")= (VNx16HI "VNx32HI") (VNx32HI "VNx64HI") diff --git a/gcc/config/riscv/vector.md b/gcc/config/riscv/vector.md index 1d1847bd85a..d396e278503 100644 --- a/gcc/config/riscv/vector.md +++ b/gcc/config/riscv/vector.md @@ -7244,76 +7244,168 @@ (define_insn "@pred_rod_trunc" ;; ------------------------------------------------------------------------= ------- ;; For reduction operations, we should have seperate patterns for -;; TARGET_MIN_VLEN =3D=3D 32 and TARGET_MIN_VLEN > 32. +;; different types. For each type, we will cover MIN_VLEN =3D=3D 32, MIN_V= LEN =3D=3D 64 +;; and the MIN_VLEN >=3D 128 from the well defined iterators. ;; Since reduction need LMUL =3D 1 scalar operand as the input operand ;; and they are different. ;; For example, The LMUL =3D 1 corresponding mode of VNx16QImode is VNx4QIm= ode ;; for -march=3Drv*zve32* wheras VNx8QImode for -march=3Drv*zve64* -(define_insn "@pred_reduc_>" - [(set (match_operand: 0 "register_operand" "=3Dvr, = vr") - (unspec: - [(unspec: - [(match_operand: 1 "vector_mask_operand" "vmWc1,vmWc1") - (match_operand 5 "vector_length_operand" " rK, rK") - (match_operand 6 "const_int_operand" " i, i") - (match_operand 7 "const_int_operand" " i, i") + +;; Integer Reduction for QI +(define_insn "@pred_reduc_" + [ + (set + (match_operand:VQI_LMUL1 0 "register_operand" "=3Dvr,= vr") + (unspec:VQI_LMUL1 + [ + (unspec: + [ + (match_operand: 1 "vector_mask_operand" "vmWc1,vmWc1") + (match_operand 5 "vector_length_operand" " rK, rK") + (match_operand 6 "const_int_operand" " i, i") + (match_operand 7 "const_int_operand" " i, i") (reg:SI VL_REGNUM) - (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE) - (any_reduc:VI - (vec_duplicate:VI - (vec_select: - (match_operand: 4 "register_operand" " vr, vr") - (parallel [(const_int 0)]))) - (match_operand:VI 3 "register_operand" " vr, vr")) - (match_operand: 2 "vector_merge_operand" " vu, 0")] UNS= PEC_REDUC))] - "TARGET_VECTOR && TARGET_MIN_VLEN >=3D 128" + (reg:SI VTYPE_REGNUM) + ] UNSPEC_VPREDICATE + ) + (any_reduc:VQI + (vec_duplicate:VQI + (vec_select: + (match_operand:VQI_LMUL1 4 "register_operand" " vr, vr") + (parallel [(const_int 0)]) + ) + ) + (match_operand:VQI 3 "register_operand" " vr, vr") + ) + (match_operand:VQI_LMUL1 2 "vector_merge_operand" " vu, 0") + ] UNSPEC_REDUC + ) + ) + ] + "TARGET_VECTOR" "vred.vs\t%0,%3,%4%p1" - [(set_attr "type" "vired") - (set_attr "mode" "")]) + [ + (set_attr "type" "vired") + (set_attr "mode" "") + ] +) -(define_insn "@pred_reduc_" - [(set (match_operand: 0 "register_operand" "=3D= vr, vr") - (unspec: - [(unspec: - [(match_operand: 1 "vector_mask_operand" "vmWc1,vmWc1") - (match_operand 5 "vector_length_operand" " rK, rK") - (match_operand 6 "const_int_operand" " i, i") - (match_operand 7 "const_int_operand" " i, i") +;; Integer Reduction for HI +(define_insn "@pred_reduc_" + [ + (set + (match_operand:VHI_LMUL1 0 "register_operand" "=3Dvr,= vr") + (unspec:VHI_LMUL1 + [ + (unspec: + [ + (match_operand: 1 "vector_mask_operand" "vmWc1,vmWc1") + (match_operand 5 "vector_length_operand" " rK, rK") + (match_operand 6 "const_int_operand" " i, i") + (match_operand 7 "const_int_operand" " i, i") (reg:SI VL_REGNUM) - (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE) - (any_reduc:VI_ZVE64 - (vec_duplicate:VI_ZVE64 - (vec_select: - (match_operand: 4 "register_operand" " vr, vr") - (parallel [(const_int 0)]))) - (match_operand:VI_ZVE64 3 "register_operand" " vr, vr"= )) - (match_operand: 2 "vector_merge_operand" " vu, 0"= )] UNSPEC_REDUC))] - "TARGET_VECTOR && TARGET_MIN_VLEN =3D=3D 64" + (reg:SI VTYPE_REGNUM) + ] UNSPEC_VPREDICATE + ) + (any_reduc:VHI + (vec_duplicate:VHI + (vec_select: + (match_operand:VHI_LMUL1 4 "register_operand" " vr, vr") + (parallel [(const_int 0)]) + ) + ) + (match_operand:VHI 3 "register_operand" " vr, vr") + ) + (match_operand:VHI_LMUL1 2 "vector_merge_operand" " vu, 0") + ] UNSPEC_REDUC + ) + ) + ] + "TARGET_VECTOR" "vred.vs\t%0,%3,%4%p1" - [(set_attr "type" "vired") - (set_attr "mode" "")]) + [ + (set_attr "type" "vired") + (set_attr "mode" "") + ] +) -(define_insn "@pred_reduc_" - [(set (match_operand: 0 "register_operand" "=3Dvd= , vd, vr, vr") - (unspec: - [(unspec: - [(match_operand: 1 "vector_mask_operand" " vm, vm,Wc1,= Wc1") - (match_operand 5 "vector_length_operand" " rK, rK, rK,= rK") - (match_operand 6 "const_int_operand" " i, i, i,= i") - (match_operand 7 "const_int_operand" " i, i, i,= i") +;; Integer Reduction for SI +(define_insn "@pred_reduc_" + [ + (set + (match_operand:VSI_LMUL1 0 "register_operand" "=3Dvr,= vr") + (unspec:VSI_LMUL1 + [ + (unspec: + [ + (match_operand: 1 "vector_mask_operand" "vmWc1,vmWc1") + (match_operand 5 "vector_length_operand" " rK, rK") + (match_operand 6 "const_int_operand" " i, i") + (match_operand 7 "const_int_operand" " i, i") (reg:SI VL_REGNUM) - (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE) - (any_reduc:VI_ZVE32 - (vec_duplicate:VI_ZVE32 - (vec_select: - (match_operand: 4 "register_operand" " vr, vr, vr,= vr") - (parallel [(const_int 0)]))) - (match_operand:VI_ZVE32 3 "register_operand" " vr, vr, vr,= vr")) - (match_operand: 2 "vector_merge_operand" " vu, 0, vu,= 0")] UNSPEC_REDUC))] - "TARGET_VECTOR && TARGET_MIN_VLEN =3D=3D 32" + (reg:SI VTYPE_REGNUM) + ] UNSPEC_VPREDICATE + ) + (any_reduc:VSI + (vec_duplicate:VSI + (vec_select: + (match_operand:VSI_LMUL1 4 "register_operand" " vr, vr") + (parallel [(const_int 0)]) + ) + ) + (match_operand:VSI 3 "register_operand" " vr, vr") + ) + (match_operand:VSI_LMUL1 2 "vector_merge_operand" " vu, 0") + ] UNSPEC_REDUC + ) + ) + ] + "TARGET_VECTOR" "vred.vs\t%0,%3,%4%p1" - [(set_attr "type" "vired") - (set_attr "mode" "")]) + [ + (set_attr "type" "vired") + (set_attr "mode" "") + ] +) + +;; Integer Reduction for DI +(define_insn "@pred_reduc_" + [ + (set + (match_operand:VDI_LMUL1 0 "register_operand" "=3Dvr,= vr") + (unspec:VDI_LMUL1 + [ + (unspec: + [ + (match_operand: 1 "vector_mask_operand" "vmWc1,vmWc1") + (match_operand 5 "vector_length_operand" " rK, rK") + (match_operand 6 "const_int_operand" " i, i") + (match_operand 7 "const_int_operand" " i, i") + (reg:SI VL_REGNUM) + (reg:SI VTYPE_REGNUM) + ] UNSPEC_VPREDICATE + ) + (any_reduc:VDI + (vec_duplicate:VDI + (vec_select: + (match_operand:VDI_LMUL1 4 "register_operand" " vr, vr") + (parallel [(const_int 0)]) + ) + ) + (match_operand:VDI 3 "register_operand" " vr, vr") + ) + (match_operand:VDI_LMUL1 2 "vector_merge_operand" " vu, 0") + ] UNSPEC_REDUC + ) + ) + ] + "TARGET_VECTOR" + "vred.vs\t%0,%3,%4%p1" + [ + (set_attr "type" "vired") + (set_attr "mode" "") + ] +) (define_insn "@pred_widen_reduc_plus" [(set (match_operand: 0 "register_operand" "=3D&vr, = &vr") diff --git a/gcc/machmode.h b/gcc/machmode.h index a22df60dc20..8ecfc2a656e 100644 --- a/gcc/machmode.h +++ b/gcc/machmode.h @@ -134,6 +134,10 @@ extern const unsigned char mode_class[NUM_MACHINE_MODE= S]; || GET_MODE_CLASS (MODE) =3D=3D MODE_VECTOR_ACCUM \ || GET_MODE_CLASS (MODE) =3D=3D MODE_VECTOR_UACCUM) +/* Nonzero if MODE is a vector float mode. */ +#define VECTOR_FLOAT_MODE_P(MODE) \ + (GET_MODE_CLASS (MODE) =3D=3D MODE_VECTOR_FLOAT) \ + /* Nonzero if MODE is a scalar integral mode. */ #define SCALAR_INT_MODE_P(MODE) \ (GET_MODE_CLASS (MODE) =3D=3D MODE_INT \ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr110265-1.c b/gcc/tes= tsuite/gcc.target/riscv/rvv/base/pr110265-1.c new file mode 100644 index 00000000000..2e4aeb5b90b --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr110265-1.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-march=3Drv32gc_zve32f -mabi=3Dilp32f -O3 -Wno-psabi" } */ + +#include "pr110265-1.h" + +/* { dg-final { scan-assembler-times {vredand\.vs\s+v[0-9]+,\s*v[0-9]+,\s*= v[0-9]+} 2 } } */ +/* { dg-final { scan-assembler-times {vredmax\.vs\s+v[0-9]+,\s*v[0-9]+,\s*= v[0-9]+} 2 } } */ +/* { dg-final { scan-assembler-times {vredmaxu\.vs\s+v[0-9]+,\s*v[0-9]+,\s= *v[0-9]+} 2 } } */ +/* { dg-final { scan-assembler-times {vredmin\.vs\s+v[0-9]+,\s*v[0-9]+,\s*= v[0-9]+} 2 } } */ +/* { dg-final { scan-assembler-times {vredminu\.vs\s+v[0-9]+,\s*v[0-9]+,\s= *v[0-9]+} 2 } } */ +/* { dg-final { scan-assembler-times {vredor\.vs\s+v[0-9]+,\s*v[0-9]+,\s*v= [0-9]+} 2 } } */ +/* { dg-final { scan-assembler-times {vredsum\.vs\s+v[0-9]+,\s*v[0-9]+,\s*= v[0-9]+} 2 } } */ +/* { dg-final { scan-assembler-times {vredxor\.vs\s+v[0-9]+,\s*v[0-9]+,\s*= v[0-9]+} 2 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr110265-1.h b/gcc/tes= tsuite/gcc.target/riscv/rvv/base/pr110265-1.h new file mode 100644 index 00000000000..ade44cc27ea --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr110265-1.h @@ -0,0 +1,65 @@ +#include "riscv_vector.h" + +vint8m1_t test_vredand_vs_i8mf4_i8m1(vint8mf4_t vector, vint8m1_t scalar, = size_t vl) { + return __riscv_vredand_vs_i8mf4_i8m1(vector, scalar, vl); +} + +vuint32m1_t test_vredand_vs_u32m8_u32m1(vuint32m8_t vector, vuint32m1_t sc= alar, size_t vl) { + return __riscv_vredand_vs_u32m8_u32m1(vector, scalar, vl); +} + +vint8m1_t test_vredmax_vs_i8mf4_i8m1(vint8mf4_t vector, vint8m1_t scalar, = size_t vl) { + return __riscv_vredmax_vs_i8mf4_i8m1(vector, scalar, vl); +} + +vint32m1_t test_vredmax_vs_i32m8_i32m1(vint32m8_t vector, vint32m1_t scala= r, size_t vl) { + return __riscv_vredmax_vs_i32m8_i32m1(vector, scalar, vl); +} + +vuint8m1_t test_vredmaxu_vs_u8mf4_u8m1(vuint8mf4_t vector, vuint8m1_t scal= ar, size_t vl) { + return __riscv_vredmaxu_vs_u8mf4_u8m1(vector, scalar, vl); +} + +vuint32m1_t test_vredmaxu_vs_u32m8_u32m1(vuint32m8_t vector, vuint32m1_t s= calar, size_t vl) { + return __riscv_vredmaxu_vs_u32m8_u32m1(vector, scalar, vl); +} + +vint8m1_t test_vredmin_vs_i8mf4_i8m1(vint8mf4_t vector, vint8m1_t scalar, = size_t vl) { + return __riscv_vredmin_vs_i8mf4_i8m1(vector, scalar, vl); +} + +vint32m1_t test_vredmin_vs_i32m8_i32m1(vint32m8_t vector, vint32m1_t scala= r, size_t vl) { + return __riscv_vredmin_vs_i32m8_i32m1(vector, scalar, vl); +} + +vuint8m1_t test_vredminu_vs_u8mf4_u8m1(vuint8mf4_t vector, vuint8m1_t scal= ar, size_t vl) { + return __riscv_vredminu_vs_u8mf4_u8m1(vector, scalar, vl); +} + +vuint32m1_t test_vredminu_vs_u32m8_u32m1(vuint32m8_t vector, vuint32m1_t s= calar, size_t vl) { + return __riscv_vredminu_vs_u32m8_u32m1(vector, scalar, vl); +} + +vint8m1_t test_vredor_vs_i8mf4_i8m1(vint8mf4_t vector, vint8m1_t scalar, s= ize_t vl) { + return __riscv_vredor_vs_i8mf4_i8m1(vector, scalar, vl); +} + +vuint32m1_t test_vredor_vs_u32m8_u32m1(vuint32m8_t vector, vuint32m1_t sca= lar, size_t vl) { + return __riscv_vredor_vs_u32m8_u32m1(vector, scalar, vl); +} + +vint8m1_t test_vredsum_vs_i8mf4_i8m1(vint8mf4_t vector, vint8m1_t scalar, = size_t vl) { + return __riscv_vredsum_vs_i8mf4_i8m1(vector, scalar, vl); +} + +vuint32m1_t test_vredsum_vs_u32m8_u32m1(vuint32m8_t vector, vuint32m1_t sc= alar, size_t vl) { + return __riscv_vredsum_vs_u32m8_u32m1(vector, scalar, vl); +} + +vint8m1_t test_vredxor_vs_i8mf4_i8m1(vint8mf4_t vector, vint8m1_t scalar, = size_t vl) { + return __riscv_vredxor_vs_i8mf4_i8m1(vector, scalar, vl); +} + +vuint32m1_t test_vredxor_vs_u32m8_u32m1(vuint32m8_t vector, vuint32m1_t sc= alar, size_t vl) { + return __riscv_vredxor_vs_u32m8_u32m1(vector, scalar, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr110265-2.c b/gcc/tes= tsuite/gcc.target/riscv/rvv/base/pr110265-2.c new file mode 100644 index 00000000000..7454c1cc918 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr110265-2.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-march=3Drv32gc_zve64d -mabi=3Dilp32d -O3 -Wno-psabi" } */ + +#include "pr110265-1.h" +#include "pr110265-2.h" + +/* { dg-final { scan-assembler-times {vredand\.vs\s+v[0-9]+,\s*v[0-9]+,\s*= v[0-9]+} 4 } } */ +/* { dg-final { scan-assembler-times {vredmax\.vs\s+v[0-9]+,\s*v[0-9]+,\s*= v[0-9]+} 3 } } */ +/* { dg-final { scan-assembler-times {vredmaxu\.vs\s+v[0-9]+,\s*v[0-9]+,\s= *v[0-9]+} 4 } } */ +/* { dg-final { scan-assembler-times {vredmin\.vs\s+v[0-9]+,\s*v[0-9]+,\s*= v[0-9]+} 3 } } */ +/* { dg-final { scan-assembler-times {vredminu\.vs\s+v[0-9]+,\s*v[0-9]+,\s= *v[0-9]+} 4 } } */ +/* { dg-final { scan-assembler-times {vredor\.vs\s+v[0-9]+,\s*v[0-9]+,\s*v= [0-9]+} 4 } } */ +/* { dg-final { scan-assembler-times {vredsum\.vs\s+v[0-9]+,\s*v[0-9]+,\s*= v[0-9]+} 4 } } */ +/* { dg-final { scan-assembler-times {vredxor\.vs\s+v[0-9]+,\s*v[0-9]+,\s*= v[0-9]+} 4 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr110265-2.h b/gcc/tes= tsuite/gcc.target/riscv/rvv/base/pr110265-2.h new file mode 100644 index 00000000000..6a7e14e51f8 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr110265-2.h @@ -0,0 +1,57 @@ +#include "riscv_vector.h" + +vint8m1_t test_vredand_vs_i8mf8_i8m1(vint8mf8_t vector, vint8m1_t scalar, = size_t vl) { + return __riscv_vredand_vs_i8mf8_i8m1(vector, scalar, vl); +} + +vint8m1_t test_vredmax_vs_i8mf8_i8m1(vint8mf8_t vector, vint8m1_t scalar, = size_t vl) { + return __riscv_vredmax_vs_i8mf8_i8m1(vector, scalar, vl); +} + +vuint8m1_t test_vredmaxu_vs_u8mf8_u8m1(vuint8mf8_t vector, vuint8m1_t scal= ar, size_t vl) { + return __riscv_vredmaxu_vs_u8mf8_u8m1(vector, scalar, vl); +} + +vint8m1_t test_vredmin_vs_i8mf8_i8m1(vint8mf8_t vector, vint8m1_t scalar, = size_t vl) { + return __riscv_vredmin_vs_i8mf8_i8m1(vector, scalar, vl); +} + +vuint8m1_t test_vredminu_vs_u8mf8_u8m1(vuint8mf8_t vector, vuint8m1_t scal= ar, size_t vl) { + return __riscv_vredminu_vs_u8mf8_u8m1(vector, scalar, vl); +} + +vint8m1_t test_vredor_vs_i8mf8_i8m1(vint8mf8_t vector, vint8m1_t scalar, s= ize_t vl) { + return __riscv_vredor_vs_i8mf8_i8m1(vector, scalar, vl); +} + +vint8m1_t test_vredsum_vs_i8mf8_i8m1(vint8mf8_t vector, vint8m1_t scalar, = size_t vl) { + return __riscv_vredsum_vs_i8mf8_i8m1(vector, scalar, vl); +} + +vint8m1_t test_vredxor_vs_i8mf8_i8m1(vint8mf8_t vector, vint8m1_t scalar, = size_t vl) { + return __riscv_vredxor_vs_i8mf8_i8m1(vector, scalar, vl); +} + +vuint64m1_t test_vredand_vs_u64m8_u64m1(vuint64m8_t vector, vuint64m1_t sc= alar, size_t vl) { + return __riscv_vredand_vs_u64m8_u64m1(vector, scalar, vl); +} + +vuint64m1_t test_vredmaxu_vs_u64m8_u64m1(vuint64m8_t vector, vuint64m1_t s= calar, size_t vl) { + return __riscv_vredmaxu_vs_u64m8_u64m1(vector, scalar, vl); +} + +vuint64m1_t test_vredminu_vs_u64m8_u64m1(vuint64m8_t vector, vuint64m1_t s= calar, size_t vl) { + return __riscv_vredminu_vs_u64m8_u64m1(vector, scalar, vl); +} + +vuint64m1_t test_vredor_vs_u64m8_u64m1(vuint64m8_t vector, vuint64m1_t sca= lar, size_t vl) { + return __riscv_vredor_vs_u64m8_u64m1(vector, scalar, vl); +} + +vuint64m1_t test_vredsum_vs_u64m8_u64m1(vuint64m8_t vector, vuint64m1_t sc= alar, size_t vl) { + return __riscv_vredsum_vs_u64m8_u64m1(vector, scalar, vl); +} + +vuint64m1_t test_vredxor_vs_u64m8_u64m1(vuint64m8_t vector, vuint64m1_t sc= alar, size_t vl) { + return __riscv_vredxor_vs_u64m8_u64m1(vector, scalar, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr110265-3.c b/gcc/tes= tsuite/gcc.target/riscv/rvv/base/pr110265-3.c new file mode 100644 index 00000000000..0ed1fbae35a --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr110265-3.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-march=3Drv32gc_zve64f -mabi=3Dilp32f -O3 -Wno-psabi" } */ + +#include "pr110265-1.h" +#include "pr110265-2.h" + +/* { dg-final { scan-assembler-times {vredand\.vs\s+v[0-9]+,\s*v[0-9]+,\s*= v[0-9]+} 4 } } */ +/* { dg-final { scan-assembler-times {vredmax\.vs\s+v[0-9]+,\s*v[0-9]+,\s*= v[0-9]+} 3 } } */ +/* { dg-final { scan-assembler-times {vredmaxu\.vs\s+v[0-9]+,\s*v[0-9]+,\s= *v[0-9]+} 4 } } */ +/* { dg-final { scan-assembler-times {vredmin\.vs\s+v[0-9]+,\s*v[0-9]+,\s*= v[0-9]+} 3 } } */ +/* { dg-final { scan-assembler-times {vredminu\.vs\s+v[0-9]+,\s*v[0-9]+,\s= *v[0-9]+} 4 } } */ +/* { dg-final { scan-assembler-times {vredor\.vs\s+v[0-9]+,\s*v[0-9]+,\s*v= [0-9]+} 4 } } */ +/* { dg-final { scan-assembler-times {vredsum\.vs\s+v[0-9]+,\s*v[0-9]+,\s*= v[0-9]+} 4 } } */ +/* { dg-final { scan-assembler-times {vredxor\.vs\s+v[0-9]+,\s*v[0-9]+,\s*= v[0-9]+} 4 } } */ -- 2.34.1 --_000_MW5PR11MB59084FA922B26B98F0A52FB2A958AMW5PR11MB5908namp_--