diff options
author | 2020-11-12 17:05:28 +0000 | |
---|---|---|
committer | 2020-11-13 10:07:21 +0000 | |
commit | b6837f0350ff66c13582b0e94178dd5ca283ff0a (patch) | |
tree | f79fff81352545efe967850e3d17e32255dcfecd /libartbase/base/bit_vector.cc | |
parent | 32c2eb81320f24b5bab24754204b8be95faa08b0 (diff) |
Revert^2 "Partial LSE analysis & store removal"
A ScopedArenaAllocator in a single test was accidentally loaded using
operator new which is not supported. This caused a memory leak.
This reverts commit fe270426c8a2a69a8f669339e83b86fbf40e25a1.
This unreverts commit bb6cda60e4418c0ab557ea4090e046bed8206763.
Bug: 67037140
Reason for revert: Fixed memory leak in
LoadStoreAnalysisTest.PartialEscape test case
Test: SANITIZE_HOST=address ASAN_OPTIONS=detect_leaks=0 m test-art-host-gtest-dependencies
Run art_compiler_tests
Change-Id: I34fa2079df946ae54b8c91fa771a44d56438a719
Diffstat (limited to 'libartbase/base/bit_vector.cc')
-rw-r--r-- | libartbase/base/bit_vector.cc | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/libartbase/base/bit_vector.cc b/libartbase/base/bit_vector.cc index 8e3d4c9bf7..d3cb652c0c 100644 --- a/libartbase/base/bit_vector.cc +++ b/libartbase/base/bit_vector.cc @@ -376,4 +376,31 @@ Allocator* BitVector::GetAllocator() const { return allocator_; } +void BaseBitVectorArray::Resize(size_t rows, size_t cols, bool clear) { + DCHECK(IsExpandable()); + if (clear) { + Clear(); + } + cols = RoundUp(cols, BitVector::kWordBits); + num_columns_ = cols; + num_rows_ = rows; + // Ensure size + GetRawData().SetBit(num_rows_ * num_columns_ - 1); + GetRawData().ClearBit(num_rows_ * num_columns_ - 1); +} + +// In order to improve performance we do this in 4-byte blocks. Clang should be +// able to optimize this to larger blocks if possible. +void BaseBitVectorArray::UnionRows(size_t dest_row, size_t other) { + DCHECK_LT(dest_row, num_rows_); + DCHECK_LT(other, num_rows_); + size_t block_words = num_columns_ / BitVector::kWordBits; + uint32_t* dest = + GetRawData().GetRawStorage() + ((dest_row * num_columns_) / BitVector::kWordBits); + uint32_t* source = GetRawData().GetRawStorage() + ((other * num_columns_) / BitVector::kWordBits); + for (uint32_t i = 0; i < block_words; ++i, ++dest, ++source) { + *dest = (*dest) | (*source); + } +} + } // namespace art |