[{"id":3683441,"web_url":"http://patchwork.ozlabs.org/comment/3683441/","msgid":"<pp239r38-7913-3138-2r58-88p12733r665@fhfr.qr>","list_archive_url":null,"date":"2026-04-28T12:56:54","subject":"Re: [PATCH v3] BB SLP: Enabling reduction root finding for\n sum-of-diff\n kind of patterns","submitter":{"id":4338,"url":"http://patchwork.ozlabs.org/api/people/4338/","name":"Richard Biener","email":"rguenther@suse.de"},"content":"On Tue, 28 Apr 2026, Raghesh Aloor wrote:\n\n> Add an optional parameter allow_alt_code to vect_slp_linearize_chain\n> (default true).  When false, do not follow into MINUS_EXPR when\n> building a PLUS reduction chain; treat MINUS results as leaves.\n> \n> This will allow \"sum of diffs\" (d_i = a[i]-b[i], sum = d0+...+dN)\n> kind of pattern to be recognized and vectorized. Pure PLUS chains\n> will still work; other callers of vect_slp_linearize_chain keep the\n> default.  Once support for MINUS_EXPR in the chain is added, this\n> call site can be switched to allow_alt_code true.\n>\n> gcc/ChangeLog:\n> \n> \t* tree-vect-slp.cc (vect_slp_linearize_chain): Optional parameter\n>   allow_alt_code added (default true), check added not to follow\n>   MINUS_EXPR, when false\n> \t(vect_slp_check_for_roots): Calls vect_slp_linearize_chain with\n>   parameter allow_alt_code set to false\n> \n> gcc/testsuite/ChangeLog:\n> \n> \t* gcc.dg/vect/bb-slp-sum-of-diffs.c: New test.\n> \n> ---\n> [Public]\n> \n> Hi Richard,\n> \n> I have addressed your comments. Added the target string to the test case, removed unwanted spaces and calls vect_slp_linearize_chain with 'false' set to the parameter vect_slp_linearize_chain. Refactoring the code is avoided for now as you suggested.\n> \n> The patch is tested using contrib/check_GNU_style.sh and this version is send via git send-email to avoid any indentation errors.\n> \n> Bootstrapped and tested on x86.\n\nOK.\n\nThanks,\nRichard.\n\n> \n> Thank You,\n> Raghesh\n> \n>  .../gcc.dg/vect/bb-slp-sum-of-diffs.c         | 25 +++++++++++++++++++\n>  gcc/tree-vect-slp.cc                          | 12 ++++++---\n>  2 files changed, 33 insertions(+), 4 deletions(-)\n>  create mode 100644 gcc/testsuite/gcc.dg/vect/bb-slp-sum-of-diffs.c\n> \n> diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-sum-of-diffs.c b/gcc/testsuite/gcc.dg/vect/bb-slp-sum-of-diffs.c\n> new file mode 100644\n> index 00000000000..6236e31289f\n> --- /dev/null\n> +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-sum-of-diffs.c\n> @@ -0,0 +1,25 @@\n> +/* { dg-do compile } */\n> +/* { dg-require-effective-target vect_int } */\n> +/* { dg-additional-options \"-O3 -fdump-tree-slp2\" } */\n> +\n> +/* Test that SLP recognizes \"sum of diffs\" (d_i = a[i]-b[i], sum = d0+...+d7)\n> +   as a reduction chain and vectorizes the basic block.  */\n> +\n> +int __attribute__((noipa))\n> +sum_of_diffs (int *a, int *b)\n> +{\n> +  int d0 = a[0] - b[0];\n> +  int d1 = a[1] - b[1];\n> +  int d2 = a[2] - b[2];\n> +  int d3 = a[3] - b[3];\n> +  int d4 = a[4] - b[4];\n> +  int d5 = a[5] - b[5];\n> +  int d6 = a[6] - b[6];\n> +  int d7 = a[7] - b[7];\n> +\n> +  int sum = d0 + d1 + d2 + d3 + d4 + d5 + d6 + d7;\n> +  return sum;\n> +}\n> +\n> +/* Check that the reduction was SLP-vectorized (REDUC_PLUS appears in the tree).  */\n> +/* { dg-final { scan-tree-dump \"\\.REDUC_PLUS\" \"slp2\" { target x86_64-*-* aarch64*-*-* } } } */\n> diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc\n> index 185ff6fb542..82ab2b7e196 100644\n> --- a/gcc/tree-vect-slp.cc\n> +++ b/gcc/tree-vect-slp.cc\n> @@ -1746,7 +1746,8 @@ dt_sort_cmp (const void *op1_, const void *op2_, void *)\n>     filling CHAIN with the result and using WORKLIST as intermediate storage.\n>     CODE_STMT and ALT_CODE_STMT are filled with the first stmt using CODE\n>     or MINUS_EXPR.  *CHAIN_STMTS if not NULL is filled with all computation\n> -   stmts, starting with START.  */\n> +   stmts, starting with START.  When ALLOW_ALT_CODE is false, do not\n> +   follow into MINUS_EXPR when building a PLUS chain (treat MINUS as leaf).  */\n>  \n>  static void\n>  vect_slp_linearize_chain (vec_info *vinfo,\n> @@ -1754,7 +1755,8 @@ vect_slp_linearize_chain (vec_info *vinfo,\n>  \t\t\t  vec<chain_op_t> &chain,\n>  \t\t\t  enum tree_code code, gimple *start,\n>  \t\t\t  gimple *&code_stmt, gimple *&alt_code_stmt,\n> -\t\t\t  vec<gimple *> *chain_stmts)\n> +\t\t\t  vec<gimple *> *chain_stmts,\n> +\t\t\t  bool allow_alt_code = true)\n>  {\n>    /* For each lane linearize the addition/subtraction (or other\n>       uniform associatable operation) expression tree.  */\n> @@ -1790,7 +1792,8 @@ vect_slp_linearize_chain (vec_info *vinfo,\n>  \t      && single_imm_use (op, &use_p, &use_stmt)\n>  \t      && is_gimple_assign (def_stmt_info->stmt)\n>  \t      && (gimple_assign_rhs_code (def_stmt_info->stmt) == code\n> -\t\t  || (code == PLUS_EXPR\n> +\t\t  || (allow_alt_code\n> +\t\t      && code == PLUS_EXPR\n>  \t\t      && (gimple_assign_rhs_code (def_stmt_info->stmt)\n>  \t\t\t  == MINUS_EXPR))))\n>  \t    {\n> @@ -10049,7 +10052,8 @@ vect_slp_check_for_roots (bb_vec_info bb_vinfo)\n>  \t    continue;\n>  \t  vect_slp_linearize_chain (bb_vinfo, worklist, chain, code, assign,\n>  \t\t\t\t    /* ??? */\n> -\t\t\t\t    code_stmt, alt_code_stmt, &chain_stmts);\n> +\t\t\t\t    code_stmt, alt_code_stmt, &chain_stmts,\n> +\t\t\t\t    false);\n>  \t  if (chain.length () > 1)\n>  \t    {\n>  \t      /* Sort the chain according to def_type and operation.  */\n>","headers":{"Return-Path":"<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>","X-Original-To":["incoming@patchwork.ozlabs.org","gcc-patches@gcc.gnu.org"],"Delivered-To":["patchwork-incoming@legolas.ozlabs.org","gcc-patches@gcc.gnu.org"],"Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256\n header.s=susede2_rsa header.b=s26alLu2;\n\tdkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256\n header.s=susede2_ed25519 header.b=HEfAxjxM;\n\tdkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de\n header.a=rsa-sha256 header.s=susede2_rsa header.b=URFWrwqP;\n\tdkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256\n header.s=susede2_ed25519 header.b=CF+WBWv4;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=2620:52:6:3111::32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)","sourceware.org;\n\tdkim=pass (1024-bit key,\n unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256\n header.s=susede2_rsa header.b=s26alLu2;\n\tdkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256\n header.s=susede2_ed25519 header.b=HEfAxjxM;\n\tdkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de\n header.a=rsa-sha256 header.s=susede2_rsa header.b=URFWrwqP;\n\tdkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256\n header.s=susede2_ed25519 header.b=CF+WBWv4","sourceware.org;\n dmarc=pass (p=none dis=none) header.from=suse.de","sourceware.org; spf=pass smtp.mailfrom=suse.de","server2.sourceware.org;\n arc=none smtp.remote-ip=195.135.223.131","smtp-out2.suse.de;\n\tnone"],"Received":["from vm01.sourceware.org (vm01.sourceware.org\n [IPv6:2620:52:6:3111::32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g4gSk72p9z1xrS\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 28 Apr 2026 22:57:26 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 0FD8B4BB593D\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 28 Apr 2026 12:57:25 +0000 (GMT)","from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131])\n by sourceware.org (Postfix) with ESMTPS id 6AB734BB5933\n for <gcc-patches@gcc.gnu.org>; Tue, 28 Apr 2026 12:56:57 +0000 (GMT)","from murzim.nue2.suse.org (unknown [10.168.4.243])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest\n SHA256)\n (No client certificate requested)\n by smtp-out2.suse.de (Postfix) with ESMTPS id 1CAD85BD2E;\n Tue, 28 Apr 2026 12:56:55 +0000 (UTC)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 0FD8B4BB593D","OpenDKIM Filter v2.11.0 sourceware.org 6AB734BB5933"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 6AB734BB5933","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 6AB734BB5933","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777381017; cv=none;\n b=hjmo8xp9QbJrlija90cE1IzUmwWO6RRvPim6ieSuaZ7/1axRpo+kN1+U6gUkkxtjivtUIn7osZUCzKRc3CdEdrMERb6I9DiLqnI6DO0zSR4c5V36AUXZYhs9pd+1hP0UxMCwqhnZKgbAMvukdPhNVV33gGAJQIJdjJlQ94zNj6Q=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1777381017; c=relaxed/simple;\n bh=t4t7kilS+54KMTnE09UDdemwOLWDgg2vu/uYRhrQEV8=;\n h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:Date:\n From:To:Subject:Message-ID:MIME-Version;\n b=PXJjl1K9Q8WP/1qFD3ylHaHAfVyJqCfNGg2byW50Q3JMqRcPSg6C5k7FskAVLi7dNt2Dl0ThGLKtdBHrN4fXZXpKJ+M7QgiTZYh3pu2HKd5JD4/x5Rna4yMV68y8ISXrm4HLV/cfR32JA3Porn15kGZCB43ZFLGZs6QfbQggmrQ=","ARC-Authentication-Results":"i=1; server2.sourceware.org","DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_rsa;\n t=1777381016;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:content-type:content-type:\n in-reply-to:in-reply-to:references:references;\n bh=iESuHiZZz/anRQcuIWvqMgquu5p6KRq91oEjeSaeJ+s=;\n b=s26alLu2uakMKT8RpzPrqZqJaA0yz8HgiXAVjD7Os31d4Y/hVlfBzilk8nH008YXxf2yEf\n Y4MYDW1RqJUiklmMroD3AzxGLcBda+5YgcIBdLk6Ddhwkihh8XZya+/ulM/KsAOHe3fzyY\n 4XMzJ5Eeh8+6HCu6UnTjzvj9Q82wjQ4=","v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_ed25519; t=1777381016;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:content-type:content-type:\n in-reply-to:in-reply-to:references:references;\n bh=iESuHiZZz/anRQcuIWvqMgquu5p6KRq91oEjeSaeJ+s=;\n b=HEfAxjxMHKx0Z6GLFTkN9fErxWRp/qirHDr0djsVE2/lphZqIptkv7Vdlf9xs8/N7bE1X4\n PwfgLN8lV7CyNTBA==","v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_rsa;\n t=1777381015;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:content-type:content-type:\n in-reply-to:in-reply-to:references:references;\n bh=iESuHiZZz/anRQcuIWvqMgquu5p6KRq91oEjeSaeJ+s=;\n b=URFWrwqPCCB9muym5jAetBXa+27owXysqyNHSyUXlhNPbXmJIxo362r7a7kBmiZUxryTE5\n SVX/d0tsmu8HlF6TUODl8ke0VUriy3Tj9Hz9H96sOsz5SofecvAiVysuIKfw17AdRfFA2k\n 3HqvLJC9IpA26Q36aS5CEijxYGqz6IA=","v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_ed25519; t=1777381015;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:content-type:content-type:\n in-reply-to:in-reply-to:references:references;\n bh=iESuHiZZz/anRQcuIWvqMgquu5p6KRq91oEjeSaeJ+s=;\n b=CF+WBWv4GsnfJcPDRTxelz6eW7p9oEh+PsZLups54njQw23K+bMLUgFmzZZh0bBSkaZ7M9\n x6Wq2Aot6IIwDICA=="],"Date":"Tue, 28 Apr 2026 14:56:54 +0200 (CEST)","From":"Richard Biener <rguenther@suse.de>","To":"Raghesh Aloor <Raghesh.Aloor@amd.com>","cc":"gcc-patches@gcc.gnu.org, venkataramanan.kumar@amd.com","Subject":"Re: [PATCH v3] BB SLP: Enabling reduction root finding for\n sum-of-diff\n kind of patterns","In-Reply-To":"<20260428122436.1476396-1-Raghesh.Aloor@amd.com>","Message-ID":"<pp239r38-7913-3138-2r58-88p12733r665@fhfr.qr>","References":"<2rs266p1-6216-6173-npq6-3889714r8561@fhfr.qr>\n <20260428122436.1476396-1-Raghesh.Aloor@amd.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=US-ASCII","X-Spamd-Result":"default: False [-4.30 / 50.00]; BAYES_HAM(-3.00)[100.00%];\n NEURAL_HAM_LONG(-1.00)[-1.000];\n NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain];\n FROM_HAS_DN(0.00)[]; MIME_TRACE(0.00)[0:+]; TO_DN_SOME(0.00)[];\n MISSING_XM_UA(0.00)[]; ARC_NA(0.00)[];\n RCVD_COUNT_ZERO(0.00)[0]; RCPT_COUNT_THREE(0.00)[3];\n FROM_EQ_ENVFROM(0.00)[]; FUZZY_RATELIMITED(0.00)[rspamd.com];\n TO_MATCH_ENVRCPT_ALL(0.00)[];\n DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519];\n DBL_BLOCKED_OPENRESOLVER(0.00)[tree-vect-slp.cc:url,\n murzim.nue2.suse.org:helo,\n suse.de:email, fhfr.qr:mid]","X-BeenThere":"gcc-patches@gcc.gnu.org","X-Mailman-Version":"2.1.30","Precedence":"list","List-Id":"Gcc-patches mailing list <gcc-patches.gcc.gnu.org>","List-Unsubscribe":"<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>","List-Archive":"<https://gcc.gnu.org/pipermail/gcc-patches/>","List-Post":"<mailto:gcc-patches@gcc.gnu.org>","List-Help":"<mailto:gcc-patches-request@gcc.gnu.org?subject=help>","List-Subscribe":"<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>","Errors-To":"gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"}}]