From patchwork Sat Dec 6 19:31:27 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Pinski X-Patchwork-Id: 126062 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 9C9A651A431A for ; Sat, 6 Dec 2025 19:34:23 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9C9A651A431A Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.a=rsa-sha256 header.s=qcppdkim1 header.b=o3dhWtPF; dkim=pass (2048-bit key, unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.a=rsa-sha256 header.s=google header.b=EJeJ0R3M X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) by sourceware.org (Postfix) with ESMTPS id 32E9A4152BD0 for ; Sat, 6 Dec 2025 19:31:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 32E9A4152BD0 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=oss.qualcomm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oss.qualcomm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 32E9A4152BD0 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1765049499; cv=none; b=GGJlSLUFiVkaaqOcnlZQkp6rjqbPCJaFeSKCAAnT6xo9Uj1lqqj6Chl/+tuW9oMkxG/yF3y2hSMTO5dc1o6Z+e3Kp1Y7jlO77PBtxHvVWSIHsKdbm/AxfMEdiYrJzdj404S6V3s4wFUW+HwiKHq1AOxE7PZ4598knWF85fa/fxI= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1765049499; c=relaxed/simple; bh=SDJdfv8TDhv87gMH67n5qNz/SmRGJ1hBemerlaVUg0Y=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=owLRMsXKqgSlNcCIfOPpOkQO4ymehD7JzR811VR7HIH0P0VPKN3mqiHEEAchd18eX8Z/T6l03aFmbtr3phI6JBrO7o/La/4BoreIs0tAgRbdg5cKvo+UVWncMEujo3125+QODL5VYncirN9FlcFgdZKlMf0PwUTQ5j1xEjueOy0= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 32E9A4152BD0 Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5B6H1xnB3791133 for ; Sat, 6 Dec 2025 19:31:38 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:message-id:mime-version :subject:to; s=qcppdkim1; bh=bz4wNo7xhSkkzrt7mt6Kr9Jr+qgxxJj60ug e1hQ/ulI=; b=o3dhWtPF079BmtnBLtpUmH2KtAgwCy7VK6jkkj7vHjQSdh+abIQ QR+lZJHupjoXgp1+pzTkwPxHLdlwJrhMPq+vugvV8vRdXB1y4miC8R7JfjWjx4vS Hbw6yDfQ//6YTx9W3nV33EgGtz0cjaYl9YBcs1gDndygjqAIVWC2T70hgonpvNUb OWrijqOEso/MiIlqo8QPByApH63azDdaNosbcYG5JwXvvWkaQu0tnTC6RchzVWEm wPPyWIpy27nqznIbg5GCBSVy4XLV+Ve7NlXO7WKCYWvDkCIzOfu2X7ey7uas+JiY Zj5sa2tOXZoHpzPrhc3n0DgPzO5VbdTHGog== Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4avd8e18he-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sat, 06 Dec 2025 19:31:37 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-297f8a2ba9eso64477635ad.3 for ; Sat, 06 Dec 2025 11:31:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1765049497; x=1765654297; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=bz4wNo7xhSkkzrt7mt6Kr9Jr+qgxxJj60uge1hQ/ulI=; b=EJeJ0R3MADp04c/KDzYI5cx21ubW99HgIuQ4ruztaDNAvZH4+H7cHryjFNNIyteneG A6N6gceS659XyV+PP15mVbdrHsVHaFhThTjVcSnQwhx8ngsuJe32ze+99LIBtA6vwhHp lC+vqX2HT1TSoX0qw+sqdxODLC+RH2rRKjEH9IJRs1u+q+9ZyJAsGtsYAI7DBakYzzT1 LoDbICMu2U4ZdJ+JD3zT3RtWT92MOp/URPzOGd/jy6IaX/PjJig5uLdpoulGia09Q5k+ sQaMDyeCAq9nXX51N0Za2KxW1NTzkLWP5C28fL733CiH47IhOejoCzrcV0B1SJJ/15Gw zhLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765049497; x=1765654297; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=bz4wNo7xhSkkzrt7mt6Kr9Jr+qgxxJj60uge1hQ/ulI=; b=izjgKco7dhLFMQ+45WSf9d+GYT5+097dVPuJ5sKv9AWg30Ffj/UO7k3ZHIKOCrzBYP cO6e+YwMhwNlPD2iMfSn1xN5IvpYN/RqPc8VZrBZnsFEXNLFpSB7v6nCqwvKPHMo7Xoh wyXDzaLO4Ahw1ipQtkIIiTXzclHHJMzubO9YRndEcgvcQ+F7lT0DqUq4XK/1V8VE4f53 NBATafbXnkGviGt4YFQmlP0CZhHg9ejw6+QiyG5BGuiBG8hSB4EFMvBMawUvYyvnAUFr oey27v7SWhYOgzayOk9x7ZBri18gWo/4ItSpEFsuLKKoB0cboHM3DeF2I8ZHD059MnPN xv2g== X-Gm-Message-State: AOJu0YyM4Jb/Sin10iEpsbfcRxweMUUp27zE/xkMwJOWruN3kbpPu3Ty XZeYF8s7BgJc8Vl6BTObJ9SO0geLdTna74U3uudNN7lLDBb5cq3y/orIFxOJuPlzVvM6pRy4rN/ xDP4Iw9f4mHXzDvg95eIJPxjRJZ/OeeiKY4PVv9pUFrEXkElJutKxqjtS3KKdsi2yR1RJ X-Gm-Gg: ASbGncsvvmyVZEST+bziJOtLjsu3QfTYVJOJ9oZjq0ZTq3tQEIrNbBV6bDAChN9x3be 1ePFniHTuVhHETgebvlHQpK1NVvz6orJd6liG46XfhBFmVaWzeIFiiFI6CUhZxn5vaKijZuV41V /Kw8ogWX5QYa7P/E0Je0YwzWXAcQZotjFZbAs9rU8vnevhCxl0nVyBee845oLFQ2ChzopFsiqvF 6pKDmTb4YY5+IRAhY4dKHEH14iXbxnrLQctIvdFNRC8b29qI+3LlvycHuzsVdo/ygnLgMMD+uY3 CFmsx/5/EQ8vy9NQNrD2d5SE+PL/PD6hPmtwRkP4lB0IO0KLRXU115IZAyi8ELXw1EuANpcImE2 +L8weHbjE6Bctz82Y5ZRJ4P/o+i54UcBlP2mc X-Received: by 2002:a17:903:1670:b0:298:3545:81e2 with SMTP id d9443c01a7336-29df54761aemr34788375ad.22.1765049496816; Sat, 06 Dec 2025 11:31:36 -0800 (PST) X-Google-Smtp-Source: AGHT+IHS43idYTMhNs8mH3mRBnMwywuRvMyqcMAXy6+peTQGyiI9My9rs+5BmW/eXgVq6ZJXdlQLAA== X-Received: by 2002:a17:903:1670:b0:298:3545:81e2 with SMTP id d9443c01a7336-29df54761aemr34788155ad.22.1765049496148; Sat, 06 Dec 2025 11:31:36 -0800 (PST) Received: from xeond2.wrightpinski.org ([98.97.33.108]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-29dae4cf996sm82650035ad.30.2025.12.06.11.31.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 06 Dec 2025 11:31:35 -0800 (PST) From: Andrew Pinski To: gcc-patches@gcc.gnu.org Cc: Andrew Pinski Subject: [PATCH 1/3] cfg: Move make_forwarders_with_degenerate_phis to tree-cfg Date: Sat, 6 Dec 2025 11:31:27 -0800 Message-ID: <20251206193129.3365370-1-andrew.pinski@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjA2MDE2MCBTYWx0ZWRfX+ZpRTvqduaRi 16esA62fhcI3caeEoqxGQVhxPpo+KnXXsEuFyvBcazoGS4UeHNV8DNFbVnSFmXO1FljYDROLzUC KeqlHgHHdMGEkE4M4tgk+LD+0O2zfBy6DbR6s4VUgmre+wMS3qi96QTxkntEaakTf0fhWtWwaVP pLRFvg8OYJYYo992LwtxuJKcjMTSTR2ftGKFaF3fC6KgBFUx7AK2MIbJAGRHQSY5XZ4Z8/hsVKm eUfQBxPZJhIx0hbaclYWf/iRjn218If25XclWkG5G/dzNwalmCAttnQR9/UqpRPHd36SHWF1ak1 NUdYx4+swKMtthM9IijfJXpljXoDjhkI+Dm5Z0viH/Rd6AHf7U/s0Cg5siqrDQBnlZPoMWWTaUL zfQALS9vIL7v10WwCVYLOT9No/LEVg== X-Authority-Analysis: v=2.4 cv=BqaQAIX5 c=1 sm=1 tr=0 ts=69348499 cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=m8fSZOrMZksZLhMGLjHzfw==:17 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=A1uBWOOUxzU8vTNse7YA:9 a=1OuFwYUASf3TG4hYMiVC:22 a=-Xo0g-rXMuVevE6R1laq:22 X-Proofpoint-GUID: 0lyZAkQdeY9HIg6RMZPGtdJIYa1YCBe1 X-Proofpoint-ORIG-GUID: 0lyZAkQdeY9HIg6RMZPGtdJIYa1YCBe1 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-06_02,2025-12-04_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 clxscore=1015 phishscore=0 spamscore=0 lowpriorityscore=0 impostorscore=0 adultscore=0 priorityscore=1501 bulkscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512060160 X-Spam-Status: No, score=-18.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_BLOCKED, RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE, SPF_PASS, TXREP, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~patchwork=sourceware.org@gcc.gnu.org This moves make_forwarders_with_degenerate_phis to tree-cfg.cc from tree-ssa-dce.cc to be able to use in a different pass. Bootstrapped and tested on x86_64-linux-gnu. gcc/ChangeLog: * tree-ssa-dce.cc (sort_phi_args): Move to tree-cfg.cc. (make_forwarders_with_degenerate_phis): Move to tree-cfg.cc. (perform_tree_ssa_dce): Update for the updated return type of make_forwarders_with_degenerate_phis. * tree-cfg.cc (sort_phi_args): Moved from tree-ssa-dce.cc. (make_forwarders_with_degenerate_phis): Moved from tree-ssa-dce.cc. Update return type to bool and return true if an edge was split. * tree-cfg.h (make_forwarders_with_degenerate_phis): New decl. Signed-off-by: Andrew Pinski --- gcc/tree-cfg.cc | 211 +++++++++++++++++++++++++++++++++++++++++++ gcc/tree-cfg.h | 1 + gcc/tree-ssa-dce.cc | 212 +------------------------------------------- 3 files changed, 214 insertions(+), 210 deletions(-) diff --git a/gcc/tree-cfg.cc b/gcc/tree-cfg.cc index 1d20e6ab6ba..243740e8e21 100644 --- a/gcc/tree-cfg.cc +++ b/gcc/tree-cfg.cc @@ -10173,6 +10173,217 @@ make_pass_fixup_cfg (gcc::context *ctxt) return new pass_fixup_cfg (ctxt); } + +/* Sort PHI argument values for make_forwarders_with_degenerate_phis. */ + +static int +sort_phi_args (const void *a_, const void *b_) +{ + auto *a = (const std::pair *) a_; + auto *b = (const std::pair *) b_; + hashval_t ha = a->second; + hashval_t hb = b->second; + if (ha < hb) + return -1; + else if (ha > hb) + return 1; + else if (a->first->dest_idx < b->first->dest_idx) + return -1; + else if (a->first->dest_idx > b->first->dest_idx) + return 1; + else + return 0; +} + +/* Look for a non-virtual PHIs and make a forwarder block when all PHIs + have the same argument on a set of edges. This is to not consider + control dependences of individual edges for same values but only for + the common set. Returns true if changed the CFG. */ + +bool +make_forwarders_with_degenerate_phis (function *fn) +{ + bool didsomething = false; + + basic_block bb; + FOR_EACH_BB_FN (bb, fn) + { + /* Only PHIs with three or more arguments have opportunities. */ + if (EDGE_COUNT (bb->preds) < 3) + continue; + /* Do not touch loop headers or blocks with abnormal predecessors. + ??? This is to avoid creating valid loops here, see PR103458. + We might want to improve things to either explicitely add those + loops or at least consider blocks with no backedges. */ + if (bb->loop_father->header == bb + || bb_has_abnormal_pred (bb)) + continue; + + /* Take one PHI node as template to look for identical + arguments. Build a vector of candidates forming sets + of argument edges with equal values. Note optimality + depends on the particular choice of the template PHI + since equal arguments are unordered leaving other PHIs + with more than one set of equal arguments within this + argument range unsorted. We'd have to break ties by + looking at other PHI nodes. */ + gphi_iterator gsi = gsi_start_nonvirtual_phis (bb); + if (gsi_end_p (gsi)) + continue; + gphi *phi = gsi.phi (); + auto_vec, 8> args; + bool need_resort = false; + for (unsigned i = 0; i < gimple_phi_num_args (phi); ++i) + { + edge e = gimple_phi_arg_edge (phi, i); + /* Skip abnormal edges since we cannot redirect them. */ + if (e->flags & EDGE_ABNORMAL) + continue; + /* Skip loop exit edges when we are in loop-closed SSA form + since the forwarder we'd create does not have a PHI node. */ + if (loops_state_satisfies_p (LOOP_CLOSED_SSA) + && loop_exit_edge_p (e->src->loop_father, e)) + continue; + + tree arg = gimple_phi_arg_def (phi, i); + if (!CONSTANT_CLASS_P (arg) && TREE_CODE (arg) != SSA_NAME) + need_resort = true; + args.safe_push (std::make_pair (e, iterative_hash_expr (arg, 0))); + } + if (args.length () < 2) + continue; + args.qsort (sort_phi_args); + /* The above sorting can be different between -g and -g0, as e.g. decls + can have different uids (-g could have bigger gaps in between them). + So, only use that to determine which args are equal, then change + second from hash value to smallest dest_idx of the edges which have + equal argument and sort again. If all the phi arguments are + constants or SSA_NAME, there is no need for the second sort, the hash + values are stable in that case. */ + hashval_t hash = args[0].second; + args[0].second = args[0].first->dest_idx; + bool any_equal = false; + for (unsigned i = 1; i < args.length (); ++i) + if (hash == args[i].second + && operand_equal_p (PHI_ARG_DEF_FROM_EDGE (phi, args[i - 1].first), + PHI_ARG_DEF_FROM_EDGE (phi, args[i].first))) + { + args[i].second = args[i - 1].second; + any_equal = true; + } + else + { + hash = args[i].second; + args[i].second = args[i].first->dest_idx; + } + if (!any_equal) + continue; + if (need_resort) + args.qsort (sort_phi_args); + + /* From the candidates vector now verify true candidates for + forwarders and create them. */ + gphi *vphi = get_virtual_phi (bb); + unsigned start = 0; + while (start < args.length () - 1) + { + unsigned i; + for (i = start + 1; i < args.length (); ++i) + if (args[start].second != args[i].second) + break; + /* args[start]..args[i-1] are equal. */ + if (start != i - 1) + { + /* Check all PHI nodes for argument equality + except for vops. */ + bool equal = true; + gphi_iterator gsi2 = gsi; + gsi_next (&gsi2); + for (; !gsi_end_p (gsi2); gsi_next (&gsi2)) + { + gphi *phi2 = gsi2.phi (); + if (virtual_operand_p (gimple_phi_result (phi2))) + continue; + tree start_arg + = PHI_ARG_DEF_FROM_EDGE (phi2, args[start].first); + for (unsigned j = start + 1; j < i; ++j) + { + if (!operand_equal_p (start_arg, + PHI_ARG_DEF_FROM_EDGE + (phi2, args[j].first))) + { + /* Another PHI might have a shorter set of + equivalent args. Go for that. */ + i = j; + if (j == start + 1) + equal = false; + break; + } + } + if (!equal) + break; + } + if (equal) + { + /* If we are asked to forward all edges the block + has all degenerate PHIs. Do nothing in that case. */ + if (start == 0 + && i == args.length () + && args.length () == gimple_phi_num_args (phi)) + break; + /* Instead of using make_forwarder_block we are + rolling our own variant knowing that the forwarder + does not need PHI nodes apart from eventually + a virtual one. */ + auto_vec vphi_args; + if (vphi) + { + vphi_args.reserve_exact (i - start); + for (unsigned j = start; j < i; ++j) + vphi_args.quick_push + (PHI_ARG_DEF_FROM_EDGE (vphi, args[j].first)); + } + free_dominance_info (fn, CDI_DOMINATORS); + basic_block forwarder = split_edge (args[start].first); + profile_count count = profile_count::zero (); + bool irr = false; + for (unsigned j = start + 1; j < i; ++j) + { + edge e = args[j].first; + if (e->flags & EDGE_IRREDUCIBLE_LOOP) + irr = true; + redirect_edge_and_branch_force (e, forwarder); + redirect_edge_var_map_clear (e); + count += e->count (); + } + forwarder->count = count; + if (irr) + { + forwarder->flags |= BB_IRREDUCIBLE_LOOP; + single_succ_edge (forwarder)->flags + |= EDGE_IRREDUCIBLE_LOOP; + } + + if (vphi) + { + tree def = copy_ssa_name (vphi_args[0]); + gphi *vphi_copy = create_phi_node (def, forwarder); + for (unsigned j = start; j < i; ++j) + add_phi_arg (vphi_copy, vphi_args[j - start], + args[j].first, UNKNOWN_LOCATION); + SET_PHI_ARG_DEF + (vphi, single_succ_edge (forwarder)->dest_idx, def); + } + didsomething = true; + } + } + /* Continue searching for more opportunities. */ + start = i; + } + } + return didsomething; +} + /* Garbage collection support for edge_def. */ extern void gt_ggc_mx (tree&); diff --git a/gcc/tree-cfg.h b/gcc/tree-cfg.h index 520bb3aefbd..2e01762f04b 100644 --- a/gcc/tree-cfg.h +++ b/gcc/tree-cfg.h @@ -114,6 +114,7 @@ extern edge gimple_switch_edge (function *, gswitch *, unsigned); extern edge gimple_switch_default_edge (function *, gswitch *); extern bool cond_only_block_p (basic_block); extern void copy_phi_arg_into_existing_phi (edge, edge, bool = false); +extern bool make_forwarders_with_degenerate_phis (function *); /* Return true if the LHS of a call should be removed. */ diff --git a/gcc/tree-ssa-dce.cc b/gcc/tree-ssa-dce.cc index 317a0d6179b..9a9f6f93fce 100644 --- a/gcc/tree-ssa-dce.cc +++ b/gcc/tree-ssa-dce.cc @@ -1940,214 +1940,6 @@ tree_dce_done (bool aggressive) worklist.release (); } -/* Sort PHI argument values for make_forwarders_with_degenerate_phis. */ - -static int -sort_phi_args (const void *a_, const void *b_) -{ - auto *a = (const std::pair *) a_; - auto *b = (const std::pair *) b_; - hashval_t ha = a->second; - hashval_t hb = b->second; - if (ha < hb) - return -1; - else if (ha > hb) - return 1; - else if (a->first->dest_idx < b->first->dest_idx) - return -1; - else if (a->first->dest_idx > b->first->dest_idx) - return 1; - else - return 0; -} - -/* Look for a non-virtual PHIs and make a forwarder block when all PHIs - have the same argument on a set of edges. This is to not consider - control dependences of individual edges for same values but only for - the common set. */ - -static unsigned -make_forwarders_with_degenerate_phis (function *fn) -{ - unsigned todo = 0; - - basic_block bb; - FOR_EACH_BB_FN (bb, fn) - { - /* Only PHIs with three or more arguments have opportunities. */ - if (EDGE_COUNT (bb->preds) < 3) - continue; - /* Do not touch loop headers or blocks with abnormal predecessors. - ??? This is to avoid creating valid loops here, see PR103458. - We might want to improve things to either explicitely add those - loops or at least consider blocks with no backedges. */ - if (bb->loop_father->header == bb - || bb_has_abnormal_pred (bb)) - continue; - - /* Take one PHI node as template to look for identical - arguments. Build a vector of candidates forming sets - of argument edges with equal values. Note optimality - depends on the particular choice of the template PHI - since equal arguments are unordered leaving other PHIs - with more than one set of equal arguments within this - argument range unsorted. We'd have to break ties by - looking at other PHI nodes. */ - gphi_iterator gsi = gsi_start_nonvirtual_phis (bb); - if (gsi_end_p (gsi)) - continue; - gphi *phi = gsi.phi (); - auto_vec, 8> args; - bool need_resort = false; - for (unsigned i = 0; i < gimple_phi_num_args (phi); ++i) - { - edge e = gimple_phi_arg_edge (phi, i); - /* Skip abnormal edges since we cannot redirect them. */ - if (e->flags & EDGE_ABNORMAL) - continue; - /* Skip loop exit edges when we are in loop-closed SSA form - since the forwarder we'd create does not have a PHI node. */ - if (loops_state_satisfies_p (LOOP_CLOSED_SSA) - && loop_exit_edge_p (e->src->loop_father, e)) - continue; - - tree arg = gimple_phi_arg_def (phi, i); - if (!CONSTANT_CLASS_P (arg) && TREE_CODE (arg) != SSA_NAME) - need_resort = true; - args.safe_push (std::make_pair (e, iterative_hash_expr (arg, 0))); - } - if (args.length () < 2) - continue; - args.qsort (sort_phi_args); - /* The above sorting can be different between -g and -g0, as e.g. decls - can have different uids (-g could have bigger gaps in between them). - So, only use that to determine which args are equal, then change - second from hash value to smallest dest_idx of the edges which have - equal argument and sort again. If all the phi arguments are - constants or SSA_NAME, there is no need for the second sort, the hash - values are stable in that case. */ - hashval_t hash = args[0].second; - args[0].second = args[0].first->dest_idx; - bool any_equal = false; - for (unsigned i = 1; i < args.length (); ++i) - if (hash == args[i].second - && operand_equal_p (PHI_ARG_DEF_FROM_EDGE (phi, args[i - 1].first), - PHI_ARG_DEF_FROM_EDGE (phi, args[i].first))) - { - args[i].second = args[i - 1].second; - any_equal = true; - } - else - { - hash = args[i].second; - args[i].second = args[i].first->dest_idx; - } - if (!any_equal) - continue; - if (need_resort) - args.qsort (sort_phi_args); - - /* From the candidates vector now verify true candidates for - forwarders and create them. */ - gphi *vphi = get_virtual_phi (bb); - unsigned start = 0; - while (start < args.length () - 1) - { - unsigned i; - for (i = start + 1; i < args.length (); ++i) - if (args[start].second != args[i].second) - break; - /* args[start]..args[i-1] are equal. */ - if (start != i - 1) - { - /* Check all PHI nodes for argument equality. */ - bool equal = true; - gphi_iterator gsi2 = gsi; - gsi_next (&gsi2); - for (; !gsi_end_p (gsi2); gsi_next (&gsi2)) - { - gphi *phi2 = gsi2.phi (); - if (virtual_operand_p (gimple_phi_result (phi2))) - continue; - tree start_arg - = PHI_ARG_DEF_FROM_EDGE (phi2, args[start].first); - for (unsigned j = start + 1; j < i; ++j) - { - if (!operand_equal_p (start_arg, - PHI_ARG_DEF_FROM_EDGE - (phi2, args[j].first))) - { - /* Another PHI might have a shorter set of - equivalent args. Go for that. */ - i = j; - if (j == start + 1) - equal = false; - break; - } - } - if (!equal) - break; - } - if (equal) - { - /* If we are asked to forward all edges the block - has all degenerate PHIs. Do nothing in that case. */ - if (start == 0 - && i == args.length () - && args.length () == gimple_phi_num_args (phi)) - break; - /* Instead of using make_forwarder_block we are - rolling our own variant knowing that the forwarder - does not need PHI nodes apart from eventually - a virtual one. */ - auto_vec vphi_args; - if (vphi) - { - vphi_args.reserve_exact (i - start); - for (unsigned j = start; j < i; ++j) - vphi_args.quick_push - (PHI_ARG_DEF_FROM_EDGE (vphi, args[j].first)); - } - free_dominance_info (fn, CDI_DOMINATORS); - basic_block forwarder = split_edge (args[start].first); - profile_count count = profile_count::zero (); - bool irr = false; - for (unsigned j = start + 1; j < i; ++j) - { - edge e = args[j].first; - if (e->flags & EDGE_IRREDUCIBLE_LOOP) - irr = true; - redirect_edge_and_branch_force (e, forwarder); - redirect_edge_var_map_clear (e); - count += e->count (); - } - forwarder->count = count; - if (irr) - { - forwarder->flags |= BB_IRREDUCIBLE_LOOP; - single_succ_edge (forwarder)->flags - |= EDGE_IRREDUCIBLE_LOOP; - } - - if (vphi) - { - tree def = copy_ssa_name (vphi_args[0]); - gphi *vphi_copy = create_phi_node (def, forwarder); - for (unsigned j = start; j < i; ++j) - add_phi_arg (vphi_copy, vphi_args[j - start], - args[j].first, UNKNOWN_LOCATION); - SET_PHI_ARG_DEF - (vphi, single_succ_edge (forwarder)->dest_idx, def); - } - todo |= TODO_cleanup_cfg; - } - } - /* Continue searching for more opportunities. */ - start = i; - } - } - return todo; -} /* Main routine to eliminate dead code. @@ -2174,8 +1966,8 @@ perform_tree_ssa_dce (bool aggressive) scev_initialize (); } - if (aggressive) - todo |= make_forwarders_with_degenerate_phis (cfun); + if (aggressive && make_forwarders_with_degenerate_phis (cfun)) + todo |= TODO_cleanup_cfg; calculate_dominance_info (CDI_DOMINATORS); From patchwork Sat Dec 6 19:31:28 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Pinski X-Patchwork-Id: 126061 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id C788A4152C50 for ; Sat, 6 Dec 2025 19:33:28 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C788A4152C50 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.a=rsa-sha256 header.s=qcppdkim1 header.b=DXysbI7W; dkim=pass (2048-bit key, unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.a=rsa-sha256 header.s=google header.b=BSRBn4/R X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) by sourceware.org (Postfix) with ESMTPS id 46A154152BEF for ; Sat, 6 Dec 2025 19:31:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 46A154152BEF Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=oss.qualcomm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oss.qualcomm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 46A154152BEF Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1765049499; cv=none; b=rWtH7kp4947f2HbdVrzHi+Ez/j3dsr18cmwQPnVstEwHk7tcjubCtOdmoKzBy427mTUz5/BMu8AvQBOsdUFl8uLNFXCiPE1QHp+L5pUieqD/4Qzg/LXSJuaMEZTa8A8iad78dvQPJI6uCIWYSb7L3FOXI9m7AqzwtgNeQIM2Adw= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1765049499; c=relaxed/simple; bh=MzkNGv5KpNHAYIpA/M7F9eyzJt1dXyIggoUF+Of/dXk=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=lLIBPnkL5w6DNc5M0ZuRRt53eeyaJw9WyTiy15dV3qOpQVLAUphoaujBlMfGbNl4iUITmFu0+WtS5YBzvLwQ4JkfdeTXj992v7QFWUwee8SztPhTnk6OC5GIKfXUMYTHh71yVJF3ts+AkujKKczlXCcNTHoQsP2lVFY4t8TUVok= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 46A154152BEF Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5B6H1TYa3625333 for ; Sat, 6 Dec 2025 19:31:38 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=m/d25jHtDd5 JePATcbxWjTqvFLLlr+gCMZJIdibFJHg=; b=DXysbI7WkTa4t/RNR7vE+EiH/vd BPPgv2r1wUXHYTbY+uZG9/86ZpcM96ITXz5BdwQJClky4Op8huvYxzTmVAzLRxjP 1IpEgCvt02/XFzMAQ6UFTNLjA1VFswRffRFr9v6tDAy52nPOQQyBAmtdx3g2yUmH p8D/J4LrHCqFHnlmihveoxdn4qsoEAXhFd79xhUMV5qnMNa6o+CtZGxQzz2nBtHZ wO2Waz9BZd4NF+59NEKgWT/oLX5Tm4TzUjYhXBmyXjm/o3hBNiPixWHAigFWKNvM l8W3E9a7HSHn4mOqkqg70kr7dU/ybkgNJ36X3Cb1Aw1hJ+moMn2QnJ+yO1w== Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4avcq31a19-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sat, 06 Dec 2025 19:31:38 +0000 (GMT) Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-297dfae179bso65249495ad.1 for ; Sat, 06 Dec 2025 11:31:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1765049497; x=1765654297; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=m/d25jHtDd5JePATcbxWjTqvFLLlr+gCMZJIdibFJHg=; b=BSRBn4/RME8Swjabsdolg0l2DKSLTJfUdAtgjrQ/xgSFSTmPbjo9VZhMCnhB4GOhEr KurL/6Kmj/p+DsO04HF16tOLrvZQehEiIXF2E+butkG/iuTL0OKrCPJ6ABPnXtcmpqRw NATYQgRr/gMfITbZcWz2nzACxdrfUc49V8Q1fxQRX1l0XpYTXln0SQfXpNH391PDpTw+ UOtG2XC+O4z3DxyOc4htUABp4n4xh9y3EQvEUYlHY5YZjHFoaHh+Dhnp4ErwRdlkxJUe DrQfe4ukSbfnlbjkwcWh1mLL371alRK8XYtGCmvXqPg6ib2fsd412kdNz2aGd0pc6Niz r6gA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765049497; x=1765654297; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=m/d25jHtDd5JePATcbxWjTqvFLLlr+gCMZJIdibFJHg=; b=okNi/xSFpTKFeKVUz7K28zzPyNKmGtart+ab5ppoY2kjkez8VgkeRryn7VUVtkbKpt vXFFZglbF+7PvyMo7LegpjUpneoePCGXRQ9YIHY1xp/egaAza3Ltq6zVXh8KeWtJa+Wb yZp9Sbvz2FwV+75KqsfPY4D0FEXgRXP/L47z7x8bA327QuuoC/GaJqoWG9dqKv/9er4/ h9Hx3K+l3S9dKa4nUcaj2Xax6KjP4Eb3X8klHUlSUpHTZ9nbpdQDAEzjU4kXWF9+Hw5s OZnSl8bwMid/+r1pa0lsXC8IsI1cmb5zrcmbNLi4DJPYb0i/GuHqhaxLat2nxOhq2Or/ vNDA== X-Gm-Message-State: AOJu0YzuMrq7hP0lck4q9IScd59GeNTCL+1gy5F0hqO07W/d2TXgH17r ZSaCX+fbtJY3xTad3A44FXubzvC67zeKypHwGWfvWV3Wj5niPje+e2RxPBktuSPrZkfjgYhBqKW M21m4iKq5aFte1RclPx0lxdS9tu8I2AMzOwkkd8XMHVO2bn1wYau8MlojgtJVGBBNG3A/ X-Gm-Gg: ASbGncuQbM16l0/fPr9F5/g3VMkZfuvQGsUgCXsg9CdcDV2OeqRS2bKbeVhET6W2nuT ME5rhjNXeXMuTFpsZ5/s1BLX5mL0clYbXN1LyXL9ZcZ8TCFU9U+i+PtlWfCnx5HVPw60QoS+YBD b4YljhOug/ctBG6oriFpFPlB2IxD0nkxtZxnBQLHc04QThL87gmuYLadOwUb9lyNrmNDmMaD3Se i81WCeGHsv8XncH6+o6/QeBjwYTfHQHgzmbUXVGnXkIKIYY2EFwBO33CKxec8EWxb6K3Pg1ES1v cfOmojzl7BGqd+STUKVdbMj3/GwNAiD3XNEBUQvOFxjmGg5MvymhSkxbV7HOHTQr9D7u5HbOUzU 7MiulQFiOYpzNZorJcjUyhkdepyD6fFrbOb/n X-Received: by 2002:a17:902:9a84:b0:295:8db9:305f with SMTP id d9443c01a7336-29df5ab1d41mr24140855ad.34.1765049497440; Sat, 06 Dec 2025 11:31:37 -0800 (PST) X-Google-Smtp-Source: AGHT+IH/wTa8NTSNYFKK/v4Napn3BgUPHEBDSeU4hkPuTr+3JdUuFOkIxTlG2ru5JHpBOc/5XmKYfw== X-Received: by 2002:a17:902:9a84:b0:295:8db9:305f with SMTP id d9443c01a7336-29df5ab1d41mr24140735ad.34.1765049496953; Sat, 06 Dec 2025 11:31:36 -0800 (PST) Received: from xeond2.wrightpinski.org ([98.97.33.108]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-29dae4cf996sm82650035ad.30.2025.12.06.11.31.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 06 Dec 2025 11:31:36 -0800 (PST) From: Andrew Pinski To: gcc-patches@gcc.gnu.org Cc: Andrew Pinski Subject: [PATCH 2/3] cfg: add debug dump to make_forwarders_with_degenerate_phis. Date: Sat, 6 Dec 2025 11:31:28 -0800 Message-ID: <20251206193129.3365370-2-andrew.pinski@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251206193129.3365370-1-andrew.pinski@oss.qualcomm.com> References: <20251206193129.3365370-1-andrew.pinski@oss.qualcomm.com> MIME-Version: 1.0 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjA2MDE2MCBTYWx0ZWRfX5QnRJYR7zRC4 yP9eKV9r7uGbYmlUydRa85P451pRU8W5k9YguIVN5dsK9WlQaMWqRNhrUNU0FJ8Mpwqyl4j5Oo0 JTxIyv99Cs0wfjfgMHUPzigHcNoyWGDenrPjiN+GTWzphwtg50RD2ajm3OFSDuGKs0bELLx4ayK HF5Mnp+MEKssqZNfn/b1hHSDdjFLxfYShzRsvBaPLiqSz4V/WbfbXMd7OVzyadUeChuqKRLhWgo evXLwPShQZMcPXtt4tR9GYm4EburHvPJR5kt66AseMmvK6u8kFtxBq/aU8l0wa00p5VwFOPtRKF 4noDxobmgsdIN08Nzhbvbcfdy8Nle7X8or0ao69rOaWebMNjy4iEymiBLslSImNnyAbkYotF2Xo b0eAoDImuGNY2Z36g3J4gkTKeRnCdg== X-Authority-Analysis: v=2.4 cv=as+/yCZV c=1 sm=1 tr=0 ts=6934849a cx=c_pps a=JL+w9abYAAE89/QcEU+0QA==:117 a=m8fSZOrMZksZLhMGLjHzfw==:17 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=SevMZ8M7hACj3DlJ9C0A:9 a=324X-CrmTo6CU4MGRt3R:22 X-Proofpoint-ORIG-GUID: XLR9fgyZvMa3wd09_bZa3BCLl6di60iA X-Proofpoint-GUID: XLR9fgyZvMa3wd09_bZa3BCLl6di60iA X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-06_02,2025-12-04_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 lowpriorityscore=0 malwarescore=0 clxscore=1015 suspectscore=0 phishscore=0 bulkscore=0 adultscore=0 priorityscore=1501 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512060160 X-Spam-Status: No, score=-18.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_BLOCKED, RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE, SPF_PASS, TXREP, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~patchwork=sourceware.org@gcc.gnu.org To understand what this function does, add a debug dump. Bootstrapped and tested on x86_64-linux-gnu. gcc/ChangeLog: * tree-cfg.cc (make_forwarders_with_degenerate_phis): Add debug dump. Signed-off-by: Andrew Pinski --- gcc/tree-cfg.cc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/gcc/tree-cfg.cc b/gcc/tree-cfg.cc index 243740e8e21..f0a5e0538b1 100644 --- a/gcc/tree-cfg.cc +++ b/gcc/tree-cfg.cc @@ -10344,6 +10344,13 @@ make_forwarders_with_degenerate_phis (function *fn) (PHI_ARG_DEF_FROM_EDGE (vphi, args[j].first)); } free_dominance_info (fn, CDI_DOMINATORS); + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, "New forwarder block for edge "); + fprintf (dump_file, "%d -> %d.\n", + args[start].first->src->index, + args[start].first->dest->index); + } basic_block forwarder = split_edge (args[start].first); profile_count count = profile_count::zero (); bool irr = false; From patchwork Sat Dec 6 19:31:29 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Pinski X-Patchwork-Id: 126063 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id D12BF4143B27 for ; Sat, 6 Dec 2025 19:34:36 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D12BF4143B27 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.a=rsa-sha256 header.s=qcppdkim1 header.b=d4NaK3El; dkim=pass (2048-bit key, unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.a=rsa-sha256 header.s=google header.b=bPizS4E+ X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) by sourceware.org (Postfix) with ESMTPS id 2CB734152D27 for ; Sat, 6 Dec 2025 19:31:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2CB734152D27 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=oss.qualcomm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oss.qualcomm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 2CB734152D27 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1765049501; cv=none; b=swPXG6Vga7L3bJr6kyk6e/OE88oG3UHjyNORLy8TOzZ1NGB/8LzhkyHlRsUJONRZuzfA6YjokjZVSv6tgjfhJNn0vvwrvie34P4iGhdrYTbFpHR+i2mtMxN0YOcn/yEmf8u96LtEO0IN0kQ1ZbLGJQCEMf4DO30nojAY5OhkQ+Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1765049501; c=relaxed/simple; bh=NjWwCOKJry5cM54hBd4TJa8VXnQlKu1HUamJPshVgow=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=GCODB6ki84S+FvBSTonvmB9M93vknfYzYct0NYO4wPsRA3lR1mgbvhr7IOiXUQwitTyeeG9Kcv8nEVrSArR2FAvGD/S/z3HoFq9oC0ATc4B6VnALQX0ocO8IPPT2VWWq//MDnq9R/8vJIqTOoRZ0KdwaqI+UM3bthUOfaISxsGI= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2CB734152D27 Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5B6JP6pY080107 for ; Sat, 6 Dec 2025 19:31:40 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=JFWlAobOGLl 4ch8US/ANIV+x/cfhS8TXR5rTWV+ohKc=; b=d4NaK3ElP3sDp5s+32tpM1RNHlh ZFauYVbkPR0RYcSEGC4pE8RTc4FzFB4ceXkB/u7i5mZEWRRyqAlnAsgexiDQk4WU rGTrAP/rHOT5lF3PkDqGxkphN87rIw84xhZPgmIQ5nzWrDEpXlla5RPAuRcZA6az qC8Z7leB3gR4L9rZUXa/1hu32QtuGHlT2QqzwflrYeSr+WW3BvmCXZPzLM+PEIHg uaFsPpxuES+M0UwEpjE8T+ClLD8Wq92bAdsjogWL3HpiR3whutTnOAS0Epjro3zs B41VOubC942rPOaPvgCygG3Zfcxi7YvE6PRdTUEnQfw8eiQ5B+YV/aTn4hA== Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4avcndsac6-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sat, 06 Dec 2025 19:31:40 +0000 (GMT) Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-29845b18d1aso57095915ad.1 for ; Sat, 06 Dec 2025 11:31:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1765049499; x=1765654299; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=JFWlAobOGLl4ch8US/ANIV+x/cfhS8TXR5rTWV+ohKc=; b=bPizS4E+MfMLRI6HsWw+IhHe0ffDDImWWuwtAa9ffBhVNedy+UysT7t8Ipbhbj4gEb uMVMVQ5c/gQrOGp10j7V9qtaoWI1voxZ0wv9Nw5jpDgzasObWtdqCrgHDawMwVoGiB6U 8AGMgTyNfl6wuBdNLDfgRYi42hNMSK0d98vpl20ekv2NG7xNTfLXkZTVekywG6rSz6M7 wmtJHrP2jcJvXwWDR3pa2n/hmAMnjCa835qvL93uEcHgqkINTCyV1LJ/0koA8av05iLA Uh0P4G3zBCR5uIMjP5/buZ8jOnepySiHT6H/6WPHCoLUiLy8KxL4GEe3vASRStf3v3oS zPnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765049499; x=1765654299; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=JFWlAobOGLl4ch8US/ANIV+x/cfhS8TXR5rTWV+ohKc=; b=sFzwnHEF/3Hy468CRwCuUtk3hy1zi/AacVvndRfSErCR8K+CeE19sq4qhLj6+nyeRR 6M+EYMbQ8n5f4cQ3znCr3sHzPYi8syxl9kZMEZvwr7cO0srGg8MAFTb+h7XLG2eedD/d TJVizK2ki1+Ij1BbY/MsYv5HyIJh9VyeefP2haLnHJZ360RuGdk7QlEM2tL9HnK66iSw 2elXT749AdFBFk93cmw3CH6mPLkbr1y8JElCA011o+TCAo3ufCBQqkE/5KJDV1wNTGPU tG6KeTq2n9eZ5lsmZ6oHYolmnSr+i5wGotOIiyZde1uvpZjMHH3poU94+rLGU74ap1e/ T+rQ== X-Gm-Message-State: AOJu0Yx0kWM5i19lT7v+11uYZndJBogcykCOOwisYUnaWWp+LwUQaG5F 8wpSyrTr8XNocu2tpByhHZHvZDxTyqraFAAfTR/4FcRLbi9FiJ0+bng1BktTVTTQLUghWgy21Zj WaR6YpTbELMY2hpUYk/vhuJbOsaA0duSjbIKheEwAnPbdM15IXGSIYvZrvsWRVwVbR/Hi X-Gm-Gg: ASbGnct+5Z6/ouHXmSUs/hYiW3z1fHV2dCa4L2eUnl+YXcQrxzjfaXx+VbjdCdefaHJ KUP5Pe7dstSva43x/7D9h71c9us8zLxEyooJArZaxrlq2IWbWPGTjH44IMfzdxQvptMlIwm0dHW 0gIzw/1vU/bCfdO31y/Az4DY9ZLTUYcEuSyoUSVwRk1l5FZ3T0PP7KHITlw687iAa778sgnlbzx TU5kuKpeJz/VP29IOccrkCt6vtZgXx3VlEKm44w9v4Mc02wBtZPkY3jJ497rr10YOrKyKYjXXXq vb6/BPgYWcB1OlxKyLosEixzRxa8jUPJm2OpcsvfLT6ivMX1loPDg9iuYHvA4MBB6f1iItx7mZf rQ2oqrOcluRgDuGUATfX8dKUXgEUlrsPW3qBQ X-Received: by 2002:a17:903:2443:b0:297:e1f5:191b with SMTP id d9443c01a7336-29df5571f60mr27138995ad.11.1765049498981; Sat, 06 Dec 2025 11:31:38 -0800 (PST) X-Google-Smtp-Source: AGHT+IHdMID5yjaq1z3j9cGzCtr/kAuanG8Wis3Jly8ob91wQIQrzFqGJUNW4Y9TQC66qQNNAjNiug== X-Received: by 2002:a17:903:2443:b0:297:e1f5:191b with SMTP id d9443c01a7336-29df5571f60mr27138815ad.11.1765049498433; Sat, 06 Dec 2025 11:31:38 -0800 (PST) Received: from xeond2.wrightpinski.org ([98.97.33.108]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-29dae4cf996sm82650035ad.30.2025.12.06.11.31.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 06 Dec 2025 11:31:37 -0800 (PST) From: Andrew Pinski To: gcc-patches@gcc.gnu.org Cc: Andrew Pinski Subject: [PATCH 3/3] final_cleanup: Call make_forwarders_with_degenerate_phis [PR46555] Date: Sat, 6 Dec 2025 11:31:29 -0800 Message-ID: <20251206193129.3365370-3-andrew.pinski@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251206193129.3365370-1-andrew.pinski@oss.qualcomm.com> References: <20251206193129.3365370-1-andrew.pinski@oss.qualcomm.com> MIME-Version: 1.0 X-Proofpoint-ORIG-GUID: Fztpeo9ol-w60irCK2a-AuuXZy8W-lzS X-Authority-Analysis: v=2.4 cv=baJmkePB c=1 sm=1 tr=0 ts=6934849c cx=c_pps a=IZJwPbhc+fLeJZngyXXI0A==:117 a=m8fSZOrMZksZLhMGLjHzfw==:17 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=z-rfJKD8omPVu0uUveUA:9 a=uG9DUKGECoFWVXl0Dc02:22 X-Proofpoint-GUID: Fztpeo9ol-w60irCK2a-AuuXZy8W-lzS X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjA2MDE2MCBTYWx0ZWRfXzA++Ow7ie+Mo j/uhIlM3MqdulXUx+EPwHl1FtNPIT6Mx+cTGqfcsEW1qp93n0j2+4ASluH8JI9UUT5spTqMcNCh jw7ObFmggYP3lGSKXzDoeFG2UgxtGssDNuLrFxPwBF3xoKTRzyLZcp6P15EuVmc4k7zgoi803Rf nowcY1QUuLGCLDOED1MFLm3uodPA3JpWK0cJWZLFf4AE2g4j9/O44JL4AaU0u7xgpMmyYuz3VqD GDPBneFPwK/Q9n1XIAmYZqxsDtzYy5JoSs/ZPuob5PioAS7L/7YKqOMtENA8s3F2+fRVq7oCiTq xj8rQI/lnh8fv1sg82SrltQk/7lnKsHndTmcHiFWYMHjfTLuceJWybm/q3OgkkihBa3TK1x295h /fReAoCZt+4PAVcVgtL3U8JKRqCEBQ== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-06_02,2025-12-04_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 phishscore=0 malwarescore=0 priorityscore=1501 impostorscore=0 spamscore=0 bulkscore=0 suspectscore=0 clxscore=1015 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512060160 X-Spam-Status: No, score=-18.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_BLOCKED, RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE, SPF_PASS, TXREP, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~patchwork=sourceware.org@gcc.gnu.org This fixes a regression introduced with r16-5258-g1d8e2d51e5c5cb. With GCC 12+, we would not merge forwarders (with phis, vops included), this meant that after the last cddce, degenerate phis would stay not merged which allowed for better expansion. Now after my patch, the forwarder block would be removed and get worse expansion. This fixes the problem by creating the forwarder blocks in "optimized" and no other cleanupcfg is called afterwards. Oh this also fixes the problem at -O1 which was missed because the agressive version of dce was not done at -O1. Bootstrapped and tested on x86_64-linux-gnu. PR tree-optimization/46555 gcc/ChangeLog: * tree-cfgcleanup.cc (execute_cleanup_cfg_post_optimizing): Don't set todo to include cleanupcfg; do it manually. Call make_forwarders_with_degenerate_phis if optimizing. gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/pr46555.c: New test. Signed-off-by: Andrew Pinski --- gcc/testsuite/gcc.dg/tree-ssa/pr46555.c | 28 +++++++++++++++++++++++++ gcc/tree-cfgcleanup.cc | 9 ++++++-- 2 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pr46555.c diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr46555.c b/gcc/testsuite/gcc.dg/tree-ssa/pr46555.c new file mode 100644 index 00000000000..d4de7c2c170 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr46555.c @@ -0,0 +1,28 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized-details -fdump-rtl-pro_and_epilogue" } */ +/* PR tree-optimization/46555 */ +/* Here should not remove the forwarder block (or rather recreate it and not + remove it again). This improves expansion to RTL as there is one less copy + (or constant formation) in some cases. In this case we also get the ability + to shrink wrap the function. */ + +int h(void); +int f(int a, int b, int c) +{ + if (a) + return 2; + h(); + if (b) + return 2; + h(); + if (c) + return 2; + h(); + return 4; +} + +/* { dg-final { scan-tree-dump-times "New forwarder block for edge" 1 "optimized" } } */ +/* Make sure we only have a PHI with 2 arguments here, 2 and 4. */ +/* { dg-final { scan-tree-dump "PHI <2..., 4...>|PHI <4..., 2...>" "optimized" } } */ +/* Make sure we can shrink wrap the function now too. */ +/* { dg-final { scan-rtl-dump "Performing shrink-wrapping" "pro_and_epilogue" { target { { { i?86-*-* x86_64-*-* } && { ! ia32 } } || { powerpc*-*-* aarch64*-*-* riscv*-*-* arm*-*-* } } } } } */ diff --git a/gcc/tree-cfgcleanup.cc b/gcc/tree-cfgcleanup.cc index 872ded3d15e..093fde93da6 100644 --- a/gcc/tree-cfgcleanup.cc +++ b/gcc/tree-cfgcleanup.cc @@ -1415,8 +1415,13 @@ execute_cleanup_cfg_post_optimizing (void) } maybe_remove_unreachable_handlers (); cleanup_dead_labels (); - if (group_case_labels ()) - todo |= TODO_cleanup_cfg; + if (group_case_labels () && cleanup_tree_cfg ()) + todo |= TODO_update_ssa; + + /* When optimizing undo the merging of forwarder blocks + that phis for better out of ssa expansion. */ + if (optimize) + make_forwarders_with_degenerate_phis (cfun); basic_block bb = single_succ (ENTRY_BLOCK_PTR_FOR_FN (cfun)); gimple_stmt_iterator gsi = gsi_start_nondebug_after_labels_bb (bb);