summaryrefslogtreecommitdiff
path: root/compiler/optimizing/stack_map_stream.cc
diff options
context:
space:
mode:
author David Srbecky <dsrbecky@google.com> 2018-06-22 12:15:38 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2018-06-22 12:15:38 +0000
commit6566496d4c437c83f23871ca5670bad8a0a8a7ce (patch)
tree7cb301f51b65ded6849fa29896115cb10ca3f453 /compiler/optimizing/stack_map_stream.cc
parentccfc88af4ab94ff91f9b241d5113dfe7cb1f2b34 (diff)
parent0b4e5a3a1275a4aa6955a0576ab9d57eedd5bdd2 (diff)
Merge "Binary search stack maps by native pc."
Diffstat (limited to 'compiler/optimizing/stack_map_stream.cc')
-rw-r--r--compiler/optimizing/stack_map_stream.cc10
1 files changed, 10 insertions, 0 deletions
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<RegisterMask>::Entry entry;