From patchwork Mon Jan 8 15:04:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vidya Praveen X-Patchwork-Id: 856851 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-470418-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="rhHqCjV1"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3zFdqR2ygLz9s7c for ; Tue, 9 Jan 2018 02:05:07 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:cc:subject:message-id:mime-version:content-type; q=dns; s=default; b=L8+AKEm42fPFe9HER+LAcI6P5Q9rWppOyP0ic/Mt6DXPn0BKTD 0eqRfNFcUSrMWx6ExqiDDY4/QyadAe0jhqpnRmMq/XG37sBaD/gRvbj2lq+uOr8q C5UG+P8VkD9f+MHqvDTXsi5P2fkCGCfDU5rGdk4mbrsrabRJzbKH+RWJE= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:cc:subject:message-id:mime-version:content-type; s= default; bh=ECYmao5UGr8lu/qtZgbeqKldvDA=; b=rhHqCjV1e2O3/Dce23gp TIYw4PbtLof0dVfl0FYGrwlD/qeZ5N1yCrJLxKjIxKd1S/4KppM+qES3YhJRP648 Z+RHjqJFsuvP3kYwfLGWzFVz+QdIF45HsQRik05UJCVnDOsCvQsVnslBDyDASXB5 DJwPTTrCGWmTkimQ9TUvCG4= Received: (qmail 43332 invoked by alias); 8 Jan 2018 15:04:59 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 43298 invoked by uid 89); 8 Jan 2018 15:04:58 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.3 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_NUMSUBJECT, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.2 spammy=forming X-HELO: EUR01-VE1-obe.outbound.protection.outlook.com Received: from mail-ve1eur01on0066.outbound.protection.outlook.com (HELO EUR01-VE1-obe.outbound.protection.outlook.com) (104.47.1.66) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 08 Jan 2018 15:04:56 +0000 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=vidyapraveen@arm.com; Received: from e109359-lin.cambridge.arm.com (217.140.96.140) by VI1PR0801MB1933.eurprd08.prod.outlook.com (2603:10a6:800:89::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.386.5; Mon, 8 Jan 2018 15:04:50 +0000 Date: Mon, 8 Jan 2018 15:04:47 +0000 From: Vidya Praveen To: gcc-patches@gcc.gnu.org Cc: james.greenhalgh@arm.com, richard.sandiford@linaro.org, nd@arm.com Subject: [PR83663] Revert r255946 Message-ID: <20180108150447.GB6881@e109359-lin.cambridge.arm.com> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-ClientProxiedBy: VI1PR0101CA0047.eurprd01.prod.exchangelabs.com (2603:10a6:800:1f::15) To VI1PR0801MB1933.eurprd08.prod.outlook.com (2603:10a6:800:89::19) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: fd4c3813-91de-4c15-2c49-08d556a92ac9 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(48565401081)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603307)(7153060)(49563074)(7193020); SRVR:VI1PR0801MB1933; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0801MB1933; 3:tMul0QQEm5iyKPLK886X0BeuZpxSqjxkzQyXS2Qm/HGeBGJAPLUMPPWhjNjuz3evGrBY7pKVegifSTR1eHxHPADyPg0X7s0mMVIIOJg0O1iU2gywxWvxP83qM8ZW9jBqlgT7h02+JZSe4McKRsQYhf6Jjoo1JfyDjmYoKLevxnkKd2D5TIli7E7O9RZ8HqMxo2hHBVEuTov/RZPNSSOUBM4GiGRTwR9virjIPCUgC0A2f/ZxKJG31IyMaNWSdQyg; 25:VI0Wbo2SGnV5CNGOnLY9b7iZ6E4GcNcqpzYnmvdAvtzsmSedCBru9xCJ+91lIs4kTA0U2Bc1os3gNWJLjXnKeLgbYDfpzxd0m7AJApxOQMli4/K+0M8H9apmuukFfbnkhxU2wwf/SsIlQagIFndNuuBeJvnK4tVxX2v9jgff95EhXRzsZ8s3TsFxphOBcZNi4yxnjC0NOP8GTvLl0cUok0GXN/7XUrhPGNEjL3sjnuFL7ioqyc3KQXAm2hNzjdYyXpAlUs7z3gb84bpM+B0ByJJTJ2XIYSx0ZQX7Db2a3tII3v5lUClBKk1D1pdSGU9tYRDVEIorlLZPu76IQbS1PA==; 31:bi8kvbyJtwSa/T0LQdKzD2XEcUSueihnhYKqc60UN0L6QiqukXRf9Eth0aAWTfV37Y2ltjk0YugLX5MohRCqrtlau5yk8xMQ7XaPgXx40rBkrz5+kiB+asor1bLrUfRrX08O5IpSMyPSceWkb5BBdn9IX+VKuMKxckPEG0xGHdVxW98/NpIzP/M6HySfNVkfxBqWJO2GSnvYaVC5XfmqFcAKM4lG6lMYMqhQFdyHmZY= X-MS-TrafficTypeDiagnostic: VI1PR0801MB1933: NoDisclaimer: True X-Microsoft-Exchange-Diagnostics: 1; VI1PR0801MB1933; 20:7Vr+rwCs7K8AROTsQwvGGz9XmnG7MJz8A5NRV86yFuRFGHpEKq1oEisHwAB9LkzOANt5honYVeFBtbYnsak5LoRagEZOUxxyk2QC0t9UMQemf0ehBkecbTVF+zrzhGZGxeFJO8Dmc3xEAw1uW7017R7ko1X6YJGox4YyXb4PDVI=; 4:qqVh02JJRRqlbzg9WQN6KF/CjGqZ22aaFu5S7uLi7RMeMdq8Bg1xFzwZrfxBGctbfNtZTfTrypuqFVyqIf8YDphzn3O2Q3y3/YETXnprofiM1XrDk0HJcv4DSe/hrjLNN8RurnhmRBh32TJwlwgnl18tzV7Nl0YnDMM7FCQKGzzd6KmQu0NfvfOJRsj09M/GVyZR043GHojWNoRuZ0L5U2pFLrNYO6DETBng0jUiBuLYS83M2WH028aqiwom4xIssQUNLNMXU4oM1PnU+inaKA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(102415395)(6040470)(2401047)(5005006)(8121501046)(93006095)(93001095)(10201501046)(3002001)(3231023)(944501075)(6055026)(6041268)(20161123562045)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(6072148)(201708071742011); SRVR:VI1PR0801MB1933; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:VI1PR0801MB1933; X-Forefront-PRVS: 054642504A X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(39380400002)(396003)(366004)(376002)(346002)(39860400002)(189003)(199004)(54534003)(16526018)(25786009)(58126008)(81156014)(8936002)(63394003)(86362001)(83506002)(106356001)(55016002)(5890100001)(2476003)(66066001)(16586007)(4610100001)(81166006)(6916009)(7696005)(53936002)(316002)(6666003)(2906002)(5660300001)(8676002)(52116002)(568964002)(44144004)(3846002)(2351001)(305945005)(97736004)(1076002)(59450400001)(68736007)(7736002)(105586002)(84326002)(33656002)(2361001)(386003)(5000100001)(4326008)(6116002)(478600001)(18370500001)(2700100001); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0801MB1933; H:e109359-lin.cambridge.arm.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: arm.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; VI1PR0801MB1933; 23:K7cBQpPUDetjc0WPQImCAhgfwCdTVtZmHZyIuGSMRY35mSjbBiTvVv+Ydf3kTI+VjuhlXy+8yV6Hl7jv1BhMMalfW56WreUzwt1WOKEFZd+DI4QcWOntdi9mhdWHHfmV547n9VN9ag3wss6rtks6wQHQXJsE/f7vXHHYQF6KUFPzuLCZ3lXBVvXT139psFnx3+Fagp1AKATtsYc4pj53wSkTHevmqQjmdsRscBhBlxIysqL/cuhLJS8LcYCJA5x4Etp62JLHW1mBf9aB+ngaQfXYwykS1sNY93rIKUvYcd2pZX/z+hKZ5ij0E1JVA/3oQKdNz75hN5AhaZOXsb35IYkxjjpk9UkQUiOirPZMrNM4sFsd0GAppXTtKr1dnd+oxttf71EyQd53MtXTGIKsIN1+yxeGah/Q002xkcBlYkD35IH+DoeNLccQE1Irtam+an0ZgaN4vCdYHJbshXoFIB9mj1Dke0XC70SL0BnuOUeWoCXFP8ejP+9xVz939AAlZypuWevDSEtSYMCWOPu+hCT/2QvG2yyieP/mEMjDBsdRff6XI9jWVp8nRIw5kpDJ2n3yphgV0HMgeulSlE/8cSI5jV2XeoDkpoJZkDkQx1PWJP8QLchnSRzMZoe/CZqpOBFGMyaPxb1XaSGL+aPMlmlllDSfosBFPXweP/qql3jgJFKW/DqSrG1zkBcNdERBXByrQLqmX9E3vlfpItqvvgsPoQ7coDEnwkADaTqsk2nYT8Z0Z6rG7wnqBsaI2Mq5Pv6x0IZUcA8M+2TfWyL/RU2vYuvC4TjbjK5vqWxKpkv0QxAyF0WvLmNkgwz3PZMQZ8t84xrIbDuGNF+9n+PBvCrRb03H01JF4UVaZlA+6w0sPfUMg42ELeTaIP6fkIQh5Xgrhe7BUJv/VA7Xe3sxneN5ulDtGCYi4QMR7upRXUR1e93/v8CEMwqZxrsD9a6eHsbt9E6/XUtgCI4skWrWibUc40ulv/UQtjbNSNFPlDwt3tsuJeMi34te+yw+K2jqfam1VHZfJSdsV4pCIht0F/5u4HAxRFtYL94Em1W9q6JuyrnmYt+JSKZncbqM/tQj54tqhGtYATRolyFGPLBsTVSEfDrVEFqHQOUwmBOVMoPR+1qA/yfgA80Swb07x4x40uHsl003ZXuKVraJCpxE07KEcYngLGEXwlY9rKlCdxSumL7Az8FH/Slp0vQJBTAbXX2LEkLbgH2+SExt9iWOmrOqjcM11t2Q7Ct4IwynvCsY/oNIqxWXp8gzr+AWNaNVRASJygxChrw1vRFh5tj68A== X-Microsoft-Exchange-Diagnostics: 1; VI1PR0801MB1933; 6:ZuQ/GmaDgcDEcmu4Ug0O+KjxWnSQFQR3zMtxWci/On3NZ7zkSnvwWi4SCPGHO0czAe9y+3rnDyJPnzc09JyI00WCzl5XHgSXkMR4WZ1aSwPeTBEN3/Jmw8XdbZCV8V89UZ1qPaG0pjmAmEphyI0dOZoj5toTPkBOLBF7w2XxKphSXtGdtcahGjQg3gdFOeZVsCqm4J+UqaYOPrGKNXnPX9fD/idFRKbMzuC+vRLC3I16OnHIFAvFJkC4AqGP+aLqa/eVJawDl8+85z0ZtZf6QGRfF5kpOBV0xiCUZQHvUG22FglDB6pr4MZqADfH3FE43zFdEKmn9aZUIBfvnRf0YDsodx0fQAIC/Zw8aVt4Rik=; 5:vFxtMvPAl8Wy+PzkFLnkXsoc+hZf/zq7MySshDWOe75zVorvHa3YJCpNPcCYK4LKxrLSA7Nrh3XT2lXajwdDLOmOYAxTHfdkIfPaSuywMb0n4VbPeTA5g5ebQnx9+iTywOKVqmaViCKRllWCPRpxVsgO63ks2TieFvUjcLMudM8=; 24:jn7/WZCbH8aqkGzVsNkZj6rb1j0fDrrofKKHBacdM39G/l9Tee19z1J6yuwemR9L4iC6t9eGLpjraJfRETkSOByARI1uSP+sBaLGvGTnQbQ=; 7:pF4pzIKAqoNgxnWDAo3jXK0TVGIc13aNbZJ/oEGQ4YW8RY4VVfNVtJXL59/zxSvAiqE8AA4a8xW329ObisFo+Miz09zCZR5QW3SkG1oDdVaKxKm5ip7KqkiRM+F3VUQ39re2xGwiM1O/gVGAHcqO+3py163nH5sa3b3wEFW/IpiueRu3UNCF2L9zSGTt70vZ8zHTrhpnL3jWCv0ZApwPcgFyy1tZgFxtA52+/gz0kHCzpmjSBjPPK3hHIei/UIOD SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jan 2018 15:04:50.7113 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: fd4c3813-91de-4c15-2c49-08d556a92ac9 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0801MB1933 X-IsSubscribed: yes Hello, This patch reverts the changes introduced by r255946 and further changes to that done by r256195, as the former causes large number of regressions on aarch64_be* targets. This should be respun with the mismatch in lane numbering in AArch64 and GCC's numbering fixed as explained in PR83663. OK for trunk? VP. ChangeLog: gcc/ PR target/83663 - Revert r255946 * config/aarch64/aarch64.c (aarch64_expand_vector_init): Modify code generation for cases where splatting a value is not useful. * simplify-rtx.c (simplify_ternary_operation): Simplify vec_merge across a vec_duplicate and a paradoxical subreg forming a vector mode to a vec_concat. gcc/testsuite/ PR target/83663 - Revert r255946 * gcc.target/aarch64/vect-slp-dup.c: New. diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index a189605..03a92b6 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -12129,51 +12129,9 @@ aarch64_expand_vector_init (rtx target, rtx vals) maxv = matches[i][1]; } - /* Create a duplicate of the most common element, unless all elements - are equally useless to us, in which case just immediately set the - vector register using the first element. */ - - if (maxv == 1) - { - /* For vectors of two 64-bit elements, we can do even better. */ - if (n_elts == 2 - && (inner_mode == E_DImode - || inner_mode == E_DFmode)) - - { - rtx x0 = XVECEXP (vals, 0, 0); - rtx x1 = XVECEXP (vals, 0, 1); - /* Combine can pick up this case, but handling it directly - here leaves clearer RTL. - - This is load_pair_lanes, and also gives us a clean-up - for store_pair_lanes. */ - if (memory_operand (x0, inner_mode) - && memory_operand (x1, inner_mode) - && !STRICT_ALIGNMENT - && rtx_equal_p (XEXP (x1, 0), - plus_constant (Pmode, - XEXP (x0, 0), - GET_MODE_SIZE (inner_mode)))) - { - rtx t; - if (inner_mode == DFmode) - t = gen_load_pair_lanesdf (target, x0, x1); - else - t = gen_load_pair_lanesdi (target, x0, x1); - emit_insn (t); - return; - } - } - rtx x = copy_to_mode_reg (inner_mode, XVECEXP (vals, 0, 0)); - aarch64_emit_move (target, lowpart_subreg (mode, x, inner_mode)); - maxelement = 0; - } - else - { - rtx x = copy_to_mode_reg (inner_mode, XVECEXP (vals, 0, maxelement)); - aarch64_emit_move (target, gen_vec_duplicate (mode, x)); - } + /* 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_vec_duplicate (mode, x)); /* Insert the rest. */ for (int i = 0; i < n_elts; i++) diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index 6cb5a6e..b052fbb 100644 --- a/gcc/simplify-rtx.c +++ b/gcc/simplify-rtx.c @@ -5888,57 +5888,6 @@ simplify_ternary_operation (enum rtx_code code, machine_mode mode, return simplify_gen_binary (VEC_CONCAT, mode, newop0, newop1); } - /* Replace: - - (vec_merge:outer (vec_duplicate:outer x:inner) - (subreg:outer y:inner 0) - (const_int N)) - - with (vec_concat:outer x:inner y:inner) if N == 1, - or (vec_concat:outer y:inner x:inner) if N == 2. - We assume that degenrate cases (N == 0 or N == 3), which - represent taking all elements from either input, are handled - elsewhere. - - Implicitly, this means we have a paradoxical subreg, but such - a check is cheap, so make it anyway. - - Only applies for vectors of two elements. */ - - if ((GET_CODE (op0) == VEC_DUPLICATE - || GET_CODE (op1) == VEC_DUPLICATE) - && GET_MODE (op0) == GET_MODE (op1) - && known_eq (GET_MODE_NUNITS (GET_MODE (op0)), 2) - && known_eq (GET_MODE_NUNITS (GET_MODE (op1)), 2) - && IN_RANGE (sel, 1, 2)) - { - rtx newop0 = op0, newop1 = op1; - - /* Canonicalize locally such that the VEC_DUPLICATE is always - the first operand. */ - if (GET_CODE (newop1) == VEC_DUPLICATE) - { - std::swap (newop0, newop1); - /* If we swap the operand order, we also need to swap - the selector mask. */ - sel = sel == 1 ? 2 : 1; - } - - if (GET_CODE (newop1) == SUBREG - && paradoxical_subreg_p (newop1) - && subreg_lowpart_p (newop1) - && GET_MODE (SUBREG_REG (newop1)) - == GET_MODE (XEXP (newop0, 0))) - { - newop0 = XEXP (newop0, 0); - newop1 = SUBREG_REG (newop1); - if (sel == 2) - std::swap (newop0, newop1); - return simplify_gen_binary (VEC_CONCAT, mode, - newop0, newop1); - } - } - /* Replace (vec_merge (vec_duplicate x) (vec_duplicate y) (const_int n)) with (vec_concat x y) or (vec_concat y x) depending on value diff --git a/gcc/testsuite/gcc.target/aarch64/vect-slp-dup.c b/gcc/testsuite/gcc.target/aarch64/vect-slp-dup.c deleted file mode 100644 index 0541e48..0000000 --- a/gcc/testsuite/gcc.target/aarch64/vect-slp-dup.c +++ /dev/null @@ -1,20 +0,0 @@ -/* { dg-do compile } */ - -/* { dg-options "-O3 -ftree-vectorize -fno-vect-cost-model" } */ - -void bar (double); - -void -foo (double *restrict in, double *restrict in2, - double *restrict out1, double *restrict out2) -{ - for (int i = 0; i < 1024; i++) - { - out1[i] = in[i] + 2.0 * in[i+128]; - out1[i+1] = in[i+1] + 2.0 * in2[i]; - bar (in[i]); - } -} - -/* { dg-final { scan-assembler-not "dup\tv\[0-9\]+.2d, v\[0-9\]+" } } */ -