From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04on2084.outbound.protection.outlook.com [40.107.6.84]) by sourceware.org (Postfix) with ESMTPS id 53A543858D33 for ; Thu, 27 Apr 2023 14:25:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 53A543858D33 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=juJZjeMauN2gNE7IAuVBZ7dG8msLED/VreS5N9IXWao=; b=ogHNTacazSsx82fAPFBgn00DqFv0hI0e28c9c8TLrb17yTFk09eM31zPLmDmIyWNDlrn0gMk5g2dvsN96W+K9quWkwo1HIGUtw4BQtMMJMoSxd5lqhhSV3yRV0rFf7IrkAo92U7iV98ArDq2N6TpCX0gG9ChW02fQyTvLCJEDRk= Received: from AM6P191CA0074.EURP191.PROD.OUTLOOK.COM (2603:10a6:209:8a::15) by DB4PR08MB9238.eurprd08.prod.outlook.com (2603:10a6:10:3fa::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.33; Thu, 27 Apr 2023 14:25:49 +0000 Received: from AM7EUR03FT061.eop-EUR03.prod.protection.outlook.com (2603:10a6:209:8a:cafe::b5) by AM6P191CA0074.outlook.office365.com (2603:10a6:209:8a::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6340.22 via Frontend Transport; Thu, 27 Apr 2023 14:25:49 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by AM7EUR03FT061.mail.protection.outlook.com (100.127.140.72) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6340.22 via Frontend Transport; Thu, 27 Apr 2023 14:25:48 +0000 Received: ("Tessian outbound 3570909035da:v136"); Thu, 27 Apr 2023 14:25:48 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 6d159efaf2e80ca5 X-CR-MTA-TID: 64aa7808 Received: from 5693549a8195.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 31E3B9B2-92C5-4D59-B660-E6EF2B749FA0.1; Thu, 27 Apr 2023 14:25:42 +0000 Received: from EUR04-DB3-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 5693549a8195.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Thu, 27 Apr 2023 14:25:42 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dmbx26qSeKIEye6Eg07xNu4tTkoOZbiMxbm/hfvvmXMbZIi3+7eDRlA8h3u77U4O8DCqX9sImk7cDDCX8wFmiT6CTUuSusTEWQGFh78Dla8UKOg9BHDmO2GMGT2iUmuqWDmFIeGmizwT4V1lVYXG6v2UaiJ7Wo0LhSiddeBrIPELM4PTD+g0JoQ9ZBQiyrgGAhX2zqdenwUUGQcIGzi01J3PYvfm5EG7VlXL43LSGQPVe10C1OjpStDHiVufRgQOZUvF8hnfwivBq6FDLkfxvRnpyFd1Uoy7XrGKVKlysPw/r+avMbRIOBWPBkwdzy1XlsLlO4wuPRG1IxBMEZKlRg== 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=juJZjeMauN2gNE7IAuVBZ7dG8msLED/VreS5N9IXWao=; b=RQUNeQTtuHD0IRsAaxOMNYUie5J+YR5X1EbI/l54NRNOX2HGSBwR2yZA6WVNwZ/FV2OQMPF4CxdS84Q1EWmaytMKh1zF8trlRr40P9Ipdj4QoF3PyPi8pUqWh9EyUtvaxtIUcsB1PMSsEm+/aCJ1zgyK8n586zBlpoi86s+6CN+bYi4y7VAbfrM2hBJ+oyCs0rEaReX8nZ2Signll6fyjwsh1bSzXfNNMsBuV5aTxsiEUpvddFqIkhfIOtE2lkRuVK8mVBI3hm0jdMAP+fz3nwEL9n6LUKuceal2tTAVJb6YibzqqdBIEhgKLp+h0/sB4jwBSHE5hVghEN+/Yz1BsA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 40.67.248.234) smtp.rcpttodomain=gcc.gnu.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=juJZjeMauN2gNE7IAuVBZ7dG8msLED/VreS5N9IXWao=; b=ogHNTacazSsx82fAPFBgn00DqFv0hI0e28c9c8TLrb17yTFk09eM31zPLmDmIyWNDlrn0gMk5g2dvsN96W+K9quWkwo1HIGUtw4BQtMMJMoSxd5lqhhSV3yRV0rFf7IrkAo92U7iV98ArDq2N6TpCX0gG9ChW02fQyTvLCJEDRk= Received: from DB6PR0201CA0022.eurprd02.prod.outlook.com (2603:10a6:4:3f::32) by GV2PR08MB9278.eurprd08.prod.outlook.com (2603:10a6:150:d9::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.34; Thu, 27 Apr 2023 14:25:39 +0000 Received: from DBAEUR03FT024.eop-EUR03.prod.protection.outlook.com (2603:10a6:4:3f:cafe::b7) by DB6PR0201CA0022.outlook.office365.com (2603:10a6:4:3f::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.33 via Frontend Transport; Thu, 27 Apr 2023 14:25:39 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234) smtp.mailfrom=arm.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 40.67.248.234 as permitted sender) receiver=protection.outlook.com; client-ip=40.67.248.234; helo=nebula.arm.com; pr=C Received: from nebula.arm.com (40.67.248.234) by DBAEUR03FT024.mail.protection.outlook.com (100.127.142.163) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6340.22 via Frontend Transport; Thu, 27 Apr 2023 14:25:39 +0000 Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX04.Arm.com (10.251.24.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Thu, 27 Apr 2023 14:25:38 +0000 Received: from e125768 (10.2.78.50) by mail.arm.com (10.251.24.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23 via Frontend Transport; Thu, 27 Apr 2023 14:25:38 +0000 Date: Thu, 27 Apr 2023 15:25:38 +0100 Message-ID: From: "Victor L. Do Nascimento" To: CC: Subject: Ping: [PATCH][ARM] MVE: Implementing auto-vectorized array * scalar instructions MIME-Version: 1.0 Content-Type: text/plain X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: DBAEUR03FT024:EE_|GV2PR08MB9278:EE_|AM7EUR03FT061:EE_|DB4PR08MB9238:EE_ X-MS-Office365-Filtering-Correlation-Id: 5ca23af4-c7c6-4f9a-354e-08db472b4c34 x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: 5naISVb5JDfMu0PReWZ1j0sPnvd5nZ8cWe0HJdNrai0gsl7ToE7qIKiKFlo0hWb4ERiFpan/u2JwRBRKvA6T6+sbaPPUU6yzwkqZAb9odET2v/iJS4AwC1QXkT0lXJf64gNYwqjuzodLa6FnnLAYlpYlqygrsAmZxtU9kvzliNwQ3Zb0XnSNAQkK5O4zBmM0lx6t9KqrCk6yOVN2KMnGDvTEAnoCs1WMWBvq2KWfvduXxRX9h5YU/xdpd0ARRFVp+WZ9ScbedoQFue6LznhY0ElkvDS0sCY28l/6Ha8ilVsw/GFYSchW5LcOusXtdKsYQZqeKB1Mu165QXeicO9w56UTZJTkEK0vbJSwxQ34SJH+VwLRkX6ruBV/M11gB8jlZO2KYHmcQiB9uqWVG+6GWxXsj71cUPVMHR7/ZHtR+yMMGsXhpuiSU4g4Nq23Fy6E3wyb3eQQokS/7jigInUdHSwDYsxEDwMfwV3ce3BKEWNSpbkXIUrcbD9Zw7OAq0X1Lm+USDvqoiAWf5kPoAaaEqoy1YCqE600aCwrxXYaZtO949FWeun+PQYznPk2avnm9TdTYuLTaE7MZlzG7zeUZ2lgGmb18fZs9gTokoPlTB9M3wRnzOJLAETZh8vDMxdBVnJC9JLxru9MlmBxeYlz43iRPlBKnI5ErE/plK4CnlqVKsdcIyWx3iQWCpG32AVGJyouisgy0fgdch3UOKOb9zd5qcbCBo6ekYJisG0Syfo8mFQKuw/WgPwE7UJl/+5S7rOO4iwOECzGOd0wPA2jAi1xPCS6M03TkXFFXZuuThs= X-Forefront-Antispam-Report-Untrusted: CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230028)(4636009)(136003)(376002)(396003)(346002)(39860400002)(451199021)(46966006)(36840700001)(40470700004)(478600001)(34020700004)(40460700003)(5660300002)(8676002)(8936002)(86362001)(36756003)(2906002)(82310400005)(40480700001)(316002)(82740400003)(6916009)(4326008)(70586007)(41300700001)(356005)(81166007)(966005)(336012)(426003)(186003)(84970400001)(70206006)(53546011)(2616005)(26005)(36860700001)(83380400001)(47076005)(36900700001);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR08MB9278 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM7EUR03FT061.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 2472810e-20a2-4aeb-35bb-08db472b464e X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: OUGmcsJL0YSdhRnXZQ8W7+Jrd/YSXfIfnK/6XuCwwsk4BvTfQ/lvDSDvQrq8kZ3dVBAfXDEXOw3BJYMdAmxhXJ2pGqlLDgf/CvdydicRrVchPZPrSVww9zEMqwr/TLuGdWfX+4mDbws+enxCV9bzmsrqgqXphoZJ7GeLXqTBBcA2vhOSTHwMPYtl6TCVxZgav7xo2RSDnDSOhT+ReDynYSmUdHXSYDJmn74+S9GO8NXzk9eY09hVFIVOONI+yelMKGiSPyQ4e24Wl24CYGpCsnWMlr61ftBnypzreLz9NDmOR/EoHpmp8tzuk7vQ454E4T6ZU1xWgVmkPwouL899VVMRde/T2w/jKUmIg+Swn9picFvknRxdHUzs8nyujSHiaJTSK2O5GnPSqxPXX2V8w3ogP8H6WqEPrakL0z2+hf+7WJL7sxRRS6hwshm4D1F4Y7EiJQ9aQoOK0gY5orGSjAmKu7qHdvnaKVBU6gk7xdXjCsa19yEtvsFkyoh1xm/3nxGjd3Hf9wG4R9GQc8cG6lhOh2DXbmXNZb98hMRo44p048N8KyyOKMBbMzJ7nhj253R4tpOZS3dlSjt2jVla5jcLN2pofuEfoQTYkqa3Yp5hpe3roZlbLrdDR/SBEidK5WO870Tm2qvLx5wubLtkNnmqeFDqSiu9wN4RI7ScqZRN5v2a/zk0zdhQpXgJtdixGdVdH6hMfrM58hPCIHcHvEfP4AyNACWijQv3edsfDhGXOBuYmWWSmOKfiAjgyLkycLytIZRH1oWjtvUFKv3ziw== X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230028)(4636009)(396003)(136003)(376002)(346002)(39850400004)(451199021)(40470700004)(36840700001)(46966006)(966005)(53546011)(26005)(426003)(40480700001)(2616005)(336012)(36860700001)(83380400001)(34020700004)(36756003)(47076005)(82740400003)(186003)(40460700003)(81166007)(70206006)(86362001)(84970400001)(70586007)(6916009)(478600001)(8676002)(8936002)(5660300002)(82310400005)(2906002)(41300700001)(4326008)(316002);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Apr 2023 14:25:48.9931 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5ca23af4-c7c6-4f9a-354e-08db472b4c34 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: AM7EUR03FT061.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB4PR08MB9238 X-Spam-Status: No, score=-12.8 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE,UNPARSEABLE_RELAY 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: May I please ping this one?? https://gcc.gnu.org/pipermail/gcc-patches/2023-February/612152.html Many Thanks! Victor On 2/16/23 15:48, Victor L. Do Nascimento wrote: > Hi all, > > The back-end pattern for mapping the auto-vectorized representation of > vector * scalar to to machine instruction VMUL was missing, and > multiple instructions were needed to reproduce this behavior as a > result of failed RTL pattern match in combine pass. > > RTL patterns were introduced to reproduce the behavior of the > intrinsics vmulq_n_ and vmulq_n_f. > > In the case of literal constants, an intermediate instruction was > added in to initial RTL expansion to ensure a general-purpose register > was allocated to store the constant, which could then be be extracted > from the constant vector. > > For the function > > void test_vmulimm_s32x4 (int32_t * __restrict__ dest, int32_t *a) > { > int i; > for (i=0; i<4; i++) { > dest[i] = a[i] * 5; > } > } > > > The GIMPLE -> RTL expansion is modified to produce: > (set (reg:SI 119) > (const_int 5 [0x5])) > (set (reg:V4SI 118) > (mult:V4SI (vec_duplicate:V4SI (reg:SI 119)) > (reg:V4SI 117))) > > instead of: > (set (reg:V4SI 119) > (const_vector:V4SI [ > (const_int 5 [0x5]) repeated x4 > ])) > (set (reg:V4SI 118) > (mult:V4SI (reg:V4SI 117) > (reg:V4SI 119))) > > The end assembly for the above function introduces the emission of the following insn: > vmul.i32 q3, q3, r3 > > as opposed to: > vmul.i32 q3, q3, q2 > > All tests in gcc.target/arm/simd/mve-vmul-scalar-1.c now pass. > > Added new RTL templates, amended unit test and checked for regressions on arm-none-eabi. > > Thanks, > Victor > > gcc: > * gcc/config/arm/arm.cc (neon_vdup_constant): static keyword > removed. > * gcc/config/arm/arm-protos.h (neon_vdup_constant): prototype > added. > * gcc/config/arm/mve.md (@mve_vmulq_n_2): New. > * gcc/config/arm/predicates.md (reg_or_me_replicated_const_operand): > New. > * gcc/config/arm/vec-common.md (mul3): Modify to use > `reg_or_me_replicated_const_operand'. > > testsuite: > * gcc.target/arm/simd/mve-vmul-scalar-1.c: Corrected typo, > xfails removed. > --- > gcc/config/arm/arm-protos.h | 1 + > gcc/config/arm/arm.cc | 2 +- > gcc/config/arm/mve.md | 11 +++++++++++ > gcc/config/arm/predicates.md | 8 ++++++++ > gcc/config/arm/vec-common.md | 14 ++++++++++++-- > .../gcc.target/arm/simd/mve-vmul-scalar-1.c | 13 ++++++------- > 6 files changed, 39 insertions(+), 10 deletions(-) > > diff --git a/gcc/config/arm/arm-protos.h b/gcc/config/arm/arm-protos.h > index aea472bfbb9..4cf9fb00e01 100644 > --- a/gcc/config/arm/arm-protos.h > +++ b/gcc/config/arm/arm-protos.h > @@ -199,6 +199,7 @@ extern rtx arm_load_tp (rtx); > extern bool arm_coproc_builtin_available (enum unspecv); > extern bool arm_coproc_ldc_stc_legitimate_address (rtx); > extern rtx arm_stack_protect_tls_canary_mem (bool); > +extern rtx neon_vdup_constant (rtx, bool); > > > #if defined TREE_CODE > diff --git a/gcc/config/arm/arm.cc b/gcc/config/arm/arm.cc > index efc48349dd3..7d9d265b0a7 100644 > --- a/gcc/config/arm/arm.cc > +++ b/gcc/config/arm/arm.cc > @@ -13301,7 +13301,7 @@ neon_pairwise_reduce (rtx op0, rtx op1, machine_mode mode, > If this is the case, and GENERATE is set, we also generate > instructions to do this and return an RTX to assign to the register. */ > > -static rtx > +rtx > neon_vdup_constant (rtx vals, bool generate) > { > machine_mode mode = GET_MODE (vals); > diff --git a/gcc/config/arm/mve.md b/gcc/config/arm/mve.md > index 555ad1b66c8..806c24e33aa 100644 > --- a/gcc/config/arm/mve.md > +++ b/gcc/config/arm/mve.md > @@ -1376,6 +1376,17 @@ > [(set_attr "type" "mve_move") > ]) > > +(define_insn "@mve_vmulq_n_2" > + [ > + (set (match_operand:MVE_VLD_ST 0 "s_register_operand" "=w") > + (mult:MVE_VLD_ST (vec_duplicate:MVE_VLD_ST (match_operand: 1 "s_register_operand" "r")) > + (match_operand:MVE_VLD_ST 2 "s_register_operand" "w"))) > + ] > + "TARGET_HAVE_MVE" > + "vmul.%#\t%q0, %q2, %r1" > + [(set_attr "type" "mve_move") > +]) > + > ;; > ;; [vmulq_u, vmulq_s]) > ;; > diff --git a/gcc/config/arm/predicates.md b/gcc/config/arm/predicates.md > index 3139750c606..31eadfa2d3b 100644 > --- a/gcc/config/arm/predicates.md > +++ b/gcc/config/arm/predicates.md > @@ -113,6 +113,14 @@ > && neon_immediate_valid_for_logic (op, mode, 1, NULL, NULL)); > }) > > +(define_predicate "reg_or_mve_replicated_const_operand" > + (if_then_else (and (match_test "TARGET_HAVE_MVE") > + (match_code "const_vector") > + (match_test "const_vec_duplicate_p (op)")) > + (match_operand 0 "immediate_operand") > + (match_operand 0 "s_register_operand")) > +) > + > (define_predicate "neon_inv_logic_op2" > (ior (match_operand 0 "imm_for_neon_inv_logic_operand") > (match_operand 0 "s_register_operand"))) > diff --git a/gcc/config/arm/vec-common.md b/gcc/config/arm/vec-common.md > index f06df4db636..17b67c214b4 100644 > --- a/gcc/config/arm/vec-common.md > +++ b/gcc/config/arm/vec-common.md > @@ -102,12 +102,22 @@ > (define_expand "mul3" > [(set (match_operand:VDQWH 0 "s_register_operand") > (mult:VDQWH (match_operand:VDQWH 1 "s_register_operand") > - (match_operand:VDQWH 2 "s_register_operand")))] > + (match_operand:VDQWH 2 "reg_or_mve_replicated_const_operand")))] > "ARM_HAVE__ARITH > && (!TARGET_REALLY_IWMMXT > || mode == V4HImode > || mode == V2SImode)" > -) > +{ > + if ((GET_CODE (operands[2]) == CONST_VECTOR) && can_create_pseudo_p () > + && (VALID_MVE_SI_MODE (mode) || VALID_MVE_SF_MODE (mode))) > + { > + rtx tmp = gen_reg_rtx (mode); > + emit_move_insn (tmp, neon_vdup_constant (operands[2], 0)); > + emit_insn (maybe_gen_mve_vmulq_n_2 (mode, operands[0], tmp, > + operands[1])); > + DONE; > + } > +}) > > (define_expand "smin3" > [(set (match_operand:VALLW 0 "s_register_operand") > diff --git a/gcc/testsuite/gcc.target/arm/simd/mve-vmul-scalar-1.c b/gcc/testsuite/gcc.target/arm/simd/mve-vmul-scalar-1.c > index 22be452e8d9..0736847a96d 100644 > --- a/gcc/testsuite/gcc.target/arm/simd/mve-vmul-scalar-1.c > +++ b/gcc/testsuite/gcc.target/arm/simd/mve-vmul-scalar-1.c > @@ -24,9 +24,9 @@ FUNC_IMM(u, uint, 8, 16, *, vmulimm) > > /* For the moment we do not select the T2 vmul variant operating on a scalar > final argument. */ > -/* { dg-final { scan-assembler-times {vmul\.i32\tq[0-9]+, q[0-9]+, r[0-9]+} 2 { xfail *-*-* } } } */ > -/* { dg-final { scan-assembler-times {vmul\.i16\tq[0-9]+, q[0-9]+, r[0-9]+} 2 { xfail *-*-* } } } */ > -/* { dg-final { scan-assembler-times {vmul\.i8\tq[0-9]+, q[0-9]+, r[0-9]+} 2 { xfail *-*-* } } } */ > +/* { dg-final { scan-assembler-times {vmul\.i32\tq[0-9]+, q[0-9]+, r[0-9]+} 2 } } */ > +/* { dg-final { scan-assembler-times {vmul\.i16\tq[0-9]+, q[0-9]+, r[0-9]+} 2 } } */ > +/* { dg-final { scan-assembler-times {vmul\.i8\tq[0-9]+, q[0-9]+, r[0-9]+} 2 } } */ > > void test_vmul_f32 (float * dest, float * a, float * b) { > int i; > @@ -40,16 +40,15 @@ void test_vmulimm_f32 (float * dest, float * a) { > dest[i] = a[i] * 5.0; > } > } > -/* { dg-final { scan-assembler-times {vmul\.f32\tq[0-9]+, q[0-9]+, r[0-9]+} 2 { xfail *-*-* } } } */ > +/* { dg-final { scan-assembler-times {vmul\.f32\tq[0-9]+, q[0-9]+, r[0-9]+} 2 } } */ > > void test_vmul_f16 (__fp16 * dest, __fp16 * a, __fp16 * b) { > int i; > for (i=0; i<8; i++) { > - dest[i] = a[i] * b[i]; > + dest[i] = a[i] * b[1]; > } > } > > -/* Note that dest[i] = a[i] * 5.0f16 is not vectorized. */ > void test_vmulimm_f16 (__fp16 * dest, __fp16 * a) { > int i; > __fp16 b = 5.0f16; > @@ -57,4 +56,4 @@ void test_vmulimm_f16 (__fp16 * dest, __fp16 * a) { > dest[i] = a[i] * b; > } > } > -/* { dg-final { scan-assembler-times {vmul\.f16\tq[0-9]+, q[0-9]+, r[0-9]+} 2 { xfail *-*-* } } } */ > +/* { dg-final { scan-assembler-times {vmul\.f16\tq[0-9]+, q[0-9]+, r[0-9]+} 2 } } */