summaryrefslogtreecommitdiff
path: root/compiler/optimizing/stack_map_stream.cc
diff options
context:
space:
mode:
author David Srbecky <dsrbecky@google.com> 2018-07-15 23:58:44 +0100
committer David Srbecky <dsrbecky@google.com> 2018-08-01 12:41:36 +0100
commitb73323c50d10d3850d2d8719a481f4f430fc51ce (patch)
treeb5c2eb181dd398229fb7b7e852923efd247e5710 /compiler/optimizing/stack_map_stream.cc
parentca182f2c81e7102d3ccd1c4ec5c96e602ad343fe (diff)
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
Diffstat (limited to 'compiler/optimizing/stack_map_stream.cc')
-rw-r--r--compiler/optimizing/stack_map_stream.cc20
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();
}