From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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 Content-Type: text/plain; charset=US-ASCII 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 List-Id: Message-ID: <20240304104425.rmKAgzD36e71vY_FWMYY0uLJAO6OYGT2dBNP05YSYLY@z> 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; -- 2.35.3