From 0b4e5a3a1275a4aa6955a0576ab9d57eedd5bdd2 Mon Sep 17 00:00:00 2001 From: David Srbecky Date: Mon, 11 Jun 2018 16:25:29 +0100 Subject: Binary search stack maps by native pc. Test: test.py --host -r -b -t 018 -t 510 Change-Id: I07042e8dfd82adcd24fdfe1a1970a7ccdc09ce46 --- compiler/optimizing/stack_map_stream.cc | 10 ++++++++++ 1 file changed, 10 insertions(+) (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 fb5d9332d0..e8b333047d 100644 --- a/compiler/optimizing/stack_map_stream.cc +++ b/compiler/optimizing/stack_map_stream.cc @@ -61,6 +61,16 @@ void StackMapStream::BeginStackMapEntry(uint32_t dex_pc, current_stack_map_[StackMap::kPackedNativePc] = StackMap::PackNativePc(native_pc_offset, instruction_set_); current_stack_map_[StackMap::kDexPc] = dex_pc; + if (stack_maps_.size() > 0) { + // Check that non-catch stack maps are sorted by pc. + // Catch stack maps are at the end and may be unordered. + if (stack_maps_.back()[StackMap::kKind] == StackMap::Kind::Catch) { + DCHECK(current_stack_map_[StackMap::kKind] == StackMap::Kind::Catch); + } else if (current_stack_map_[StackMap::kKind] != StackMap::Kind::Catch) { + DCHECK_LE(stack_maps_.back()[StackMap::kPackedNativePc], + current_stack_map_[StackMap::kPackedNativePc]); + } + } if (register_mask != 0) { uint32_t shift = LeastSignificantBit(register_mask); BitTableBuilder::Entry entry; -- cgit v1.2.3-59-g8ed1b