diff options
| -rw-r--r-- | compiler/optimizing/stack_map_stream.cc | 13 | ||||
| -rw-r--r-- | runtime/base/arena_containers.h | 11 |
2 files changed, 17 insertions, 7 deletions
diff --git a/compiler/optimizing/stack_map_stream.cc b/compiler/optimizing/stack_map_stream.cc index eeae96e6c2..4d12ad6eb6 100644 --- a/compiler/optimizing/stack_map_stream.cc +++ b/compiler/optimizing/stack_map_stream.cc @@ -16,8 +16,6 @@ #include "stack_map_stream.h" -#include <unordered_map> - #include "art_method-inl.h" #include "base/stl_util.h" #include "optimizing/optimizing_compiler.h" @@ -526,7 +524,7 @@ void StackMapStream::CheckDexRegisterMap(const CodeInfo& code_info, size_t StackMapStream::PrepareRegisterMasks() { register_masks_.resize(stack_maps_.size(), 0u); - std::unordered_map<uint32_t, size_t> dedupe; + ArenaUnorderedMap<uint32_t, size_t> dedupe(allocator_->Adapter(kArenaAllocStackMapStream)); for (StackMapEntry& stack_map : stack_maps_) { const size_t index = dedupe.size(); stack_map.register_mask_index = dedupe.emplace(stack_map.register_mask, index).first->second; @@ -541,10 +539,11 @@ size_t StackMapStream::PrepareStackMasks(size_t entry_size_in_bits) { stack_masks_.resize(byte_entry_size * stack_maps_.size(), 0u); // For deduplicating we store the stack masks as byte packed for simplicity. We can bit pack later // when copying out from stack_masks_. - std::unordered_map<MemoryRegion, - size_t, - FNVHash<MemoryRegion>, - MemoryRegion::ContentEquals> dedup(stack_maps_.size()); + ArenaUnorderedMap<MemoryRegion, + size_t, + FNVHash<MemoryRegion>, + MemoryRegion::ContentEquals> dedup( + stack_maps_.size(), allocator_->Adapter(kArenaAllocStackMapStream)); for (StackMapEntry& stack_map : stack_maps_) { size_t index = dedup.size(); MemoryRegion stack_mask(stack_masks_.data() + index * byte_entry_size, byte_entry_size); diff --git a/runtime/base/arena_containers.h b/runtime/base/arena_containers.h index 2c8aa2880a..62b974ee60 100644 --- a/runtime/base/arena_containers.h +++ b/runtime/base/arena_containers.h @@ -21,6 +21,7 @@ #include <queue> #include <set> #include <stack> +#include <unordered_map> #include <utility> #include "arena_allocator.h" @@ -85,6 +86,16 @@ using ArenaHashMap = HashMap<Key, Pred, ArenaAllocatorAdapter<std::pair<Key, Value>>>; +template <typename Key, + typename Value, + typename Hash = std::hash<Key>, + typename Pred = std::equal_to<Value>> +using ArenaUnorderedMap = std::unordered_map<Key, + Value, + Hash, + Pred, + ArenaAllocatorAdapter<std::pair<const Key, Value>>>; + // Implementation details below. template <bool kCount> |