diff options
author | 2018-08-01 13:49:25 +0000 | |
---|---|---|
committer | 2018-08-01 13:49:25 +0000 | |
commit | 91f0fdb4372d3f2bcfcd9db67afcbe7ee1901048 (patch) | |
tree | 9eaf6465a7212af4ae5f31d39b0e242f32c23077 /compiler/optimizing/stack_map_stream.cc | |
parent | 35dc0b5874b6f8c98b83560c966773c9973fc4b1 (diff) | |
parent | b73323c50d10d3850d2d8719a481f4f430fc51ce (diff) |
Merge "Deduplicate stackmaps at BitTable level."
Diffstat (limited to 'compiler/optimizing/stack_map_stream.cc')
-rw-r--r-- | compiler/optimizing/stack_map_stream.cc | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/compiler/optimizing/stack_map_stream.cc b/compiler/optimizing/stack_map_stream.cc index da6c711659..e1b657554f 100644 --- a/compiler/optimizing/stack_map_stream.cc +++ b/compiler/optimizing/stack_map_stream.cc @@ -292,6 +292,12 @@ void StackMapStream::FillInMethodInfo(MemoryRegion region) { } } +template<typename Writer, typename Builder> +ALWAYS_INLINE static void EncodeTable(Writer& out, const Builder& bit_table) { + out.WriteBit(false); // Is not deduped. + bit_table.Encode(out); +} + size_t StackMapStream::PrepareForFillIn() { DCHECK_EQ(out_.size(), 0u); @@ -309,13 +315,13 @@ size_t StackMapStream::PrepareForFillIn() { EncodeUnsignedLeb128(&out_, fp_spill_mask_); EncodeUnsignedLeb128(&out_, num_dex_registers_); BitMemoryWriter<ScopedArenaVector<uint8_t>> out(&out_, out_.size() * kBitsPerByte); - stack_maps_.Encode(out); - inline_infos_.Encode(out); - register_masks_.Encode(out); - stack_masks_.Encode(out); - dex_register_masks_.Encode(out); - dex_register_maps_.Encode(out); - dex_register_catalog_.Encode(out); + EncodeTable(out, stack_maps_); + EncodeTable(out, inline_infos_); + EncodeTable(out, register_masks_); + EncodeTable(out, stack_masks_); + EncodeTable(out, dex_register_masks_); + EncodeTable(out, dex_register_maps_); + EncodeTable(out, dex_register_catalog_); return out_.size(); } |