From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1923) id 49A033858C2C; Wed, 17 Jan 2024 19:15:22 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 49A033858C2C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1705518922; bh=/xSIxcn2eN/UBvJ1mOyjD12rXgqzjVYZzQp7iY+H/hU=; h=From:To:Subject:Date:From; b=Jmb3IypzJgyGSop3Mj8o47Mqk8VSjqh5t6V23tgzmGRhjTrI8S4KIJcM4HB4FWxJh KSLiJRUqm8h8xAHVdnRyxt1v7wo4g1sq3WyIYVUhwYERIK7zQcxH0bwpyECWcnZ/1v 9tRKHxCmIIzcZq2kSPGoGbEJM31tzYwddAZsC6n4= 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)] Implement the missing transformation for SLP rearrange_pattern 3 X-Act-Checkin: gcc X-Git-Author: Manolis Tsamis X-Git-Refname: refs/vendors/vrull/heads/slp-improvements X-Git-Oldrev: b2db4d6d8b0cce535d774970654b62763e157ecf X-Git-Newrev: 89f3268cde0fcd58f45311f4d28b3ea1ee13af8c Message-Id: <20240117191522.49A033858C2C@sourceware.org> Date: Wed, 17 Jan 2024 19:15:22 +0000 (GMT) List-Id: https://gcc.gnu.org/g:89f3268cde0fcd58f45311f4d28b3ea1ee13af8c commit 89f3268cde0fcd58f45311f4d28b3ea1ee13af8c Author: Manolis Tsamis Date: Wed Dec 13 11:31:45 2023 +0100 Implement the missing transformation for SLP rearrange_pattern 3 Ref #342 Diff: --- gcc/tree-vect-slp.cc | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc index f2ee40b25f9..4a9da25558a 100644 --- a/gcc/tree-vect-slp.cc +++ b/gcc/tree-vect-slp.cc @@ -1880,7 +1880,7 @@ try_rearrange_oprnd_info (vec &oprnds_info, unsigned group_size) dump_printf (MSG_NOTE, " pattern detected.\n"); } - if (pattern == 1) + if (pattern == 1 || pattern == 3) for (unsigned int j = 0; j < group_size; j += 4) { oprnds_info[0]->def_stmts[j+2] = oprnds_info[1]->def_stmts[j]; @@ -1900,9 +1900,6 @@ try_rearrange_oprnd_info (vec &oprnds_info, unsigned group_size) oprnds_info[0]->def_stmts[j+3] = oprnds_info[1]->def_stmts[j+2]; oprnds_info[0]->ops[j+3] = oprnds_info[1]->ops[j+2]; } - else if (pattern == 3) - /* No need to handle that for now. */ - return 0; if (dump_enabled_p ()) { @@ -2763,14 +2760,14 @@ fail: SLP_TREE_CHILDREN (one).safe_splice (children); SLP_TREE_CHILDREN (two).safe_splice (children); + SLP_TREE_CODE (one) = VEC_PERM_EXPR; + SLP_TREE_CODE (two) = VEC_PERM_EXPR; + unsigned int h = group_size / 2; + SLP_TREE_REPRESENTATIVE (one) = stmts[0]; + SLP_TREE_REPRESENTATIVE (two) = stmts[h]; + if (rearrange_pattern == 1) { - SLP_TREE_CODE (one) = VEC_PERM_EXPR; - SLP_TREE_CODE (two) = VEC_PERM_EXPR; - unsigned int h = group_size / 2; - SLP_TREE_REPRESENTATIVE (one) = stmts[0]; - SLP_TREE_REPRESENTATIVE (two) = stmts[h]; - for (unsigned int j = 0; j < h; j += 2) { SLP_TREE_LANE_PERMUTATION(one).safe_push (std::make_pair (0, j)); @@ -2788,12 +2785,6 @@ fail: } else if (rearrange_pattern == 2) { - SLP_TREE_CODE (one) = VEC_PERM_EXPR; - SLP_TREE_CODE (two) = VEC_PERM_EXPR; - unsigned int h = group_size / 2; - SLP_TREE_REPRESENTATIVE (one) = stmts[0]; - SLP_TREE_REPRESENTATIVE (two) = stmts[h]; - for (unsigned int j = 0; j < h; j += 2) { SLP_TREE_LANE_PERMUTATION(one).safe_push (std::make_pair (0, j)); @@ -2809,6 +2800,23 @@ fail: SLP_TREE_LANE_PERMUTATION(two).safe_push (std::make_pair (0, h + j + 1)); } } + else if (rearrange_pattern == 3) + { + for (unsigned int j = 0; j < h; j += 2) + { + SLP_TREE_LANE_PERMUTATION(one).safe_push (std::make_pair (0, j)); + SLP_TREE_LANE_PERMUTATION(one).safe_push (std::make_pair (0, j + 1)); + SLP_TREE_LANE_PERMUTATION(one).safe_push (std::make_pair (0, j + 1)); + SLP_TREE_LANE_PERMUTATION(one).safe_push (std::make_pair (0, j)); + } + for (unsigned int j = 0; j < h; j += 2) + { + SLP_TREE_LANE_PERMUTATION(two).safe_push (std::make_pair (0, h + j)); + SLP_TREE_LANE_PERMUTATION(two).safe_push (std::make_pair (0, h + j + 1)); + SLP_TREE_LANE_PERMUTATION(two).safe_push (std::make_pair (0, h + j + 1)); + SLP_TREE_LANE_PERMUTATION(two).safe_push (std::make_pair (0, h + j)); + } + } slp_tree child; FOR_EACH_VEC_ELT (SLP_TREE_CHILDREN (two), i, child) @@ -2826,7 +2834,6 @@ fail: children.safe_splice(SLP_TREE_CHILDREN (node)); } - if (two_operators) { /* ??? We'd likely want to either cache in bst_map sth like