From: Richard Sandiford Date: Mon, 6 Dec 2021 18:29:31 +0000 (+0000) Subject: ranger: Add shortcuts for single-successor blocks X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=63c59f054a5cd6d356ad8bce79182ab205b7aa43;p=test_jj.git ranger: Add shortcuts for single-successor blocks 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. 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. --- diff --git a/gcc/gimple-range-edge.cc b/gcc/gimple-range-edge.cc index afffc8d..9e80523 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 6c17267..8691aba 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);