From patchwork Mon Mar 4 10:44:25 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Biener X-Patchwork-Id: 209498 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:fa17:b0:10a:f01:a869 with SMTP id ju23csp1337576dyc; Mon, 4 Mar 2024 02:45:15 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCVcDhU5TQcMu0XDfB3mRVgHDzpel4Ak1qcQlwCkKKh8xlRFFGZoPJ6ZMnfsiOekJ3GmA6wepb7qG9zS62JmjC+QFN1Slw== X-Google-Smtp-Source: AGHT+IEKFYRQt7Tx2KtPL3In3DAUA6IJWY6qgi+JfmXhtKHKGvxOE3XNSmV1kXTnnI2fT9AJgNOJ X-Received: by 2002:a05:6358:6523:b0:17b:759:65c2 with SMTP id v35-20020a056358652300b0017b075965c2mr15736402rwg.10.1709549115602; Mon, 04 Mar 2024 02:45:15 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709549115; cv=pass; d=google.com; s=arc-20160816; b=t6fpIhqr/0kXWgT1P7+nu1Y2mVnI+mizX3WqpG1W7EyrhUP2uSGxwRw+NQe8vy3HD+ +Pu9ZeVkxYIfzz4W92Hnn9iBdQ64QQqtT+dj+/9jdQ0g0zDRART/AnET3nsIOLjWND8v xShjkpASX7JZI6+TsoRX/gwoP9vhLpIIJtT6ZLImP3k9nFiDb6fIUEJ2YnUsmZxOle40 jsF4znZ4s/XyatxyVAnM6c40Zx5nCU+OaFK2e6nBYSSwRngXENoV34ZAiAebft8M1Pxr yYmA4mRH6osqBQROA5ek+9SdFdd8Q2IV+spoYKwlbTsXVb3DVGLdQAm7W4jl+KVXUzKD VeLA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=message-id:errors-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:mime-version :subject:to:from:date:dkim-signature:dkim-signature:dkim-signature :dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=4LPgNVvGC+ZInuBczIs4NvKyiSxNSBm8nwqewneZdSY=; fh=hPrbWPhweUx4V0GV9uXJqbyAzg2ABmTz7kczrAQqMmM=; b=c/TGffeYuhPfVK0LmVXEmtXlkAMoyOyNv/l5Cy7yufe4BnABlGGwpVERaxGZgbjpHO pHVNr6gkwAZse9CEhLUW0KCksYEdzG0BsjUm9z1V+lh03Lvny/jaZS2KLct7CdIMqX1f tCqxV2tGFinLI4yYxVQMbaOY/7KwHsM48nWrqknDLUSqhF2rUEukGOmltGozBh9orF69 rhR21aQrsBLP2OE9R82SRsn9e3i5oM6EOqwAjHZARwBDqjXauXu7NrPG0pfMPYW282A7 7++eKTKB+E5kNJ3Y4E512qPOWvTnH/SFAyq7C/jg64agvZfpitF/tEk8Z6wySBfzBTUg 4xvw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@suse.de header.s=susede2_rsa header.b=DeqhPltT; dkim=neutral (no key) header.i=@suse.de header.s=susede2_ed25519; dkim=pass header.i=@suse.de header.s=susede2_rsa header.b=DeqhPltT; dkim=neutral (no key) header.i=@suse.de header.s=susede2_ed25519; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=suse.de Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id a4-20020a05620a02e400b0078826020765si2270005qko.422.2024.03.04.02.45.15 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Mar 2024 02:45:15 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@suse.de header.s=susede2_rsa header.b=DeqhPltT; dkim=neutral (no key) header.i=@suse.de header.s=susede2_ed25519; dkim=pass header.i=@suse.de header.s=susede2_rsa header.b=DeqhPltT; dkim=neutral (no key) header.i=@suse.de header.s=susede2_ed25519; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=suse.de Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 500153858C54 for ; Mon, 4 Mar 2024 10:45:15 +0000 (GMT) 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 [195.135.223.130]) by sourceware.org (Postfix) with ESMTPS id B6D8F3858C60 for ; Mon, 4 Mar 2024 10:44:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B6D8F3858C60 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 B6D8F3858C60 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=195.135.223.130 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1709549068; cv=none; b=nSh8rcfSI+onYmCuW7fWDp5eZuV5AZc9shy81qYRZeaO0urGLqW9KoTV62BiEilT7eY2n5Wo+VEbvp8QoGjxBhW1PRZtTaEJ7GYqrLnC5LApDtaUAe2dCZ1cZoyH6VjIMuX5lORcEiHw/PpAryi8qXFLOx2jCfPC3EcywvTgPYM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1709549068; c=relaxed/simple; bh=iL1tPMDVOlC92qawUYk38KapVc+kQ+8rjEnXp0fTZXk=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:Date: From:To:Subject:MIME-Version; b=tUkit4BAuesbWq1ltSvkVw/SfnK4dJdjk7V/si0ekLIzGcv76+5iINxxa4c+JmRfcqaBj2gbyFB9o6Wvj0KcsQCF67fGr+MIRx9bnPssmy6JMqH1vt76AJaf6ruyLYNOB1s/SNlPyuG7qKrYr8K1a4F5UIf5UQRb6OAxyyysPok= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from [10.168.4.150] (unknown [10.168.4.150]) (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 77C05222B4 for ; Mon, 4 Mar 2024 10:44:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1709549065; h=from:from:reply-to:date:date:to:to:cc:mime-version:mime-version: content-type:content-type; bh=4LPgNVvGC+ZInuBczIs4NvKyiSxNSBm8nwqewneZdSY=; b=DeqhPltTZePSxCYKg7pux1HAURjnTjRweHuZnxmNPNji+63/9fHqLDItguetFwy60fZkHE X2TagAICkL/U0R9oddtZDxhm2r5YUbWcWVQSktn31Xo0J2XLWhNJTheMctqS8rU1Mx0TPq kPwNYQiH8M8prfkmb58YE92/2Kss/gM= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1709549065; h=from:from:reply-to:date:date:to:to:cc:mime-version:mime-version: content-type:content-type; bh=4LPgNVvGC+ZInuBczIs4NvKyiSxNSBm8nwqewneZdSY=; b=ROedoGpa1CKPCx8ECF/zLNRTAEqzgH/Z9WET6LLxZ/Fvas0qyl7a85VRO0TegU80ApxadS Y9xTgxMLygFZTKCg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1709549065; h=from:from:reply-to:date:date:to:to:cc:mime-version:mime-version: content-type:content-type; bh=4LPgNVvGC+ZInuBczIs4NvKyiSxNSBm8nwqewneZdSY=; b=DeqhPltTZePSxCYKg7pux1HAURjnTjRweHuZnxmNPNji+63/9fHqLDItguetFwy60fZkHE X2TagAICkL/U0R9oddtZDxhm2r5YUbWcWVQSktn31Xo0J2XLWhNJTheMctqS8rU1Mx0TPq kPwNYQiH8M8prfkmb58YE92/2Kss/gM= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1709549065; h=from:from:reply-to:date:date:to:to:cc:mime-version:mime-version: content-type:content-type; bh=4LPgNVvGC+ZInuBczIs4NvKyiSxNSBm8nwqewneZdSY=; b=ROedoGpa1CKPCx8ECF/zLNRTAEqzgH/Z9WET6LLxZ/Fvas0qyl7a85VRO0TegU80ApxadS Y9xTgxMLygFZTKCg== Date: Mon, 4 Mar 2024 11:44:25 +0100 (CET) From: Richard Biener To: gcc-patches@gcc.gnu.org Subject: [PATCH] tree-optimization/114203 - wrong CLZ niter computation MIME-Version: 1.0 Authentication-Results: smtp-out1.suse.de; none X-Spam-Level: X-Spam-Score: -1.71 X-Spamd-Result: default: False [-1.71 / 50.00]; ARC_NA(0.00)[]; FROM_HAS_DN(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; NEURAL_HAM_LONG(-0.99)[-0.991]; MIME_GOOD(-0.10)[text/plain]; TO_DN_NONE(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; MISSING_MID(2.50)[]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; NEURAL_HAM_SHORT(-0.11)[-0.575]; FUZZY_BLOCKED(0.00)[rspamd.com]; RCVD_COUNT_ZERO(0.00)[0]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; BAYES_HAM(-3.00)[100.00%] 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, 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+ouuuleilei=gmail.com@gcc.gnu.org Message-Id: <20240304104515.500153858C54@sourceware.org> X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1792592173523639468 X-GMAIL-MSGID: 1792592173523639468 For precision less than int we apply the adjustment to make it defined at zero after the adjustment to make it compute CLZ rather than CTZ. That's wrong. Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed. PR tree-optimization/114203 * tree-ssa-loop-niter.cc (build_cltz_expr): Apply CTZ->CLZ adjustment before making the result defined at zero. * gcc.dg/torture/pr114203.c: New testcase. --- gcc/testsuite/gcc.dg/torture/pr114203.c | 21 +++++++++++++++++++++ gcc/tree-ssa-loop-niter.cc | 7 +++---- 2 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/torture/pr114203.c diff --git a/gcc/testsuite/gcc.dg/torture/pr114203.c b/gcc/testsuite/gcc.dg/torture/pr114203.c new file mode 100644 index 00000000000..0ef6279942a --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr114203.c @@ -0,0 +1,21 @@ +/* { dg-do run } */ + +int __attribute__((noipa)) +foo (unsigned char b) +{ + int c = 0; + + while (b) { + b >>= 1; + c++; + } + + return c; +} + +int main() +{ + if (foo(0) != 0) + __builtin_abort (); + return 0; +} diff --git a/gcc/tree-ssa-loop-niter.cc b/gcc/tree-ssa-loop-niter.cc index 038e4331661..c6d010f6d89 100644 --- a/gcc/tree-ssa-loop-niter.cc +++ b/gcc/tree-ssa-loop-niter.cc @@ -2288,6 +2288,9 @@ build_cltz_expr (tree src, bool leading, bool define_at_zero) src = fold_convert (unsigned_type_node, src); call = build_call_expr (fn, 1, src); + if (leading && prec < i_prec) + call = fold_build2 (MINUS_EXPR, integer_type_node, call, + build_int_cst (integer_type_node, i_prec - prec)); if (define_at_zero) { tree is_zero = fold_build2 (NE_EXPR, boolean_type_node, src, @@ -2295,10 +2298,6 @@ build_cltz_expr (tree src, bool leading, bool define_at_zero) call = fold_build3 (COND_EXPR, integer_type_node, is_zero, call, build_int_cst (integer_type_node, prec)); } - - if (leading && prec < i_prec) - call = fold_build2 (MINUS_EXPR, integer_type_node, call, - build_int_cst (integer_type_node, i_prec - prec)); } return call;