From patchwork Tue Jan 7 12:17:41 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Biener X-Patchwork-Id: 104227 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 38123385841D for ; Tue, 7 Jan 2025 12:18:37 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 38123385841D Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=0xb2QblU; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=UtG+jWOv; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=0xb2QblU; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=UtG+jWOv X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from smtp-out1.suse.de (smtp-out1.suse.de [IPv6:2a07:de40:b251:101:10:150:64:1]) by sourceware.org (Postfix) with ESMTPS id AA9DC3858D21 for ; Tue, 7 Jan 2025 12:17:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org AA9DC3858D21 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org AA9DC3858D21 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a07:de40:b251:101:10:150:64:1 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1736252262; cv=none; b=Qx/EiYZWuzMuKorGQFnzpWNtsXulQmWNGf+YJM4VVFed4+PZi61dAPAUqBN5jO/dHL/qrKQTR6bgjMrrs/az0dFfHwrFbbAW6ZPPZ1F481x4d2um+nZrPxMdM25ZO0TqZc/8DfcMunx+gnZgctGKyKKCvyOV8Mqjd8pWZ2vFDtc= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1736252262; c=relaxed/simple; bh=UqyKjXrV5Y5xpP5HobbuecQIYHOX6xqWH7D+V8u5lBs=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:Date: From:To:Subject:MIME-Version; b=DvQHft/5+Ubgm0sFdbFz7hNO7IcDFCU0J5ZZviymXg+TbR00UtjrudnD79tqG60U5ZpX4SPXfLAURyNgOTSumMINQ2p6VPbBfNA+xlFBEBwnhQH0FpJ0nsVrgSBBBib6yy1B5secVnyhN8FCFkLQWkUJi9rs0PDw6oWBI58r1Zw= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org AA9DC3858D21 Received: from murzim.nue2.suse.org (unknown [10.168.4.243]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id A999C210FA; Tue, 7 Jan 2025 12:17:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1736252261; h=from:from:reply-to:date:date:to:to:cc:cc:mime-version:mime-version: content-type:content-type; bh=OxVZwANsYfFOv87jhQYHsvoVyTCLhVZZVRbpCuKbLD4=; b=0xb2QblUuXLwY5+CwaRQY/bh+v1mH39WhHYCBpZGnkaWqvYBsoMMS97xErLXOzjiHMfLXK zTqwP2Aj1ORnUuauTdCfw1I/1PPSizzGZ0TcoigCKAoJgOI4yT3eC0ohR0BOYloqAKjfbg +vB00Kzipo469xVOs9oyx5GgVRld24M= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1736252261; h=from:from:reply-to:date:date:to:to:cc:cc:mime-version:mime-version: content-type:content-type; bh=OxVZwANsYfFOv87jhQYHsvoVyTCLhVZZVRbpCuKbLD4=; b=UtG+jWOvu638xXsZ/+gdOF4mSrZW5QKnLoLmfcB86h3bkbneTPHWIFeafTT4D11g+BPDmK c9iVFFArqS209QDA== Authentication-Results: smtp-out1.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1736252261; h=from:from:reply-to:date:date:to:to:cc:cc:mime-version:mime-version: content-type:content-type; bh=OxVZwANsYfFOv87jhQYHsvoVyTCLhVZZVRbpCuKbLD4=; b=0xb2QblUuXLwY5+CwaRQY/bh+v1mH39WhHYCBpZGnkaWqvYBsoMMS97xErLXOzjiHMfLXK zTqwP2Aj1ORnUuauTdCfw1I/1PPSizzGZ0TcoigCKAoJgOI4yT3eC0ohR0BOYloqAKjfbg +vB00Kzipo469xVOs9oyx5GgVRld24M= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1736252261; h=from:from:reply-to:date:date:to:to:cc:cc:mime-version:mime-version: content-type:content-type; bh=OxVZwANsYfFOv87jhQYHsvoVyTCLhVZZVRbpCuKbLD4=; b=UtG+jWOvu638xXsZ/+gdOF4mSrZW5QKnLoLmfcB86h3bkbneTPHWIFeafTT4D11g+BPDmK c9iVFFArqS209QDA== Date: Tue, 7 Jan 2025 13:17:41 +0100 (CET) From: Richard Biener To: gcc-patches@gcc.gnu.org cc: RISC-V CI Subject: [PATCH] tree-optimization/118269 - SLP reduction chain and early breaks MIME-Version: 1.0 X-Spam-Score: -1.52 X-Spamd-Result: default: False [-1.52 / 50.00]; BAYES_HAM(-3.00)[100.00%]; MISSING_MID(2.50)[]; NEURAL_HAM_LONG(-0.75)[-0.745]; NEURAL_HAM_SHORT(-0.18)[-0.894]; MIME_GOOD(-0.10)[text/plain]; MISSING_XM_UA(0.00)[]; RCVD_COUNT_ZERO(0.00)[0]; ARC_NA(0.00)[]; RCPT_COUNT_TWO(0.00)[2]; FROM_HAS_DN(0.00)[]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; TO_MATCH_ENVRCPT_ALL(0.00)[]; FUZZY_BLOCKED(0.00)[rspamd.com]; TO_DN_SOME(0.00)[] X-Spam-Level: X-Spam-Status: No, score=-10.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, MISSING_MID, SPF_HELO_NONE, 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~patchwork=sourceware.org@gcc.gnu.org Message-Id: <20250107121837.38123385841D@sourceware.org> When we create the SLP reduction chain epilogue for the PHIs for the early exit we fail to properly classify the reduction as SLP reduction chain. The following fixes the corresponding checks. Bootstrapped and tested on x86_64-unknown-linux-gnu. Richard. PR tree-optimization/118269 * tree-vect-loop.cc (vect_create_epilog_for_reduction): Use the correct stmt for the REDUC_GROUP_FIRST_ELEMENT lookup. * gcc.dg/vect/vect-early-break_131-pr118269.c: New testcase. --- .../gcc.dg/vect/vect-early-break_131-pr118269.c | 17 +++++++++++++++++ gcc/tree-vect-loop.cc | 8 +++++--- 2 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/vect/vect-early-break_131-pr118269.c diff --git a/gcc/testsuite/gcc.dg/vect/vect-early-break_131-pr118269.c b/gcc/testsuite/gcc.dg/vect/vect-early-break_131-pr118269.c new file mode 100644 index 00000000000..5f7abcee57c --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-early-break_131-pr118269.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-add-options vect_early_break } */ +/* { dg-additional-options "-O3" } */ + +short g_113; +int func_1_l_1273, func_1_l_1370, func_1_l_1258; +void func_1() { + int l_1375; + for (; l_1375; l_1375--) { + for (; func_1_l_1370;) + ; + func_1_l_1273 &= !0; + func_1_l_1273 &= g_113; + if (func_1_l_1258) + break; + } +} diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index 2b9d5956635..bb1138bfcfb 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -6039,7 +6039,9 @@ vect_create_epilog_for_reduction (loop_vec_info loop_vinfo, # b1 = phi a2 = operation (a1) b2 = operation (b1) */ - bool slp_reduc = (slp_node && !REDUC_GROUP_FIRST_ELEMENT (stmt_info)); + bool slp_reduc + = (slp_node + && !REDUC_GROUP_FIRST_ELEMENT (STMT_VINFO_REDUC_DEF (reduc_info))); bool direct_slp_reduc; tree induction_index = NULL_TREE; @@ -6331,7 +6333,7 @@ vect_create_epilog_for_reduction (loop_vec_info loop_vinfo, a multiple of the SLP group size. The same is true if we couldn't use a single defuse cycle. */ - if (REDUC_GROUP_FIRST_ELEMENT (stmt_info) + if (REDUC_GROUP_FIRST_ELEMENT (STMT_VINFO_REDUC_DEF (reduc_info)) || direct_slp_reduc || (slp_reduc && constant_multiple_p (TYPE_VECTOR_SUBPARTS (vectype), group_size)) @@ -6632,7 +6634,7 @@ vect_create_epilog_for_reduction (loop_vec_info loop_vinfo, if (slp_node) { tree initial_value = NULL_TREE; - if (REDUC_GROUP_FIRST_ELEMENT (stmt_info)) + if (REDUC_GROUP_FIRST_ELEMENT (STMT_VINFO_REDUC_DEF (reduc_info))) initial_value = reduc_info->reduc_initial_values[0]; neutral_op = neutral_op_for_reduction (TREE_TYPE (vectype), code, initial_value, false);