[{"id":3682288,"web_url":"http://patchwork.ozlabs.org/comment/3682288/","msgid":"<24BB92DF-29EC-4FC5-AFB0-D6F06E94B841@gmail.com>","list_archive_url":null,"date":"2026-04-25T15:54:18","subject":"Re: [PATCH] scev/niter: Use INTEGRAL_NB_TYPE_P instead of direct\n comparison to INTEGER_TYPE [PR124061]","submitter":{"id":1765,"url":"http://patchwork.ozlabs.org/api/people/1765/","name":"Richard Biener","email":"richard.guenther@gmail.com"},"content":"> Am 25.04.2026 um 17:39 schrieb Andrew Pinski <andrew.pinski@oss.qualcomm.com>:\n> \n> ﻿I noticed this while looking into PR 124052. This is not the first time we had\n> direct type comparison against INTEGER_TYPE which should have been different.\n> As mention in PR 124052, I didn't include bool types so I needed a new macro\n> to simplify things.\n> \n> Bootstrapped and tested on x86_64-linux-gnu.\n\nOk\n\nRichard \n\n>    PR tree-optmiization/124061\n> gcc/ChangeLog:\n> \n>    * tree-scalar-evolution.cc (interpret_rhs_expr): Use\n>    INTEGRAL_NB_TYPE_P instead of comparing the code to INTEGER_TYPE.\n>    * tree-ssa-loop-niter.cc (number_of_iterations_ne): Likewise.\n>    (number_of_iterations_cltz): Likewise.\n>    (number_of_iterations_exit_assumptions): Likewise.\n>    * tree.h (INTEGRAL_NB_TYPE_P): New macro.\n> \n> gcc/testsuite/ChangeLog:\n> \n>    * g++.dg/opt/enum-loop-1.C: New test.\n>    * gcc.dg/tree-ssa/bitint-loop-opt-1.c: New test.\n> \n> Signed-off-by: Andrew Pinski <andrew.pinski@oss.qualcomm.com>\n> ---\n> gcc/testsuite/g++.dg/opt/enum-loop-1.C            | 15 +++++++++++++++\n> gcc/testsuite/gcc.dg/tree-ssa/bitint-loop-opt-1.c | 13 +++++++++++++\n> gcc/tree-scalar-evolution.cc                      |  4 ++--\n> gcc/tree-ssa-loop-niter.cc                        |  8 ++++----\n> gcc/tree.h                                        |  7 +++++++\n> 5 files changed, 41 insertions(+), 6 deletions(-)\n> create mode 100644 gcc/testsuite/g++.dg/opt/enum-loop-1.C\n> create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/bitint-loop-opt-1.c\n> \n> diff --git a/gcc/testsuite/g++.dg/opt/enum-loop-1.C b/gcc/testsuite/g++.dg/opt/enum-loop-1.C\n> new file mode 100644\n> index 00000000000..271393eeab5\n> --- /dev/null\n> +++ b/gcc/testsuite/g++.dg/opt/enum-loop-1.C\n> @@ -0,0 +1,15 @@\n> +// PR tree-optimization/124061\n> +// { dg-do compile { target c++11 } }\n> +// { dg-options \"-O2 -fdump-tree-sccp\" }\n> +\n> +enum a : unsigned {};\n> +\n> +int f(a limit)\n> +{\n> +  a i;\n> +  for(i = (a)0; i < limit; i = a(i + 1))\n> +   ;\n> +  return i;\n> +}\n> +\n> +// { dg-final { scan-tree-dump \"final value replacement:\"  sccp } }\n> diff --git a/gcc/testsuite/gcc.dg/tree-ssa/bitint-loop-opt-1.c b/gcc/testsuite/gcc.dg/tree-ssa/bitint-loop-opt-1.c\n> new file mode 100644\n> index 00000000000..51db9599086\n> --- /dev/null\n> +++ b/gcc/testsuite/gcc.dg/tree-ssa/bitint-loop-opt-1.c\n> @@ -0,0 +1,13 @@\n> +/* PR tree-optimization/124061 */\n> +/* { dg-do compile { target bitint } } */\n> +/* { dg-options \"-O2 -fdump-tree-sccp\" } */\n> +\n> +int f(_BitInt(64) limit)\n> +{\n> +  _BitInt(64) i;\n> +  for(i = 0; i < limit; i++)\n> +   ;\n> +  return i;\n> +}\n> +\n> +/* { dg-final { scan-tree-dump \"final value replacement:\"  sccp } } */\n> diff --git a/gcc/tree-scalar-evolution.cc b/gcc/tree-scalar-evolution.cc\n> index e05a171c1b1..f524786f33b 100644\n> --- a/gcc/tree-scalar-evolution.cc\n> +++ b/gcc/tree-scalar-evolution.cc\n> @@ -1897,8 +1897,8 @@ interpret_rhs_expr (class loop *loop, gimple *at_stmt,\n>     the operation done in an unsigned type of the same precision\n>     as the final truncation.  We cannot derive a scalar evolution\n>     for the widened operation but for the truncated result.  */\n> -      if (TREE_CODE (type) == INTEGER_TYPE\n> -      && TREE_CODE (TREE_TYPE (rhs1)) == INTEGER_TYPE\n> +      if (INTEGRAL_NB_TYPE_P (type)\n> +      && INTEGRAL_NB_TYPE_P (TREE_TYPE (rhs1))\n>      && TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (rhs1))\n>      && TYPE_OVERFLOW_UNDEFINED (type)\n>      && TREE_CODE (rhs1) == SSA_NAME\n> diff --git a/gcc/tree-ssa-loop-niter.cc b/gcc/tree-ssa-loop-niter.cc\n> index 207bf8ccf60..2b4c4ea3da4 100644\n> --- a/gcc/tree-ssa-loop-niter.cc\n> +++ b/gcc/tree-ssa-loop-niter.cc\n> @@ -1054,7 +1054,7 @@ number_of_iterations_ne (class loop *loop, tree type, affine_iv *iv,\n>       if (tree_int_cst_sign_bit (iv->step))\n>    {\n>      cond = fold_build2 (GE_EXPR, boolean_type_node, iv->base, final);\n> -      if (TREE_CODE (type) == INTEGER_TYPE)\n> +      if (INTEGRAL_NB_TYPE_P (type))\n>        {\n>          /* Only when base - step doesn't overflow.  */\n>          t = TYPE_MAX_VALUE (type);\n> @@ -1071,7 +1071,7 @@ number_of_iterations_ne (class loop *loop, tree type, affine_iv *iv,\n>       else\n>    {\n>      cond = fold_build2 (LE_EXPR, boolean_type_node, iv->base, final);\n> -      if (TREE_CODE (type) == INTEGER_TYPE)\n> +      if (INTEGRAL_NB_TYPE_P (type))\n>        {\n>          /* Only when base - step doesn't underflow.  */\n>          t = TYPE_MIN_VALUE (type);\n> @@ -2439,7 +2439,7 @@ number_of_iterations_cltz (loop_p loop, edge exit,\n>      iv_2 = gimple_assign_rhs1 (test_value_stmt);\n>      tree rhs_type = TREE_TYPE (iv_2);\n>      if (TREE_CODE (iv_2) != SSA_NAME\n> -          || TREE_CODE (rhs_type) != INTEGER_TYPE\n> +          || !INTEGRAL_NB_TYPE_P (rhs_type)\n>          || (TYPE_PRECISION (rhs_type)\n>          != TYPE_PRECISION (test_value_type)))\n>        return false;\n> @@ -3275,7 +3275,7 @@ number_of_iterations_exit_assumptions (class loop *loop, edge exit,\n>   op1 = gimple_cond_rhs (stmt);\n>   type = TREE_TYPE (op0);\n> \n> -  if (TREE_CODE (type) != INTEGER_TYPE\n> +  if (!INTEGRAL_NB_TYPE_P (type)\n>       && !POINTER_TYPE_P (type))\n>     return false;\n> \n> diff --git a/gcc/tree.h b/gcc/tree.h\n> index f8b2d718b7e..3b012d0fd6a 100644\n> --- a/gcc/tree.h\n> +++ b/gcc/tree.h\n> @@ -617,6 +617,13 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int,\n>    || TREE_CODE (TYPE) == INTEGER_TYPE \\\n>    || TREE_CODE (TYPE) == BITINT_TYPE)\n> \n> +/* Nonzero if TYPE represents an integral type (non-boolean).  */\n> +\n> +#define INTEGRAL_NB_TYPE_P(TYPE)  \\\n> +  (TREE_CODE (TYPE) == ENUMERAL_TYPE  \\\n> +   || TREE_CODE (TYPE) == INTEGER_TYPE \\\n> +   || TREE_CODE (TYPE) == BITINT_TYPE)\n> +\n> /* Nonzero if TYPE represents an integral type, including complex\n>    and vector integer types.  */\n> \n> --\n> 2.43.0\n>","headers":{"Return-Path":"<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>","X-Original-To":["incoming@patchwork.ozlabs.org","gcc-patches@gcc.gnu.org"],"Delivered-To":["patchwork-incoming@legolas.ozlabs.org","gcc-patches@gcc.gnu.org"],"Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20251104 header.b=ku78U9s7;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=38.145.34.32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)","sourceware.org;\n\tdkim=pass (2048-bit key,\n unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20251104 header.b=ku78U9s7","sourceware.org;\n dmarc=pass (p=none dis=none) header.from=gmail.com","sourceware.org; spf=pass smtp.mailfrom=gmail.com","server2.sourceware.org;\n arc=none smtp.remote-ip=209.85.221.53"],"Received":["from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g2vY26pL0z1yHv\n\tfor <incoming@patchwork.ozlabs.org>; Sun, 26 Apr 2026 01:55:01 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 80FED4BB5888\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 25 Apr 2026 15:54:59 +0000 (GMT)","from mail-wr1-f53.google.com (mail-wr1-f53.google.com\n [209.85.221.53])\n by sourceware.org (Postfix) with ESMTPS id 1D5E44BB3BFC\n for <gcc-patches@gcc.gnu.org>; Sat, 25 Apr 2026 15:54:33 +0000 (GMT)","by mail-wr1-f53.google.com with SMTP id\n ffacd0b85a97d-43d76dd4ee8so7951384f8f.2\n for <gcc-patches@gcc.gnu.org>; Sat, 25 Apr 2026 08:54:33 -0700 (PDT)","from smtpclient.apple\n (dynamic-095-117-219-204.95.117.pool.telefonica.de. [95.117.219.204])\n by smtp.gmail.com with ESMTPSA id\n ffacd0b85a97d-43fe4e3a7b4sm63153282f8f.22.2026.04.25.08.54.29\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Sat, 25 Apr 2026 08:54:30 -0700 (PDT)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 80FED4BB5888","OpenDKIM Filter v2.11.0 sourceware.org 1D5E44BB3BFC"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 1D5E44BB3BFC","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 1D5E44BB3BFC","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777132473; cv=none;\n b=Qmc7uVWuHpNIOe/o8FWBM0P1S3bQQDX8Rmeik06EvTxbs8C8l3k0hoU3CRQ68wJsPLxAteB61AtjRX5SAHsotCVW+OWbgxXnnrUUtxiibZfPbMmZ01r2d6/CBO86leK45qNOmIs1Pi5qsm2FNMZmmFUJEu3dIMMCL5WtAP7xCx8=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1777132473; c=relaxed/simple;\n bh=nPp4k43xxBT4X02B1U7bRpCXSiN/8RtPpiZOG5NTjxg=;\n h=DKIM-Signature:From:Mime-Version:Subject:Date:Message-Id:To;\n b=K9OVohGLHfwyvv9l6CXzG1rylvOxY1LRMX7nGOF355hWBp3FLcF81+kGnyzFCqJoVbqHY4zKLrCByTGCQ+bCh9ODAaRTUAHe4To4M50YxvS6Jqf4e1NhK0eY7JQLOtByuwO0LGwbu9gXFDb5n/mcQCWg7OhazjqS086WLgRkDR0=","ARC-Authentication-Results":"i=1; server2.sourceware.org","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=gmail.com; s=20251104; t=1777132471; x=1777737271; darn=gcc.gnu.org;\n h=to:in-reply-to:cc:references:message-id:date:subject:mime-version\n :from:content-transfer-encoding:from:to:cc:subject:date:message-id\n :reply-to; bh=vKoJxJSPzkgJpLu5lopQ1tWIsWWuCEbX6N1rohYIpR0=;\n b=ku78U9s7vMpk3eaGj39dLIyP+QOmXuadwLD14ePh6o6TJqWKDlzNw+sdRQ4ykDhfeQ\n SrvBlQ4JDp6TJ9Z7dnaEr48Hw65rwjcT6VAJdiMj5zDyQ+KSeG5AF57N+8xMlBZjf6F0\n TCa9OGKRv/kZVmhugURPbOpQ0hEbee/+tdhTzF+N+KhuYqzij39VlLgCpWM7Mv4keFdy\n 0LAC5+4Jl1mHnPWwYMciRuqz6lWvd7Jhp49EwWqhBwyURJ4EcK/BzenKqb3EFjH0qZXS\n eakj8mdN7GCZ6uJt1jTWEdlOVQukT+dZG3SASavE/2z86gcxWvvIlFuStaH5/K3liIGc\n h7bQ==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1777132471; x=1777737271;\n h=to:in-reply-to:cc:references:message-id:date:subject:mime-version\n :from:content-transfer-encoding:x-gm-gg:x-gm-message-state:from:to\n :cc:subject:date:message-id:reply-to;\n bh=vKoJxJSPzkgJpLu5lopQ1tWIsWWuCEbX6N1rohYIpR0=;\n b=kNuW7MocBXX5mJ8rNWFnrWUo0kPlffvqEe0WXo4OWhOinnUfV9/yQpVfzxtpE+oZ+S\n jp2RJgB1xduncg4GumADbO4jpqOdTAUgdVXltEHCk3hdadzo3MO4DYZLNDK8GU8r3OMc\n Uv3emypXSDnNXQRT1EHqNBkedUUadMBHpwW48q0wYueXQdv6ybZHGkI5AJvhszu1xgI+\n HWNVTCxU3fgCOpsapnIjdAor8jSzu1MrV3xn3ofEuQTbpR/kTFHr3MsA/l4YBeEaxr3p\n QDrjcz5JXrQnYiBInfFmiVB2IHYJCseaxJjL2deGnPQiUwugtPZq7fOwdMPOCUsj+B/F\n +khQ==","X-Gm-Message-State":"AOJu0YzsEW3V3/QWSHFk93VO2ARoGb5ZWFDlsCyCOabsT3sxHrLFptFL\n XyDdaTGRMczGAQjjcGCwHvXVGAv3gaDeALU8CtxHEgEeiKXXr7fpIqmkn9ITOQ==","X-Gm-Gg":"AeBDievgP7KwVw3sfcyNWW20IUZAp1ZgjJtFkMtzFcMbmLJqwG1D1UziLUnBi1Z2iS5\n fxgoYUwFclkJSIZQRLfKNvxFuzaotRLCt7u3i+XHk03rkR4fwKsmxj189bLKfi5+77JC+TI36RS\n t/pYn2ZvfbmEEluIm4XKbJSJ27kFI0SlOsjlam/2YpQTKpTwUaaDP1klFipvcx2Z/UIQKcc+G8n\n FTwiKfNtmFMjOU6lXmvqpP0UYdcicfCPMaN97RHUHq2eHoKnyrGjovO0tyfV1oQE7q0CS22I2tO\n Siiu3tbEIWAm5gc+5GgrXHmnd6BDQ05cx3ro1krBovVHvI7+jbNgKOSwwj8pT8ka8st94gHScJS\n a4WPg7PgBRyS3K4fdMyK4vJ1nwfcfHc63k5ZndkX3fpvY8aoPENaLm7dB3U8dzUCK3K/5o9P7WG\n fElFJS4eTY3E1GNwGLo9zHHl1PLr8uuWj1EEm684dOYmTA0BgT2LdIzQUQs8pGmtJhxEDVcIaX5\n Oo+fYbGPz3VuZ58INBfNl6qJtZK/DfMwZ7iby10K/vOD9/thw==","X-Received":"by 2002:a05:6000:610:b0:43d:4df5:3de with SMTP id\n ffacd0b85a97d-43fe3e0b5fbmr54561593f8f.31.1777132471211;\n Sat, 25 Apr 2026 08:54:31 -0700 (PDT)","Content-Type":"text/plain; charset=utf-8","Content-Transfer-Encoding":"quoted-printable","From":"Richard Biener <richard.guenther@gmail.com>","Mime-Version":"1.0 (1.0)","Subject":"Re: [PATCH] scev/niter: Use INTEGRAL_NB_TYPE_P instead of direct\n comparison to INTEGER_TYPE [PR124061]","Date":"Sat, 25 Apr 2026 17:54:18 +0200","Message-Id":"<24BB92DF-29EC-4FC5-AFB0-D6F06E94B841@gmail.com>","References":"<20260425153820.4015057-1-andrew.pinski@oss.qualcomm.com>","Cc":"gcc-patches@gcc.gnu.org,\n Andrew Pinski <andrew.pinski@oss.qualcomm.com>","In-Reply-To":"<20260425153820.4015057-1-andrew.pinski@oss.qualcomm.com>","To":"Andrew Pinski <andrew.pinski@oss.qualcomm.com>","X-Mailer":"iPhone Mail (23E261)","X-BeenThere":"gcc-patches@gcc.gnu.org","X-Mailman-Version":"2.1.30","Precedence":"list","List-Id":"Gcc-patches mailing list <gcc-patches.gcc.gnu.org>","List-Unsubscribe":"<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>","List-Archive":"<https://gcc.gnu.org/pipermail/gcc-patches/>","List-Post":"<mailto:gcc-patches@gcc.gnu.org>","List-Help":"<mailto:gcc-patches-request@gcc.gnu.org?subject=help>","List-Subscribe":"<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>","Errors-To":"gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"}}]