From patchwork Sat Dec 9 23:25:09 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Sandiford X-Patchwork-Id: 846627 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-468862-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="n5RJjSw8"; 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 3yvQLV47J4z9t2f for ; Sun, 10 Dec 2017 10:25:22 +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:from :to:subject:references:date:in-reply-to:message-id:mime-version :content-type; q=dns; s=default; b=DObMomtRTjQEifwaj2dUu8F9JOTlj RptVB5ZURL+bTJ4ZLD3NWfe5jphW4nH1kSzS24+qum/gdNy7kbbVmhWM9RPqhwVi TZduIA5Zu+vA8du7g7L8EyqpBfAWB587iDsI+ktcUWeVEOshYdVq09IJdi9ZrVyT mPQpcMRgpjDHuc= 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=Hc3ekcdscwjww7E+6+s8IX+TOGw=; b=n5R JjSw8kRHAhCXNYzHFcxdlcyP9opMvg3yt5B8eBUksZLRrDLLp0M16j+Xopvn3qTR 5/Vz1OHz4+F0EgarmpgejsNg0x/Yd6Cb4lCMuqHQ6ba4hhcjMn77O/SYdxe0ef0m Y8J6HrfoF6SacoDZlsyi+zaqvOJJ8RFmJEp1QBhw= Received: (qmail 109950 invoked by alias); 9 Dec 2017 23:25:14 -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 109940 invoked by uid 89); 9 Dec 2017 23:25:14 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-11.0 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_2, GIT_PATCH_3, KAM_ASCII_DIVIDERS, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-wm0-f50.google.com Received: from mail-wm0-f50.google.com (HELO mail-wm0-f50.google.com) (74.125.82.50) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 09 Dec 2017 23:25:13 +0000 Received: by mail-wm0-f50.google.com with SMTP id b76so8380326wmg.1 for ; Sat, 09 Dec 2017 15:25:12 -0800 (PST) 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=COYpxelZ5xPd25qvlL1FxMAi9mGRYKURy65PkcONibU=; b=f3RoPfrFGrIb8vCZ7OqugmZPgBlUxuD9jKaKKX3pqnL7ZRWtJDSCAwJLRtFNVKonpa UUZNwGApsPtKTBTg3BQTY3WBqQri0hiiw9GO63U2vltple1+o9ysfDXehU+gbciTBai6 ub/dC69gcAW0Y0rhOEHPdMeGTl3Ft9Rc3+PnGEf3ZjHDpjEUhEdfSNiRQSooxSz8shON 9F8SUdbYYSStBjyY42PgFQkGtBdf1g06NunIHrgRC8pAoi43ZjEQzy5xZokJ3HJw+NCi t3hFMed+N4Y/1Hf54RFqAtcKWud/t1R2FwpBOOvevrYxLfVgRxvcr2BNJMWumRoTtlJU NWqw== X-Gm-Message-State: AKGB3mKybtuzzMapZPC28xJZO7uLlV6bmkooUTgwR9VTBGIAlXAnPKbS Rdt6IHQn7rPmJJ3e8AOnh5e0/Q25VsI= X-Google-Smtp-Source: AGs4zMZS3GWh+GpxaHF6PbXfxLFtlgKUJb94aCBFKFtHRsyE/2zjwJy/ynqE3rrkPxHIchGYe4P9qQ== X-Received: by 10.28.55.82 with SMTP id e79mr6768652wma.60.1512861910706; Sat, 09 Dec 2017 15:25:10 -0800 (PST) Received: from localhost ([2.25.234.120]) by smtp.gmail.com with ESMTPSA id k19sm12830591wrk.88.2017.12.09.15.25.09 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 09 Dec 2017 15:25:09 -0800 (PST) From: Richard Sandiford To: gcc-patches@gcc.gnu.org Mail-Followup-To: gcc-patches@gcc.gnu.org, richard.sandiford@linaro.org Subject: [12/13] Use ssizetype selectors for autovectorised VEC_PERM_EXPRs References: <87indfmrgt.fsf@linaro.org> <877etvlc4g.fsf@linaro.org> Date: Sat, 09 Dec 2017 23:25:09 +0000 In-Reply-To: <877etvlc4g.fsf@linaro.org> (Richard Sandiford's message of "Sat, 09 Dec 2017 23:23:11 +0000") Message-ID: <87wp1vjxgq.fsf_-_@linaro.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.3 (gnu/linux) MIME-Version: 1.0 The previous patches mean that there's no reason that constant VEC_PERM_EXPRs need to have the same shape as the data inputs. This patch makes the autovectoriser use ssizetype elements instead, so that indices don't get truncated for large or variable-length vectors. 2017-12-09 Richard Sandiford gcc/ * tree-cfg.c (verify_gimple_assign_ternary): Allow the size of the selector elements to be different from the data elements if the selector is a VECTOR_CST. * tree-vect-stmts.c (vect_gen_perm_mask_any): Use a vector of ssizetype for the selector. Index: gcc/tree-cfg.c =================================================================== --- gcc/tree-cfg.c 2017-12-09 22:47:07.103588314 +0000 +++ gcc/tree-cfg.c 2017-12-09 22:48:58.259216407 +0000 @@ -4300,8 +4300,11 @@ verify_gimple_assign_ternary (gassign *s } if (TREE_CODE (TREE_TYPE (rhs3_type)) != INTEGER_TYPE - || GET_MODE_BITSIZE (SCALAR_INT_TYPE_MODE (TREE_TYPE (rhs3_type))) - != GET_MODE_BITSIZE (SCALAR_TYPE_MODE (TREE_TYPE (rhs1_type)))) + || (TREE_CODE (rhs3) != VECTOR_CST + && (GET_MODE_BITSIZE (SCALAR_INT_TYPE_MODE + (TREE_TYPE (rhs3_type))) + != GET_MODE_BITSIZE (SCALAR_TYPE_MODE + (TREE_TYPE (rhs1_type)))))) { error ("invalid mask type in vector permute expression"); debug_generic_expr (lhs_type); Index: gcc/tree-vect-stmts.c =================================================================== --- gcc/tree-vect-stmts.c 2017-12-09 22:48:52.268015910 +0000 +++ gcc/tree-vect-stmts.c 2017-12-09 22:48:58.259216407 +0000 @@ -6518,11 +6518,12 @@ vectorizable_store (gimple *stmt, gimple tree vect_gen_perm_mask_any (tree vectype, const vec_perm_indices &sel) { - tree mask_elt_type, mask_type; + tree mask_type; - mask_elt_type = lang_hooks.types.type_for_mode - (int_mode_for_mode (TYPE_MODE (TREE_TYPE (vectype))).require (), 1); - mask_type = get_vectype_for_scalar_type (mask_elt_type); + unsigned int nunits = sel.length (); + gcc_assert (nunits == TYPE_VECTOR_SUBPARTS (vectype)); + + mask_type = build_vector_type (ssizetype, nunits); return vec_perm_indices_to_tree (mask_type, sel); }