aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2022-03-10 13:43:19 +0100
committerRichard Biener <rguenther@suse.de>2022-03-10 13:43:19 +0100
commitee34ffa429a399f292ad1421333721a92b998772 (patch)
treeafab9632adaa21e2b92cce18aa15b5e621363e37 /gcc
parent9467e7331188705ec16c086b77e1809c5b0aab7d (diff)
downloadgcc-ee34ffa429a399f292ad1421333721a92b998772.zip
gcc-ee34ffa429a399f292ad1421333721a92b998772.tar.gz
gcc-ee34ffa429a399f292ad1421333721a92b998772.tar.bz2
tree-optimization/102943 - use tree form for sbr_sparse_bitmap
The following arranges to remove an indirection do the bitvector in sbr_sparse_bitmap by embedding bitmap_head instead of bitmap and using the tree form (since we only ever set/query individual aligned bit chunks). That shaves off 6 seconds from 70 seconds of the slowest 521.wrf_r LRANS unit build. 2022-03-10 Richard Biener <rguenther@suse.de> PR tree-optimization/102943 * gimple-range-cache.cc (sbr_sparse_bitmap::bitvec): Make a bitmap_head. (sbr_sparse_bitmap::sbr_sparse_bitmap): Adjust and switch to tree view. (sbr_sparse_bitmap::set_bb_range): Adjust. (sbr_sparse_bitmap::get_bb_range): Likewise.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/gimple-range-cache.cc15
1 files changed, 8 insertions, 7 deletions
diff --git a/gcc/gimple-range-cache.cc b/gcc/gimple-range-cache.cc
index 6131352..583ba29 100644
--- a/gcc/gimple-range-cache.cc
+++ b/gcc/gimple-range-cache.cc
@@ -313,7 +313,7 @@ private:
int bitmap_get_quad (const_bitmap head, int quad);
irange_allocator *m_irange_allocator;
irange *m_range[SBR_NUM];
- bitmap bitvec;
+ bitmap_head bitvec;
tree m_type;
};
@@ -324,7 +324,8 @@ sbr_sparse_bitmap::sbr_sparse_bitmap (tree t, irange_allocator *allocator,
{
gcc_checking_assert (TYPE_P (t));
m_type = t;
- bitvec = BITMAP_ALLOC (bm);
+ bitmap_initialize (&bitvec, bm);
+ bitmap_tree_view (&bitvec);
m_irange_allocator = allocator;
// Pre-cache varying.
m_range[0] = m_irange_allocator->allocate (2);
@@ -370,7 +371,7 @@ sbr_sparse_bitmap::set_bb_range (const_basic_block bb, const irange &r)
{
if (r.undefined_p ())
{
- bitmap_set_quad (bitvec, bb->index, SBR_UNDEF);
+ bitmap_set_quad (&bitvec, bb->index, SBR_UNDEF);
return true;
}
@@ -380,11 +381,11 @@ sbr_sparse_bitmap::set_bb_range (const_basic_block bb, const irange &r)
{
if (!m_range[x])
m_range[x] = m_irange_allocator->allocate (r);
- bitmap_set_quad (bitvec, bb->index, x + 1);
+ bitmap_set_quad (&bitvec, bb->index, x + 1);
return true;
}
// All values are taken, default to VARYING.
- bitmap_set_quad (bitvec, bb->index, SBR_VARYING);
+ bitmap_set_quad (&bitvec, bb->index, SBR_VARYING);
return false;
}
@@ -394,7 +395,7 @@ sbr_sparse_bitmap::set_bb_range (const_basic_block bb, const irange &r)
bool
sbr_sparse_bitmap::get_bb_range (irange &r, const_basic_block bb)
{
- int value = bitmap_get_quad (bitvec, bb->index);
+ int value = bitmap_get_quad (&bitvec, bb->index);
if (!value)
return false;
@@ -412,7 +413,7 @@ sbr_sparse_bitmap::get_bb_range (irange &r, const_basic_block bb)
bool
sbr_sparse_bitmap::bb_range_p (const_basic_block bb)
{
- return (bitmap_get_quad (bitvec, bb->index) != 0);
+ return (bitmap_get_quad (&bitvec, bb->index) != 0);
}
// -------------------------------------------------------------------------