From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1666) id 846253858C2F; Fri, 23 Jun 2023 06:44:46 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 846253858C2F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1687502686; bh=aPGABpkxTTJyHk/wAB4tdIfzjMya81kWXF+IAvc4qHQ=; h=From:To:Subject:Date:From; b=cgbokwdqVEZ/H+WkG22B1ev6jsPxfm6cdyQ3eDN2EatruaJmcpdzLE6PvT5g5mbOR VQ5OKbAUSSEdVjLe90303Ev43vk2bZpvtMJ/cvgQzcSGEiIWaWy4RHDV9NoedjobPH +gdALsevCPotlaWWi8kBJLcJTyC5YaZVDkZ1vtiE= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Richard Biener To: gcc-cvs@gcc.gnu.org Subject: [gcc r14-2038] Improve vector_vector_composition_type X-Act-Checkin: gcc X-Git-Author: Richard Biener X-Git-Refname: refs/heads/master X-Git-Oldrev: 270742ceb5141db498ef63373512ed071923b940 X-Git-Newrev: 1742ea94aaa758a2b0c40360f89e27770bd8ffeb Message-Id: <20230623064446.846253858C2F@sourceware.org> Date: Fri, 23 Jun 2023 06:44:46 +0000 (GMT) List-Id: https://gcc.gnu.org/g:1742ea94aaa758a2b0c40360f89e27770bd8ffeb commit r14-2038-g1742ea94aaa758a2b0c40360f89e27770bd8ffeb Author: Richard Biener Date: Thu Jun 22 15:14:51 2023 +0200 Improve vector_vector_composition_type We sometimes get to ask to decompose, say V2DFmode into two halves. Currently this results in composing it from two DImode pieces instead of the obvious two DFmode pieces. The following adjusts vector_vector_composition_type for this trivial case and avoids a VIEW_CONVERT_EXPR in the initial code generation. * tree-vect-stmts.cc (vector_vector_composition_type): Handle composition of a vector from a number of elements that happens to match its number of lanes. Diff: --- gcc/tree-vect-stmts.cc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc index ae24f3e66e6..9e046ced7c6 100644 --- a/gcc/tree-vect-stmts.cc +++ b/gcc/tree-vect-stmts.cc @@ -2143,6 +2143,14 @@ vector_vector_composition_type (tree vtype, poly_uint64 nelts, tree *ptype) if (!VECTOR_MODE_P (vmode)) return NULL_TREE; + /* When we are asked to compose the vector from its components let + that happen directly. */ + if (known_eq (TYPE_VECTOR_SUBPARTS (vtype), nelts)) + { + *ptype = TREE_TYPE (vtype); + return vtype; + } + poly_uint64 vbsize = GET_MODE_BITSIZE (vmode); unsigned int pbsize; if (constant_multiple_p (vbsize, nelts, &pbsize))