get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/1.2/patches/2226337/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2226337,
    "url": "http://patchwork.ozlabs.org/api/1.2/patches/2226337/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/gcc/patch/bmm.hhubwh7m90.gcc.gcc-TEST.pinskia.33.1.13@forge-stage.sourceware.org/",
    "project": {
        "id": 17,
        "url": "http://patchwork.ozlabs.org/api/1.2/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": "<bmm.hhubwh7m90.gcc.gcc-TEST.pinskia.33.1.13@forge-stage.sourceware.org>",
    "list_archive_url": null,
    "date": "2026-04-22T10:49:22",
    "name": "[v1,13/15] gimple-fold: Implement simple copy propagation for aggregates [PR14295]",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "fb18d9793ae30e5f164b3d8544656c72ec647dd7",
    "submitter": {
        "id": 93219,
        "url": "http://patchwork.ozlabs.org/api/1.2/people/93219/?format=api",
        "name": "Andrew Pinski via Sourceware Forge",
        "email": "forge-bot+pinskia@forge-stage.sourceware.org"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/gcc/patch/bmm.hhubwh7m90.gcc.gcc-TEST.pinskia.33.1.13@forge-stage.sourceware.org/mbox/",
    "series": [
        {
            "id": 500990,
            "url": "http://patchwork.ozlabs.org/api/1.2/series/500990/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=500990",
            "date": "2026-04-22T10:49:12",
            "name": "copy-prop-arg",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/500990/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2226337/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2226337/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 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; dmarc=none (p=none dis=none)\n header.from=forge-stage.sourceware.org",
            "sourceware.org;\n spf=pass smtp.mailfrom=forge-stage.sourceware.org",
            "server2.sourceware.org;\n arc=none smtp.remote-ip=38.145.34.39"
        ],
        "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 4g0xsh5jJJz1y2d\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 21:32:40 +1000 (AEST)",
            "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 957BF4081349\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 11:32:22 +0000 (GMT)",
            "from forge-stage.sourceware.org (vm08.sourceware.org [38.145.34.39])\n by sourceware.org (Postfix) with ESMTPS id 1676E41627ED\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 10:50:35 +0000 (GMT)",
            "from forge-stage.sourceware.org (localhost [IPv6:::1])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256)\n (No client certificate requested)\n by forge-stage.sourceware.org (Postfix) with ESMTPS id 0318D42BE2\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 10:50:32 +0000 (UTC)"
        ],
        "DKIM-Filter": [
            "OpenDKIM Filter v2.11.0 sourceware.org 957BF4081349",
            "OpenDKIM Filter v2.11.0 sourceware.org 1676E41627ED"
        ],
        "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org 1676E41627ED",
        "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org 1676E41627ED",
        "ARC-Seal": "i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776855035; cv=none;\n b=VLubkT268Se8y9HbShdxx7GXJOelnUJCzeddAiPF4BdNH9CTgvMVr0XTidwhR4jGbYhNEm184Fh1a83OUM7zRx/Z3oVhS8Uz02evMDVJcCKTtO9FIzCkrBJbByKFf4jixkamWEEl23948HNlaH0xDSsnSKIVM/4pGnIHrBg2KaY=",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776855035; c=relaxed/simple;\n bh=NEibjsL/lRNEWnhFEhfWIbUNs4guv3AGTI93dBg8d9U=;\n h=From:Date:Subject:To:Message-ID;\n b=bLnNHYnDQKc/E0W2QeBYiXKSg3l4CuVyN43XeVaAO1Wlld5kwOArIA9SM10ypUlM8LOB7jcv3ZmGkPxifgES+QbQNc6rfI+cuzB8uPw+PI/PvcgGbB1t6gUv07SWNaERNlX86On5zqwso+cHVDvZQx4fG9LBxu9FIcQcyi+sl3s=",
        "ARC-Authentication-Results": "i=1; server2.sourceware.org",
        "From": "Andrew Pinski via Sourceware Forge\n <forge-bot+pinskia@forge-stage.sourceware.org>",
        "Date": "Wed, 22 Apr 2026 10:49:22 +0000",
        "Subject": "[PATCH v1 13/15] gimple-fold: Implement simple copy propagation for\n aggregates [PR14295]",
        "To": "gcc-patches mailing list <gcc-patches@gcc.gnu.org>",
        "Message-ID": "\n <bmm.hhubwh7m90.gcc.gcc-TEST.pinskia.33.1.13@forge-stage.sourceware.org>",
        "X-Mailer": "batrachomyomachia",
        "X-Pull-Request-Organization": "gcc",
        "X-Pull-Request-Repository": "gcc-TEST",
        "X-Pull-Request": "https://forge.sourceware.org/gcc/gcc-TEST/pulls/33",
        "References": "\n <bmm.hhubwh7m90.gcc.gcc-TEST.pinskia.33.1.0@forge-stage.sourceware.org>",
        "In-Reply-To": "\n <bmm.hhubwh7m90.gcc.gcc-TEST.pinskia.33.1.0@forge-stage.sourceware.org>",
        "X-Patch-URL": "\n https://forge.sourceware.org/pinskia/gcc-TEST/commit/4098638b32aa9b21e2a3588e9aff77d23fb6f13c",
        "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>",
        "Reply-To": "gcc-patches mailing list <gcc-patches@gcc.gnu.org>,\n pinskia@gcc.gnu.org",
        "Errors-To": "gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"
    },
    "content": "From: Andrew Pinski <quic_apinski@quicinc.com>\n\nThis implements a simple copy propagation for aggregates in the similar\nfashion as we already do for copy prop of zeroing.\n\nRight now this only looks at the previous vdef statement but this allows us\nto catch a lot of cases that show up in C++ code.\n\n\tPR tree-optimization/14295\ngcc/ChangeLog:\n\n\t* gimple-fold.cc (optimize_agr_copyprop): New function.\n\t(fold_stmt_1): Call optimize_agr_copyprop for load/store statements.\n\ngcc/testsuite/ChangeLog:\n\n\t* gcc.dg/tree-ssa/20031106-6.c: Un-xfail. Add scan for forwprop1.\n\t* g++.dg/opt/pr66119.C: Disable forwprop and vrp since that does\n\tthe copy prop now.\n\nSigned-off-by: Andrew Pinski <quic_apinski@quicinc.com>\n---\n gcc/gimple-fold.cc                         | 72 ++++++++++++++++++++++\n gcc/testsuite/g++.dg/opt/pr66119.C         |  2 +-\n gcc/testsuite/gcc.dg/tree-ssa/20031106-6.c |  8 ++-\n 3 files changed, 79 insertions(+), 3 deletions(-)",
    "diff": "diff --git a/gcc/gimple-fold.cc b/gcc/gimple-fold.cc\nindex 92276eb0bc29..3d718de6e19c 100644\n--- a/gcc/gimple-fold.cc\n+++ b/gcc/gimple-fold.cc\n@@ -1043,6 +1043,72 @@ optimize_memcpy_to_memset (gimple_stmt_iterator *gsip, tree dest, tree src, tree\n   return true;\n }\n \n+/* Optimizes\n+   a = c;\n+   b = a;\n+   into\n+   a = c;\n+   b = c;\n+   GSIP is the second statement and SRC is the common\n+   between the statements.\n+*/\n+static bool\n+optimize_agr_copyprop (gimple_stmt_iterator *gsip, tree dest, tree src)\n+{\n+  gimple *stmt = gsi_stmt (*gsip);\n+  if (gimple_has_volatile_ops (stmt))\n+    return false;\n+\n+  tree vuse = gimple_vuse (stmt);\n+  if (vuse == NULL || TREE_CODE (vuse) != SSA_NAME)\n+    return false;\n+\n+  gimple *defstmt = SSA_NAME_DEF_STMT (vuse);\n+  if (!gimple_assign_load_p (defstmt)\n+      || !gimple_store_p (defstmt))\n+    return false;\n+  if (gimple_has_volatile_ops (defstmt))\n+    return false;\n+\n+  tree dest2 = gimple_assign_lhs (defstmt);\n+  tree src2 = gimple_assign_rhs1 (defstmt);\n+  if (!operand_equal_p (src, dest2, 0))\n+    return false;\n+  /* If replacing with the same thing, just skip it. */\n+  if (operand_equal_p (src, src2, 0))\n+    return false;\n+\n+  /* For 2 memory refences and using a temporary to do the copy,\n+     don't remove the temporary as the 2 memory references might overlap.\n+     See PR 22237 for full details.\n+     E.g.\n+     t = *a;\n+     *b = t;\n+     Cannot be convert into\n+     t = *a;\n+     *b = *a;\n+  */\n+  if (!DECL_P (dest) && DECL_P (src) && !DECL_P (src2))\n+    return false;\n+\n+  if (dump_file && (dump_flags & TDF_DETAILS))\n+    {\n+      fprintf (dump_file, \"Simplified\\n  \");\n+      print_gimple_stmt (dump_file, stmt, 0, dump_flags);\n+      fprintf (dump_file, \"after previous\\n  \");\n+      print_gimple_stmt (dump_file, defstmt, 0, dump_flags);\n+    }\n+  gimple_assign_set_rhs_from_tree (gsip, unshare_expr (src2));\n+  update_stmt (stmt);\n+\n+  if (dump_file && (dump_flags & TDF_DETAILS))\n+    {\n+      fprintf (dump_file, \"into\\n  \");\n+      print_gimple_stmt (dump_file, stmt, 0, dump_flags);\n+    }\n+  return true;\n+}\n+\n /* Fold function call to builtin mem{{,p}cpy,move}.  Try to detect and\n    diagnose (otherwise undefined) overlapping copies without preventing\n    folding.  When folded, GCC guarantees that overlapping memcpy has\n@@ -6696,6 +6762,12 @@ fold_stmt_1 (gimple_stmt_iterator *gsi, bool inplace, tree (*valueize) (tree),\n \t\tchanged = true;\n \t\tbreak;\n \t      }\n+\t    if (optimize_agr_copyprop (gsi, gimple_assign_lhs (stmt),\n+\t\t\t\t       gimple_assign_rhs1 (stmt)))\n+\t      {\n+\t\tchanged = true;\n+\t\tbreak;\n+\t      }\n \t  }\n \t/* Try to canonicalize for boolean-typed X the comparisons\n \t   X == 0, X == 1, X != 0, and X != 1.  */\ndiff --git a/gcc/testsuite/g++.dg/opt/pr66119.C b/gcc/testsuite/g++.dg/opt/pr66119.C\nindex d1b1845a2586..3f1dee7f69a8 100644\n--- a/gcc/testsuite/g++.dg/opt/pr66119.C\n+++ b/gcc/testsuite/g++.dg/opt/pr66119.C\n@@ -3,7 +3,7 @@\n    the value of MOVE_RATIO now is.  */\n \n /* { dg-do compile  { target { { i?86-*-* x86_64-*-* } && c++11 } }  }  */\n-/* { dg-options \"-O3 -mavx -fdump-tree-sra -march=slm -mtune=slm -fno-early-inlining\" } */\n+/* { dg-options \"-O3 -mavx -fdump-tree-sra -fno-tree-forwprop -fno-tree-vrp -march=slm -mtune=slm -fno-early-inlining\" } */\n // { dg-skip-if \"requires hosted libstdc++ for cstdlib malloc\" { ! hostedlib } }\n \n #include <immintrin.h>\ndiff --git a/gcc/testsuite/gcc.dg/tree-ssa/20031106-6.c b/gcc/testsuite/gcc.dg/tree-ssa/20031106-6.c\nindex 56d1887bd78f..c7e00887c16c 100644\n--- a/gcc/testsuite/gcc.dg/tree-ssa/20031106-6.c\n+++ b/gcc/testsuite/gcc.dg/tree-ssa/20031106-6.c\n@@ -1,5 +1,7 @@\n /* { dg-do compile } */ \n-/* { dg-options \"-O1 -fno-tree-sra -fdump-tree-optimized\" } */\n+/* { dg-options \"-O1 -fno-tree-sra -fdump-tree-optimized -fdump-tree-forwprop1-details\" } */\n+\n+/* PR tree-optimization/14295 */\n \n extern void link_error (void);\n \n@@ -25,4 +27,6 @@ struct s foo (struct s r)\n \n /* There should be no references to any of \"temp_struct*\"\n    temporaries.  */\n-/* { dg-final { scan-tree-dump-times \"temp_struct\" 0 \"optimized\" { xfail *-*-* } } } */\n+/* { dg-final { scan-tree-dump-times \"temp_struct\" 0 \"optimized\" } } */\n+/* Also check that forwprop pass did the copy prop. */\n+/* { dg-final { scan-tree-dump-times \"after previous\" 3 \"forwprop1\" } } */\n",
    "prefixes": [
        "v1",
        "13/15"
    ]
}