mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-19 09:05:17 +08:00
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.
This commit is contained in:
parent
d27b7e6987
commit
63c59f054a
@ -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)
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user