On Fri, Apr 14, 2023 at 10:42 AM Ajit Agarwal via Gcc-patches <gcc-patches@gcc.gnu.org> wrote: > > 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; > +
Sorry, but this lacks a comment, it doesn't explain why the existing heuristics are not enough (select_best_block), it repeats dominance computing. More so it lacks a testcase demonstrating the effect. Richard. > if (sinkbb == gimple_bb (use)) > *togsi = gsi_for_stmt (use); > else > -- > 2.31.1 >