Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2232115/?format=api
{ "id": 2232115, "url": "http://patchwork.ozlabs.org/api/patches/2232115/?format=api", "web_url": "http://patchwork.ozlabs.org/project/gcc/patch/20260502180223.410876-1-avinal.xlvii@gmail.com/", "project": { "id": 17, "url": "http://patchwork.ozlabs.org/api/projects/17/?format=api", "name": "GNU Compiler Collection", "link_name": "gcc", "list_id": "gcc-patches.gcc.gnu.org", "list_email": "gcc-patches@gcc.gnu.org", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20260502180223.410876-1-avinal.xlvii@gmail.com>", "list_archive_url": null, "date": "2026-05-02T18:02:23", "name": "match: Optimize `A > B ? ABS(A) : B` to `MAX(A, B)` when B >= 0 [PR116700]", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "7804b0269090dae9defad32420bffba27292bddf", "submitter": { "id": 88549, "url": "http://patchwork.ozlabs.org/api/people/88549/?format=api", "name": "Avinal Kumar", "email": "avinal.xlvii@gmail.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/gcc/patch/20260502180223.410876-1-avinal.xlvii@gmail.com/mbox/", "series": [ { "id": 502544, "url": "http://patchwork.ozlabs.org/api/series/502544/?format=api", "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=502544", "date": "2026-05-02T18:02:23", "name": "match: Optimize `A > B ? ABS(A) : B` to `MAX(A, B)` when B >= 0 [PR116700]", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/502544/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2232115/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2232115/checks/", "tags": {}, "related": [], "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=ffIihG+P;\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=ffIihG+P", "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=2607:f8b0:4864:20::1031" ], "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 4g7G3d6MF8z1xvV\n\tfor <incoming@patchwork.ozlabs.org>; Sun, 03 May 2026 04:03:08 +1000 (AEST)", "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 2C3494AA6FC9\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 2 May 2026 18:03:06 +0000 (GMT)", "from mail-pj1-x1031.google.com (mail-pj1-x1031.google.com\n [IPv6:2607:f8b0:4864:20::1031])\n by sourceware.org (Postfix) with ESMTPS id A0D384BB5880\n for <gcc-patches@gcc.gnu.org>; Sat, 2 May 2026 18:02:39 +0000 (GMT)", "by mail-pj1-x1031.google.com with SMTP id\n 98e67ed59e1d1-3567e2b4159so2261334a91.0\n for <gcc-patches@gcc.gnu.org>; Sat, 02 May 2026 11:02:39 -0700 (PDT)", "from fedoraemon.neon-universe.ts.net\n ([2406:7400:11d:a9dc:9a14:72eb:1a60:868a])\n by smtp.gmail.com with ESMTPSA id\n 98e67ed59e1d1-364f44ddee2sm2902456a91.1.2026.05.02.11.02.35\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Sat, 02 May 2026 11:02:36 -0700 (PDT)" ], "DKIM-Filter": [ "OpenDKIM Filter v2.11.0 sourceware.org 2C3494AA6FC9", "OpenDKIM Filter v2.11.0 sourceware.org A0D384BB5880" ], "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org A0D384BB5880", "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org A0D384BB5880", "ARC-Seal": "i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777744959; cv=none;\n b=LArik+aadjk6El3jbD00ArPNIOMedfqsFYAGQMBJiJJUyTerRYRG8YitzoG+epZv7cDbEI2wKbJPJO4lULeZAe5Opw02lH0rXSUf1PD7cn5eUKNYjF0oMls2LfI2zoV4UBLsqGI1cN94dbqn3tX66LlrL52JeDuLJDvnTaVgnr8=", "ARC-Message-Signature": "i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1777744959; c=relaxed/simple;\n bh=IfwVuieVOGJ68AgGowmQrWkVLxZvdj/kKpWMU6vnLMI=;\n h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version;\n b=EAAck8rKHFBiLgMZEz378+zP4xjeQikbsAXHyL8eG8Zi29S2scbbvuINpBvtZezlZQ4ZPuhlmdrLyHEjdDFUd+Gi1oVAxvW9H66UOp2ErjFeSmWpcZS7yGjPn+JHzflydbAMSMap0mEpmrAVPWwtxo+U8vVXpafNDhx2iWvoRNY=", "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=1777744958; x=1778349758; darn=gcc.gnu.org;\n h=content-transfer-encoding:mime-version:message-id:date:subject:cc\n :to:from:from:to:cc:subject:date:message-id:reply-to;\n bh=07HaaUB5FjiyCr3TsxHjDqoKvJQ581/dumcxtMuwWyg=;\n b=ffIihG+PzCLCP9dKPkjVx/G8XMVfddA1m6rzQfvuIcBLcdASbRYLaM5pI/fj0HaOZR\n W6BQkmC8AJjiQyS6IxUHb/6JAzxefan7gOEvv5raSL/phyPSJ8YVQ99BD2jDqTatbZ53\n Dn8jYEqnG5Rt/bzRxmFDvxPth7/1OJSjxWMc1lyybnt8RnFj+rZMox4aRZP7eY+9fEGH\n t7PQWN+2DX7tMoCEjHazcTyz/vntN/kZLaSCDdlFyDHE12qWReubwbyUk8SPjr6LmlOd\n dBx88Tcs1wmO5DFgqGHdzAivcMMHIEWF25hm/ZWM2s2hR9WpXedaWQQWrtoXAn4yQ377\n KAhw==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1777744958; x=1778349758;\n h=content-transfer-encoding:mime-version:message-id:date:subject:cc\n :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date\n :message-id:reply-to;\n bh=07HaaUB5FjiyCr3TsxHjDqoKvJQ581/dumcxtMuwWyg=;\n b=OQG3YvRGAaIlivhYpewyiRgo3MpX1EwPQbAenXFYVUzkv8+GRz2EoKgBtsP7fPh83d\n ingOjKQ0/IPoqwtClo3/89RGFAT6rTDCACSFnfz90dy///cjSV/ColVNqDWKMG2rJErd\n WVQahHUP7gruGweuLgmupjpiDOMCGEaVcHWTIand1SSa9XUlW7QanYFq2oK/PD8tlBew\n 7uyIqD00UoZYuI6hoTsLj1z7nljYEY5s2dFbn0268u30Cb4lm3fXji/nGDKobXr+kiUh\n Fw/paYi9wWLHhprqo0tJTJbtcvhFENY0Knc0Iu+mL3w8GLIQzH6XOFyuVNNQjh5BjYZG\n C11A==", "X-Gm-Message-State": "AOJu0YyWhbzWZfWmceZ/g0gMsT/VwnYnpjBsl5oHrkkZ1YycvJPHCVGh\n iwh6QU1KNuHyfg2KhHmOMptTM9jYmkSN8YHDoWn7CYfs+524bwpRtfHoo1VeeQ==", "X-Gm-Gg": "AeBDietSy7+bkXjEMhCAzR1KYi1CmsU/ROZaU/coefHCfShWJqgDyh3+hfqjueEC3bV\n B4fdvnp+oYbQmj9gDxnQmQEjcjKZiGl12IvtjAtlG0/+nglLWFRJ8YJtZfCZyFgonrBG8EwTSLg\n lxoSaPdNd3RA85Rpza8d5o6tto2DqrHslQV/eNhA90hs2Q4r5tJJCpF/ZWjtFUF27o9+KHswM0p\n 6Cfq5jFZ+GFXvmfOE+7m23abYN0VokLCgqx7T23W1Q3eGqnzjwg8FFycTD8ksAaVkGdOBB+fUgs\n h5b7j50aLPrRmE1U51njNX3US3actJcIp7IkTIBUNqbBp1ViW93PF5+ZmyqvFa2qHFE6CasODS6\n 85+xrjtAOcEvTYHyjfvHGob2/64kwmZQsaXKXKRnidR32Z97mLM+gvzNu97i09dVkUseXO7KzjR\n TqwEuKGFtccL2yvwBbUXQmeMIXyzHsQYnjbN6ZAl96cThEM1UNpENz//DPLLEfBm+f8kaJujcNt\n 8rt", "X-Received": "by 2002:a17:90a:f945:b0:35f:b9ea:8fa5 with SMTP id\n 98e67ed59e1d1-3650ce4ab61mr4201618a91.20.1777744957975;\n Sat, 02 May 2026 11:02:37 -0700 (PDT)", "From": "Avinal Kumar <avinal.xlvii@gmail.com>", "To": "gcc-patches@gcc.gnu.org", "Cc": "andrew.pinski@oss.qualcomm.com", "Subject": "[PATCH] match: Optimize `A > B ? ABS(A) : B` to `MAX(A,\n B)` when B >= 0 [PR116700]", "Date": "Sat, 2 May 2026 23:32:23 +0530", "Message-ID": "<20260502180223.410876-1-avinal.xlvii@gmail.com>", "X-Mailer": "git-send-email 2.54.0", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "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" }, "content": "When B is known to be non-negative and A > B, A must be positive,\nso ABS(A) == A. The whole expression (A > B ? ABS(A) : B) then\nsimplifies to MAX(A, B). This is caught at -O2 via VRP, but at\n-O1 phiopt1 produces ABS_EXPR and no later pass simplifies it.\n\n PR tree-optimization/116700\n\ngcc/ChangeLog:\n\n * match.pd: (A > B ? ABS(A) : B -> MAX(A, B)): New pattern\n for non-negative B.\n\ngcc/testsuite/ChangeLog:\n\n * gcc.dg/pr116700.c: New test.\n * gcc.dg/tree-ssa/phi-opt-48.c: New test.\n\nSigned-off-by: Avinal Kumar <avinal.xlvii@gmail.com>\n---\nI compared the changes in the suggested patch on bugzilla, understood patterns\nand tried to adapt them. The actual mechanism is still not completely understood\nto me. The tests are running fine but I think I am missing some cases.\n\nHere is how I ran the tests:\n\nmake -j$(nproc)\nmake check-gcc RUNTESTFLAGS=\"tree-ssa.exp=phi-opt-48.c\"\nmake check-gcc RUNTESTFLAGS=\"dg.exp=pr116700.c\"\n\nOn a side note, is there any trick/tips for building faster? I have a decent\nsystem (8C 16T and 64GB RAM) and it takes almost an hour.\n\n gcc/match.pd | 9 ++++++++\n gcc/testsuite/gcc.dg/pr116700.c | 13 +++++++++++\n gcc/testsuite/gcc.dg/tree-ssa/phi-opt-48.c | 25 ++++++++++++++++++++++\n 3 files changed, 47 insertions(+)\n create mode 100644 gcc/testsuite/gcc.dg/pr116700.c\n create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/phi-opt-48.c", "diff": "diff --git a/gcc/match.pd b/gcc/match.pd\nindex dd9efb82c59..928f75c5a44 100644\n--- a/gcc/match.pd\n+++ b/gcc/match.pd\n@@ -7276,6 +7276,15 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)\n (if (INTEGRAL_TYPE_P (type))\n @3))\n \n+/* A > B ? ABS(A) : B -> MAX(A, B) when B is non-negative.\n+ When A > B >= 0, A is positive so ABS(A) = A = MAX(A, B).\n+ When A <= B, the result is B = MAX(A, B). */\n+(for cmp (gt ge)\n+ (simplify\n+ (cond (cmp:c @0 tree_expr_nonnegative_p@1) (abs @0) @1)\n+ (if (INTEGRAL_TYPE_P (type))\n+ (max @0 @1))))\n+\n /* (X + 1) > Y ? -X : 1 simplifies to X >= Y ? -X : 1 when\n X is unsigned, as when X + 1 overflows, X is -1, so -X == 1. */\n (simplify\ndiff --git a/gcc/testsuite/gcc.dg/pr116700.c b/gcc/testsuite/gcc.dg/pr116700.c\nnew file mode 100644\nindex 00000000000..a52388249a3\n--- /dev/null\n+++ b/gcc/testsuite/gcc.dg/pr116700.c\n@@ -0,0 +1,13 @@\n+/* PR tree-optimization/116700 */\n+/* { dg-do compile } */\n+/* { dg-options \"-O1 -fdump-tree-phiopt1\" } */\n+\n+int f(unsigned char a, int b, int c)\n+{\n+ int t = a;\n+ if (c > t) t = (c > 0 ? c : -c);\n+ return t;\n+}\n+\n+/* { dg-final { scan-tree-dump \"MAX_EXPR\" \"phiopt1\" } } */\n+/* { dg-final { scan-tree-dump-not \"ABS_EXPR\" \"phiopt1\" } } */\ndiff --git a/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-48.c b/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-48.c\nnew file mode 100644\nindex 00000000000..06317766457\n--- /dev/null\n+++ b/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-48.c\n@@ -0,0 +1,25 @@\n+/* { dg-do compile } */\n+/* { dg-options \"-O1 -fdump-tree-phiopt1\" } */\n+\n+/* Test that (A > B) ? ABS(A) : B is simplified to MAX(A, B)\n+ when B is known to be non-negative. */\n+\n+int f(unsigned char a, int b, int c)\n+{\n+ int t = a;\n+ if (c > t)\n+ t = (c > 0 ? c : -c);\n+ return t;\n+}\n+\n+int f1(unsigned char a, int b, int c)\n+{\n+ int t = a;\n+ if (c > t) return (c > 0 ? c : -c);\n+ return t;\n+}\n+\n+/* Both functions should be converted to MAX_EXPR by phiopt1. */\n+/* { dg-final { scan-tree-dump-times \"MAX_EXPR\" 2 \"phiopt1\" } } */\n+/* { dg-final { scan-tree-dump-not \"ABS_EXPR\" \"phiopt1\" } } */\n+/* { dg-final { scan-tree-dump-not \"if \" \"phiopt1\" } } */\n", "prefixes": [] }