From patchwork Sun Jan 7 10:26:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Sandiford X-Patchwork-Id: 123643 Delivered-To: patch@linaro.org Received: by 10.140.22.227 with SMTP id 90csp1464044qgn; Sun, 7 Jan 2018 02:26:25 -0800 (PST) X-Google-Smtp-Source: ACJfBotPuoI0GHSY7fcVG79CArz3WPTe6GA5xYGCnUF2drrArb46ogBhZhqJlqYolWQgSAVfnFaM X-Received: by 10.98.209.10 with SMTP id z10mr7790269pfg.151.1515320785001; Sun, 07 Jan 2018 02:26:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1515320784; cv=none; d=google.com; s=arc-20160816; b=iCD3lLuKNCkQNFMDzD3FUnYlaSznaZiGPHjDfhn0YbULVAazmAk+vw0WpxsnwCqhOo SX2Ax+oe92qy006UoNkrXrlFJJXdO0fRPdISKaDFTsNqV3lLc1EGbTf2m+TOcqoA5gx8 hBcw1PASwv+6+um2kD5dyxlZQu8kPsu6tFzt6Xg7l10JcqV34U6jfDQwQ65jlwY2o5Nj YEcVFXntpkZFNx04A9iNYlGN6TOzY4yxhD9XvuaL/wg56xlSayhOHnkm8Znz9Ut7YtEC +gRhGdrG5VK8SMNMFv4hZDX4zpJ/BEvUN32XaWm1/JrYIeznNvFQbIRpV7iWUb6xR49+ G1MA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:user-agent:message-id:date: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=1nq3VUCji1tuaj0GTtJ/QMU5PZ9bo3p+yynRhECIkDo=; b=CtaM9GMvmirKQwPptuHLVCgBC6RAazZVC665z9VqyfCHX72Lx9QRMPXDBP3FVWKqka wtHlNW9yg3KX4JC5/kSNIaDSNamxKzn8KlCChIbLV5OydmKbTGpJE8u8T/OhO6e1Rkms T0GKSZLk+B6Q+I1V8apMg3GIfhgd0BocgHz0Yooue6oTcu0H+Dt5rSlZ1E5CLMQeC2Ge o0zCuwv6vE7UZTBDJH2N0O0R0d2R3aJ6sBw8V34qjGueE18y0Fhjjs00CZ4jXGwGEcug DxG/UTLQOnHhfnxRyw0AiAgBUMntNPZQQdod6TS+tEXgK1FBc0PcxwrOuhz6F4JCykMo lyVQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=qpCJyGeo; spf=pass (google.com: domain of gcc-patches-return-470318-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=gcc-patches-return-470318-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 a67si6038008pgc.617.2018.01.07.02.26.24 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 07 Jan 2018 02:26:24 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-return-470318-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=qpCJyGeo; spf=pass (google.com: domain of gcc-patches-return-470318-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=gcc-patches-return-470318-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:date:message-id:mime-version:content-type; q=dns; s= default; b=ZrYILUh2mb8qAnDG4404QETrRpuLU6W8RXNy8oPqSRrel++hvlwMR whTh92j+egymBP2MJlApgQ/qNpgUhjGgpWA4wyOeLKeaPrFljugvzJFKyBXF8Fdb aKyfCLGNrpAlef0QoGiP6Tcyup44TtSr0T/3176VgzKJRGwpKXDDMo= 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:date:message-id:mime-version:content-type; s= default; bh=5gYhuDk85UjGeSc5CLfO/tJM/h8=; b=qpCJyGeo7aTcHlW5Ynz+ 9ZKVopY1WnO+YMNemwwn3yM60tAYzYo8jv4x+2GtNOuqM+fi+ecjErvu1TRa5RDb ugBq+eY4Y96X6sRDqniQXkysgU0N9gDwoCZMQapE7VAKRLqumm6h5E8SKwjukoST P4UKHqPYsa60NaZ5Dwk2GqI= Received: (qmail 125572 invoked by alias); 7 Jan 2018 10:26:13 -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 125555 invoked by uid 89); 7 Jan 2018 10:26:11 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-13.9 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_ASCII_DIVIDERS, KAM_NUMSUBJECT, KAM_STOCKGEN, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy=Matches X-HELO: mail-wm0-f49.google.com Received: from mail-wm0-f49.google.com (HELO mail-wm0-f49.google.com) (74.125.82.49) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 07 Jan 2018 10:26:09 +0000 Received: by mail-wm0-f49.google.com with SMTP id r78so9354036wme.5 for ; Sun, 07 Jan 2018 02:26:09 -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:date:message-id :user-agent:mime-version; bh=1nq3VUCji1tuaj0GTtJ/QMU5PZ9bo3p+yynRhECIkDo=; b=a61Y28Ho0hCG9iw/+mqOqCsZykPpVtTHTUm4691OfxmGohBJ4gFWNOKBXOMxoerfGT 59daE4TH9tZYwCspPs6RWnD6/8bqkz7/rMFGJbbsqDHVRofl7BfZ+92tMuLeuxZDKi9E jvJ3tcymrNKvDjhPh1Y5RQEFWo89T4hIgrLDAOwBSvg0BM9RCRpCHZ3jl4aGVDVFVwnI U3BAy09E71x6B4Sct4OPk9mVxpA0/R1jQgnkBRhi4/AZwhNMcmWXMbBWYDJ04VdNcOy0 gfj0tI0X2Jd69jq4g9UJBIDUeA+PP3p3LODLLQc9PqeLHfLbXcw9EhTyNcDM/KeYvAmC yk+A== X-Gm-Message-State: AKGB3mKVwNObVMHI2LQDz+xPFjHcYS4Lrmpp+wcbLwg0J1ZP7d3OVBUC YMvvquDS6/CfAjcI6hyExofY8C/GqN4= X-Received: by 10.28.113.21 with SMTP id m21mr6285395wmc.29.1515320767354; Sun, 07 Jan 2018 02:26:07 -0800 (PST) Received: from localhost ([95.144.14.233]) by smtp.gmail.com with ESMTPSA id c82sm8216839wme.4.2018.01.07.02.26.05 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 07 Jan 2018 02:26:06 -0800 (PST) From: Richard Sandiford To: gcc-patches@gcc.gnu.org Mail-Followup-To: gcc-patches@gcc.gnu.org, richard.sandiford@linaro.org Subject: Mostly revert r254296 Date: Sun, 07 Jan 2018 10:26:05 +0000 Message-ID: <87r2r2ezia.fsf@linaro.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.3 (gnu/linux) MIME-Version: 1.0 r254296 added support for (const ...) wrappers around vectors, but in the end the agreement was to use a variable-length encoding of CONST_VECTOR (and VECTOR_CST) instead. This patch therefore reverts the bits that are no longer needed. The rtl.texi part isn't a full revert, since r254296 also updated the documentation to mention unspecs in address calculations, and to relax the requirement that the mode had to be Pmode (it can also be ptr_mode on target where Pmode != ptr_mode). Tested on aarch64-linux-gnu. OK to install? (Although AIUI reverts don't normally need approval, I thought I'd better ask given the rtl.texi thing.) Richard 2018-01-06 Richard Sandiford gcc/ * doc/rtl.texi: Remove documentation of (const ...) wrappers for vectors, as a partial revert of r254296. * rtl.h (const_vec_p): Delete. (const_vec_duplicate_p): Don't test for vector CONSTs. (unwrap_const_vec_duplicate, const_vec_series_p): Likewise. * expmed.c (make_tree): Likewise. Revert: * common.md (E, F): Use CONSTANT_P instead of checking for CONST_VECTOR. * emit-rtl.c (gen_lowpart_common): Use const_vec_p instead of checking for CONST_VECTOR. Index: gcc/doc/rtl.texi =================================================================== --- gcc/doc/rtl.texi 2018-01-04 18:05:23.717283885 +0000 +++ gcc/doc/rtl.texi 2018-01-07 10:21:06.115727720 +0000 @@ -1875,18 +1875,12 @@ Usually that is the only mode for which @findex const @item (const:@var{m} @var{exp}) -Wraps an rtx computation @var{exp} whose inputs and result do not -change during the execution of a thread. There are two valid uses. -The first is to represent a global or thread-local address calculation. -In this case @var{exp} should contain @code{const_int}, -@code{symbol_ref}, @code{label_ref} or @code{unspec} expressions, -combined with @code{plus} and @code{minus}. Any such @code{unspec}s -are target-specific and typically represent some form of relocation -operator. @var{m} should be a valid address mode. - -The second use of @code{const} is to wrap a vector operation. -In this case @var{exp} must be a @code{vec_duplicate} or -@code{vec_series} expression. +Represents a constant that is the result of an assembly-time +arithmetic computation. The operand, @var{exp}, contains only +@code{const_int}, @code{symbol_ref}, @code{label_ref} or @code{unspec} +expressions, combined with @code{plus} and @code{minus}. Any such +@code{unspec}s are target-specific and typically represent some form +of relocation operator. @var{m} should be a valid address mode. @findex high @item (high:@var{m} @var{exp}) Index: gcc/rtl.h =================================================================== --- gcc/rtl.h 2018-01-06 11:06:04.969430563 +0000 +++ gcc/rtl.h 2018-01-07 10:21:06.117728188 +0000 @@ -2935,24 +2935,14 @@ extern rtx shallow_copy_rtx (const_rtx C extern int rtx_equal_p (const_rtx, const_rtx); extern bool rtvec_all_equal_p (const_rtvec); -/* Return true if X is some form of vector constant. */ - -inline bool -const_vec_p (const_rtx x) -{ - return VECTOR_MODE_P (GET_MODE (x)) && CONSTANT_P (x); -} - /* Return true if X is a vector constant with a duplicated element value. */ inline bool const_vec_duplicate_p (const_rtx x) { - return ((GET_CODE (x) == CONST_VECTOR - && CONST_VECTOR_NPATTERNS (x) == 1 - && CONST_VECTOR_DUPLICATE_P (x)) - || (GET_CODE (x) == CONST - && GET_CODE (XEXP (x, 0)) == VEC_DUPLICATE)); + return (GET_CODE (x) == CONST_VECTOR + && CONST_VECTOR_NPATTERNS (x) == 1 + && CONST_VECTOR_DUPLICATE_P (x)); } /* Return true if X is a vector constant with a duplicated element value. @@ -2962,20 +2952,11 @@ const_vec_duplicate_p (const_rtx x) inline bool const_vec_duplicate_p (T x, T *elt) { - if (GET_CODE (x) == CONST_VECTOR - && CONST_VECTOR_NPATTERNS (x) == 1 - && CONST_VECTOR_DUPLICATE_P (x)) + if (const_vec_duplicate_p (x)) { *elt = CONST_VECTOR_ENCODED_ELT (x, 0); return true; } - if (GET_CODE (x) == CONST - && GET_CODE (XEXP (x, 0)) == VEC_DUPLICATE - && !VECTOR_MODE_P (GET_MODE (XEXP (XEXP (x, 0), 0)))) - { - *elt = XEXP (XEXP (x, 0), 0); - return true; - } return false; } @@ -3002,12 +2983,8 @@ vec_duplicate_p (T x, T *elt) inline T unwrap_const_vec_duplicate (T x) { - if (GET_CODE (x) == CONST_VECTOR - && CONST_VECTOR_NPATTERNS (x) == 1 - && CONST_VECTOR_DUPLICATE_P (x)) - return CONST_VECTOR_ENCODED_ELT (x, 0); - if (GET_CODE (x) == CONST && GET_CODE (XEXP (x, 0)) == VEC_DUPLICATE) - return XEXP (XEXP (x, 0), 0); + if (const_vec_duplicate_p (x)) + x = CONST_VECTOR_ELT (x, 0); return x; } @@ -3030,12 +3007,6 @@ const_vec_series_p (const_rtx x, rtx *ba && CONST_VECTOR_NPATTERNS (x) == 1 && !CONST_VECTOR_DUPLICATE_P (x)) return const_vec_series_p_1 (x, base_out, step_out); - if (GET_CODE (x) == CONST && GET_CODE (XEXP (x, 0)) == VEC_SERIES) - { - *base_out = XEXP (XEXP (x, 0), 0); - *step_out = XEXP (XEXP (x, 0), 1); - return true; - } return false; } Index: gcc/expmed.c =================================================================== --- gcc/expmed.c 2018-01-07 10:16:53.825977531 +0000 +++ gcc/expmed.c 2018-01-07 10:21:06.116727954 +0000 @@ -5355,22 +5355,7 @@ make_tree (tree type, rtx x) return fold_convert (type, make_tree (t, XEXP (x, 0))); case CONST: - { - rtx op = XEXP (x, 0); - if (GET_CODE (op) == VEC_DUPLICATE) - { - tree elt_tree = make_tree (TREE_TYPE (type), XEXP (op, 0)); - return build_vector_from_val (type, elt_tree); - } - if (GET_CODE (op) == VEC_SERIES) - { - tree itype = TREE_TYPE (type); - tree base_tree = make_tree (itype, XEXP (op, 0)); - tree step_tree = make_tree (itype, XEXP (op, 1)); - return build_vec_series (type, base_tree, step_tree); - } - return make_tree (type, op); - } + return make_tree (type, XEXP (x, 0)); case SYMBOL_REF: t = SYMBOL_REF_DECL (x); Index: gcc/common.md =================================================================== --- gcc/common.md 2018-01-03 11:12:59.086630758 +0000 +++ gcc/common.md 2018-01-07 10:21:06.115727720 +0000 @@ -80,14 +80,14 @@ (define_constraint "n" (define_constraint "E" "Matches a floating-point constant." (ior (match_test "CONST_DOUBLE_AS_FLOAT_P (op)") - (match_test "CONSTANT_P (op) + (match_test "GET_CODE (op) == CONST_VECTOR && GET_MODE_CLASS (GET_MODE (op)) == MODE_VECTOR_FLOAT"))) ;; There is no longer a distinction between "E" and "F". (define_constraint "F" "Matches a floating-point constant." (ior (match_test "CONST_DOUBLE_AS_FLOAT_P (op)") - (match_test "CONSTANT_P (op) + (match_test "GET_CODE (op) == CONST_VECTOR && GET_MODE_CLASS (GET_MODE (op)) == MODE_VECTOR_FLOAT"))) (define_constraint "X" Index: gcc/emit-rtl.c =================================================================== --- gcc/emit-rtl.c 2018-01-03 21:42:54.277273515 +0000 +++ gcc/emit-rtl.c 2018-01-07 10:21:06.116727954 +0000 @@ -1593,7 +1593,7 @@ gen_lowpart_common (machine_mode mode, r return gen_rtx_fmt_e (GET_CODE (x), int_mode, XEXP (x, 0)); } else if (GET_CODE (x) == SUBREG || REG_P (x) - || GET_CODE (x) == CONCAT || const_vec_p (x) + || GET_CODE (x) == CONCAT || GET_CODE (x) == CONST_VECTOR || CONST_DOUBLE_AS_FLOAT_P (x) || CONST_SCALAR_INT_P (x) || CONST_POLY_INT_P (x)) return lowpart_subreg (mode, x, innermode);