{"id":2223730,"url":"http://patchwork.ozlabs.org/api/1.1/patches/2223730/?format=json","web_url":"http://patchwork.ozlabs.org/project/gcc/patch/20260416023829.940969-1-andrew.pinski@oss.qualcomm.com/","project":{"id":17,"url":"http://patchwork.ozlabs.org/api/1.1/projects/17/?format=json","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},"msgid":"<20260416023829.940969-1-andrew.pinski@oss.qualcomm.com>","date":"2026-04-16T02:38:29","name":"[GCC17-PATCH] cfghooks: Pass data to callback function of make_forwarder_block","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"9d8c98f5aac2dbc6c113d64ee7582c51e6c239b5","submitter":{"id":91428,"url":"http://patchwork.ozlabs.org/api/1.1/people/91428/?format=json","name":"Andrew Pinski","email":"andrew.pinski@oss.qualcomm.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/gcc/patch/20260416023829.940969-1-andrew.pinski@oss.qualcomm.com/mbox/","series":[{"id":500070,"url":"http://patchwork.ozlabs.org/api/1.1/series/500070/?format=json","web_url":"http://patchwork.ozlabs.org/project/gcc/list/?series=500070","date":"2026-04-16T02:38:29","name":"[GCC17-PATCH] cfghooks: Pass data to callback function of make_forwarder_block","version":1,"mbox":"http://patchwork.ozlabs.org/series/500070/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2223730/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2223730/checks/","tags":{},"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=aVlPX+0J;\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=Vnr/oH1T;\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=aVlPX+0J;\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=Vnr/oH1T","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=none smtp.remote-ip=205.220.180.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 4fx2Jv4c57z1yDF\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 16 Apr 2026 12:39:10 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 48CCA4BA2E1F\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 16 Apr 2026 02:39:06 +0000 (GMT)","from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com\n [205.220.180.131])\n by sourceware.org (Postfix) with ESMTPS id 792D84BA2E07\n for <gcc-patches@gcc.gnu.org>; Thu, 16 Apr 2026 02:38:36 +0000 (GMT)","from pps.filterd (m0279871.ppops.net [127.0.0.1])\n by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n 63FGEpKc506817\n for <gcc-patches@gcc.gnu.org>; Thu, 16 Apr 2026 02:38:35 GMT","from mail-pl1-f197.google.com (mail-pl1-f197.google.com\n [209.85.214.197])\n by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4dje1e1nuv-1\n (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT)\n for <gcc-patches@gcc.gnu.org>; Thu, 16 Apr 2026 02:38:34 +0000 (GMT)","by mail-pl1-f197.google.com with SMTP id\n d9443c01a7336-2b24cd2e2b3so71997115ad.0\n for <gcc-patches@gcc.gnu.org>; Wed, 15 Apr 2026 19:38:34 -0700 (PDT)","from xeond2.wrightpinski.org ([98.97.36.113])\n by smtp.gmail.com with ESMTPSA id\n 41be03b00d2f7-c7957c0641fsm2748472a12.0.2026.04.15.19.38.32\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Wed, 15 Apr 2026 19:38:32 -0700 (PDT)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 48CCA4BA2E1F","OpenDKIM Filter v2.11.0 sourceware.org 792D84BA2E07"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 792D84BA2E07","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 792D84BA2E07","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776307116; cv=none;\n b=H5ms8y3CG0fScHzPWjthpxh7XW9VXx4la82fM06Jh6TfKEooxm076hYtAAq3pVhjs61CnPE8GEX/4eqym90mU9GwdEeJow92TiMrZ9VkTydUWDfWy3s8ZUdkfoqcqON4AolwYvlMj2wF4d/8Ku8tZhF0inL7nlxIkbCdP/zarW0=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776307116; c=relaxed/simple;\n bh=Sflv1veXb0teaGhomcqoiERHT6UqQ1VFNLwMxpYdR0Y=;\n h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID:\n MIME-Version;\n b=TgKr3aEk7vSriXZXvhCK9O5bsyzI5MTax8ejPnbhWW5kr2ObZ+7xNPKERUYu3u6NigtL6BUMwuN94Gmivv+DdIijsTNqiRIlXLdtlxtuNlfOa18qFGptMtoFfvUgwxTeVGXEKSyQX6fiLhllPbJfeakEUvVve9X9BisAkoD4hXs=","ARC-Authentication-Results":"i=1; server2.sourceware.org","DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=\n cc:content-transfer-encoding:date:from:message-id:mime-version\n :subject:to; s=qcppdkim1; bh=xYC2BufDoEy1wqdxWtwbsix6OpQ2xQGrhUX\n WzCMIkg8=; b=aVlPX+0Ji11whk6pIRqTNO9V1Xc1dqWsP3f8qTsPz0L0RQnVYfn\n hdzZ88ij4s9bSWGOOFUaJzYlDYSKN1wWeH0YP8JfLTfO6CAyIGh8wziUlm0gZKzu\n z6Yv/ouZ5hIxKuGp/Vbh9H8FenzjoUqn3nsZ3/l0lvgVxwfc73J9RXfxbYvXx+VH\n B5Sp4Rx2Y37/FCnjUdL068JRffTOMc9f75IgcSul94N5FlpzR7rvR7QYf3nZLLaX\n nCNPMvve06JRkOBsuOl/Sj8GkQvWUHvH7eWcOY9jxQ126Wa9k5eexFCD5cX+zszF\n 6ri6kitogxuZ+57A7tp14N/OZWBhniJUADQ==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=oss.qualcomm.com; s=google; t=1776307113; x=1776911913; 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=xYC2BufDoEy1wqdxWtwbsix6OpQ2xQGrhUXWzCMIkg8=;\n b=Vnr/oH1T5YqgVJCh1+GnFFw4n8qdFNFZKeMlUAxLhy6rPB9q5bAL3ht0MFUcRZxZrQ\n tMYXj4uo4SntCtQ/jwhJF5T7//MyQVrI/7e9YzDSrCZ0UFFsfwGj5R1ddB+hpJl0NXX3\n qKISB/p0QXDkugMS0Im/bc8hsgdtVdVrNg4K8wewHEyYQYMg/qOsq+kUnFWzBL3LGd16\n E2QQAQQ4u5lAuIIrCKMDl5n74kS53Y2bebJ8OtXEXuEYN4Io4sfB5U2SATtsCYr1FdHc\n dGlVRoqdXwPrC5j1WCpsXX+8mAeP0d5Cj76BjOjX9F1CB/YYsOYmNVVTyM0M+09UDS1s\n VlXQ=="],"X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776307113; x=1776911913;\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=xYC2BufDoEy1wqdxWtwbsix6OpQ2xQGrhUXWzCMIkg8=;\n b=Ye98wb38ZCkFjTSlQ/Nqe5g40P10gHVdhVaoN1E9n+KzaFbZNRwT4wt3mBs8pvkwD/\n yJhoWbaTStbHeWFB8lQ0E3KRGXcq9X2N3Ii9YOK099jLnS1mkHBMXgS23uibZSmerVtF\n kfOaagD3oBeZXHituAV0Uu/83jnVG7zkFr1Ccu5o1ANXLNh9YHuz9dg88gOS1uln76TX\n 0MGZ6YRDF0aQHKKOCnSFotViwa/A5klBp0Jr/kG6RhL/aMc09seND+yQ39syCkMhS/n/\n /42O0By1ZRao9x0ji5FvkVzg3AOoHa9TAwa5V8JrWZPtYRPl0rOsL9vVTm6cBQYShQ8e\n SDWQ==","X-Gm-Message-State":"AOJu0Yybp+TTmUBOjHM8oLKnUDOJ/dTCpoJRaf+/TZ2PA1l2hALf7/P6\n BbKjs5yjE7SLrYeBg91IEOzweCh32UbTyNLDaJlzd0amedA78jfzTuj/c+Pk+drJ8PrcqrPET+N\n ng0z8fFLnpLY/V6FOL80Wvl0JcX9ygpqnoAG0UiWwWFkHCvkOQeJEYuI+8alRnnjwckpi","X-Gm-Gg":"AeBDieskVlQYWAGe7p4apmmxf34crL3P1onozVN6kKzJU6rbpZbvezEUThQEO3PjwQz\n mNKw80AMDMNNObEFi8k+UXz7blhNP7JOUqOLrMhAXVffSgO7gVapzhQr6GG1PqW16SNMaeCFHLJ\n /7tUhn3EAhQpw/UfEsI+HpgMAcPMYH1uFyTYe8zmuCHHj8fc1Zb/2AEAqjRMJEVVaxnthl1HJp2\n NwqBCb9v5prdNGuJBa1SECfaQz1dTjKR4mvyIdmgAI8pxGB+MUz/j4BYxioal3n8GkghR5xeVve\n sIUAT6Q+Rv0tL85h1kFSHCGfxN5pSyH8wWHNf5/Aj/oA194wyNvWhtJXO32bPkgvcN0deX/6Hkn\n cBUhyVlBgDlED8x7a3y41vy/bykORF9bS/qmzwlrLdP9f7qhK","X-Received":["by 2002:a05:6a20:3d1d:b0:398:aea8:a9c0 with SMTP id\n adf61e73a8af0-39fe3da8a24mr27865731637.19.1776307113409;\n Wed, 15 Apr 2026 19:38:33 -0700 (PDT)","by 2002:a05:6a20:3d1d:b0:398:aea8:a9c0 with SMTP id\n adf61e73a8af0-39fe3da8a24mr27865682637.19.1776307112696;\n Wed, 15 Apr 2026 19:38:32 -0700 (PDT)"],"From":"Andrew Pinski <andrew.pinski@oss.qualcomm.com>","To":"gcc-patches@gcc.gnu.org","Cc":"Andrew Pinski <andrew.pinski@oss.qualcomm.com>","Subject":"[GCC17-PATCH] cfghooks: Pass data to callback function of\n make_forwarder_block","Date":"Wed, 15 Apr 2026 19:38:29 -0700","Message-ID":"<20260416023829.940969-1-andrew.pinski@oss.qualcomm.com>","X-Mailer":"git-send-email 2.43.0","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","X-Authority-Analysis":"v=2.4 cv=HZwkiCE8 c=1 sm=1 tr=0 ts=69e04baa cx=c_pps\n a=cmESyDAEBpBGqyK7t0alAg==:117 a=Y1m2km2pjv8hb87nKEJjOQ==:17\n a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22\n a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=EUspDBNiAAAA:8\n a=dkBC93UJHPEgz4umazYA:9 a=1OuFwYUASf3TG4hYMiVC:22","X-Proofpoint-Spam-Details-Enc":"AW1haW4tMjYwNDE2MDAyMiBTYWx0ZWRfX8Tqd6C+IqAZq\n 9sw/Nyz92sKfYe7fxl7YY8GZhOwwQipui86xMPv4oPmyyi+M12xZ/sg2tm5HkDiKWSqYMfiaAP3\n 5m1HOoZEGFk2XM2hO8+bva5mCoQeXUII6GIgf3YiUDsABmiaEbzMm5dhibXB2LY69/B7rolsD46\n DImqFNRJjcSSIOhbI9VNPOzGTHRskjmbKFuu6toCEUl8saJURG/s1miBnGxd6FJsf1Eys6RSRJE\n omDXOF7ebeMjmVqrmVCAw1GO2v5Xb3M3B9Zbn2lN90hqui73vLzhc66mdTVuuQkNCM+fq1s4Amq\n s1oljfn2xDzwDPyoP7DvNgpE1tjZ6UA5ffPkdCaQ1WRMGqZyQgUwWTyb+RzvwEYv+FhadKP96Ky\n eQAPaqvoWRGuwKJAf1PKEZdAhN+b1pW844SvU7IlWia/3zHsnFMR8ztoNYnnNCa7fAu2LVJUbEz\n lWwQ95P13/Rxys4e4Zg==","X-Proofpoint-ORIG-GUID":"xN_5zrIxAnT3ketR-NKH82bUxPxOYDVE","X-Proofpoint-GUID":"xN_5zrIxAnT3ketR-NKH82bUxPxOYDVE","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-16_01,2026-04-13_04,2025-10-01_01","X-Proofpoint-Spam-Details":"rule=outbound_notspam policy=outbound score=0\n adultscore=0 suspectscore=0 impostorscore=0 lowpriorityscore=0 bulkscore=0\n clxscore=1015 malwarescore=0 priorityscore=1501 spamscore=0 phishscore=0\n classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0\n reason=mlx scancount=1 engine=8.22.0-2604070000 definitions=main-2604160022","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":"This makes a cleanup that is way overdue and should have been done\nyears ago. Instead of setting some global/static variables for the\ncallback function to check here, we pass down the data to the callback\nfunction.  This reduces the number of global variables (which should help\nwith Parallel GCC project). Plus since mfb_keep_just was exported outside\nof cfgloopmanip.cc (it was used in tree-ssa-threadupdate.cc), it reduces\nis shared between files.\n\nI found this useful when working on PR 123113 as I needed a new callback\nfunction.\n\nBootstrapped and tested on x86_64-linux-gnu.\n\ngcc/ChangeLog:\n\n\t* cfghooks.cc (make_forwarder_block): New data argument,\n\tpass it down to redirect_edge_p.\n\t* cfghooks.h (make_forwarder_block): Add void* argument.\n\t* cfgloop.cc (mfb_reis_set): Remove.\n\t(mfb_redirect_edges_in_set): Add new data argument.\n\tUse it instead of mfb_reis_set.\n\t(form_subloop): Create a local variable instead of\n\tmfb_areis_set. Update call to make_forwarder_block.\n\t(merge_latch_edges): Likewise.\n\t* cfgloopmanip.cc (mfb_kj_edge): Remove.\n\t(mfb_keep_just):  Add new data argument.\n\tUse it instead of mfb_kj_edge.\n\t(create_preheader): Use local variable instead of\n\tmfb_kj_edge. Update call to make_forwarder_block.\n\t* cfgloopmanip.h (mfb_keep_just): Add void* argument.\n\t* tree-cfgcleanup.cc (mfb_keep_latches): Add unused void* arugment.\n\t(cleanup_tree_cfg_noloop): Update call to make_forwarder_block.\n\t* tree-ssa-threadupdate.cc\n\t(fwd_jt_path_registry::thread_through_loop_header): Use local\n\tvariable instead of mfb_kj_edge. Update call to make_forwarder_block.\n\nSigned-off-by: Andrew Pinski <andrew.pinski@oss.qualcomm.com>\n---\n gcc/cfghooks.cc              |  7 ++++---\n gcc/cfghooks.h               |  2 +-\n gcc/cfgloop.cc               | 24 ++++++++++++------------\n gcc/cfgloopmanip.cc          | 15 ++++++++-------\n gcc/cfgloopmanip.h           |  4 +---\n gcc/tree-cfgcleanup.cc       |  7 +++++--\n gcc/tree-ssa-threadupdate.cc |  7 ++++---\n 7 files changed, 35 insertions(+), 31 deletions(-)","diff":"diff --git a/gcc/cfghooks.cc b/gcc/cfghooks.cc\nindex 063639fe1c9..6415d0fdec2 100644\n--- a/gcc/cfghooks.cc\n+++ b/gcc/cfghooks.cc\n@@ -923,10 +923,11 @@ merge_blocks (basic_block a, basic_block b)\n \n /* Split BB into entry part and the rest (the rest is the newly created block).\n    Redirect those edges for that REDIRECT_EDGE_P returns true to the entry\n-   part.  Returns the edge connecting the entry part to the rest.  */\n+   part.  Returns the edge connecting the entry part to the rest.\n+   DATA gets passed on to REDIRECT_EDGE_P.  */\n \n edge\n-make_forwarder_block (basic_block bb, bool (*redirect_edge_p) (edge))\n+make_forwarder_block (basic_block bb, bool (*redirect_edge_p) (edge, void*), void *data)\n {\n   edge e, fallthru;\n   edge_iterator ei;\n@@ -947,7 +948,7 @@ make_forwarder_block (basic_block bb, bool (*redirect_edge_p) (edge))\n     {\n       basic_block e_src;\n \n-      if (redirect_edge_p (e))\n+      if (redirect_edge_p (e, data))\n \t{\n \t  dummy->count += e->count ();\n \t  ei_next (&ei);\ndiff --git a/gcc/cfghooks.h b/gcc/cfghooks.h\nindex 6cc1b66baef..bc7956be2a8 100644\n--- a/gcc/cfghooks.h\n+++ b/gcc/cfghooks.h\n@@ -245,7 +245,7 @@ extern basic_block create_basic_block (gimple_seq, basic_block);\n extern basic_block create_empty_bb (basic_block);\n extern bool can_merge_blocks_p (basic_block, basic_block);\n extern void merge_blocks (basic_block, basic_block);\n-extern edge make_forwarder_block (basic_block, bool (*)(edge));\n+extern edge make_forwarder_block (basic_block, bool (*)(edge, void*), void*);\n extern basic_block force_nonfallthru (edge);\n extern void tidy_fallthru_edge (edge);\n extern void tidy_fallthru_edges (void);\ndiff --git a/gcc/cfgloop.cc b/gcc/cfgloop.cc\nindex fc4d635d8b6..70f2996a416 100644\n--- a/gcc/cfgloop.cc\n+++ b/gcc/cfgloop.cc\n@@ -709,13 +709,13 @@ find_subloop_latch_edge (class loop *loop)\n }\n \n /* Callback for make_forwarder_block.  Returns true if the edge E is marked\n-   in the set MFB_REIS_SET.  */\n+   in the set SET(DATA).  */\n \n-static hash_set<edge> *mfb_reis_set;\n static bool\n-mfb_redirect_edges_in_set (edge e)\n+mfb_redirect_edges_in_set (edge e, void *data)\n {\n-  return mfb_reis_set->contains (e);\n+  hash_set<edge> *set = (hash_set<edge> *)data;\n+  return set->contains (e);\n }\n \n /* Creates a subloop of LOOP with latch edge LATCH.  */\n@@ -727,14 +727,14 @@ form_subloop (class loop *loop, edge latch)\n   edge e, new_entry;\n   class loop *new_loop;\n \n-  mfb_reis_set = new hash_set<edge>;\n+  hash_set<edge> *reis_set = new hash_set<edge>;\n   FOR_EACH_EDGE (e, ei, loop->header->preds)\n     {\n       if (e != latch)\n-\tmfb_reis_set->add (e);\n+\treis_set->add (e);\n     }\n-  new_entry = make_forwarder_block (loop->header, mfb_redirect_edges_in_set);\n-  delete mfb_reis_set;\n+  new_entry = make_forwarder_block (loop->header, mfb_redirect_edges_in_set, reis_set);\n+  delete reis_set;\n \n   loop->header = new_entry->src;\n \n@@ -765,11 +765,11 @@ merge_latch_edges (class loop *loop)\n       if (dump_file)\n \tfprintf (dump_file, \"Merged latch edges of loop %d\\n\", loop->num);\n \n-      mfb_reis_set = new hash_set<edge>;\n+      hash_set<edge> *reis_set = new hash_set<edge>;\n       FOR_EACH_VEC_ELT (latches, i, e)\n-\tmfb_reis_set->add (e);\n-      latch = make_forwarder_block (loop->header, mfb_redirect_edges_in_set);\n-      delete mfb_reis_set;\n+\treis_set->add (e);\n+      latch = make_forwarder_block (loop->header, mfb_redirect_edges_in_set, reis_set);\n+      delete reis_set;\n \n       loop->header = latch->dest;\n       loop->latch = latch->src;\ndiff --git a/gcc/cfgloopmanip.cc b/gcc/cfgloopmanip.cc\nindex c953bc95b40..dd5ae82f73e 100644\n--- a/gcc/cfgloopmanip.cc\n+++ b/gcc/cfgloopmanip.cc\n@@ -1640,14 +1640,14 @@ duplicate_loop_body_to_header_edge (class loop *loop, edge e,\n }\n \n /* A callback for make_forwarder block, to redirect all edges except for\n-   MFB_KJ_EDGE to the entry part.  E is the edge for that we should decide\n+   OTHER(DATA) to the entry part.  E is the edge for that we should decide\n    whether to redirect it.  */\n \n-edge mfb_kj_edge;\n bool\n-mfb_keep_just (edge e)\n+mfb_keep_just (edge e, void *data)\n {\n-  return e != mfb_kj_edge;\n+  edge other = (edge)data;\n+  return e != other;\n }\n \n /* True when a candidate preheader BLOCK has predecessors from LOOP.  */\n@@ -1729,15 +1729,16 @@ create_preheader (class loop *loop, int flags)\n \treturn NULL;\n     }\n \n-  mfb_kj_edge = loop_latch_edge (loop);\n-  latch_edge_was_fallthru = (mfb_kj_edge->flags & EDGE_FALLTHRU) != 0;\n+  edge latch;\n+  latch = loop_latch_edge (loop);\n+  latch_edge_was_fallthru = (latch->flags & EDGE_FALLTHRU) != 0;\n   if (nentry == 1\n       && ((flags & CP_FALLTHRU_PREHEADERS) == 0\n   \t  || (single_entry->flags & EDGE_CROSSING) == 0))\n     dummy = split_edge (single_entry);\n   else\n     {\n-      edge fallthru = make_forwarder_block (loop->header, mfb_keep_just);\n+      edge fallthru = make_forwarder_block (loop->header, mfb_keep_just, latch);\n       dummy = fallthru->src;\n       loop->header = fallthru->dest;\n     }\ndiff --git a/gcc/cfgloopmanip.h b/gcc/cfgloopmanip.h\nindex 396e6d69e8c..106cc7d005a 100644\n--- a/gcc/cfgloopmanip.h\n+++ b/gcc/cfgloopmanip.h\n@@ -38,8 +38,6 @@ enum\n \t\t\t\t\t\t      discriminators to\n \t\t\t\t\t\t      distinguish loop\n \t\t\t\t\t\t      iterations.  */\n-extern edge mfb_kj_edge;\n-\n extern bool remove_path (edge, bool * = NULL, bitmap = NULL);\n extern void place_new_loop (struct function *, class loop *);\n extern void add_loop (class loop *, class loop *);\n@@ -62,7 +60,7 @@ extern bool can_duplicate_loop_p (const class loop *loop);\n extern bool\n duplicate_loop_body_to_header_edge (class loop *, edge, unsigned, sbitmap, edge,\n \t\t\t\t    vec<edge> *, int);\n-extern bool mfb_keep_just (edge);\n+extern bool mfb_keep_just (edge, void *);\n basic_block create_preheader (class loop *, int);\n extern void create_preheaders (int);\n extern void force_single_succ_latches (void);\ndiff --git a/gcc/tree-cfgcleanup.cc b/gcc/tree-cfgcleanup.cc\nindex ab3c8c30893..234b45a219f 100644\n--- a/gcc/tree-cfgcleanup.cc\n+++ b/gcc/tree-cfgcleanup.cc\n@@ -1103,8 +1103,11 @@ cleanup_control_flow_pre ()\n   return retval;\n }\n \n+/* Callback function for make_forwarder_block which returns\n+   true when E is not a latch.  */\n+\n static bool\n-mfb_keep_latches (edge e)\n+mfb_keep_latches (edge e, void*)\n {\n   return !((dom_info_available_p (CDI_DOMINATORS)\n \t    && dominated_by_p (CDI_DOMINATORS, e->src, e->dest))\n@@ -1164,7 +1167,7 @@ cleanup_tree_cfg_noloop (unsigned ssa_update_flags)\n \t       create a forwarder.  */\n \t    if (found_latch && ! any_abnormal && n > 1)\n \t      {\n-\t\tedge fallthru = make_forwarder_block (bb, mfb_keep_latches);\n+\t\tedge fallthru = make_forwarder_block (bb, mfb_keep_latches, NULL);\n \t\tloop->header = fallthru->dest;\n \t\tif (! loops_state_satisfies_p (LOOPS_NEED_FIXUP))\n \t\t  {\ndiff --git a/gcc/tree-ssa-threadupdate.cc b/gcc/tree-ssa-threadupdate.cc\nindex 0e437b14551..db3520b42fc 100644\n--- a/gcc/tree-ssa-threadupdate.cc\n+++ b/gcc/tree-ssa-threadupdate.cc\n@@ -1867,9 +1867,10 @@ fwd_jt_path_registry::thread_through_loop_header (class loop *loop,\n      must have only a single successor, but the original header had at\n      least two successors.  */\n   loop->latch = NULL;\n-  mfb_kj_edge = single_succ_edge (new_preheader);\n-  loop->header = mfb_kj_edge->dest;\n-  latch = make_forwarder_block (tgt_bb, mfb_keep_just);\n+  edge keep_edge;\n+  keep_edge = single_succ_edge (new_preheader);\n+  loop->header = keep_edge->dest;\n+  latch = make_forwarder_block (tgt_bb, mfb_keep_just, keep_edge);\n   loop->header = latch->dest;\n   loop->latch = latch->src;\n   return true;\n","prefixes":["GCC17-PATCH"]}