]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Loop over intersected bitmaps.
authorAndrew MacLeod <amacleod@redhat.com>
Thu, 4 Aug 2022 16:22:59 +0000 (12:22 -0400)
committerAndrew MacLeod <amacleod@redhat.com>
Thu, 4 Aug 2022 18:21:59 +0000 (14:21 -0400)
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.

gcc/gimple-range-path.cc

index e1b9683c1e4dac6887fb022d15bbaa10d22e101f..43e7526b6fc4e1a32676546810a1a8a911d3571d 100644 (file)
@@ -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");
            }
        }
     }