On Sun, Dec 5, 2021 at 10:58 PM Richard Sandiford via Gcc-patches <gcc-patches@gcc.gnu.org> wrote: > > When compiling an optabs.ii at -O2 with a release-checking build, > there were 6,643,575 calls to gimple_outgoing_range_stmt_p. 96.8% of > them were for blocks with a single successor, which never have a control > statement that generates new range info. This patch therefore adds a > shortcut for that case. > > This gives a ~1% compile-time improvement for the test. > > I tried making the function inline (in the header) so that the > single_succ_p didn't need to be repeated, but it seemed to make things > slightly worse. > > Tested on aarch64-linux-gnu and x86_64-linux-gnu. OK to install?
OK. Richard. > Richard > > > gcc/ > * gimple-range-edge.cc (gimple_outgoing_range::edge_range_p): Add > a shortcut for blocks with single successors. > * gimple-range-gori.cc (gori_map::calculate_gori): Likewise. > --- > gcc/gimple-range-edge.cc | 3 +++ > gcc/gimple-range-gori.cc | 3 +++ > 2 files changed, 6 insertions(+) > > diff --git a/gcc/gimple-range-edge.cc b/gcc/gimple-range-edge.cc > index afffc8dbcae..9e805230004 100644 > --- a/gcc/gimple-range-edge.cc > +++ b/gcc/gimple-range-edge.cc > @@ -182,6 +182,9 @@ gimple_outgoing_range::calc_switch_ranges (gswitch *sw) > gimple * > gimple_outgoing_range::edge_range_p (irange &r, edge e) > { > + if (single_succ_p (e->src)) > + return NULL; > + > // Determine if there is an outgoing edge. > gimple *s = gimple_outgoing_range_stmt_p (e->src); > if (!s) > diff --git a/gcc/gimple-range-gori.cc b/gcc/gimple-range-gori.cc > index 0dba34b58c5..b256e4afd15 100644 > --- a/gcc/gimple-range-gori.cc > +++ b/gcc/gimple-range-gori.cc > @@ -555,6 +555,9 @@ gori_map::calculate_gori (basic_block bb) > m_outgoing[bb->index] = BITMAP_ALLOC (&m_bitmaps); > m_incoming[bb->index] = BITMAP_ALLOC (&m_bitmaps); > > + if (single_succ_p (bb)) > + return; > + > // If this block's last statement may generate range informaiton, go > // calculate it. > gimple *stmt = gimple_outgoing_range_stmt_p (bb); > -- > 2.31.1 >