From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1923) id A603238582B5; Tue, 23 Jan 2024 20:58:28 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A603238582B5 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1706043508; bh=MlLwdFejvaN0r6t4Ns72UpO6klD6XJlwgs9xplWq81w=; h=From:To:Subject:Date:From; b=PfRTRiAIl43h80rAy/ZikXJBQvg0N7xF+/DsH2+Yb+XkqS55AHbaQsnd8AbJnAsmr jxnJ2uT/6z+g7SwetUmYOEJFFzE3v+zs/PIDyToVu5u9pdz/quQ2PKQ58cASOfGPjW SrjNe553oNNUmyaFsRhlhchZHjuZTK2lwOHHOt0g= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Philipp Tomsich To: gcc-cvs@gcc.gnu.org Subject: [gcc(refs/vendors/vrull/heads/slp-improvements)] Fix: Do not rearrange splat vectors in try_rearrange_oprnd_info X-Act-Checkin: gcc X-Git-Author: Manolis Tsamis X-Git-Refname: refs/vendors/vrull/heads/slp-improvements X-Git-Oldrev: cdc6302234e4a971e352a6caaa0509ba594937e7 X-Git-Newrev: 59f31395f566db98e2d5fc3196155bf516523a7a Message-Id: <20240123205828.A603238582B5@sourceware.org> Date: Tue, 23 Jan 2024 20:58:28 +0000 (GMT) List-Id: https://gcc.gnu.org/g:59f31395f566db98e2d5fc3196155bf516523a7a commit 59f31395f566db98e2d5fc3196155bf516523a7a Author: Manolis Tsamis Date: Wed Dec 6 14:34:50 2023 +0100 Fix: Do not rearrange splat vectors in try_rearrange_oprnd_info Check that the vector elements taking part in a rearranged pattern (e.g. ABAB) are actually different. Otherwise a splat vector (AAAA) would be considered to fulfill any rearrangement pattern. We don't want to merge splat vectors together in a mixed node as that can both reduce performance and cause codegen issues. Ref #342 Diff: --- gcc/tree-vect-slp.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc index 724e53a4cfd..bb917e733df 100644 --- a/gcc/tree-vect-slp.cc +++ b/gcc/tree-vect-slp.cc @@ -1842,15 +1842,18 @@ try_rearrange_oprnd_info (vec &oprnds_info, unsigned group_size) int cur_pattern = 0; /* Check for an ABAB... pattern. */ if ((oprnd_info->def_stmts[j] == oprnd_info->def_stmts[j + 2]) - && (oprnd_info->def_stmts[j + 1] == oprnd_info->def_stmts[j + 3])) + && (oprnd_info->def_stmts[j + 1] == oprnd_info->def_stmts[j + 3]) + && (oprnd_info->def_stmts[j] != oprnd_info->def_stmts[j + 1])) cur_pattern = 1; /* Check for an AABB... pattern. */ else if ((oprnd_info->def_stmts[j] == oprnd_info->def_stmts[j + 1]) - && (oprnd_info->def_stmts[j + 2] == oprnd_info->def_stmts[j + 3])) + && (oprnd_info->def_stmts[j + 2] == oprnd_info->def_stmts[j + 3]) + && (oprnd_info->def_stmts[j] != oprnd_info->def_stmts[j + 2])) cur_pattern = 2; /* Check for an ABBA... pattern. */ else if ((oprnd_info->def_stmts[j] == oprnd_info->def_stmts[j + 3]) - && (oprnd_info->def_stmts[j + 1] == oprnd_info->def_stmts[j + 2])) + && (oprnd_info->def_stmts[j + 1] == oprnd_info->def_stmts[j + 2]) + && (oprnd_info->def_stmts[j] != oprnd_info->def_stmts[j + 1])) cur_pattern = 3; /* Unrecognised pattern. */ else