From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.220.28]) by sourceware.org (Postfix) with ESMTPS id A31AA3962DDF for ; Thu, 27 Jul 2023 09:31:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A31AA3962DDF Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de Received: from relay2.suse.de (relay2.suse.de [149.44.160.134]) by smtp-out1.suse.de (Postfix) with ESMTP id B7EB321A90 for ; Thu, 27 Jul 2023 09:31:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1690450309; h=from:from:reply-to:date:date:to:to:cc:mime-version:mime-version: content-type:content-type; bh=aaqhKSb9TIS9P5bhFG65ODzLk3xbGLVrvafDG6SqlxU=; b=wcxLzIMcGW8G+FNbX8gnisDQnEvi58tz5OhL+WXp2SwmxDwHSv0HFiBcXtXqVPEHnEGPDY nESyoIMHSHquAnXK4pGHQBUlr5MAoTQQhxa+tMUL+jI/X6t5Mexfov58FuYvaibF16HLVt awm7di3638OpasMmfnMYdrJx/uQX/zo= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1690450309; h=from:from:reply-to:date:date:to:to:cc:mime-version:mime-version: content-type:content-type; bh=aaqhKSb9TIS9P5bhFG65ODzLk3xbGLVrvafDG6SqlxU=; b=awffLtrQFegigbYf14kTW6moHs1fGH4Ae8ECglaQWsvObXg2zUC8HLLk18WlPaQ93Kz7T0 5yY/5haKgCvNGJDg== Received: from wotan.suse.de (wotan.suse.de [10.160.0.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by relay2.suse.de (Postfix) with ESMTPS id AE8082C142 for ; Thu, 27 Jul 2023 09:31:49 +0000 (UTC) Date: Thu, 27 Jul 2023 09:31:49 +0000 (UTC) From: Richard Biener To: gcc-patches@gcc.gnu.org Subject: [PATCH] Remove recursive post-dominator traversal in sinking User-Agent: Alpine 2.22 (LSU 394 2020-01-19) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII X-Spam-Status: No, score=-10.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,MISSING_MID,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Message-ID: <20230727093149.2ygevJ7IH48Zbdy74DTq5U16Q3dh8WmFfXtMAOgp9Oo@z> The following turns the recursive post-dominator traversal in GIMPLE code sinking to a worklist. Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed. * tree-ssa-sink.cc (sink_code_in_bb): Remove recursion, instead use a worklist ... (pass_sink_code::execute): ... in the caller. --- gcc/tree-ssa-sink.cc | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/gcc/tree-ssa-sink.cc b/gcc/tree-ssa-sink.cc index 74dae0fa3c0..ab1cbffb32a 100644 --- a/gcc/tree-ssa-sink.cc +++ b/gcc/tree-ssa-sink.cc @@ -673,7 +673,6 @@ sink_common_stores_to_bb (basic_block bb) static unsigned sink_code_in_bb (basic_block bb) { - basic_block son; gimple_stmt_iterator gsi; edge_iterator ei; edge e; @@ -686,12 +685,12 @@ sink_code_in_bb (basic_block bb) /* If this block doesn't dominate anything, there can't be any place to sink the statements to. */ if (first_dom_son (CDI_DOMINATORS, bb) == NULL) - goto earlyout; + return todo; /* We can't move things across abnormal edges, so don't try. */ FOR_EACH_EDGE (e, ei, bb->succs) if (e->flags & EDGE_ABNORMAL) - goto earlyout; + return todo; for (gsi = gsi_last_bb (bb); !gsi_end_p (gsi);) { @@ -765,13 +764,6 @@ sink_code_in_bb (basic_block bb) gsi_prev (&gsi); } - earlyout: - for (son = first_dom_son (CDI_POST_DOMINATORS, bb); - son; - son = next_dom_son (CDI_POST_DOMINATORS, son)) - { - todo |= sink_code_in_bb (son); - } return todo; } @@ -861,7 +853,20 @@ pass_sink_code::execute (function *fun) memset (&sink_stats, 0, sizeof (sink_stats)); calculate_dominance_info (CDI_DOMINATORS); calculate_dominance_info (CDI_POST_DOMINATORS); - todo |= sink_code_in_bb (EXIT_BLOCK_PTR_FOR_FN (fun)); + + auto_vec worklist; + worklist.quick_push (EXIT_BLOCK_PTR_FOR_FN (fun)); + do + { + basic_block bb = worklist.pop (); + todo |= sink_code_in_bb (bb); + for (basic_block son = first_dom_son (CDI_POST_DOMINATORS, bb); + son; + son = next_dom_son (CDI_POST_DOMINATORS, son)) + worklist.safe_push (son); + } + while (!worklist.is_empty ()); + statistics_counter_event (fun, "Sunk statements", sink_stats.sunk); statistics_counter_event (fun, "Commoned stores", sink_stats.commoned); free_dominance_info (CDI_POST_DOMINATORS); -- 2.35.3