Hello All: This patch add heuristics for code sinking opportunities. Bootstrapped and regtested for powerpc64-linux-gnu.
Thanks & Regards Ajit tree-ssa-sink: Add heuristics for code sinking. Add following code sinking heuristics: 1. from code block dominates the call. 2. To Code block have uses inside the function call. 3. Loop headers. 4. Sinking from code block after call increases register pressure. 5. Sinking calls. 2023-04-14 Ajit Kumar Agarwal <aagar...@linux.ibm.com> gcc/ChangeLog: * tree-ssa-sink.cc (statement_sink_location): Add heuristics for code sinking. --- gcc/tree-ssa-sink.cc | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/gcc/tree-ssa-sink.cc b/gcc/tree-ssa-sink.cc index 87b1d40c174..8de88b259a3 100644 --- a/gcc/tree-ssa-sink.cc +++ b/gcc/tree-ssa-sink.cc @@ -465,6 +465,39 @@ statement_sink_location (gimple *stmt, basic_block frombb, if (sinkbb == frombb) return false; + auto_vec<basic_block> h; + h = get_all_dominated_blocks (CDI_DOMINATORS, + frombb); + bool is_call = false; + while (h.length ()) + { + basic_block bb = h.pop (); + + if (bb == frombb) + continue; + + for (gimple_stmt_iterator gsi = gsi_last_bb (bb); !gsi_end_p (gsi);) + { + gimple *stmt = gsi_stmt (gsi); + + if (is_gimple_call (stmt)) + { + is_call = true; + break; + } + + if (!gsi_end_p (gsi)) + gsi_prev (&gsi); + } + } + + if (!is_gimple_call (stmt) + && (gimple_bb (use) != frombb) + && !is_gimple_call (use) + && dominated_by_p (CDI_DOMINATORS, sinkbb, frombb) + && is_call) + return false; + if (sinkbb == gimple_bb (use)) *togsi = gsi_for_stmt (use); else -- 2.31.1