From patchwork Fri Mar 8 12:31:07 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Biener X-Patchwork-Id: 86971 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 0D763385DC28 for ; Fri, 8 Mar 2024 12:31:34 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) by sourceware.org (Postfix) with ESMTPS id 582323858D33 for ; Fri, 8 Mar 2024 12:31:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 582323858D33 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 582323858D33 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=195.135.223.131 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1709901070; cv=none; b=iD/rbJTHmB/AzSufk6g3X4xm2iRgln3K+nlGBXJQHky350CAZNUTMjPJ/ixUec9HPMK02b8eQw1zUiex86JyItMNu5f4mTJhdcJCsLlXlf3mWiZWUCUcmxkwKucdMY0I1tUCR6Phq55AE5nLWlS7eRDb+kdgIl9dA9K+Y36VsoM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1709901070; c=relaxed/simple; bh=/r9kgDv5iJTDGR8ivdffIjNva6TrQlMeKeieWQWis+w=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:Date: From:To:Subject:MIME-Version:Message-Id; b=KJqwlBWe7+OFRacg9E+xwH/dVqTLuHSh1hHMtcJ7/CDfxDv6dwYKxTa/WCEMhWSr1UYJ//pwoUFiFnSZxzPBAMrNkcm7ZWVUSmnPWw1BHhRJflpoWsFR0vcoPXe1/CWQqvc6wRR8ZDmqLp7bToVYPZwKH68Hu8QYgFhPjNmBSQo= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from imap2.dmz-prg2.suse.org (imap2.dmz-prg2.suse.org [10.150.64.98]) (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-out2.suse.de (Postfix) with ESMTPS id E8BE61F85D for ; Fri, 8 Mar 2024 12:31:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1709901068; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version:content-type:content-type; bh=x+fNeNXukQHjNQIrKDxS+ihebjsaeYRTLHgXvxTgP5M=; b=hBlG726GAxihoHQ6SSKcj5L+nfJMsHijeFufpGkcziVtannhVZFEEnpPtjNABGNJruQd1P K7brFa+i0hyR01jEMNA5oLQdbPI4r0Iv/Neoq+jEx606vqeU8Mp0rwwLa0QPCBid8GlH8L IGA3dcHyzTbpwQ08YOmiyiB0NzZEOqY= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1709901068; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version:content-type:content-type; bh=x+fNeNXukQHjNQIrKDxS+ihebjsaeYRTLHgXvxTgP5M=; b=Ir2MWlLNC43iGAxGa0on7eM2zv6wiwbAfYK3J9z5DBJUUiDkNcAw7iMutY3nqpeODWK8Tu WF/nIV+Fx9uOUZAw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1709901067; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version:content-type:content-type; bh=x+fNeNXukQHjNQIrKDxS+ihebjsaeYRTLHgXvxTgP5M=; b=dXRM5qINUm6Snf72jxTpWf0JdWYxEL0c5b8alLqXHR8MMgFRo3BTd2820zOLjgdN5kQNaz ImYmqm21s5tdiQvBubihqXfypQcZA6T8wLLSlxSlf7czCQV8Kp7SR14TggeKdviP5aVUfl z/uerGLDOlMfuFtMzPoR/fkfK4pVsys= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1709901067; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version:content-type:content-type; bh=x+fNeNXukQHjNQIrKDxS+ihebjsaeYRTLHgXvxTgP5M=; b=EbsqCWSk6XFNqa3Opt5yGZIgH6lBcEQVQoxFsPhp3OUlnVMhxAG61ByeVRNYxcAJeJx7bM sAI6odIp6gEMgFAA== Received: from imap2.dmz-prg2.suse.org (localhost [127.0.0.1]) (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 imap2.dmz-prg2.suse.org (Postfix) with ESMTPS id D04A9138F4 for ; Fri, 8 Mar 2024 12:31:07 +0000 (UTC) Received: from dovecot-director2.suse.de ([10.150.64.162]) by imap2.dmz-prg2.suse.org with ESMTPSA id qQgvMQsF62UXYQAAn2gu4w (envelope-from ) for ; Fri, 08 Mar 2024 12:31:07 +0000 Date: Fri, 8 Mar 2024 13:31:07 +0100 (CET) From: Richard Biener To: gcc-patches@gcc.gnu.org Subject: [PATCH] tree-optimization/114269 - 434.zeusmp regression after SCEV analysis fix MIME-Version: 1.0 Message-Id: <20240308123107.D04A9138F4@imap2.dmz-prg2.suse.org> Authentication-Results: smtp-out2.suse.de; none X-Spam-Level: X-Spam-Score: -1.30 X-Spamd-Result: default: False [-1.30 / 50.00]; ARC_NA(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; FROM_HAS_DN(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; MIME_GOOD(-0.10)[text/plain]; PREVIOUSLY_DELIVERED(0.00)[gcc-patches@gcc.gnu.org]; TO_DN_NONE(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; RCVD_COUNT_THREE(0.00)[3]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; NEURAL_HAM_SHORT(-0.20)[-1.000]; FUZZY_BLOCKED(0.00)[rspamd.com]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_TLS_ALL(0.00)[]; BAYES_HAM(-0.00)[33.10%] X-Spam-Status: No, score=-11.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE 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 The following addresses a performance regression caused by the recent SCEV analysis fix with regard to folding multiplications and undefined behavior on overflow. We do not handle (T) { a, +, b } * c but can treat sign-conversions from unsigned by performing the multiplication in the unsigned type. That's what we already do for additions (but that misses one case that turns out important). This fixes the 434.zeusmp regression for me. Bootstrap and regtest running on x86_64-unknown-linux-gnu. PR tree-optimization/114269 * tree-chrec.cc (chrec_fold_plus_1): Handle sign-conversions in the third CASE_CONVERT case as well. (chrec_fold_multiply): Handle sign-conversions from unsigned by performing the operation in the unsigned type. --- gcc/tree-chrec.cc | 48 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/gcc/tree-chrec.cc b/gcc/tree-chrec.cc index 2e6c7356d3b..7cd0ebc1010 100644 --- a/gcc/tree-chrec.cc +++ b/gcc/tree-chrec.cc @@ -325,6 +325,22 @@ chrec_fold_plus_1 (enum tree_code code, tree type, : build_int_cst_type (type, -1))); CASE_CONVERT: + { + /* We can strip sign-conversions to signed by performing the + operation in unsigned. */ + tree optype = TREE_TYPE (TREE_OPERAND (op1, 0)); + if (INTEGRAL_TYPE_P (type) + && INTEGRAL_TYPE_P (optype) + && tree_nop_conversion_p (type, optype) + && TYPE_UNSIGNED (optype)) + return chrec_convert (type, + chrec_fold_plus_1 (code, optype, + chrec_convert (optype, + op0, NULL), + TREE_OPERAND (op1, 0)), + NULL); + } + if (tree_contains_chrecs (op1, NULL)) return chrec_dont_know; /* FALLTHRU */ @@ -424,6 +440,22 @@ chrec_fold_multiply (tree type, return chrec_fold_multiply_poly_poly (type, op0, op1); CASE_CONVERT: + { + /* We can strip sign-conversions to signed by performing the + operation in unsigned. */ + tree optype = TREE_TYPE (TREE_OPERAND (op1, 0)); + if (INTEGRAL_TYPE_P (type) + && INTEGRAL_TYPE_P (optype) + && tree_nop_conversion_p (type, optype) + && TYPE_UNSIGNED (optype)) + return chrec_convert (type, + chrec_fold_multiply (optype, + chrec_convert (optype, + op0, NULL), + TREE_OPERAND (op1, 0)), + NULL); + } + if (tree_contains_chrecs (op1, NULL)) return chrec_dont_know; /* FALLTHRU */ @@ -474,6 +506,22 @@ chrec_fold_multiply (tree type, } CASE_CONVERT: + { + /* We can strip sign-conversions to signed by performing the + operation in unsigned. */ + tree optype = TREE_TYPE (TREE_OPERAND (op0, 0)); + if (INTEGRAL_TYPE_P (type) + && INTEGRAL_TYPE_P (optype) + && tree_nop_conversion_p (type, optype) + && TYPE_UNSIGNED (optype)) + return chrec_convert (type, + chrec_fold_multiply (optype, + TREE_OPERAND (op0, 0), + chrec_convert (optype, + op1, NULL)), + NULL); + } + if (tree_contains_chrecs (op0, NULL)) return chrec_dont_know; /* FALLTHRU */