From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 61593 invoked by alias); 9 Jun 2017 14:16:31 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 60666 invoked by uid 89); 9 Jun 2017 14:16:28 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-23.7 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 spammy=fell, tough, submissions X-HELO: EUR01-HE1-obe.outbound.protection.outlook.com Received: from mail-he1eur01on0082.outbound.protection.outlook.com (HELO EUR01-HE1-obe.outbound.protection.outlook.com) (104.47.0.82) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 09 Jun 2017 14:16:24 +0000 Received: from VI1PR08CA0204.eurprd08.prod.outlook.com (2603:10a6:800:d2::34) by DB4PR08MB0095.eurprd08.prod.outlook.com (2a01:111:e400:985d::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1157.12; Fri, 9 Jun 2017 14:16:24 +0000 Received: from DB5EUR03FT049.eop-EUR03.prod.protection.outlook.com (2a01:111:f400:7e0a::201) by VI1PR08CA0204.outlook.office365.com (2603:10a6:800:d2::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1143.10 via Frontend Transport; Fri, 9 Jun 2017 14:16:24 +0000 Authentication-Results: spf=pass (sender IP is 217.140.96.140) smtp.mailfrom=arm.com; cavium.com; dkim=none (message not signed) header.d=none;cavium.com; dmarc=bestguesspass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 217.140.96.140 as permitted sender) receiver=protection.outlook.com; client-ip=217.140.96.140; helo=nebula.arm.com; Received: from nebula.arm.com (217.140.96.140) by DB5EUR03FT049.mail.protection.outlook.com (10.152.20.191) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.1143.11 via Frontend Transport; Fri, 9 Jun 2017 14:16:23 +0000 Received: from arm.com (10.1.2.79) by mail.arm.com (10.1.105.66) with Microsoft SMTP Server id 14.3.294.0; Fri, 9 Jun 2017 15:16:05 +0100 Date: Fri, 09 Jun 2017 14:16:00 -0000 From: James Greenhalgh To: "Hurugalawadi, Naveen" CC: Kyrill Tkachov , "gcc-patches@gcc.gnu.org" , "Pinski, Andrew" , Marcus Shawcroft , Richard Earnshaw , Subject: Re: [PATCH] [AArch64] PR target/71663 Improve Vector Initializtion Message-ID: <20170609141605.GC1555@arm.com> References: <58FF0803.5070007@foss.arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:217.140.96.140;IPV:CAL;SCL:-1;CTRY:GB;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(39850400002)(39450400003)(39410400002)(39400400002)(39840400002)(39860400002)(2980300002)(438002)(189002)(24454002)(199003)(51914003)(5660300001)(93886004)(55016002)(47776003)(23726003)(7696004)(36756003)(6286002)(54906002)(356003)(2906002)(2950100002)(189998001)(1076002)(6916009)(478600001)(72206003)(229853002)(97756001)(50986999)(4326008)(76176999)(54356999)(8676002)(6246003)(305945005)(46406003)(104016004)(86362001)(77096006)(33656002)(8936002)(110136004)(38730400002)(18370500001);DIR:OUT;SFP:1101;SCL:1;SRVR:DB4PR08MB0095;H:nebula.arm.com;FPR:;SPF:Pass;MLV:sfv;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;DB5EUR03FT049;1:iG9BiHynuWySjkADkLKQsIz9j8QKlp8IplT0WByFvD56pNFvytexm2ejtLVJp7lsEjtAWwr/QYTYOYy6ymhxmV4kOFnacjX3Bt5PgB9uQhT150cRVbtWGGw4YNR7hL4BfTpWSc/7FAhV+8Iv5asHo9UTvXhO075hfcWDDkwGlAL0xPIvIDYUknk/U8Pt70pl1GhaN5GJGM5TH30q9sKQ9a/VrDDuTVqjv755VFNx2224TwautdtKF172fVskn5bYRi8dvL7B5rRZLJF/7Xmu6vI1PCgDt/G22dd6EkZDOrtlUaZuHg0oW+gNllyN7R6fGQJzCL+Am7LkEP4TGb0v6Sof//CVTNiQC8UsP94ZEFtHDJ+8OEZ/beMzByQFduehV791vQckn4lU1mbzTIPaOWsRZlhAqtCbd19knSWDVUTgXP44zpEeJ3kcCzmf7Zsum+bNBCuOd3AkHeqNBIgfinSJK3a/bwoBGAG2sgT4O9XQ41RcptJ3ixEfHxdSwLv7pY9jzLZTGKQlq38J7ghcnV5DJ6j/nOchZyAbB+wP0K5qTTz18YJyZY0LyqYFm114 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB4PR08MB0095: X-MS-Office365-Filtering-Correlation-Id: a4680c17-b551-475a-27de-08d4af421bf2 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(8251501002)(2017030254075)(201703131423075)(201703031133081);SRVR:DB4PR08MB0095; X-Microsoft-Exchange-Diagnostics: 1;DB4PR08MB0095;3:pG8w9Mt2481Zz5ypwMIypSUymaog6xmgffU9uxk/632apgSx1JnTTjW/Vlk2QC7OgQKliV3Ee6xbIvVMi8T93qn/bgmLL+dYu+NbPBYFhGKO3r38V/Mz8eSLBp6ih2gX9CHNOBYfZ3p3cOJ4ut+5i3T5/FQKBCuqbo7OUMCqhWCrpHFW9zmWsgcWNNMqXiHCBd5ujJGZZnaCUfdS+iK6xG1hrT4UOrw/Yq62VZVl6ohJJ9esDceboyu7tbg1gmk0545p2zeRf2bxYfp2jDbO1T5PlakxdLTH2sQoXJn+Jh4f6OpYpdWOwA5q6gNUzt9Y8OJ05XIhW+pIqZmtVlTYB1YvxssOKOUsIFd8KsG2+2dsc+X1eZpxXC7GbnNbrtk9GEbzeo3tlXWQRmh81Ko8+ILa5ggS3Q+7Dib7WFOyw5yrSyX0kcQy0KLt7bdfoTgF+o42EpDeNnFSKhCnalvmi0OIE44rO4mMD2Aq3UH6SvANf3jpjzMPrtOTtJXRV7iN X-Microsoft-Exchange-Diagnostics: 1;DB4PR08MB0095;25:GTRD+JF/ARE9KlIyI4Z7cRKfibyBd2vT3c6lDuYsbm94WOK89UmbjWf3YUHl9Q6QqyPxWOYI5MfUiLAfrBnUZOiWgrf/QeTaz1vlS8Cs3tRzp8rb1E2S7gSaPu4I4i3c2mX/+YvEJF2aKbe+ZI+nPDgt+GcfuicVDzmODf90ih97xDjCUIyregA4C3GDIPzZISltgg9SXNRF5WJHN1X3o62ixGJQq+JgQ6OFotLpbC/Y8b1t86Bf64N7EtLD52vgs+vJBzkwwLPJrSWEV2/9MPt8je3SIcMoY+RmSa8JiuyWTP95pYacWc2ClQ+7Um2PZqCoRJZBp8emb83s73P114YzU3poASu+RJL8cFyDmSN8tsctCAowJS+PqXRhycpR2x8CGpbRRfxM5Txh8vUCY1zsmznVhvfdMK5Lz1QsajOGwEjvvuxHFXv94xoMGiRN/PDas2U7TDIT17+XAv4B5fKFX0x6Bx/4H3dBUuuk9ns=;31:nzUlFdkSsy/fiPnm1PRpYLse7/4RvNOkvjMkWcgfrISWuBNp1GOIezqEu83PnY7BgVFfVYHwKWfcrqR0P3DgYvZ+6nrOlkB5MTEcG6rd17sA8zt3Jo97XMelysyS4OciYbOSvmChm9fRyfPA3XKRLvEjtBKhT+prO7PcgOAL61WtYtaIsA+CAPNqvI0/Ms8WdnmpMPOekcV350VUrQoow2ya1n9rGzh1U3soyDj4waDQM+PvL/HyKnXp3KCSzbarXbE+oS7qnYdJsPGTq2lu9A== NoDisclaimer: True X-Microsoft-Exchange-Diagnostics: 1;DB4PR08MB0095;20:n36/RGWbxMouekM6hQq5W8YZVdlN1i2mKleP4BH88FI9q8t5EFQ6jILj5I7oSRTD8MEAmXnRhExoE8EOiho0VyqSbWJHehl2xtIRA4a8wKRGvDqT/iwpK4S8uocIAMah4dr8W6IFshDJwQO2nQII3B+hjG0tpe47PC0cSaClWHBeiTM4nR5ORcGjCGNTmZBeDyZCSzDxRxhR2LR+D7Q4yF3nit4XiBmc8PAiDoAz+MApHlSPJgbjIUoMRwTSCDzh X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(131327999870524); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(5005006)(8121501046)(13013025)(13021025)(3002001)(10201501046)(100000703101)(100105400095)(93006095)(93004095)(6055026)(6041248)(20161123564025)(20161123562025)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(20161123558100)(6072148)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:DB4PR08MB0095;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:DB4PR08MB0095; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DB4PR08MB0095;4:wLpg9+yOpjfybBYAJiCDUF827/LCUnf3dveehAWUqA?= =?us-ascii?Q?shTublsA7aT6CkgjN6FEKjLJtbPKYyP6zj9QUWW7sizcKZOs8iTarsfsFqNb?= =?us-ascii?Q?NLEmmgQNlqMpylzVqpLIPnus6NSXe0uM/3OxCIzRD17w9b+kHYogyTTnrJSe?= =?us-ascii?Q?cVS27bxjtT930AX76UgiiCA2HlpvnBKNAE1tTLnWSl0o94xr9Mek5fh/Lx2V?= =?us-ascii?Q?v21TdmH4vxNMIheBcw/Uoh3FkRwHbk5eHTDF+JRc2or1G7/l42Vt6qIuB4Xz?= =?us-ascii?Q?nYDkIwLWi2dZeM0ICoGE8ngU726TX0dF1KN7Qff4ymkggxZ4d6bWkjl4wKW1?= =?us-ascii?Q?vLSca/qP2NxDUrn25cvIa7sDdpVhK/QLwxpod5ux7Q9HjIGQIAQVIBedTfZc?= =?us-ascii?Q?VbhX7oJ6ZY98vLLwfh8HhsF7f9rmbn6Z3c84ek7n1RHiWOsh9q0oB+dtXV+w?= =?us-ascii?Q?r+FTxDTcuK8f9CDG5GMrVTz0OZ/XYauPqKJctzQ4OkY3q6EMYHm6F/ntgI9e?= =?us-ascii?Q?eJ5SBOWjidAiuFe4RZY8d59nd9emN7PZ8XrHXMqrv7mv6co+bSbSUJ92HdNB?= =?us-ascii?Q?ldG/GML6Rc6Rm/ZH9VWo7diAXAPxYrHlr5pumAlc7jZTmuZYeUgt8CkySfTy?= =?us-ascii?Q?/+iydnDeVNHBBLve5Z4ecBltpsE/GhKR5tTabS1rXUrIQVpe6N1f3iSAMpeK?= =?us-ascii?Q?0EwNCq3FpbJg7H0NkH0XsNlPX1uvxRKy5msrFfHvowLA5W/dhzw2GGoqp2ng?= =?us-ascii?Q?WVtUKqmlxjm82BUlu+/M31VxdX5Jj+xoW1pdrRdotTZ7xKeD2sO/KtR58EjU?= =?us-ascii?Q?mVcZUKUtrpSl5VtNZtyB1QHNCx4K2sn7ZnECqiZxz3VVo4LgU9Xpk9X3Xo3+?= =?us-ascii?Q?lil9smY8qMpmVPVV3quLASpnMI8rGXTd3I7AbfdNxgici8bawIgwqzhahYAU?= =?us-ascii?Q?0Zx6N5+WIEayHxxiKc0Y6WdeyZMG3bXP/SHPp9mCWMdKnb6wbNpf/pUMKv4y?= =?us-ascii?Q?V97mhDdmQ+gdv7f50onE/WMYSvWNAOHNIsuBKeuzHggfi+uoouZHn0NVH/r/?= =?us-ascii?Q?UH/SGh4mn9Ga5anqIhg9pNes2bRrWWBxLHHrrPpaATyZp98RTHS5HTuPFa/S?= =?us-ascii?Q?U/0wtuHC1CsV38zCbGk+YlvSoOwj0HkFhuYa1IGRhufZTLyhvh9Ker+79xMZ?= =?us-ascii?Q?SSFH7FuEhlpmvXmxQpuwmt3a13fAYf7mqgTUtM9pLVK+BKoyaTaYenwgHQIS?= =?us-ascii?Q?W6eRCGfiFmC3OsIPo=3D?= X-Forefront-PRVS: 03333C607F X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DB4PR08MB0095;23:gZnrpr9jRX7CM8C8CpTQUXgRzPp1sGVtRVFJo+eXd?= =?us-ascii?Q?MynRGhvbqr6lvGS0SE7xJDXywLippXGm7Oi55+/JeVXWswIVuyq6jbzvw5Tb?= =?us-ascii?Q?xxKZspqp8FMVMLUf1v+yOOUyh80260bITCEOpu42IeOp5JYRgAY8eiOu1DwA?= =?us-ascii?Q?7sIsk40zv6o4V73ivQKqsJ5q05BRBYCtXv5/zpA6zG8AYYhRbQosnyS9SqnH?= =?us-ascii?Q?My4BD/HFoWxrbG5vipLaXT4cjT5kTeLUPOk2NoaZ9+6ID3UHi/o1M5v3P+Kt?= =?us-ascii?Q?P6wds7yF00FStoVXXROWwQm+F16yDdZnnQazEvBErbVsrJG4azny6N7zNgNc?= =?us-ascii?Q?RZ8zxV6ivwwlRZC9ULUBOXLh2nEL53qsBtnfysOmX48nqK4CiE+wRmRDxvRq?= =?us-ascii?Q?U9CEPK8BdwRo8l+Bqq+ul7v8hcyHLHVBzDgwtfv2AyOWrhVjpsohep7XksVU?= =?us-ascii?Q?/HTmV29GAb4LuraHiypmWarTLbwZQg/DHE4ap7Lb2ptq95HGmd/vv/ErFN6d?= =?us-ascii?Q?6xnTSraYsyQ+YbFxJvb7pgHa/MzDR+3pzaeSkB/2u7UX5MVjntSiCNjg1ZCJ?= =?us-ascii?Q?8x76SOHaAdhgYKPAiaNsYKbD0FqBQD1gORjh9jLk3XH1jzZdW/7EUhpgCsqh?= =?us-ascii?Q?Ew+uYZC6MPw8q15bRz8pUY9PtFPbLfCmbkO7n6cjGn1PPW24E1f2vxlDRzkX?= =?us-ascii?Q?yguxWhHY7HLKaJcjzFjofbMiuMZ3Ayoj8+gv6c3mZk49P8u0fGa5hOkCnPW6?= =?us-ascii?Q?F671jcJBrd9HZm7BvcQBBTn5IDR1QforBMdcLfrPZ/7lCYMdrOqSKT7VfMT1?= =?us-ascii?Q?3yXvw0b3RsWuw12lQVT28LEw6N1oqOwA2Ozl6WoWLLAuHnkzNMR4PGbidIxq?= =?us-ascii?Q?rYHK1WfO12+ncJAQWugkFPr8aShCH9sGQwZqHDsCed8eEATdqUoZxCJy3TyZ?= =?us-ascii?Q?G6Rl6ScooUjC/qEqcczuXm90dS1qGuhSowqaJ6Cim0bW473Z2lXOidS9zfRH?= =?us-ascii?Q?Fg1As6gW5jzc3a8xM4Ctkd8J1sI9xnVBntFsPuaVZlElmDjJardoLFD9IlCo?= =?us-ascii?Q?O8rUxjh4dEjJWJjd4XJ19pNTheR4CamykvNqWM2mEFy9R8CTG54VlUwoAjX1?= =?us-ascii?Q?62VjktZ8rqVIf31G2XoLncSwbsTu7p2pcqorY/SurQ/vdcPBSaBosdAtDNwn?= =?us-ascii?Q?nODPYT9mskn9s8=3D?= X-Microsoft-Exchange-Diagnostics: 1;DB4PR08MB0095;6:7+3Q8En9GO2mCfh2kwPMMszruklFD+dQsVlQgisZPQDa45E9WRJ4rwK4PG2WsZrr3UgA7ejMRhpEPalKErzDbHD69170v9PoTByOlHncNhOo4EKM8uZm5D4sOWXPs7Oy7H/Y1xP50S3bvN26Yr02vqhBV8vpnMrmjI6c/e25nSvexApBXR4p3mgVm7rig4QUAukKMBzCYRLtXd3w2WY3UqXkPjXcGV8uTpCWjfDq/g2jbbpfX0fhhQ854IRxZy3zRouBBXn46GRQZtbR2IoqlKJUXBEPk++2EXQGNmUArRdJhXvZa+WUFo/ifI1px3Od3GfePZXqVXL6yE6AmjuE5HDwveFjwBS2Ux9YEsaiAnAX2pylt++gGCqRF3gHXDWcICSgsgwh3leUdZ4dVGkr0n0Jtw0H9fJtTrfWHR6bocNMp0zR41OeWNoozauJrRYOQruj4UyXRSLU7FQYWXcZ0pfrO4g1ci/KSEf4D7hXUBIiBYbJEprI9n3HRHRDn2O07SHnJwnCvB2NFOcNL24UBWDltRxfcFCM2yEijC2JnZ8= X-Microsoft-Exchange-Diagnostics: 1;DB4PR08MB0095;5:xiGS/SFdxflCCNj8PHbOZJA5px99vdtt+Ayei2bRZWqt1Hy0ZHYH31py26n72uW0jTaMRROtAxc0rGccGhLoPi1AmbZjh7DmVdh5fjQh5Tk+ec/86fCPWZmYq7ZzbbYvnQ2OMVaTBrvHXdI7oGbGLQn9lq+GCdjybxNzCjcLW1HAtX8zeGV632nD2z/eDzzRZilNKxYrR5B9Q0mI/1r/FBkfEgyBpCS8yHF1L1ThvyrcYWJwEYX26CGAE/Cr0C6TGcjuwTCpjJUid2789NPG2TcD4f5EhtHH1rYqLxCPv11YKPWojpRyOuzC0mNfFjAX+Y6sMPrhidknq9TwIgAI64vyb6hQlDe5ih1EnHb6CcHqp8Dhb2vnSOTLOKOVMDIIdBWBwsM2ZmeUCMVF0Aq34TGH8Z9Gq4xbyll9PlHkjxHkDTqpytaHTre07vkHUbDHnwNlR+F1s2W1ZFMrMb1XdWsNTGFMJZQCl/1sodaBpWrlXLqp61qA4xGdGBtFqmj5;24:4HqYNiXOcjXM5yOjRYKBj7ClbhnTzOlVgl2jmU+Z026eLdfLVT92GHnruQ5oejq1W29j+VwyBtLJSS2H/NtornpZQsX87VRpftenq1+36Qc= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB4PR08MB0095;7:6aiJsu2QS0bmXf/rRYanp62ozoO7JEFNfzMalChl9WKwaj5//0cYamAckFmFJzUlg8mH99HHr167K9Mldv0Mts7ojwAi9he/vf5jFpniRR9ECKZ/U38vvEGmmz9JNzXUTlSFnGeEXbcWrHdAMU5Fq4VRmJxLtBR+5QxHcr7ZRM+F91zYdHO3A8XGTHeW70bDxAgWDPA57L41FGfFHqEBAXo4QQvTxclvTT54e1LT4z+z4X9459vv7xsvrQYo/EQ6BSnY4mq/1vH03W+CEnwsqY82wEhNrCt7yF+bGuOlmFJJz8TtYJ+nzpFxHKH+T2tL2E2D+Rc1QI37EgjMDXQoOQ== X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2017 14:16:23.5269 (UTC) X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[217.140.96.140];Helo=[nebula.arm.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB4PR08MB0095 X-IsSubscribed: yes X-SW-Source: 2017-06/txt/msg00657.txt.bz2 On Wed, Apr 26, 2017 at 06:34:36AM +0000, Hurugalawadi, Naveen wrote: > Hi Kyrill, > > Thanks for the review and your comments. > > >> It would be useful if you expanded a bit on the approach used to > >> generate the improved codegen > > The patch creates a duplicate of most common element and tries to optimize > the insertion using dup for the element followed by insertions. > > Current code: > ============================================ > movi v2.4s, 0 > ins v2.s[0], v0.s[0] > ins v2.s[1], v1.s[0] > ins v2.s[2], v0.s[0] > orr v0.16b, v2.16b, v2.16b > ins v0.s[3], v3.s[0] > ret > ============================================ > > Code after the patch: > ============================================ > dup v0.4s, v0.s[0] > ins v0.s[1], v1.s[0] > ins v0.s[3], v3.s[0] > ret > ============================================ > > >> Some typos > > Modified as required > > >> worth adding a testcase where one of the vector elements appears more than > >> the others? > > Modified the testcase as required using common element. > > Please review the patch and let us know if its okay? > Bootstrapped and Regression tested on aarch64-thunder-linux. This patch fell through the cracks as it shows up in a reply chain with a few others. If you could try to keep one reply chain for each patch series you're submitting, that would make tracking the submissions much easier :-). > diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c > index 2e385c4..8747a23 100644 > --- a/gcc/config/aarch64/aarch64.c > +++ b/gcc/config/aarch64/aarch64.c > @@ -11671,11 +11671,54 @@ aarch64_expand_vector_init (rtx target, rtx vals) > aarch64_expand_vector_init (target, copy); > } > > - /* Insert the variable lanes directly. */ > - > enum insn_code icode = optab_handler (vec_set_optab, mode); > gcc_assert (icode != CODE_FOR_nothing); > > + /* If there are only variable elements, try to optimize > + the insertion using dup for the most common element > + followed by insertions. */ > + if (n_var == n_elts && n_elts <= 16) > + { > + int matches[16][2]; > + int nummatches = 0; > + memset (matches, 0, sizeof(matches)); Very minor, but what is wrong with: int matches[16][2] = {0}; Rather than the explicit memset? > + for(int i = 0; i < n_elts; i++) > + { > + for (int j = 0; j <= i; j++) > + { > + if (rtx_equal_p (XVECEXP (vals, 0, i), XVECEXP (vals, 0, j))) > + { > + matches[i][0] = j; > + matches[j][1]++; > + if (i != j) > + nummatches++; nummatches is unused. This search algorithm is tough to follow. A comment explaining that you will fill matches[*][0] with the earliest matching element, and matches[X][1] with the count of duplicate elements (if X is the earliest element which has duplicates). Would be useful to understand exactly what you're aiming for. Certainly it took me a while to understand that for: { a, b, c, b, b, d, c, e } matches would look like: { { 0, 1 }, { 1, 3 }, { 2. 2 }, { 1, 0 }, { 1, 0 }, { 5, 1 }, { 2, 0 }, { 7, 1 } } > + } > + } > + } > + int maxelement = 0; > + int maxv = 0; > + for (int i = 0; i < n_elts; i++) > + if (matches[i][1] > maxv) > + maxelement = i, maxv = matches[i][1]; Put braces round this and write it as two statements, or eliminate the use of maxv and use matches[i][1] > matches[maxelement][1], but don't use the comma operator like this please. > + /* Create a duplicate of the most common element. */ > + rtx x = copy_to_mode_reg (inner_mode, XVECEXP (vals, 0, maxelement)); > + aarch64_emit_move (target, gen_rtx_VEC_DUPLICATE (mode, x)); > + > + /* Insert the rest. */ > + for (int i = 0; i < n_elts; i++) > + { > + rtx x = XVECEXP (vals, 0, i); > + if (matches[i][0] == maxelement) > + continue; > + x = copy_to_mode_reg (inner_mode, x); > + emit_insn (GEN_FCN (icode) (target, x, GEN_INT (i))); > + } > + return; > + } > + > + /* Insert the variable lanes directly. */ This code would read better if you rearranged the cases. As it stands your code is added in the middle of a logical operation (deal with constant lanes, then deal with variable lanes). Move your new code above the part-variable case. > for (int i = 0; i < n_elts; i++) > { > rtx x = XVECEXP (vals, 0, i); > diff --git a/gcc/testsuite/gcc.target/aarch64/pr71663.c b/gcc/testsuite/gcc.target/aarch64/pr71663.c > new file mode 100644 > index 0000000..a043a21 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/aarch64/pr71663.c > @@ -0,0 +1,14 @@ > +/* { dg-do compile } */ > +/* { dg-options "-O2" } */ > + > +#define vector __attribute__((vector_size(16))) > + > +vector float combine (float a, float b, float c, float d) c is unused. > +{ > + return (vector float) { a, b, a, d }; > +} > + > +/* { dg-final { scan-assembler-not "movi\t" } } */ > +/* { dg-final { scan-assembler-not "orr\t" } } */ > +/* { dg-final { scan-assembler-times "ins\t" 2 } } */ > +/* { dg-final { scan-assembler-times "dup\t" 1 } } */