diff options
author | Andrew MacLeod <amacleod@redhat.com> | 2022-08-04 12:22:59 -0400 |
---|---|---|
committer | Andrew MacLeod <amacleod@redhat.com> | 2022-08-04 14:21:59 -0400 |
commit | 8e34d92ef29a175b84cc7f5185db43656ae762bb (patch) | |
tree | 9159427d7bddc6f0df5b8fee131e442027b8e017 | |
parent | be58bf98e98bb431ed26ca8be84586075fe8be82 (diff) |
Loop over intersected bitmaps.
compute_ranges_in_block loops over the import list and then checks the
same bit in exports. It is nmore efficent to loop over the intersection
of the 2 bitmaps.
PR tree-optimization/106514
* gimple-range-path.cc (path_range_query::compute_ranges_in_block):
Use EXECUTE_IF_AND_IN_BITMAP to loop over 2 bitmaps.
-rw-r--r-- | gcc/gimple-range-path.cc | 40 |
1 files changed, 18 insertions, 22 deletions
diff --git a/gcc/gimple-range-path.cc b/gcc/gimple-range-path.cc index e1b9683c1e4..43e7526b6fc 100644 --- a/gcc/gimple-range-path.cc +++ b/gcc/gimple-range-path.cc @@ -479,32 +479,28 @@ path_range_query::compute_ranges_in_block (basic_block bb) p->set_root_oracle (nullptr); } - EXECUTE_IF_SET_IN_BITMAP (m_imports, 0, i, bi) + gori_compute &g = m_ranger->gori (); + bitmap exports = g.exports (bb); + EXECUTE_IF_AND_IN_BITMAP (m_imports, exports, 0, i, bi) { tree name = ssa_name (i); - gori_compute &g = m_ranger->gori (); - bitmap exports = g.exports (bb); - - if (bitmap_bit_p (exports, i)) + Value_Range r (TREE_TYPE (name)); + if (g.outgoing_edge_range_p (r, e, name, *this)) { - Value_Range r (TREE_TYPE (name)); - if (g.outgoing_edge_range_p (r, e, name, *this)) + Value_Range cached_range (TREE_TYPE (name)); + if (get_cache (cached_range, name)) + r.intersect (cached_range); + + set_cache (r, name); + if (DEBUG_SOLVER) { - Value_Range cached_range (TREE_TYPE (name)); - if (get_cache (cached_range, name)) - r.intersect (cached_range); - - set_cache (r, name); - if (DEBUG_SOLVER) - { - fprintf (dump_file, "outgoing_edge_range_p for "); - print_generic_expr (dump_file, name, TDF_SLIM); - fprintf (dump_file, " on edge %d->%d ", - e->src->index, e->dest->index); - fprintf (dump_file, "is "); - r.dump (dump_file); - fprintf (dump_file, "\n"); - } + fprintf (dump_file, "outgoing_edge_range_p for "); + print_generic_expr (dump_file, name, TDF_SLIM); + fprintf (dump_file, " on edge %d->%d ", + e->src->index, e->dest->index); + fprintf (dump_file, "is "); + r.dump (dump_file); + fprintf (dump_file, "\n"); } } } |