From patchwork Thu Jul 18 05:59:47 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiawei X-Patchwork-Id: 1961904 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4WPhxF6hCCz20B2 for ; Thu, 18 Jul 2024 16:00:33 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 2AEC3385EC2A for ; Thu, 18 Jul 2024 06:00:31 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from cstnet.cn (smtp84.cstnet.cn [159.226.251.84]) by sourceware.org (Postfix) with ESMTPS id 049583858433 for ; Thu, 18 Jul 2024 06:00:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 049583858433 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=iscas.ac.cn Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=iscas.ac.cn ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 049583858433 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=159.226.251.84 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1721282414; cv=none; b=IkX62gqCrRu9tDVuL8S3hh6l66RAvlTPzz8qw0cacDp7yG9OJu6kHVp+6HL8587ePW4Akpacb56P6dqJAvZ+WbGtCNwUl7x/cjfmuZJQPLvXTcvKTlXt7SaNpCpgvRbg63Vddb0AyO907KoVC8HG3y0diRRRl2FPZWNjKX/oFKI= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1721282414; c=relaxed/simple; bh=go5U0Qv7TDYUJA3It+cvB/TfJ/W6cPE9vTXTerXryBU=; h=From:To:Subject:Date:Message-Id:MIME-Version; b=G6Crih+4F64tG7wKuH9haFJ84MhZaGUA9ZiK65P/1KEaWipcfpDHA13lJvQx5D8XLfcMO7DIVJDJ+tOFmNLNATWy4gtbeCyp832JW0dIyDR/551Wa+d2bvqNFRhsBcmbdtkAEx4mYssDUbFgHQh+vNs9q6L9+dD9GyLN289+Clk= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from localhost.localdomain (unknown [112.74.111.65]) by APP-05 (Coremail) with SMTP id zQCowAAHD+dgr5hm8TvwAw--.16294S2; Thu, 18 Jul 2024 14:00:02 +0800 (CST) From: Jiawei To: gcc-patches@gcc.gnu.org Cc: kito.cheng@gmail.com, jlaw@ventanamicro.com, rguenther@suse.de, juzhe.zhong@rivai.ai, pan2.li@intel.com, Jiawei Subject: [PATCH] Update SLP reductions process. Date: Thu, 18 Jul 2024 13:59:47 +0800 Message-Id: <20240718055947.3603177-1-jiawei@iscas.ac.cn> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-CM-TRANSID: zQCowAAHD+dgr5hm8TvwAw--.16294S2 X-Coremail-Antispam: 1UD129KBjvJXoWxXw18tr1fZr45Zw4DJF4DXFb_yoW5GrWrpF 13Aw13ur40yrn7GF9rGFs2qr4rJr9Ygw4UWrnIka48Ca15Aw1SgFyqkr13ZrW7CrWku3yf Xwn5A3s8WryjkF7anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUyl14x267AKxVW8JVW5JwAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2ocxC64kIII0Yj41l84x0c7CEw4AK67xGY2AK02 1l84ACjcxK6xIIjxv20xvE14v26r4j6ryUM28EF7xvwVC0I7IYx2IY6xkF7I0E14v26r4j 6F4UM28EF7xvwVC2z280aVAFwI0_Gr1j6F4UJwA2z4x0Y4vEx4A2jsIEc7CjxVAFwI0_Cr 1j6rxdM2AIxVAIcxkEcVAq07x20xvEncxIr21l5I8CrVACY4xI64kE6c02F40Ex7xfMcIj 6xIIjxv20xvE14v26r1j6r18McIj6I8E87Iv67AKxVWUJVW8JwAm72CE4IkC6x0Yz7v_Jr 0_Gr1lF7xvr2IYc2Ij64vIr41lF7I21c0EjII2zVCS5cI20VAGYxC7MxAIw28IcxkI7VAK I48JMxC20s026xCaFVCjc4AY6r1j6r4UMI8I3I0E5I8CrVAFwI0_Jr0_Jr4lx2IqxVCjr7 xvwVAFwI0_JrI_JrWlx4CE17CEb7AF67AKxVWUAVWUtwCIc40Y0x0EwIxGrwCI42IY6xII jxv20xvE14v26r1j6r1xMIIF0xvE2Ix0cI8IcVCY1x0267AKxVWUJVW8JwCI42IY6xAIw2 0EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Jr0_Gr1lIxAIcVC2z280aVCY1x02 67AKxVWUJVW8JbIYCTnIWIevJa73UjIFyTuYvjfUoOJ5UUUUU X-Originating-IP: [112.74.111.65] X-CM-SenderInfo: 5mld4v3l6l2u1dvotugofq/1tbiBgwCAGaYnIcsJgAAsn X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, KAM_SHORT, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org This patch improves SLP reduction handling by ensuring proper processing even for a single reduction statement.Vectorization instances are now built only when there are multiple scalar statements to combine into an SLP reduction. An example see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110632, this patch fix this problem,handling SLP reduction as expected. gcc/ChangeLog: * tree-vect-slp.cc (vect_analyze_slp): Improved handling of SLP reductions for single reduction statements. --- gcc/tree-vect-slp.cc | 49 +++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 26 deletions(-) diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc index 55ae496cbb2..b6dfd9fd32f 100644 --- a/gcc/tree-vect-slp.cc +++ b/gcc/tree-vect-slp.cc @@ -4054,34 +4054,31 @@ vect_analyze_slp (vec_info *vinfo, unsigned max_tree_size) } } /* Save for re-processing on failure. */ - vec saved_stmts = scalar_stmts.copy (); - vec roots = vNULL; - vec remain = vNULL; - if (scalar_stmts.length () <= 1 - || !vect_build_slp_instance (loop_vinfo, - slp_inst_kind_reduc_group, - scalar_stmts, roots, remain, - max_tree_size, &limit, bst_map, - NULL)) - { - if (scalar_stmts.length () <= 1) - scalar_stmts.release (); - /* Do SLP discovery for single-lane reductions. */ - for (auto stmt_info : saved_stmts) - { - vec stmts; - vec roots = vNULL; - vec remain = vNULL; - stmts.create (1); - stmts.quick_push (vect_stmt_to_vectorize (stmt_info)); - vect_build_slp_instance (vinfo, - slp_inst_kind_reduc_group, - stmts, roots, remain, - max_tree_size, &limit, - bst_map, NULL); + if (loop_vinfo->reductions.length() > 0) { + vec scalar_stmts; + scalar_stmts.create(loop_vinfo->reductions.length()); + + for (auto next_info : loop_vinfo->reductions) { + if (STMT_VINFO_DEF_TYPE(next_info) == vect_reduction_def) { + gassign *g = dyn_cast(STMT_VINFO_STMT(next_info)); + if (!g || !lane_reducing_op_p(gimple_assign_rhs_code(g))) { + scalar_stmts.quick_push(next_info); } - saved_stmts.release (); + } } + + if (scalar_stmts.length() > 1) { + vec roots = vNULL; + vec remain = vNULL; + if (!vect_build_slp_instance(loop_vinfo, slp_inst_kind_reduc_group, scalar_stmts, roots, remain, max_tree_size, &limit, bst_map, NULL)) { + scalar_stmts.release(); + } + } + else { + scalar_stmts.release(); + } + } + } }