From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2153) id 4B9093858422; Thu, 20 Apr 2023 17:45:42 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4B9093858422 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1682012742; bh=HR2cWXejpPhDVSKlHeFJTtBDbgf1gud7JbQU6Qbw1Sc=; h=From:To:Subject:Date:From; b=p5s3o9wxnzQBqGi0+g9t6evtJ6i655VIZEB61vjepJSmEWFMrC1uK952FEEYruN2w W6iilk55nDg3MG0v42RqPyf9pqwGodgKSGyznKnUiZnAevQpVILiBHt7jwUbDb8Pv5 I8qpCk4D3NWHnRL889hvuC0ajr6yrVvLqQJyoY10= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Jakub Jelinek To: gcc-cvs@gcc.gnu.org Subject: [gcc r14-121] tree-vect-patterns: One small vect_recog_ctz_ffs_pattern tweak [PR109011] X-Act-Checkin: gcc X-Git-Author: Jakub Jelinek X-Git-Refname: refs/heads/master X-Git-Oldrev: 3d7ab53d6c59499624aa41c8dea0664976820b3b X-Git-Newrev: 87c9bae4e32b54829dce0a93ff735412d5f684f8 Message-Id: <20230420174542.4B9093858422@sourceware.org> Date: Thu, 20 Apr 2023 17:45:42 +0000 (GMT) List-Id: https://gcc.gnu.org/g:87c9bae4e32b54829dce0a93ff735412d5f684f8 commit r14-121-g87c9bae4e32b54829dce0a93ff735412d5f684f8 Author: Jakub Jelinek Date: Thu Apr 20 19:44:27 2023 +0200 tree-vect-patterns: One small vect_recog_ctz_ffs_pattern tweak [PR109011] I've noticed I've made a typo, ifn in this function this late is always only IFN_CTZ or IFN_FFS, never IFN_CLZ. Due to this typo, we weren't using the originally intended .CTZ (X) = .POPCOUNT ((X - 1) & ~X) but .CTZ (X) = PREC - .POPCOUNT (X | -X) instead when we want to emit __builtin_ctz*/.CTZ using .POPCOUNT. Both compute the same value, both are defined at 0 with the same value (PREC), both have same number of GIMPLE statements, but I think the former ought to be preferred, because lots of targets have andn as a single operation rather than two, and also putting a -1 constant into a vector register is often cheaper than vector with broadcast PREC power of two value. 2023-04-20 Jakub Jelinek PR tree-optimization/109011 * tree-vect-patterns.cc (vect_recog_ctz_ffs_pattern): Use .CTZ (X) = .POPCOUNT ((X - 1) & ~X) in preference to .CTZ (X) = PREC - .POPCOUNT (X | -X). Diff: --- gcc/tree-vect-patterns.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/tree-vect-patterns.cc b/gcc/tree-vect-patterns.cc index d1b86e8b5e0..a49b0953977 100644 --- a/gcc/tree-vect-patterns.cc +++ b/gcc/tree-vect-patterns.cc @@ -1630,7 +1630,7 @@ vect_recog_ctz_ffs_pattern (vec_info *vinfo, stmt_vec_info stmt_vinfo, && defined_at_zero_new && val == prec && val_new == prec) - || (ifnnew == IFN_POPCOUNT && ifn == IFN_CLZ)) + || (ifnnew == IFN_POPCOUNT && ifn == IFN_CTZ)) { /* .CTZ (X) = PREC - .CLZ ((X - 1) & ~X) .CTZ (X) = .POPCOUNT ((X - 1) & ~X). */