From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf1-x129.google.com (mail-lf1-x129.google.com [IPv6:2a00:1450:4864:20::129]) by sourceware.org (Postfix) with ESMTPS id ED6FB3858C52 for ; Thu, 19 Jan 2023 09:43:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org ED6FB3858C52 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-lf1-x129.google.com with SMTP id cf42so2441360lfb.1 for ; Thu, 19 Jan 2023 01:43:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=YalwaIOWbg1atTq8Nv0TpOc/959kW+6n9FjVzuTSMVc=; b=VAcffen2fVK7lQxfoY4IITeDcmhzbbdq41rZE4K8F/cuGFuyGwluvjX6c3LYWJRoJj bjZc19oA/14uOHeUBUKudw3LbtUAUDS+75u32xPseKPlJqNaVGq6zms85xzs+kkEIaKV ZQRZ7KJLq68odddqBoPaw0A5qH5lRCT9SYfBcu9/KbdrQ2DCbPeZf++KW35Fq1ffWMRL LR128zzI6ED3+Ybtlfh4gITyX9BvY2stsEvi1kf5GlPhkfHCCzr+BLW2gkNDKx9rbV29 XXJYyfXWdahyOPjnuwuj6H+HAtbz0e9NAO/LgLQmcmYW/C4tJV2Jk0yBMc2dv8l/A0CB WNvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=YalwaIOWbg1atTq8Nv0TpOc/959kW+6n9FjVzuTSMVc=; b=HSN/ZxjyPJQKivC5Xl6NgU+hFSUYV3ymmt4OO/WrJcmRucU9GXiBTaFjiuKSz/pf78 uW0CCJ0Pwb84mlOBs4UmBvBYJvrA7lVTXI4mKD3a58S1FSuM3N9Ha5QYE4PAvo5Ds2F+ uHBbhbhHTUOY3tSCz17HqNrNEL+AlXUxagi15aaEvxwDY8vBGWpH0QeYyped6mwmv4j8 A1+KyvKuzCo3gDjMAaRo97hEEtlVg9wNa3L0fAbM6DcMzekmw4QvFWvv7mniNPoEqO+9 vcjuajlXpbmihrUNj5XnUIacBOUiFUmiidUVHseAHIxlSm5yy0auME/byEQr+n7o6Z1l 212g== X-Gm-Message-State: AFqh2kpaoSLm2AAkqe2V/BZ4urB/UmSpeg270jWh52HwqBYCqbw7ZB5w BqINQwVYiJUTn3tftBFkN0YX1Jc1cRDUW01erFc= X-Google-Smtp-Source: AMrXdXusajoyBpy9mgNpQ6JP+NxMZKruNuZ8gTkRKz1mKXAoikaxewEhn+QmvtLKtpQ4e7udhudCU/a7PJfmnPJHWX4= X-Received: by 2002:a05:6512:2398:b0:4ca:2a23:69d8 with SMTP id c24-20020a056512239800b004ca2a2369d8mr1048944lfv.599.1674121416088; Thu, 19 Jan 2023 01:43:36 -0800 (PST) MIME-Version: 1.0 References: <20230119091912.4qrqkw3fjmh5xlgk@lug-owl.de> In-Reply-To: <20230119091912.4qrqkw3fjmh5xlgk@lug-owl.de> From: Richard Biener Date: Thu, 19 Jan 2023 10:43:23 +0100 Message-ID: Subject: Re: [PATCH 5/8 v2] middle-end: Add cltz_complement idiom recognition To: Jan-Benedict Glaw Cc: Andrew Carlotti , gcc-patches@gcc.gnu.org Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,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 List-Id: On Thu, Jan 19, 2023 at 10:19 AM Jan-Benedict Glaw wrote: > > On Thu, 2022-12-22 17:42:16 +0000, Andrew Carlotti via Gcc-patches wrote: > > New patch below, bootstrapped and regression tested on > > aarch64-unknown-linux-gnu and x86_64-pc-linux-gnu - ok to merge? > > > diff --git a/gcc/tree-ssa-loop-niter.cc b/gcc/tree-ssa-loop-niter.cc > > index fece876099c1687569d6351e7d2416ea6acae5b5..ce2441f2a6dbdf2d8fe42755d5d1abd8a631bb5c 100644 > > --- a/gcc/tree-ssa-loop-niter.cc > > +++ b/gcc/tree-ssa-loop-niter.cc > > @@ -42,6 +42,7 @@ along with GCC; see the file COPYING3. If not see > > #include "tree-chrec.h" > > #include "tree-scalar-evolution.h" > > #include "tree-dfa.h" > > +#include "internal-fn.h" > > #include "gimple-range.h" > > > > > > @@ -2198,6 +2199,224 @@ number_of_iterations_popcount (loop_p loop, edge exit, > > return true; > > } > > > > +/* Return an expression that counts the leading/trailing zeroes of src. > > + > > + If define_at_zero is true, then the built expression will be defined to > > + return the precision of src when src == 0 (using either a conditional > > + expression or a suitable internal function). > > + Otherwise, we can elide the conditional expression and let src = 0 invoke > > + undefined behaviour. */ > > + > > +static tree > > +build_cltz_expr (tree src, bool leading, bool define_at_zero) > > +{ > [...] > > + > > + tree call; > > + if (use_ifn) > > + { > > + call = build_call_expr_internal_loc (UNKNOWN_LOCATION, ifn, > > + integer_type_node, 1, src); > > + int val; > > + scalar_int_mode mode = SCALAR_INT_TYPE_MODE (utype); > ^^^^^^^^^^^^^^^^^^^^ > > This will give us a new unused variable warning. I wonder if hardening the defaults.h macros like #define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) (((MODE), (VALUE)), 0) fixes that and makes sense (also to avoid losing side-effects for the arguments) Richard. > > + int optab_defined_at_zero > > + = leading ? CLZ_DEFINED_VALUE_AT_ZERO (mode, val) > > + : CTZ_DEFINED_VALUE_AT_ZERO (mode, val); > > + if (define_at_zero && !(optab_defined_at_zero == 2 && val == prec)) > > + { > > + tree is_zero = fold_build2 (NE_EXPR, boolean_type_node, src, > > + build_zero_cst (TREE_TYPE (src))); > > + call = fold_build3(COND_EXPR, integer_type_node, is_zero, call, > > + build_int_cst (integer_type_node, prec)); > > + } > > + } > > MfG, JBG > > --