[gcc r13-1965] Loop over intersected bitmaps.
Andrew Macleod
amacleod@gcc.gnu.org
Thu Aug 4 18:29:00 GMT 2022
https://gcc.gnu.org/g:8e34d92ef29a175b84cc7f5185db43656ae762bb
commit r13-1965-g8e34d92ef29a175b84cc7f5185db43656ae762bb
Author: Andrew MacLeod <amacleod@redhat.com>
Date: Thu Aug 4 12:22:59 2022 -0400
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.
Diff:
---
gcc/gimple-range-path.cc | 40 ++++++++++++++++++----------------------
1 file 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");
}
}
}
More information about the Gcc-cvs
mailing list