[{"id":3682379,"web_url":"http://patchwork.ozlabs.org/comment/3682379/","msgid":"<2E4B6420-20F9-4DC7-9D3D-9647F5B892F1@gmail.com>","list_archive_url":null,"date":"2026-04-26T07:41:58","subject":"Re: [PATCH] match: Optimize `signed < 0 ? positive : min<signed,\n positive>` into `(signed)min<(unsigned), (unsigned)positive>`  [PR110262]","submitter":{"id":1765,"url":"http://patchwork.ozlabs.org/api/people/1765/","name":"Richard Biener","email":"richard.guenther@gmail.com"},"content":"> Am 26.04.2026 um 08:15 schrieb Andrew Pinski <andrew.pinski@oss.qualcomm.com>:\n> \n> ﻿While looking into PR 110252 a few years back, I noticed this missed\n> optimization in code from sel-sched.cc. I only realized today\n> I could generalize it to handle more than just 1 to all positive\n> values.\n> This adds the pattern to optimize:\n> signed < 0 ? positive : min<signed, positive>\n> into:\n> unsigned ts = signed;\n> unsigned ps = positive;\n> unsigned ru = min<ts, tp>;\n> (signed)ru\n> \n> Bootstrapped and tested on x86_64-linux-gnu.\n> \n>    PR tree-optimization/110262\n> \n> gcc/ChangeLog:\n> \n>    * match.pd (`signed < 0 ? positive : min<signed, positive>`): New\n>    pattern.\n> \n> gcc/testsuite/ChangeLog:\n> \n>    * gcc.dg/pr110262-1.c: New test.\n>    * gcc.dg/tree-ssa/phi-opt-46.c: New test.\n>    * gcc.dg/tree-ssa/phi-opt-47.c: New test.\n> \n> Signed-off-by: Andrew Pinski <andrew.pinski@oss.qualcomm.com>\n> ---\n> gcc/match.pd                               | 11 ++++++++++\n> gcc/testsuite/gcc.dg/pr110262-1.c          | 12 +++++++++++\n> gcc/testsuite/gcc.dg/tree-ssa/phi-opt-46.c | 15 ++++++++++++++\n> gcc/testsuite/gcc.dg/tree-ssa/phi-opt-47.c | 24 ++++++++++++++++++++++\n> 4 files changed, 62 insertions(+)\n> create mode 100644 gcc/testsuite/gcc.dg/pr110262-1.c\n> create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/phi-opt-46.c\n> create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/phi-opt-47.c\n> \n> diff --git a/gcc/match.pd b/gcc/match.pd\n> index 94f69185adf..f1be45b1993 100644\n> --- a/gcc/match.pd\n> +++ b/gcc/match.pd\n> @@ -7109,6 +7109,17 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)\n>                TYPE_SIGN (type)))\n>        (max @2 @4)))))))\n> \n> +/* Optimize signed < 0 ? positive : MIN<signed, positive> to\n> +   MIN<(unsigned)signed, (unsigned)positive>. */\n> +(simplify\n> + (cond (lt @0 integer_zerop)\n> +  tree_expr_nonnegative_p@1\n> +  (min:c @0 @1))\n\nWe’d need a variant for the inverted compare as well?\n\nOtherwise LGTM \nRichard \n\n> + (if (INTEGRAL_TYPE_P (type)\n> +      && !TYPE_UNSIGNED (type))\n> +  (with { tree utype = unsigned_type_for (type); }\n> +   (convert (min (convert:utype @0) (convert:utype @1))))))\n> +\n> #if GIMPLE\n> /* These patterns should be after min/max detection as simplifications\n>    of `(type)(zero_one ==/!= 0)` to `(type)(zero_one)`\n> diff --git a/gcc/testsuite/gcc.dg/pr110262-1.c b/gcc/testsuite/gcc.dg/pr110262-1.c\n> new file mode 100644\n> index 00000000000..61cc079710a\n> --- /dev/null\n> +++ b/gcc/testsuite/gcc.dg/pr110262-1.c\n> @@ -0,0 +1,12 @@\n> +/* PR tree-optimization/110262 */\n> +/* { dg-do compile } */\n> +/* { dg-options \"-O1 -fdump-tree-gimple\" } */\n> +\n> +int g(int min_need_stall)\n> +{\n> +  return  min_need_stall < 0 ? 1 : ((min_need_stall) < (1) ? (min_need_stall) : (1));\n> +}\n> +\n> +/* { dg-final { scan-tree-dump \"MIN_EXPR <\"  \"gimple\" } } */\n> +/* { dg-final { scan-tree-dump-not \"if \"  \"gimple\" } } */\n> +\n> diff --git a/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-46.c b/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-46.c\n> new file mode 100644\n> index 00000000000..a86aa168d39\n> --- /dev/null\n> +++ b/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-46.c\n> @@ -0,0 +1,15 @@\n> +/* PR tree-optimization/110262 */\n> +/* { dg-do compile } */\n> +/* { dg-options \"-O1 -fdump-tree-phiopt2\" } */\n> +\n> +int g(int min_need_stall)\n> +{\n> +  int t = ((min_need_stall) < (1) ? (min_need_stall) : (1));\n> +  return  min_need_stall < 0 ? 1 : t;\n> +}\n> +\n> +/* This should be converted into (int)MIN<(unsigned)min_need_stall, 1u> */\n> +\n> +/* { dg-final { scan-tree-dump \"MIN_EXPR <\"  \"phiopt2\" } } */\n> +/* { dg-final { scan-tree-dump-not \"if \"  \"phiopt2\" } } */\n> +\n> diff --git a/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-47.c b/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-47.c\n> new file mode 100644\n> index 00000000000..c42e5dd046f\n> --- /dev/null\n> +++ b/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-47.c\n> @@ -0,0 +1,24 @@\n> +/* PR tree-optimization/110262 */\n> +/* { dg-do compile } */\n> +/* { dg-options \"-O1 -fdump-tree-phiopt2\"  } */\n> +int g(int a, int b)\n> +{\n> +  b = b < 0 ? 0 : b;\n> +  int t = ((a) < (b) ? (a) : (b));\n> +  return a < 0 ? b : t;\n> +}\n> +\n> +int g1(int a, int b, unsigned short c)\n> +{\n> +  b = c;\n> +  int t = ((a) < (b) ? (a) : (b));\n> +  return a < 0 ? b : t;\n> +}\n> +\n> +/* Both of the last statement of these functions should be converted into:\n> +   (int)MIN<(unsigned)a, (unsigned)b>.  */\n> +\n> +/* { dg-final { scan-tree-dump \"MIN_EXPR <\"  \"phiopt2\" } } */\n> +/* { dg-final { scan-tree-dump-not \"if \"  \"phiopt2\" } } */\n> +/* { dg-final { scan-tree-dump-times \"Removing basic block\" 2  \"phiopt2\" } } */\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=X1AjlK3p;\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=X1AjlK3p","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.128.52"],"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 4g3JZW4wbMz1xvV\n\tfor <incoming@patchwork.ozlabs.org>; Sun, 26 Apr 2026 17:42:41 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 966814BB3BB9\n\tfor <incoming@patchwork.ozlabs.org>; Sun, 26 Apr 2026 07:42:39 +0000 (GMT)","from mail-wm1-f52.google.com (mail-wm1-f52.google.com\n [209.85.128.52])\n by sourceware.org (Postfix) with ESMTPS id D7D594BB3BB9\n for <gcc-patches@gcc.gnu.org>; Sun, 26 Apr 2026 07:42:11 +0000 (GMT)","by mail-wm1-f52.google.com with SMTP id\n 5b1f17b1804b1-488af96f6b2so119603445e9.0\n for <gcc-patches@gcc.gnu.org>; Sun, 26 Apr 2026 00:42:11 -0700 (PDT)","from smtpclient.apple\n (dynamic-077-002-188-101.77.2.pool.telefonica.de. [77.2.188.101])\n by smtp.gmail.com with ESMTPSA id\n 5b1f17b1804b1-488ffc558f2sm547849245e9.1.2026.04.26.00.42.08\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Sun, 26 Apr 2026 00:42:08 -0700 (PDT)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 966814BB3BB9","OpenDKIM Filter v2.11.0 sourceware.org D7D594BB3BB9"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org D7D594BB3BB9","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org D7D594BB3BB9","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777189332; cv=none;\n b=M+90x5oiYazJgWR4JxMXoztjfhcdGW6InAqpzwwMkAG0qjI17Hh6OQujSQC/7nmLCd1vYtdJcKlqWg5j2CeRhyz6Qb2avGmd+387GKo+xQMLSSFKHd7780BCMjhb1SNkFSDiFxOPgRGWJEkZcr8t3oldk2nEdseDhDHqquM6EFA=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1777189332; c=relaxed/simple;\n bh=XPU2b/VbsTIn5/dW5udh27v7YUvwkTUKfjRnsEl5OoY=;\n h=DKIM-Signature:From:Mime-Version:Subject:Date:Message-Id:To;\n b=sem4N7hRIUSHeQY3jJam/r7+gok6Q8YQ4YDIyCxo7NuVOXxC5Tu3ZeEjN2rl3BFAzyZNeUTbZaw1Njyqqbo5YqyERu3B47c6Xsyln1a3CE4hSVX2q9LuhMD7JJaevkGQGQOwpySVKd2ZBGP5CdKnxEovBfWTjOBtl9BCfwWTM24=","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=1777189330; x=1777794130; 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=r8mcwdhH30974B+Bm+qoRDL/t/ZNdvZeiSAFD9SBgWo=;\n b=X1AjlK3phyY2LrVYKwDOe7M9wTap+5zSeRfnssMldRD+pXUx6Hv+kBedyWraTw0blL\n WpVBc1HTkUNMaopvTvo3HqauAmtcX/Xc5YkRZlOI3rIpnSbxzQb10Xz7QkomxoNiW4/m\n VqUx6vNyhuyyND2jaLchxAQmZNCDgN27i8AVUnZ1m6vmeuqajRfD0QckycHB6ZIJ2UVl\n 8fOioJ8k+fzwpcBNYWZrUBjg7ReXfEUHAA3G1ciBIaHKlss7SvFDu2p0ZSvBrYjzCw4a\n WVcB0He1sX5vGneveL1kLFjHwNXHEbWBRYqA9k155zIiyjWgx00w87wzsjICk8eWBD/j\n Wi3Q==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1777189330; x=1777794130;\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=r8mcwdhH30974B+Bm+qoRDL/t/ZNdvZeiSAFD9SBgWo=;\n b=Ikzkw0wMx8+mWHqC6iFtfPZeBs6nbrNcjcpGtWaBJX1JHRP1YF3uRY8nLHwAlTDD5G\n pLy456OAb1Nh9wqLuhRcSX65SSgX2pk/6dqhz6jkanjArphqLFZvYa2xZAhio2sl24VN\n NKV/llkWKvzfacJoc+f2QkuwKyMVA1A/ckvqdMG8ub/sER3bc+gAllOyOmQ4/auIRnBG\n 3V3GyyxMj57q/lPM+HfFxffEd/olWFuzRreBCehFq18BwMIewgcKyhBpvaFSQnt6OHVg\n DNgX5akRnXwxemPNdeI/VhJGzjRFUz5n2w3qQN3qViqY6HJyeCGd27ForH+e5zRDAKg5\n ohVA==","X-Gm-Message-State":"AOJu0YxO4hRdgbMvLk5y+FInYUp/pBQfWy01jj1ircoYs0RrhjuLJS9h\n ONzQDw3vIHJQayasByU7CaOJjOI+kbvGApX5599KZG07FEEEh7f3fxuNvOHHJw==","X-Gm-Gg":"AeBDieterclYZBIMJ10QMj1bA8w+5+7MGgUFYWc2fnlwaO0zEIH7HRBROrhM99NCyT7\n PSesFg6xNPWzJKahvzZxGL2aUQ/+nV5ICHnLSneiLpwyIIruVe71v05fFU8Eyw4XfYBR5g/Fsyb\n 4biyyfobVnkOjJtUubzwbBmzcH2h0kmBXNKfaRUrDAkQfqLZiIfuFu1qkAn9Vjtba7E1HpnaRka\n KZMR1VAeQI+oAXDM+LA/7ko695yGsPprMBufsNlEJwjeHgomkCzonmNEHXyUl9LyCnnmLEA5vu5\n 7o6WFlJmlIQVjOElMzhDh5oBsJ8aYXKXXraLRBFaqSH+1/j3cMJl6y9bmectJhPyKFQwjaq0NkE\n D4UtthogbMyMRodIMLkwPYyX6UqTRf2J70X3t9Kx1W/FURtmllfDEJp1ZzKdxcCW/3Ymnj/ptKX\n c61MInxF5nj24v2HvqZjtxCh1poFqtGUZaIXkcy7jV7oijbUH4xKF6H/zKMz4lk8qo0i+31TxmX\n /SPlUAPfCx8z9vVzHKuOkLQ7MmxFZbveh1xam3kD/Vdpjwe5NDOz40=","X-Received":"by 2002:a05:600c:a305:b0:48a:53cb:85f4 with SMTP id\n 5b1f17b1804b1-48a53cb8734mr275129195e9.24.1777189329692;\n Sun, 26 Apr 2026 00:42:09 -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] match: Optimize `signed < 0 ? positive : min<signed,\n positive>` into `(signed)min<(unsigned), (unsigned)positive>`  [PR110262]","Date":"Sun, 26 Apr 2026 09:41:58 +0200","Message-Id":"<2E4B6420-20F9-4DC7-9D3D-9647F5B892F1@gmail.com>","References":"<20260426061356.581852-1-andrew.pinski@oss.qualcomm.com>","Cc":"gcc-patches@gcc.gnu.org,\n Andrew Pinski <andrew.pinski@oss.qualcomm.com>","In-Reply-To":"<20260426061356.581852-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"}},{"id":3682388,"web_url":"http://patchwork.ozlabs.org/comment/3682388/","msgid":"<CALvbMcDSYCQmkzcrOfz0LEVGLqJ9rCuQK-JdUGbeWZXiLEF_GA@mail.gmail.com>","list_archive_url":null,"date":"2026-04-26T08:47:03","subject":"Re: [PATCH] match: Optimize `signed < 0 ? positive : min<signed,\n positive>` into `(signed)min<(unsigned), (unsigned)positive>` [PR110262]","submitter":{"id":91428,"url":"http://patchwork.ozlabs.org/api/people/91428/","name":"Andrew Pinski","email":"andrew.pinski@oss.qualcomm.com"},"content":"On Sun, Apr 26, 2026 at 12:42 AM Richard Biener\n<richard.guenther@gmail.com> wrote:\n>\n>\n>\n> > Am 26.04.2026 um 08:15 schrieb Andrew Pinski <andrew.pinski@oss.qualcomm.com>:\n> >\n> > ﻿While looking into PR 110252 a few years back, I noticed this missed\n> > optimization in code from sel-sched.cc. I only realized today\n> > I could generalize it to handle more than just 1 to all positive\n> > values.\n> > This adds the pattern to optimize:\n> > signed < 0 ? positive : min<signed, positive>\n> > into:\n> > unsigned ts = signed;\n> > unsigned ps = positive;\n> > unsigned ru = min<ts, tp>;\n> > (signed)ru\n> >\n> > Bootstrapped and tested on x86_64-linux-gnu.\n> >\n> >    PR tree-optimization/110262\n> >\n> > gcc/ChangeLog:\n> >\n> >    * match.pd (`signed < 0 ? positive : min<signed, positive>`): New\n> >    pattern.\n> >\n> > gcc/testsuite/ChangeLog:\n> >\n> >    * gcc.dg/pr110262-1.c: New test.\n> >    * gcc.dg/tree-ssa/phi-opt-46.c: New test.\n> >    * gcc.dg/tree-ssa/phi-opt-47.c: New test.\n> >\n> > Signed-off-by: Andrew Pinski <andrew.pinski@oss.qualcomm.com>\n> > ---\n> > gcc/match.pd                               | 11 ++++++++++\n> > gcc/testsuite/gcc.dg/pr110262-1.c          | 12 +++++++++++\n> > gcc/testsuite/gcc.dg/tree-ssa/phi-opt-46.c | 15 ++++++++++++++\n> > gcc/testsuite/gcc.dg/tree-ssa/phi-opt-47.c | 24 ++++++++++++++++++++++\n> > 4 files changed, 62 insertions(+)\n> > create mode 100644 gcc/testsuite/gcc.dg/pr110262-1.c\n> > create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/phi-opt-46.c\n> > create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/phi-opt-47.c\n> >\n> > diff --git a/gcc/match.pd b/gcc/match.pd\n> > index 94f69185adf..f1be45b1993 100644\n> > --- a/gcc/match.pd\n> > +++ b/gcc/match.pd\n> > @@ -7109,6 +7109,17 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)\n> >                TYPE_SIGN (type)))\n> >        (max @2 @4)))))))\n> >\n> > +/* Optimize signed < 0 ? positive : MIN<signed, positive> to\n> > +   MIN<(unsigned)signed, (unsigned)positive>. */\n> > +(simplify\n> > + (cond (lt @0 integer_zerop)\n> > +  tree_expr_nonnegative_p@1\n> > +  (min:c @0 @1))\n>\n> We’d need a variant for the inverted compare as well?\n\nFor most cases, no because phi-opt will test with inverted comparison\ntoo. VRP creates cond_expr in some cases but that will only create `a\n== CST1 ? CST2 : CST3`. so this won't show up there. You could get it\nfrom generic as there is no canonical form for COND_EXPR. Or you could\nget it if written directly in the Gimple Front-end.\nI was thinking about trying to figure out how to get genmatch to\nsupport swapping around the true/false but maybe it is too hard to\nsupport for fp reasons.\n\nThanks,\nAndrea Pinski\n\n>\n> Otherwise LGTM\n> Richard\n>\n> > + (if (INTEGRAL_TYPE_P (type)\n> > +      && !TYPE_UNSIGNED (type))\n> > +  (with { tree utype = unsigned_type_for (type); }\n> > +   (convert (min (convert:utype @0) (convert:utype @1))))))\n> > +\n> > #if GIMPLE\n> > /* These patterns should be after min/max detection as simplifications\n> >    of `(type)(zero_one ==/!= 0)` to `(type)(zero_one)`\n> > diff --git a/gcc/testsuite/gcc.dg/pr110262-1.c b/gcc/testsuite/gcc.dg/pr110262-1.c\n> > new file mode 100644\n> > index 00000000000..61cc079710a\n> > --- /dev/null\n> > +++ b/gcc/testsuite/gcc.dg/pr110262-1.c\n> > @@ -0,0 +1,12 @@\n> > +/* PR tree-optimization/110262 */\n> > +/* { dg-do compile } */\n> > +/* { dg-options \"-O1 -fdump-tree-gimple\" } */\n> > +\n> > +int g(int min_need_stall)\n> > +{\n> > +  return  min_need_stall < 0 ? 1 : ((min_need_stall) < (1) ? (min_need_stall) : (1));\n> > +}\n> > +\n> > +/* { dg-final { scan-tree-dump \"MIN_EXPR <\"  \"gimple\" } } */\n> > +/* { dg-final { scan-tree-dump-not \"if \"  \"gimple\" } } */\n> > +\n> > diff --git a/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-46.c b/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-46.c\n> > new file mode 100644\n> > index 00000000000..a86aa168d39\n> > --- /dev/null\n> > +++ b/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-46.c\n> > @@ -0,0 +1,15 @@\n> > +/* PR tree-optimization/110262 */\n> > +/* { dg-do compile } */\n> > +/* { dg-options \"-O1 -fdump-tree-phiopt2\" } */\n> > +\n> > +int g(int min_need_stall)\n> > +{\n> > +  int t = ((min_need_stall) < (1) ? (min_need_stall) : (1));\n> > +  return  min_need_stall < 0 ? 1 : t;\n> > +}\n> > +\n> > +/* This should be converted into (int)MIN<(unsigned)min_need_stall, 1u> */\n> > +\n> > +/* { dg-final { scan-tree-dump \"MIN_EXPR <\"  \"phiopt2\" } } */\n> > +/* { dg-final { scan-tree-dump-not \"if \"  \"phiopt2\" } } */\n> > +\n> > diff --git a/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-47.c b/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-47.c\n> > new file mode 100644\n> > index 00000000000..c42e5dd046f\n> > --- /dev/null\n> > +++ b/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-47.c\n> > @@ -0,0 +1,24 @@\n> > +/* PR tree-optimization/110262 */\n> > +/* { dg-do compile } */\n> > +/* { dg-options \"-O1 -fdump-tree-phiopt2\"  } */\n> > +int g(int a, int b)\n> > +{\n> > +  b = b < 0 ? 0 : b;\n> > +  int t = ((a) < (b) ? (a) : (b));\n> > +  return a < 0 ? b : t;\n> > +}\n> > +\n> > +int g1(int a, int b, unsigned short c)\n> > +{\n> > +  b = c;\n> > +  int t = ((a) < (b) ? (a) : (b));\n> > +  return a < 0 ? b : t;\n> > +}\n> > +\n> > +/* Both of the last statement of these functions should be converted into:\n> > +   (int)MIN<(unsigned)a, (unsigned)b>.  */\n> > +\n> > +/* { dg-final { scan-tree-dump \"MIN_EXPR <\"  \"phiopt2\" } } */\n> > +/* { dg-final { scan-tree-dump-not \"if \"  \"phiopt2\" } } */\n> > +/* { dg-final { scan-tree-dump-times \"Removing basic block\" 2  \"phiopt2\" } } */\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=qualcomm.com header.i=@qualcomm.com header.a=rsa-sha256\n header.s=qcppdkim1 header.b=KDS3R+W0;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n header.a=rsa-sha256 header.s=google header.b=krXN2Nsc;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=2620:52:6:3111::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=qualcomm.com header.i=@qualcomm.com header.a=rsa-sha256\n header.s=qcppdkim1 header.b=KDS3R+W0;\n\tdkim=pass (2048-bit key,\n unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n header.a=rsa-sha256 header.s=google header.b=krXN2Nsc","sourceware.org; dmarc=none (p=none dis=none)\n header.from=oss.qualcomm.com","sourceware.org;\n spf=pass smtp.mailfrom=oss.qualcomm.com","server2.sourceware.org;\n arc=pass smtp.remote-ip=205.220.168.131"],"Received":["from vm01.sourceware.org (vm01.sourceware.org\n [IPv6:2620:52:6:3111::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 4g3L236R0Hz1yHv\n\tfor <incoming@patchwork.ozlabs.org>; Sun, 26 Apr 2026 18:47:50 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 1CBBD4BB3B8E\n\tfor <incoming@patchwork.ozlabs.org>; Sun, 26 Apr 2026 08:47:48 +0000 (GMT)","from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com\n [205.220.168.131])\n by sourceware.org (Postfix) with ESMTPS id DAA3C4BB3B8E\n for <gcc-patches@gcc.gnu.org>; Sun, 26 Apr 2026 08:47:17 +0000 (GMT)","from pps.filterd (m0279864.ppops.net [127.0.0.1])\n by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n 63PGNlWf2982608\n for <gcc-patches@gcc.gnu.org>; Sun, 26 Apr 2026 08:47:16 GMT","from mail-dy1-f197.google.com (mail-dy1-f197.google.com\n [74.125.82.197])\n by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4drpsgtd7s-1\n (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT)\n for <gcc-patches@gcc.gnu.org>; Sun, 26 Apr 2026 08:47:16 +0000 (GMT)","by mail-dy1-f197.google.com with SMTP id\n 5a478bee46e88-2eaf70f3b5fso932955eec.0\n for <gcc-patches@gcc.gnu.org>; Sun, 26 Apr 2026 01:47:16 -0700 (PDT)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 1CBBD4BB3B8E","OpenDKIM Filter v2.11.0 sourceware.org DAA3C4BB3B8E"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org DAA3C4BB3B8E","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org DAA3C4BB3B8E","ARC-Seal":["i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1777193238; cv=pass;\n b=laJLJOfvSCDQGyAOTSIJwIbgXvSpORlr98KArOPhI5vHrhNO5Jc0JVYMWc8Ts7EXAHG5Gp798X8JX4NiQfGhA6OBK9E5t9gNFSwMRuwjAcPu8sFGDqy+0itdrEtStklkNvpfdHjy8rNmS5U/n8nKd9UchnKY6bYMiXM+7oGnRSg=","i=1; a=rsa-sha256; t=1777193236; cv=none;\n d=google.com; s=arc-20240605;\n b=EQFYExRG+9aEWUyTkkTwX4am4tEKrXFpsEgp7vO/cYYWYotluJvAogdns+No6OOFOd\n cJz3vkh6ZSulesHlA10g4E9Q1h6MKR36poMlo73DmUO5Cg+r1vbIStWdQvBEuGBOX4Sc\n cdNx2x538DXupvX7j/G3Wt1I9c07lxBeewjpDUZW40fRm4E/SKf/5Mbh1mw/MBi/sby+\n UHP2vNb11WgsFqWciUCdFLPyaJBb3uUQVqTfFT57/oLAr0KXQ8VkSYzwR1A1b7K18Pb2\n SHiXg5GFbuyLVT3zcE2JMoexlezgb6jTTk11rPFI+UUOv3yiHFUCMlznLBawuulENx4C\n 2yBw=="],"ARC-Message-Signature":["i=2; a=rsa-sha256; d=sourceware.org; s=key;\n t=1777193238; c=relaxed/simple;\n bh=uLF7RcZR1rHzoju00K5ikJWmKKbX8vH7GTPqKrdIGic=;\n h=DKIM-Signature:DKIM-Signature:MIME-Version:From:Date:Message-ID:\n Subject:To;\n b=t0kD77939hBd0f+Km7Yztmssxi/WC7EDD+yHsBsZmqoLMVJ41QeWK7kq0S9ikb6pKDFC2rmmYQ9neVH/PMTlPW5nHC9ewGssa3mbyB90PtFr0f/AMoJUBL2KcVAhRL3PTuvBGW0BaCzt66AWlsmEJ1F3WRAgDXQ8N6iQIRJPdVs=","i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;\n s=arc-20240605;\n h=content-transfer-encoding:cc:to:subject:message-id:date:from\n :in-reply-to:references:mime-version:dkim-signature;\n bh=bzyd4xDkU1Ir9EeoKj6uG2apqxuJ7TL/2i8+0Y68hgo=;\n fh=jW0Z4VeKI+ZH963cTdrDZio3DYNhvWfEMv/RN9QeeXo=;\n b=Op3y1gwgvNdyXjYmAvj0ViOkTZt+GnqdlYUkbLhkuuoczXJUyVHBpB3sTEos1N3ngv\n Bjoj8Y4WrDRyfBk621p2zyXaMe9Oczn3JjaPIQH17zB4k2qyK0itWfeXxXcsyhgbS194\n dTvK091l8wKca3aAhY+T7Uhs+yNuEKWHgkUtG1unXNXniYBL3yzcAIEUe7K/u4p/01L+\n OxQTauUNYaRk9od+VJ+SYCtfJfa/YIu6j3CEXUCDecK9Rq6wk3+p9fmYXiIz5xnsUcr0\n LiS71yuJzaymAXtpjP289RWQ3MclB9UiywVs/slyXkdWt5TRMPquDFMs81wuFElITiYA\n VENg==; darn=gcc.gnu.org"],"ARC-Authentication-Results":["i=2; server2.sourceware.org","i=1; mx.google.com; arc=none"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=\n cc:content-transfer-encoding:content-type:date:from:in-reply-to\n :message-id:mime-version:references:subject:to; s=qcppdkim1; bh=\n bzyd4xDkU1Ir9EeoKj6uG2apqxuJ7TL/2i8+0Y68hgo=; b=KDS3R+W0QITaq08T\n VrxzThnTKojVLjt7HZXju3u51hOFT3L7G1+3Iu+kVD9M9y2XwYNIjRSO27+q1Sje\n 8xf8kAXZnitPCzllG9VtE0JgEk5+BzzCtCmYmOsKJu/sxxyt1tJGSV2DFzp6qQxc\n rZfJuDAtsuv1ZUfx6mHR6b5A/jsuZVouOjaHWnU06sTcETbExT3ixnLdoKy6HDfX\n 4vJQ+2gSgLdj7KWZgz81vYhy9ujFeFJ9OQpgTaixqZazhKzBdA0b8y/CObXA3Sin\n CN/beYNoWDrfEH3TK9Hom8IVWv4NSp5eyHDFZbTWo0EKqqKMxBzB+mWL1sUJ2mAk\n 2CawZw==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=oss.qualcomm.com; s=google; t=1777193236; x=1777798036; darn=gcc.gnu.org;\n h=content-transfer-encoding:cc:to:subject:message-id:date:from\n :in-reply-to:references:mime-version:from:to:cc:subject:date\n :message-id:reply-to;\n bh=bzyd4xDkU1Ir9EeoKj6uG2apqxuJ7TL/2i8+0Y68hgo=;\n b=krXN2NscPO1wvSORjJFMbnpKnoU/caFFzXnINUfwQWlL6t87GB3B85D+8JlacxWX5K\n sEUlLZNnUfd6wQKHhVkvC8aT64CzxBRRY/is7vTtm1gbbYV+VGljKET3AAxMI8jbDTKW\n r3QXdG6tDPesSLc5zYCQXXgVQ+8OZtZ6xP+m2XDE0jHnhvzvzsjvUaWFu3U3Bqp/xbuj\n czNUx/whyY48eOSHtP8JBOiowW54e8Ua/mFpTZcJkNXWRq7UDtirfUsTdkUbGxoJMZjG\n /Ye/f1T3NAYFfHrdZtemYAiZE/1l8Th/TL5OWTKwBrYA4dWk/e3FmcKmeTxXUQiWeN7Z\n mnqA=="],"X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1777193236; x=1777798036;\n h=content-transfer-encoding:cc:to:subject:message-id:date:from\n :in-reply-to:references:mime-version:x-gm-gg:x-gm-message-state:from\n :to:cc:subject:date:message-id:reply-to;\n bh=bzyd4xDkU1Ir9EeoKj6uG2apqxuJ7TL/2i8+0Y68hgo=;\n b=YIwHUZLzzWlMKvk3o75FLxjVHoMqidK4zMz7k0s5nLacxFSDa/X0piAvwKron9ee/l\n hqUB2Kfw57VMTm4ktdvL4FEUyvPgaqT26wAfj+EwQFa9msiKQNJsHypRKZgtr0Bv0grv\n X6AIF0Xp81sxxFR1czJTiOm67wmbLUEh4XPp1u28LnXTLTOI2hjwAns7AkrTzYJto8SC\n gD1G3yAovib4gn/cArxzltV+26lRpLn/R0ZmcU9zx/nhazJlH4u0YnUxammEYor8stn8\n 21mV8xysKGwONonCp/20yhL3XkbE0WqAnpeMVyio8gbpElpq/DZ2QtYXLwuUwRpELU5s\n tZhw==","X-Gm-Message-State":"AOJu0YzenTyFvtfiFWZzT+v1QvCwdv+h3Q2IoOXJY5GlfdjqHGtB62hE\n f/vtmVY55K55nSsL9beoFYx1mXBB0MQLzy4qgjQHzwuHUsrt3B6Sd9KRdzLI488heFPCi7Ap6V6\n Z4+M45f7NkIcJbONit8SSDIQIB8kOtf/RENdzlDT0F5zjfU0z55ATS7gqSWYnrwwLcKTAFCuAtH\n hurHv2nJu1TDKuQspDlZip7wlGnt8u9PgYRoGbO4/JCO+y1A==","X-Gm-Gg":"AeBDieuTjM+N6tUbUzI2MtNxYHdD9ijbfGcyiza9fAF3Xa8HOQA6SrAfVNwnQi/Ieo6\n aPmO/Am1Yp6DCIANZJSXnsR1PpAd1+lOvO8AQ9CQIMx3E52ySoZanTRLfgZpUCDCBORjOnKac3f\n J5tice4JwYolgBFJwha1foBOsrYQdPJFtTvOP7wz1E+Ci9SJvLsoSX1QX6r/Qa3Fh7Ze6mm9Grr\n 0E6M/nuUOl/xA==","X-Received":["by 2002:a05:7301:5784:b0:2dd:c066:c02 with SMTP id\n 5a478bee46e88-2e47a10653dmr20505993eec.22.1777193235556;\n Sun, 26 Apr 2026 01:47:15 -0700 (PDT)","by 2002:a05:7301:5784:b0:2dd:c066:c02 with SMTP id\n 5a478bee46e88-2e47a10653dmr20505984eec.22.1777193234943; Sun, 26 Apr 2026\n 01:47:14 -0700 (PDT)"],"MIME-Version":"1.0","References":"<20260426061356.581852-1-andrew.pinski@oss.qualcomm.com>\n <2E4B6420-20F9-4DC7-9D3D-9647F5B892F1@gmail.com>","In-Reply-To":"<2E4B6420-20F9-4DC7-9D3D-9647F5B892F1@gmail.com>","From":"Andrew Pinski <andrew.pinski@oss.qualcomm.com>","Date":"Sun, 26 Apr 2026 01:47:03 -0700","X-Gm-Features":"AVHnY4IXM1jUXWb5xevsymNT8bRlwhNte4xTmUa_WBTnrfEIks4kJi3YHBsEtIg","Message-ID":"\n <CALvbMcDSYCQmkzcrOfz0LEVGLqJ9rCuQK-JdUGbeWZXiLEF_GA@mail.gmail.com>","Subject":"Re: [PATCH] match: Optimize `signed < 0 ? positive : min<signed,\n positive>` into `(signed)min<(unsigned), (unsigned)positive>` [PR110262]","To":"Richard Biener <richard.guenther@gmail.com>","Cc":"gcc-patches@gcc.gnu.org","Content-Type":"text/plain; charset=\"UTF-8\"","Content-Transfer-Encoding":"quoted-printable","X-Proofpoint-GUID":"dOpXfpO2b-r6-_MotAUURc0vupNeZnyU","X-Proofpoint-ORIG-GUID":"dOpXfpO2b-r6-_MotAUURc0vupNeZnyU","X-Authority-Analysis":"v=2.4 cv=Y+fIdBeN c=1 sm=1 tr=0 ts=69edd114 cx=c_pps\n a=Uww141gWH0fZj/3QKPojxA==:117 a=IkcTkHD0fZMA:10 a=A5OVakUREuEA:10\n a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22\n a=DJpcGTmdVt4CTyJn9g5Z:22 a=pGLkceISAAAA:8 a=EUspDBNiAAAA:8\n a=bRi1b4IVgEwkau0RKwUA:9 a=QEXdDO2ut3YA:10 a=PxkB5W3o20Ba91AHUih5:22","X-Proofpoint-Spam-Details-Enc":"AW1haW4tMjYwNDI2MDA5MiBTYWx0ZWRfX3NjZt4gvo+aP\n I0MViGoq6LKTfYkrhRL8OkM33U4wlS6tPU46xu+eCBIeupcY0Nn5/BbiArndzj/4zY2qdEfwCsx\n rhdtKKhwQyXNhUw8RqyZsonUftO8fliyBC9slBR8wcmhe0HmJTSQo2QcAZ29Fi2mny+vjVwArV3\n +1kYFnZWBLjCBau8LRVT7aQ4urytLzgKEs5j9UGNM4ZpiyYD0jihc2CZQRHXogDPw+LwPnDWxnT\n 9d2OZ6lqr8mHp5dkcPczw9530WkeXEBCy/LHwy4FmRcN91Eh0l7xMN2JFddqFHtGtlNXuSNEhWl\n gVMf486UEK/D7bVlUiYPnEpL0eVgW3dyshSOIEll6akULaeDAZH7IoQ0z6yfGBYTz6dsPGzK1P5\n /2KbPpzzrAdMUT6q43fneGBFZfmCV/AtQBr9slgQbctFTshCJoOY4WaNTkk4I+2+UvxYAgtQK4t\n FFgsg/VOLe8IJpidXxA==","X-Proofpoint-Virus-Version":"vendor=baseguard\n engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49\n definitions=2026-04-26_03,2026-04-21_02,2025-10-01_01","X-Proofpoint-Spam-Details":"rule=outbound_notspam policy=outbound score=0\n clxscore=1015 spamscore=0 suspectscore=0 phishscore=0 adultscore=0\n priorityscore=1501 malwarescore=0 impostorscore=0 bulkscore=0\n lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc=\n route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604200000\n definitions=main-2604260092","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"}},{"id":3682389,"web_url":"http://patchwork.ozlabs.org/comment/3682389/","msgid":"<CAFiYyc0d907-J3WCpQN5ZYMA8qoCb6nQdXkqEkwtAjmFiLaO6Q@mail.gmail.com>","list_archive_url":null,"date":"2026-04-26T08:58:35","subject":"Re: [PATCH] match: Optimize `signed < 0 ? positive : min<signed,\n positive>` into `(signed)min<(unsigned), (unsigned)positive>` [PR110262]","submitter":{"id":1765,"url":"http://patchwork.ozlabs.org/api/people/1765/","name":"Richard Biener","email":"richard.guenther@gmail.com"},"content":"On Sun, Apr 26, 2026 at 10:47 AM Andrew Pinski\n<andrew.pinski@oss.qualcomm.com> wrote:\n>\n> On Sun, Apr 26, 2026 at 12:42 AM Richard Biener\n> <richard.guenther@gmail.com> wrote:\n> >\n> >\n> >\n> > > Am 26.04.2026 um 08:15 schrieb Andrew Pinski <andrew.pinski@oss.qualcomm.com>:\n> > >\n> > > ﻿While looking into PR 110252 a few years back, I noticed this missed\n> > > optimization in code from sel-sched.cc. I only realized today\n> > > I could generalize it to handle more than just 1 to all positive\n> > > values.\n> > > This adds the pattern to optimize:\n> > > signed < 0 ? positive : min<signed, positive>\n> > > into:\n> > > unsigned ts = signed;\n> > > unsigned ps = positive;\n> > > unsigned ru = min<ts, tp>;\n> > > (signed)ru\n> > >\n> > > Bootstrapped and tested on x86_64-linux-gnu.\n> > >\n> > >    PR tree-optimization/110262\n> > >\n> > > gcc/ChangeLog:\n> > >\n> > >    * match.pd (`signed < 0 ? positive : min<signed, positive>`): New\n> > >    pattern.\n> > >\n> > > gcc/testsuite/ChangeLog:\n> > >\n> > >    * gcc.dg/pr110262-1.c: New test.\n> > >    * gcc.dg/tree-ssa/phi-opt-46.c: New test.\n> > >    * gcc.dg/tree-ssa/phi-opt-47.c: New test.\n> > >\n> > > Signed-off-by: Andrew Pinski <andrew.pinski@oss.qualcomm.com>\n> > > ---\n> > > gcc/match.pd                               | 11 ++++++++++\n> > > gcc/testsuite/gcc.dg/pr110262-1.c          | 12 +++++++++++\n> > > gcc/testsuite/gcc.dg/tree-ssa/phi-opt-46.c | 15 ++++++++++++++\n> > > gcc/testsuite/gcc.dg/tree-ssa/phi-opt-47.c | 24 ++++++++++++++++++++++\n> > > 4 files changed, 62 insertions(+)\n> > > create mode 100644 gcc/testsuite/gcc.dg/pr110262-1.c\n> > > create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/phi-opt-46.c\n> > > create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/phi-opt-47.c\n> > >\n> > > diff --git a/gcc/match.pd b/gcc/match.pd\n> > > index 94f69185adf..f1be45b1993 100644\n> > > --- a/gcc/match.pd\n> > > +++ b/gcc/match.pd\n> > > @@ -7109,6 +7109,17 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)\n> > >                TYPE_SIGN (type)))\n> > >        (max @2 @4)))))))\n> > >\n> > > +/* Optimize signed < 0 ? positive : MIN<signed, positive> to\n> > > +   MIN<(unsigned)signed, (unsigned)positive>. */\n> > > +(simplify\n> > > + (cond (lt @0 integer_zerop)\n> > > +  tree_expr_nonnegative_p@1\n> > > +  (min:c @0 @1))\n> >\n> > We’d need a variant for the inverted compare as well?\n>\n> For most cases, no because phi-opt will test with inverted comparison\n> too. VRP creates cond_expr in some cases but that will only create `a\n> == CST1 ? CST2 : CST3`. so this won't show up there. You could get it\n> from generic as there is no canonical form for COND_EXPR. Or you could\n> get it if written directly in the Gimple Front-end.\n> I was thinking about trying to figure out how to get genmatch to\n> support swapping around the true/false but maybe it is too hard to\n> support for fp reasons.\n\nIt could be done similar to how comparison :c is handled, but yes, as\nnot all conditions can be inverted it would need extra checks.  I'd do\nit as a flag on the expr, that the operation is to be inverted, and emit\na invert_tree_comparison call and fail the match if it returns sth else than\nmatched by the switch.\n\nThat said, the switch label will need the inverted code as well, and that\nmeans two cases, one for honor_nans, one for !honor_nans in some\ncases.  So yeah, it definitely gets \"interesting\" ...\n\nRestricting to non-FP is difficult as well I think, so not worth considering.\n\nAnd then you get to handle (or reject) (cond:c (cmp:c @0 @1) @2 @3) or\n(cond:c @0 @2 @3).\n\nPossibly separating commutative lowering from cond:c lowering would\nmake things easier.\n\nRichard.\n\n> Thanks,\n> Andrea Pinski\n>\n> >\n> > Otherwise LGTM\n> > Richard\n> >\n> > > + (if (INTEGRAL_TYPE_P (type)\n> > > +      && !TYPE_UNSIGNED (type))\n> > > +  (with { tree utype = unsigned_type_for (type); }\n> > > +   (convert (min (convert:utype @0) (convert:utype @1))))))\n> > > +\n> > > #if GIMPLE\n> > > /* These patterns should be after min/max detection as simplifications\n> > >    of `(type)(zero_one ==/!= 0)` to `(type)(zero_one)`\n> > > diff --git a/gcc/testsuite/gcc.dg/pr110262-1.c b/gcc/testsuite/gcc.dg/pr110262-1.c\n> > > new file mode 100644\n> > > index 00000000000..61cc079710a\n> > > --- /dev/null\n> > > +++ b/gcc/testsuite/gcc.dg/pr110262-1.c\n> > > @@ -0,0 +1,12 @@\n> > > +/* PR tree-optimization/110262 */\n> > > +/* { dg-do compile } */\n> > > +/* { dg-options \"-O1 -fdump-tree-gimple\" } */\n> > > +\n> > > +int g(int min_need_stall)\n> > > +{\n> > > +  return  min_need_stall < 0 ? 1 : ((min_need_stall) < (1) ? (min_need_stall) : (1));\n> > > +}\n> > > +\n> > > +/* { dg-final { scan-tree-dump \"MIN_EXPR <\"  \"gimple\" } } */\n> > > +/* { dg-final { scan-tree-dump-not \"if \"  \"gimple\" } } */\n> > > +\n> > > diff --git a/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-46.c b/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-46.c\n> > > new file mode 100644\n> > > index 00000000000..a86aa168d39\n> > > --- /dev/null\n> > > +++ b/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-46.c\n> > > @@ -0,0 +1,15 @@\n> > > +/* PR tree-optimization/110262 */\n> > > +/* { dg-do compile } */\n> > > +/* { dg-options \"-O1 -fdump-tree-phiopt2\" } */\n> > > +\n> > > +int g(int min_need_stall)\n> > > +{\n> > > +  int t = ((min_need_stall) < (1) ? (min_need_stall) : (1));\n> > > +  return  min_need_stall < 0 ? 1 : t;\n> > > +}\n> > > +\n> > > +/* This should be converted into (int)MIN<(unsigned)min_need_stall, 1u> */\n> > > +\n> > > +/* { dg-final { scan-tree-dump \"MIN_EXPR <\"  \"phiopt2\" } } */\n> > > +/* { dg-final { scan-tree-dump-not \"if \"  \"phiopt2\" } } */\n> > > +\n> > > diff --git a/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-47.c b/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-47.c\n> > > new file mode 100644\n> > > index 00000000000..c42e5dd046f\n> > > --- /dev/null\n> > > +++ b/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-47.c\n> > > @@ -0,0 +1,24 @@\n> > > +/* PR tree-optimization/110262 */\n> > > +/* { dg-do compile } */\n> > > +/* { dg-options \"-O1 -fdump-tree-phiopt2\"  } */\n> > > +int g(int a, int b)\n> > > +{\n> > > +  b = b < 0 ? 0 : b;\n> > > +  int t = ((a) < (b) ? (a) : (b));\n> > > +  return a < 0 ? b : t;\n> > > +}\n> > > +\n> > > +int g1(int a, int b, unsigned short c)\n> > > +{\n> > > +  b = c;\n> > > +  int t = ((a) < (b) ? (a) : (b));\n> > > +  return a < 0 ? b : t;\n> > > +}\n> > > +\n> > > +/* Both of the last statement of these functions should be converted into:\n> > > +   (int)MIN<(unsigned)a, (unsigned)b>.  */\n> > > +\n> > > +/* { dg-final { scan-tree-dump \"MIN_EXPR <\"  \"phiopt2\" } } */\n> > > +/* { dg-final { scan-tree-dump-not \"if \"  \"phiopt2\" } } */\n> > > +/* { dg-final { scan-tree-dump-times \"Removing basic block\" 2  \"phiopt2\" } } */\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=H7Bq19t3;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=2620:52:6:3111::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=H7Bq19t3","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=pass smtp.remote-ip=209.85.208.42"],"Received":["from vm01.sourceware.org (vm01.sourceware.org\n [IPv6:2620:52:6:3111::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 4g3LGy5JRRz1xvV\n\tfor <incoming@patchwork.ozlabs.org>; Sun, 26 Apr 2026 18:59:21 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 5B6044BB590F\n\tfor <incoming@patchwork.ozlabs.org>; Sun, 26 Apr 2026 08:59:19 +0000 (GMT)","from mail-ed1-f42.google.com (mail-ed1-f42.google.com\n [209.85.208.42])\n by sourceware.org (Postfix) with ESMTPS id 7C5B84BB3B8E\n for <gcc-patches@gcc.gnu.org>; Sun, 26 Apr 2026 08:58:49 +0000 (GMT)","by mail-ed1-f42.google.com with SMTP id\n 4fb4d7f45d1cf-67179ed133dso10216376a12.2\n for <gcc-patches@gcc.gnu.org>; Sun, 26 Apr 2026 01:58:49 -0700 (PDT)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 5B6044BB590F","OpenDKIM Filter v2.11.0 sourceware.org 7C5B84BB3B8E"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 7C5B84BB3B8E","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 7C5B84BB3B8E","ARC-Seal":["i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1777193929; cv=pass;\n b=LkTlwhv50yKANlEggNH7AVPJqzZ60DeQjvEY+rDupU2d7IobbEJhZSlRLuVTpMSQuR7J8aA1gCOP+Uqeje/H77LuitvSx7r2Qm+mBeHhpMwLjw1glCa2MBaVCr1L7tMtIhHllGwH4X0H6EsI43kGUCAHEeKIp14JM/O7G2+XVaA=","i=1; a=rsa-sha256; t=1777193928; cv=none;\n d=google.com; s=arc-20240605;\n b=gXHLFet9X+VkoTr/bqEA5k/3QdfFwV0ygCSS4k4AInz7qQwQheQnJijk2DGjiH2JzU\n e3QWlyxBUF3sFQ+SZkicZFOa+Qs3lWNAQu6UXTwO18YtvOuRtyw0n0CZkVia9wsW1gEi\n o0HI64OFK/VXGAptN0DRJlA72LvjHvDzBoKdFNFs5tTwogZoYCpROA9M/g3HZcSvQGj1\n IxohGnm1TOlCMfsxA6FNE2+h7slaYyvA2XJTNmMzu3T3PYHSJ4dwFhxXjDg+ScLKB8p2\n ZRTjYwTCtJku8qI4CUE4VCeZV9BYb6icjz1cL1XISqibzaopu9in7KrguzzSxj08McuH\n MP1g=="],"ARC-Message-Signature":["i=2; a=rsa-sha256; d=sourceware.org; s=key;\n t=1777193929; c=relaxed/simple;\n bh=1yWDfC6cqkOjp6LIimxvcAwJEyf5bcDUQLJUv/a3zB0=;\n h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To;\n b=Yp+EagFUu0anwG1EOx+SCvr8eTRCXcscT9sZt/rFKK9S0E+0g+JdYQON2ECmAxj+K/Pb8dwl9wR3SshckAasddM5jjEaVKBEQ5PspwTX6vr/Twsdjqmt/vyjVjQgsPvfwiQBgRlrkxEk0Ky/aBsVwZlFxvWjLNSZZN8StJ9TiZk=","i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;\n s=arc-20240605;\n h=content-transfer-encoding:cc:to:subject:message-id:date:from\n :in-reply-to:references:mime-version:dkim-signature;\n bh=eaW0uRQh+2kMXTK8siriaUk1FYNCesoVQrCn/WJXREc=;\n fh=+uEDwx55CzEWtNA/tzpV1shOHaMh+Xh7AN17D33930Y=;\n b=cCO7M+J+qbkklOXrW2ivwMNQ+UXG9Fyd1nNgx1z3YBbFrNIhby9WMLbzIJADzJf3FS\n I1P9sm50iTLPPzBI0065d7YpVYoYhTlM6YSiRb33KTlrECs5jnbycvsuq3o7l2Vloua0\n BJERUGNg5kPeAvZY4zmqC2daPCv6VlRo5wYdBra3ezQIjAfYD7qZ06pHeuY+Qr5Y8ubg\n wrGO7ykG/N1matPM/6oMRAAcwbV6B3i0IETJIcnaken7t5tP9qImvyNo41XJARqu0ILX\n OD36kVNraj4GFjkphJ3uQ2Xk808RnNUypKy5NNPTnVG+XBOU/Ntp7X8ixZk3byJHHP0k\n WkWA==; darn=gcc.gnu.org"],"ARC-Authentication-Results":["i=2; server2.sourceware.org","i=1; mx.google.com; arc=none"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=gmail.com; s=20251104; t=1777193928; x=1777798728; darn=gcc.gnu.org;\n h=content-transfer-encoding:cc:to:subject:message-id:date:from\n :in-reply-to:references:mime-version:from:to:cc:subject:date\n :message-id:reply-to;\n bh=eaW0uRQh+2kMXTK8siriaUk1FYNCesoVQrCn/WJXREc=;\n b=H7Bq19t34NBT/z+5X0lAwj9ORNvBvHNh6UbDG+GAk9Hq89zY0L4hB5czACx/MqCZJn\n J72ZLF0kYM/cTQ46qsF3flwlhanL7duuAbGCeBiGZb/LMf9p3fKLG9C5tzYJyXuZsN/I\n z5GO+qYhZeik0jrJTWRjlkvl82HXGb+wAR1QXWV+KQusB0Apw1A+K9x89S7piCaaBPFG\n tawPcFuJ5bbFJfBIO8khtCl0uMNiJke34HJvqg3EqKJ9i/Cyh2RA5zZNLOkC2TojJBF6\n boi1os6ID9k7xa0biW21h9lxII0zQDxa99fae8jAMeUKHrKFQh30zmwrN/yvOZRGrTTF\n 6JlQ==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1777193928; x=1777798728;\n h=content-transfer-encoding:cc:to:subject:message-id:date:from\n :in-reply-to:references:mime-version:x-gm-gg:x-gm-message-state:from\n :to:cc:subject:date:message-id:reply-to;\n bh=eaW0uRQh+2kMXTK8siriaUk1FYNCesoVQrCn/WJXREc=;\n b=EoF6O2HyLOXohuAoPCegwRtTW1Co3Nt+UyrnlWuYHbyDWkJ9bU5UFtAyZiB0E9i6Rb\n z953AhzWZGeN/yXabc57jlDRVocjhAEoJLw5xykUB526eaQme+Bm0vj55FSoKW+XJ0+x\n BBrLFW1c3SmG7MWrwllh3ksvCcU5q1A3LEnbWB6pxIkOQYZARTM2qnFcFV1gf/Czk0eW\n LtNHuSN04FEz/0m8A9P+RWGOlhKFG7dJRZTXpd6J1UbFUm23xzvEWU0bvHBDo7JmGVNd\n E5nHGsnfRLDmpQhyJb5XZ93Kf8qwkT10FQvQjRiBeQlXx7Jq9OgK19HRugbchIeeWHZj\n EQkg==","X-Gm-Message-State":"AOJu0Ywo68T1pXSPzIyHei8Raj49TstFCwFZTIJGwePl0A5Q5RFrK35M\n DCKgceAY1bncHxHGcvypmpVyqxml5wfPT8iQ+IKZTDiBgKE8qC+e82+yL3C/nbdOKKWjzxnpB6G\n 5dVL3yt/lx9Gffg//SAunvxEdPNQP4Aw=","X-Gm-Gg":"AeBDietB7uOuvRVNS9o/dXtJM81eBu1h1foIdbarwcgv2paJKRmhlfq5HgHW21wxzRh\n H+hlGTb0V9xQAG9ncVcsBL0evQB1QH0LmFO1+WpNxBgUQ82XRdEWVRAqe+tGuqnFzAbqx3H73h4\n SQvMZdBDyVRnFD0VjERFYYu5h4rXNsll3zQLrDBD2vdMQ3H2pskxTPhsvDKmrCuvAD3D5+j6KRM\n tWpAC4v8LqrbdKl/EpQW+JFzXb9jPwF0Rfi78wCN6ca2nbprcDLcCzhAeStPKTxZNX9Va/6FTIn\n orGRagTfPINr4SUv","X-Received":"by 2002:a05:6402:1598:b0:671:ab62:765b with SMTP id\n 4fb4d7f45d1cf-672bfddfa38mr16292092a12.20.1777193927988; Sun, 26 Apr 2026\n 01:58:47 -0700 (PDT)","MIME-Version":"1.0","References":"<20260426061356.581852-1-andrew.pinski@oss.qualcomm.com>\n <2E4B6420-20F9-4DC7-9D3D-9647F5B892F1@gmail.com>\n <CALvbMcDSYCQmkzcrOfz0LEVGLqJ9rCuQK-JdUGbeWZXiLEF_GA@mail.gmail.com>","In-Reply-To":"\n <CALvbMcDSYCQmkzcrOfz0LEVGLqJ9rCuQK-JdUGbeWZXiLEF_GA@mail.gmail.com>","From":"Richard Biener <richard.guenther@gmail.com>","Date":"Sun, 26 Apr 2026 10:58:35 +0200","X-Gm-Features":"AVHnY4Jmd8Kb9oO5jv-CcvoyM0GJeWtZelt1kJA179XXKnv_JRF7OYI6XqBA6vw","Message-ID":"\n <CAFiYyc0d907-J3WCpQN5ZYMA8qoCb6nQdXkqEkwtAjmFiLaO6Q@mail.gmail.com>","Subject":"Re: [PATCH] match: Optimize `signed < 0 ? positive : min<signed,\n positive>` into `(signed)min<(unsigned), (unsigned)positive>` [PR110262]","To":"Andrew Pinski <andrew.pinski@oss.qualcomm.com>","Cc":"gcc-patches@gcc.gnu.org","Content-Type":"text/plain; charset=\"UTF-8\"","Content-Transfer-Encoding":"quoted-printable","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"}}]