diff options
Diffstat (limited to 'compiler/optimizing/stack_map_stream.cc')
-rw-r--r-- | compiler/optimizing/stack_map_stream.cc | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/compiler/optimizing/stack_map_stream.cc b/compiler/optimizing/stack_map_stream.cc index 1a368ed347..13bdcfcdf8 100644 --- a/compiler/optimizing/stack_map_stream.cc +++ b/compiler/optimizing/stack_map_stream.cc @@ -51,7 +51,8 @@ void StackMapStream::BeginMethod(size_t frame_size_in_bytes, size_t fp_spill_mask, uint32_t num_dex_registers, bool baseline, - bool debuggable) { + bool debuggable, + bool has_should_deoptimize_flag) { DCHECK(!in_method_) << "Mismatched Begin/End calls"; in_method_ = true; DCHECK_EQ(packed_frame_size_, 0u) << "BeginMethod was already called"; @@ -63,6 +64,7 @@ void StackMapStream::BeginMethod(size_t frame_size_in_bytes, num_dex_registers_ = num_dex_registers; baseline_ = baseline; debuggable_ = debuggable; + has_should_deoptimize_flag_ = has_should_deoptimize_flag; if (kVerifyStackMaps) { dchecks_.emplace_back([=](const CodeInfo& code_info) { @@ -374,10 +376,12 @@ ScopedArenaVector<uint8_t> StackMapStream::Encode() { DCHECK(in_stack_map_ == false) << "Mismatched Begin/End calls"; DCHECK(in_inline_info_ == false) << "Mismatched Begin/End calls"; - uint32_t flags = (inline_infos_.size() > 0) ? CodeInfo::kHasInlineInfo : 0; + uint32_t flags = 0; + flags |= (inline_infos_.size() > 0) ? CodeInfo::kHasInlineInfo : 0; flags |= baseline_ ? CodeInfo::kIsBaseline : 0; flags |= debuggable_ ? CodeInfo::kIsDebuggable : 0; - DCHECK_LE(flags, kVarintMax); // Ensure flags can be read directly as byte. + flags |= has_should_deoptimize_flag_ ? CodeInfo::kHasShouldDeoptimizeFlag : 0; + uint32_t bit_table_flags = 0; ForEachBitTable([&bit_table_flags](size_t i, auto bit_table) { if (bit_table->size() != 0) { // Record which bit-tables are stored. @@ -409,6 +413,8 @@ ScopedArenaVector<uint8_t> StackMapStream::Encode() { CHECK_EQ(code_info.GetNumberOfStackMaps(), stack_maps_.size()); CHECK_EQ(CodeInfo::HasInlineInfo(buffer.data()), inline_infos_.size() > 0); CHECK_EQ(CodeInfo::IsBaseline(buffer.data()), baseline_); + CHECK_EQ(CodeInfo::IsDebuggable(buffer.data()), debuggable_); + CHECK_EQ(CodeInfo::HasShouldDeoptimizeFlag(buffer.data()), has_should_deoptimize_flag_); // Verify all written data (usually only in debug builds). if (kVerifyStackMaps) { |