From patchwork Mon Oct 23 11:28: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: 116706 Delivered-To: patch@linaro.org Received: by 10.140.22.164 with SMTP id 33csp4532662qgn; Mon, 23 Oct 2017 04:28:50 -0700 (PDT) X-Received: by 10.98.211.203 with SMTP id z72mr13116212pfk.328.1508758130109; Mon, 23 Oct 2017 04:28:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1508758130; cv=none; d=google.com; s=arc-20160816; b=rHXfNfaP5YTkM/q3rWkpGa3sQRni9FMW/KAaDIate8bOoY3aXqrccGPLugwFaKMINw WCkiE9jhJzo/IUw3JBJEayXF16as5gLg/IP/+WH/Wvw+1i25VxiJXvcKq6d8oGoXx757 EMwm5zLdrmOPz3KWTneszUQqY4+BCEOiTJwVmQ/UEE50TkjUOhgLsYPOImhjFwXDNYHn iFEeuKv+NWORLImtfUQ3Fyo2L5nccnM/sUlMplxEnO6Q38V9+0KLmcgeSjRKkAZaL6e3 H+jH0ymjce1zjvFvC6QCVh9QpBo/WMLBNkW0C9szkJWukHMkGpOajcwiIK0lkKQxuwE+ o+Eg== 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=sb1rGZfDJZyKMucZUfp6UdR8O8aw+LXAcN3K6W/3mmo=; b=xd265eRkLx0U4PbmkE4Hmll9PIDOr4si/9LAwDfaTiOrj6wCZfKKK1arttQwOBZ96w z1/Of7MfgoH6562f4gJMNUdeXVJOOzRvGwTCy3O+kJytXGcPQ3/m+xyYPIg6y+/lBGGq 9R3FwaJHJdkYmsugc8FbESyrNV/SLPMFd1/TCerX5ctKoFOXTPDLtns0xKvGUlvZpaII SDLRaHnqw9z6LnaqS/pOffcb/ilgpe+zDl8VHO4526zEEH5Mw5O5iEOzwZN3oxKSGSKv 2a576uPfYLq5toWYx2ymJUQ0uE07nY0wRMefyhgzZJVQXzbdjP8DkQNS5yMFISSnn0qk Djpw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=cawivMaD; spf=pass (google.com: domain of gcc-patches-return-464746-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=gcc-patches-return-464746-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 b14si3967695plk.487.2017.10.23.04.28.49 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 23 Oct 2017 04:28:50 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-return-464746-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=cawivMaD; spf=pass (google.com: domain of gcc-patches-return-464746-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=gcc-patches-return-464746-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=ZXqw0N/YNCYt7QyasXj7d9E9Mbies DGzi8H5hUk1txl9Nt2mI/lkwiauqqI7fK79y3UELA7MKzs8ZR2DemUkPlnI/UhQv ofWoB2lS7NZ4g3F9L6LQzOOYj6J9AuqhT/o6nlcvmbi/19Y0ujQPR1LTOpsec/N7 gReA2XlXrCVFQA= 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=op3QxQGqT9jAZV7DiuaH1eOeULM=; b=caw ivMaDZ7naUXzMm1ERpw0wHvjBMk0u/rqm3nJUycU2NOyKq1bmZDYByNeVNlf52NP UR3zn0E+tjGX5jLPQpdgePuNjFySb0QcuxYl/yY7og3q36Qgx7ZmB4VTAXuVkuPc Bzi/xO2WC3UE1EPcIeXXJ2+7AzynR/euhSUQk1/w= Received: (qmail 91933 invoked by alias); 23 Oct 2017 11:28: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 91915 invoked by uid 89); 23 Oct 2017 11:28:37 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-11.2 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, RCVD_IN_SORBS_SPAM, 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; Mon, 23 Oct 2017 11:28:36 +0000 Received: by mail-wm0-f50.google.com with SMTP id q132so9113369wmd.2 for ; Mon, 23 Oct 2017 04:28: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=sb1rGZfDJZyKMucZUfp6UdR8O8aw+LXAcN3K6W/3mmo=; b=oaStFPWB3VwQXG/e12JT6HjiHgPRmK8VSnmD2o/yWyR4G1roY8JuJ6myfZx+ixm+eD SdxPQxjjVFkvDOLCOVEADA1bDHEp2HuKCfQVUOfhRx1v2P1+Zz7poPfAiP/rn1h0zEcz 5lmB4mGBWGfELRqtnrKqnhO3ha+ahQptkJN4A20R2FR1LxPsn6fiUkYmpQTDiYc4oLBr 5Q2MODJCU7XtfTfnkMMRG0Z3ukoUEGARlXb+cghrv/+yp/8tn1R3WLOrUQNbhOnelrUR +TwLN0eYkV1IB7hdBIganWvnW3AGXc9qPAMjZVR4s3zSmVq4+hVpNd8mnS+zN6b5a7e4 vLzA== X-Gm-Message-State: AMCzsaWPEDBmKBJx0WtzgqT5R0cxyzWl+9vywcqFLpJw/4i2yOy+N/Yv Loukr2LAO3mIXnhAIApF9lSP175TiO0= X-Google-Smtp-Source: ABhQp+TupFCJIfbE+hqqURhAvCKH0EgEH+zKl5skDg9yfxS0+ckF+pduErUjRaptv01Gqy+LdkkRAw== X-Received: by 10.28.239.2 with SMTP id n2mr4578133wmh.140.1508758113926; Mon, 23 Oct 2017 04:28:33 -0700 (PDT) Received: from localhost ([2.26.27.199]) by smtp.gmail.com with ESMTPSA id o24sm4376018wmi.39.2017.10.23.04.28.32 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 23 Oct 2017 04:28:33 -0700 (PDT) From: Richard Sandiford To: gcc-patches@gcc.gnu.org Mail-Followup-To: gcc-patches@gcc.gnu.org, richard.sandiford@linaro.org Subject: [18/nn] Use (CONST_VECTOR|GET_MODE)_NUNITS in simplify-rtx.c References: <87wp3mxgir.fsf@linaro.org> Date: Mon, 23 Oct 2017 12:28:32 +0100 In-Reply-To: <87wp3mxgir.fsf@linaro.org> (Richard Sandiford's message of "Mon, 23 Oct 2017 12:14:36 +0100") Message-ID: <87r2tuumqn.fsf@linaro.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux) MIME-Version: 1.0 This patch avoids some calculations of the form: GET_MODE_SIZE (vector_mode) / GET_MODE_SIZE (element_mode) in simplify-rtx.c. If we're dealing with CONST_VECTORs, it's better to use CONST_VECTOR_NUNITS, since that remains constant even after the SVE patches. In other cases we can get the number from GET_MODE_NUNITS. 2017-10-23 Richard Sandiford Alan Hayward David Sherwood gcc/ * simplify-rtx.c (simplify_const_unary_operation): Use GET_MODE_NUNITS and CONST_VECTOR_NUNITS instead of computing the number of units from the byte sizes of the vector and element. (simplify_binary_operation_1): Likewise. (simplify_const_binary_operation): Likewise. (simplify_ternary_operation): Likewise. Index: gcc/simplify-rtx.c =================================================================== --- gcc/simplify-rtx.c 2017-10-23 11:47:11.277288162 +0100 +++ gcc/simplify-rtx.c 2017-10-23 11:47:32.868935554 +0100 @@ -1752,18 +1752,12 @@ simplify_const_unary_operation (enum rtx return gen_const_vec_duplicate (mode, op); if (GET_CODE (op) == CONST_VECTOR) { - int elt_size = GET_MODE_UNIT_SIZE (mode); - unsigned n_elts = (GET_MODE_SIZE (mode) / elt_size); - rtvec v = rtvec_alloc (n_elts); - unsigned int i; - - machine_mode inmode = GET_MODE (op); - int in_elt_size = GET_MODE_UNIT_SIZE (inmode); - unsigned in_n_elts = (GET_MODE_SIZE (inmode) / in_elt_size); - + unsigned int n_elts = GET_MODE_NUNITS (mode); + unsigned int in_n_elts = CONST_VECTOR_NUNITS (op); gcc_assert (in_n_elts < n_elts); gcc_assert ((n_elts % in_n_elts) == 0); - for (i = 0; i < n_elts; i++) + rtvec v = rtvec_alloc (n_elts); + for (unsigned i = 0; i < n_elts; i++) RTVEC_ELT (v, i) = CONST_VECTOR_ELT (op, i % in_n_elts); return gen_rtx_CONST_VECTOR (mode, v); } @@ -3608,9 +3602,7 @@ simplify_binary_operation_1 (enum rtx_co rtx op0 = XEXP (trueop0, 0); rtx op1 = XEXP (trueop0, 1); - machine_mode opmode = GET_MODE (op0); - int elt_size = GET_MODE_UNIT_SIZE (opmode); - int n_elts = GET_MODE_SIZE (opmode) / elt_size; + int n_elts = GET_MODE_NUNITS (GET_MODE (op0)); int i = INTVAL (XVECEXP (trueop1, 0, 0)); int elem; @@ -3637,21 +3629,8 @@ simplify_binary_operation_1 (enum rtx_co mode01 = GET_MODE (op01); /* Find out number of elements of each operand. */ - if (VECTOR_MODE_P (mode00)) - { - elt_size = GET_MODE_UNIT_SIZE (mode00); - n_elts00 = GET_MODE_SIZE (mode00) / elt_size; - } - else - n_elts00 = 1; - - if (VECTOR_MODE_P (mode01)) - { - elt_size = GET_MODE_UNIT_SIZE (mode01); - n_elts01 = GET_MODE_SIZE (mode01) / elt_size; - } - else - n_elts01 = 1; + n_elts00 = GET_MODE_NUNITS (mode00); + n_elts01 = GET_MODE_NUNITS (mode01); gcc_assert (n_elts == n_elts00 + n_elts01); @@ -3771,9 +3750,8 @@ simplify_binary_operation_1 (enum rtx_co rtx subop1 = XEXP (trueop0, 1); machine_mode mode0 = GET_MODE (subop0); machine_mode mode1 = GET_MODE (subop1); - int li = GET_MODE_UNIT_SIZE (mode0); - int l0 = GET_MODE_SIZE (mode0) / li; - int l1 = GET_MODE_SIZE (mode1) / li; + int l0 = GET_MODE_NUNITS (mode0); + int l1 = GET_MODE_NUNITS (mode1); int i0 = INTVAL (XVECEXP (trueop1, 0, 0)); if (i0 == 0 && !side_effects_p (op1) && mode == mode0) { @@ -3931,14 +3909,10 @@ simplify_binary_operation_1 (enum rtx_co || CONST_SCALAR_INT_P (trueop1) || CONST_DOUBLE_AS_FLOAT_P (trueop1))) { - int elt_size = GET_MODE_UNIT_SIZE (mode); - unsigned n_elts = (GET_MODE_SIZE (mode) / elt_size); + unsigned n_elts = GET_MODE_NUNITS (mode); + unsigned in_n_elts = GET_MODE_NUNITS (op0_mode); rtvec v = rtvec_alloc (n_elts); unsigned int i; - unsigned in_n_elts = 1; - - if (VECTOR_MODE_P (op0_mode)) - in_n_elts = (GET_MODE_SIZE (op0_mode) / elt_size); for (i = 0; i < n_elts; i++) { if (i < in_n_elts) @@ -4026,16 +4000,12 @@ simplify_const_binary_operation (enum rt && GET_CODE (op0) == CONST_VECTOR && GET_CODE (op1) == CONST_VECTOR) { - unsigned n_elts = GET_MODE_NUNITS (mode); - machine_mode op0mode = GET_MODE (op0); - unsigned op0_n_elts = GET_MODE_NUNITS (op0mode); - machine_mode op1mode = GET_MODE (op1); - unsigned op1_n_elts = GET_MODE_NUNITS (op1mode); + unsigned int n_elts = CONST_VECTOR_NUNITS (op0); + gcc_assert (n_elts == (unsigned int) CONST_VECTOR_NUNITS (op1)); + gcc_assert (n_elts == GET_MODE_NUNITS (mode)); rtvec v = rtvec_alloc (n_elts); unsigned int i; - gcc_assert (op0_n_elts == n_elts); - gcc_assert (op1_n_elts == n_elts); for (i = 0; i < n_elts; i++) { rtx x = simplify_binary_operation (code, GET_MODE_INNER (mode), @@ -5712,8 +5682,7 @@ simplify_ternary_operation (enum rtx_cod trueop2 = avoid_constant_pool_reference (op2); if (CONST_INT_P (trueop2)) { - int elt_size = GET_MODE_UNIT_SIZE (mode); - unsigned n_elts = (GET_MODE_SIZE (mode) / elt_size); + unsigned n_elts = GET_MODE_NUNITS (mode); unsigned HOST_WIDE_INT sel = UINTVAL (trueop2); unsigned HOST_WIDE_INT mask; if (n_elts == HOST_BITS_PER_WIDE_INT)