diff options
author | Roland Levillain <rpl@google.com> | 2015-02-20 10:27:12 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2015-02-20 10:27:13 +0000 |
commit | 76f82fc75f245101828e2fdbbdec676af1717f0b (patch) | |
tree | 300049142f90d978526d108ec1c08d28f014110a /compiler | |
parent | e90ccca801a3b7bda094ee0cc145fc62afd8d718 (diff) | |
parent | 442b46a087c389a91a0b51547ac9205058432364 (diff) | |
download | art-76f82fc75f245101828e2fdbbdec676af1717f0b.zip art-76f82fc75f245101828e2fdbbdec676af1717f0b.tar.gz art-76f82fc75f245101828e2fdbbdec676af1717f0b.tar.bz2 |
Merge "Display optimizing compiler's CodeInfo objects in oatdump."
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/optimizing/code_generator.cc | 2 | ||||
-rw-r--r-- | compiler/optimizing/stack_map_stream.h | 31 | ||||
-rw-r--r-- | compiler/optimizing/stack_map_test.cc | 2 |
3 files changed, 21 insertions, 14 deletions
diff --git a/compiler/optimizing/code_generator.cc b/compiler/optimizing/code_generator.cc index 5b395c8..2a57fdc 100644 --- a/compiler/optimizing/code_generator.cc +++ b/compiler/optimizing/code_generator.cc @@ -620,7 +620,7 @@ void CodeGenerator::RecordPcInfo(HInstruction* instruction, uint32_t dex_pc) { Location location = locations->GetEnvironmentAt(i); switch (location.GetKind()) { case Location::kConstant: { - DCHECK(current == location.GetConstant()); + DCHECK_EQ(current, location.GetConstant()); if (current->IsLongConstant()) { int64_t value = current->AsLongConstant()->GetValue(); stack_map_stream_.AddDexRegisterEntry(DexRegisterMap::kConstant, Low32Bits(value)); diff --git a/compiler/optimizing/stack_map_stream.h b/compiler/optimizing/stack_map_stream.h index 3974e53..5283d5d 100644 --- a/compiler/optimizing/stack_map_stream.h +++ b/compiler/optimizing/stack_map_stream.h @@ -166,18 +166,23 @@ class StackMapStream : public ValueObject { stack_map.SetStackMask(*entry.sp_mask); } - // Set the register map. - MemoryRegion register_region = dex_register_maps_region.Subregion( - next_dex_register_map_offset, - DexRegisterMap::kFixedSize + entry.num_dex_registers * DexRegisterMap::SingleEntrySize()); - next_dex_register_map_offset += register_region.size(); - DexRegisterMap dex_register_map(register_region); - stack_map.SetDexRegisterMapOffset(register_region.start() - memory_start); - - for (size_t j = 0; j < entry.num_dex_registers; ++j) { - DexRegisterEntry register_entry = - dex_register_maps_.Get(j + entry.dex_register_maps_start_index); - dex_register_map.SetRegisterInfo(j, register_entry.kind, register_entry.value); + if (entry.num_dex_registers != 0) { + // Set the register map. + MemoryRegion register_region = dex_register_maps_region.Subregion( + next_dex_register_map_offset, + DexRegisterMap::kFixedSize + + entry.num_dex_registers * DexRegisterMap::SingleEntrySize()); + next_dex_register_map_offset += register_region.size(); + DexRegisterMap dex_register_map(register_region); + stack_map.SetDexRegisterMapOffset(register_region.start() - memory_start); + + for (size_t j = 0; j < entry.num_dex_registers; ++j) { + DexRegisterEntry register_entry = + dex_register_maps_.Get(j + entry.dex_register_maps_start_index); + dex_register_map.SetRegisterInfo(j, register_entry.kind, register_entry.value); + } + } else { + stack_map.SetDexRegisterMapOffset(StackMap::kNoDexRegisterMap); } // Set the inlining info. @@ -196,7 +201,7 @@ class StackMapStream : public ValueObject { inline_info.SetMethodReferenceIndexAtDepth(j, inline_entry.method_index); } } else { - stack_map.SetInlineDescriptorOffset(InlineInfo::kNoInlineInfo); + stack_map.SetInlineDescriptorOffset(StackMap::kNoInlineInfo); } } } diff --git a/compiler/optimizing/stack_map_test.cc b/compiler/optimizing/stack_map_test.cc index 5ee6ae0..744fb45 100644 --- a/compiler/optimizing/stack_map_test.cc +++ b/compiler/optimizing/stack_map_test.cc @@ -61,6 +61,7 @@ TEST(StackMapTest, Test1) { MemoryRegion stack_mask = stack_map.GetStackMask(); ASSERT_TRUE(SameBits(stack_mask, sp_mask)); + ASSERT_TRUE(stack_map.HasDexRegisterMap()); DexRegisterMap dex_registers = code_info.GetDexRegisterMapOf(stack_map, 2); ASSERT_EQ(DexRegisterMap::kInStack, dex_registers.GetLocationKind(0)); ASSERT_EQ(DexRegisterMap::kConstant, dex_registers.GetLocationKind(1)); @@ -107,6 +108,7 @@ TEST(StackMapTest, Test2) { MemoryRegion stack_mask = stack_map.GetStackMask(); ASSERT_TRUE(SameBits(stack_mask, sp_mask1)); + ASSERT_TRUE(stack_map.HasDexRegisterMap()); DexRegisterMap dex_registers = code_info.GetDexRegisterMapOf(stack_map, 2); ASSERT_EQ(DexRegisterMap::kInStack, dex_registers.GetLocationKind(0)); ASSERT_EQ(DexRegisterMap::kConstant, dex_registers.GetLocationKind(1)); |