diff options
author | Richard Biener <rguenther@suse.de> | 2022-03-10 13:43:19 +0100 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2022-03-10 13:43:19 +0100 |
commit | ee34ffa429a399f292ad1421333721a92b998772 (patch) | |
tree | afab9632adaa21e2b92cce18aa15b5e621363e37 /gcc | |
parent | 9467e7331188705ec16c086b77e1809c5b0aab7d (diff) | |
download | gcc-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.cc | 15 |
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); } // ------------------------------------------------------------------------- |