From patchwork Mon Oct 23 17:41:32 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Sandiford X-Patchwork-Id: 116847 Delivered-To: patch@linaro.org Received: by 10.140.22.164 with SMTP id 33csp4904517qgn; Mon, 23 Oct 2017 10:42:00 -0700 (PDT) X-Received: by 10.159.252.11 with SMTP id n11mr11173726pls.172.1508780520587; Mon, 23 Oct 2017 10:42:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1508780520; cv=none; d=google.com; s=arc-20160816; b=tWjZNG9iOnx5EW+cSUNanFWq43a2pJuoyD+EdTo28jPEza6mQm/uF57YocZxvW9yFm U6WxIdkeLAxxY9Pg0H0tG6dlsC9gA5DJoPBqa9fcgNWdEfgdWCjcWLiUcFynehwV/S7y oNe1qAfkqdB48NWGQjMS8q7P2ZN5Fi/QfLMWjC3/mxsfbRl7X2cEjHiLZ7js4BRjgC/o 6QBl7oxuMCpl/RLw4kr+2h+FLu+ZVPkFvh3bvykdqRSmlIJwqI19m7siKMmha+/Cl9Y4 0D8uT0yOYzmKiTMg2m3NyE6pTQZ5j4++H4bGGJ8n6rkoa0krvbyOtVt9fGdeYj2BoB9k McIg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:user-agent:message-id:in-reply-to:date:references :subject:mail-followup-to:to:from:delivered-to:sender:list-help :list-post:list-archive:list-unsubscribe:list-id:precedence :mailing-list:dkim-signature:domainkey-signature :arc-authentication-results; bh=7z5T6hC8Fv19rg0CSlgGKSw8D0C75nwHCZ06LyqrHx0=; b=LvrNoBsoBxpNK6t3gO/LH2SRDe8L643fN5ra0dsB80jArdcC1iu1VqxATPTXzV/92B RWB6Gp/zkBwLS33FB0vOU/dhrcHdQw2VV9Wwe8tZ52n7ZjeiNoDYjXIxWdJCOQpp0ssD LodJB+cMc9ZqpzDuv8xRwQGZpYlJttLJJewLp2DODbPGuBw/3BXkH0YC5Ip6upkmpvaz GZ3HfDnL6A2nXxdJmp7OmdNfRx2ohagvoTebMgDKLmgzb+3o6S3IdOK3cIiMGvoEal5f zMVfyAmzdNeOIqQHLbDU1hZD0q+ZA5D6hJ5mc+pU/YjfwyTaxjbqp8RvMTysZ7mApoiz z+7A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=TAXQKhU/; spf=pass (google.com: domain of gcc-patches-return-464878-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=gcc-patches-return-464878-patch=linaro.org@gcc.gnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from sourceware.org (server1.sourceware.org. [209.132.180.131]) by mx.google.com with ESMTPS id 72si5677450pfm.40.2017.10.23.10.42.00 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 23 Oct 2017 10:42:00 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-return-464878-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) client-ip=209.132.180.131; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=TAXQKhU/; spf=pass (google.com: domain of gcc-patches-return-464878-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=gcc-patches-return-464878-patch=linaro.org@gcc.gnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:subject:references:date:in-reply-to:message-id:mime-version :content-type; q=dns; s=default; b=m+GKFWxW1PgQfTS/53WNovTJo/aGe S3JKwq3/RZydDJ9kxNJaulseD4pJkwgM8IHT6AKeD64myyaHRDdqySXlZdeXHG7z 4BmizCmOOcW7wh3OGu6aQ4gZXD4CrzLX6dd4z9Mw/W+7Vx03YEGdXcim2YXiDW2a kkdJB+mTRPMotQ= 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:from :to:subject:references:date:in-reply-to:message-id:mime-version :content-type; s=default; bh=so+yiNmZ+lVh6bHAwduYkODCJxg=; b=TAX QKhU/U2Z6Kno3Waaq4MbTXDtnJTR1ElPHKMGFomHFVyLAA/4PXf4zCUSuVPI5ktu H6SetP2nHcnNIE8swsLKItCuoumA3YEy68pzNMgerXR6JiodFzhuB94t6DPnlDLz 3uUMspGVNeRj+jblHoe2Z02ohCFrF6c7KR+1vFcY= Received: (qmail 124067 invoked by alias); 23 Oct 2017 17:41:38 -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 123989 invoked by uid 89); 23 Oct 2017 17:41:37 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-11.8 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-wm0-f54.google.com Received: from mail-wm0-f54.google.com (HELO mail-wm0-f54.google.com) (74.125.82.54) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 23 Oct 2017 17:41:36 +0000 Received: by mail-wm0-f54.google.com with SMTP id t69so11053973wmt.2 for ; Mon, 23 Oct 2017 10:41:35 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:mail-followup-to:subject:references:date :in-reply-to:message-id:user-agent:mime-version; bh=7z5T6hC8Fv19rg0CSlgGKSw8D0C75nwHCZ06LyqrHx0=; b=tYozU5SQhGPDj4uKxQhYHYTbtFZ5O09YZkE0EdlDdCFEdPn5fd3FI2KLsNi6luX2dE sgQhT3Xa/iawnR1V48wuRHzNrSVYyRGnV+KC6DCL4UayFMZqrLD/VDEiRgFBf8RbWV9C EjpvyM5O9TidFRIt4W0VvUINMT7G+sFSg3dIIDZi3v7X5IXE+F1PNExuDcTPOcgZ1hk+ k5N4epMm/KNk4svvvvX2GYbBLqQe7ta1/7EYRE53h7wCrd+ODfsQYg1jpd7TRRkZBTXz hqSFqRMEZs8Py3t+1+SQqCsBFgj8GeYsogP+IB67IXE83QSsd6dGI081nbGPeze5Shxy SY6g== X-Gm-Message-State: AMCzsaUxizZKlc3gQFYpPQv+udI+B9Jvxz6s56mozJ16Mx2r668uaXCe YVYFuLVMxFievHIdW/RhmSSuB+TncOA= X-Google-Smtp-Source: ABhQp+TnlFP51/3DgXTrcM+aXXNZV/7MUxK83MyXXLCiaRAUdH/dIG4VTWJiUsts5syhTDS8Av1/HQ== X-Received: by 10.28.92.136 with SMTP id q130mr5987739wmb.104.1508780493692; Mon, 23 Oct 2017 10:41:33 -0700 (PDT) Received: from localhost ([2.26.27.199]) by smtp.gmail.com with ESMTPSA id a13sm1306691wrf.48.2017.10.23.10.41.32 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 23 Oct 2017 10:41:32 -0700 (PDT) From: Richard Sandiford To: gcc-patches@gcc.gnu.org Mail-Followup-To: gcc-patches@gcc.gnu.org, richard.sandiford@linaro.org Subject: [102/nnn] poly_int: vect_permute_load/store_chain References: <871sltvm7r.fsf@linaro.org> Date: Mon, 23 Oct 2017 18:41:32 +0100 In-Reply-To: <871sltvm7r.fsf@linaro.org> (Richard Sandiford's message of "Mon, 23 Oct 2017 17:54:32 +0100") Message-ID: <87k1zldann.fsf@linaro.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux) MIME-Version: 1.0 The GET_MODE_NUNITS patch made vect_grouped_store_supported and vect_grouped_load_supported check for a constant number of elements, so vect_permute_store_chain and vect_permute_load_chain can assert for that. This patch adds commentary to that effect; the actual asserts will be added by a later, more mechanical, patch. The patch also reorganises the function so that the asserts are linked specifically to code that builds permute vectors element-by-element. This allows a later patch to add support for some variable-length permutes. 2017-10-23 Richard Sandiford Alan Hayward David Sherwood gcc/ * tree-vect-data-refs.c (vect_permute_store_chain): Reorganize so that both the length == 3 and length != 3 cases set up their own permute vectors. Add comments explaining why we know the number of elements is constant. (vect_permute_load_chain): Likewise. Index: gcc/tree-vect-data-refs.c =================================================================== --- gcc/tree-vect-data-refs.c 2017-10-23 17:25:48.623491897 +0100 +++ gcc/tree-vect-data-refs.c 2017-10-23 17:25:50.361429427 +0100 @@ -4734,11 +4734,7 @@ vect_permute_store_chain (vec dr_c tree perm_mask_low, perm_mask_high; tree data_ref; tree perm3_mask_low, perm3_mask_high; - unsigned int i, n, log_length = exact_log2 (length); - unsigned int j, nelt = TYPE_VECTOR_SUBPARTS (vectype); - - auto_vec_perm_indices sel (nelt); - sel.quick_grow (nelt); + unsigned int i, j, n, log_length = exact_log2 (length); result_chain->quick_grow (length); memcpy (result_chain->address (), dr_chain.address (), @@ -4746,8 +4742,12 @@ vect_permute_store_chain (vec dr_c if (length == 3) { + /* vect_grouped_store_supported ensures that this is constant. */ + unsigned int nelt = TYPE_VECTOR_SUBPARTS (vectype); unsigned int j0 = 0, j1 = 0, j2 = 0; + auto_vec_perm_indices sel (nelt); + sel.quick_grow (nelt); for (j = 0; j < 3; j++) { int nelt0 = ((3 - j) * nelt) % 3; @@ -4806,6 +4806,10 @@ vect_permute_store_chain (vec dr_c /* If length is not equal to 3 then only power of 2 is supported. */ gcc_assert (pow2p_hwi (length)); + /* vect_grouped_store_supported ensures that this is constant. */ + unsigned int nelt = TYPE_VECTOR_SUBPARTS (vectype); + auto_vec_perm_indices sel (nelt); + sel.quick_grow (nelt); for (i = 0, n = nelt / 2; i < n; i++) { sel[i * 2] = i; @@ -5321,10 +5325,6 @@ vect_permute_load_chain (vec dr_ch gimple *perm_stmt; tree vectype = STMT_VINFO_VECTYPE (vinfo_for_stmt (stmt)); unsigned int i, j, log_length = exact_log2 (length); - unsigned nelt = TYPE_VECTOR_SUBPARTS (vectype); - - auto_vec_perm_indices sel (nelt); - sel.quick_grow (nelt); result_chain->quick_grow (length); memcpy (result_chain->address (), dr_chain.address (), @@ -5332,8 +5332,12 @@ vect_permute_load_chain (vec dr_ch if (length == 3) { + /* vect_grouped_load_supported ensures that this is constant. */ + unsigned nelt = TYPE_VECTOR_SUBPARTS (vectype); unsigned int k; + auto_vec_perm_indices sel (nelt); + sel.quick_grow (nelt); for (k = 0; k < 3; k++) { for (i = 0; i < nelt; i++) @@ -5379,6 +5383,10 @@ vect_permute_load_chain (vec dr_ch /* If length is not equal to 3 then only power of 2 is supported. */ gcc_assert (pow2p_hwi (length)); + /* vect_grouped_load_supported ensures that this is constant. */ + unsigned nelt = TYPE_VECTOR_SUBPARTS (vectype); + auto_vec_perm_indices sel (nelt); + sel.quick_grow (nelt); for (i = 0; i < nelt; ++i) sel[i] = i * 2; perm_mask_even = vect_gen_perm_mask_checked (vectype, sel);