From b73323c50d10d3850d2d8719a481f4f430fc51ce Mon Sep 17 00:00:00 2001 From: David Srbecky Date: Sun, 15 Jul 2018 23:58:44 +0100 Subject: Deduplicate stackmaps at BitTable level. Make it possible to share BitTables between CodeInfos. This saves 1% of .oat file size. Test: test-art-host-gtest Change-Id: I14172cba6b65e734b94f8c232f24eeee1fc67113 --- compiler/optimizing/stack_map_stream.cc | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'compiler/optimizing/stack_map_stream.cc') 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 +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> 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(); } -- cgit v1.2.3-59-g8ed1b