summaryrefslogtreecommitdiff
path: root/runtime/vdex_file.cc
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/vdex_file.cc')
-rw-r--r--runtime/vdex_file.cc8
1 files changed, 6 insertions, 2 deletions
diff --git a/runtime/vdex_file.cc b/runtime/vdex_file.cc
index 842aa04dfb..5e9a2faab0 100644
--- a/runtime/vdex_file.cc
+++ b/runtime/vdex_file.cc
@@ -171,6 +171,10 @@ void VdexFile::Unquicken(const std::vector<const DexFile*>& dex_files,
// least the size of quickening data for each method that has a code item.
return;
}
+ // We do not decompile a RETURN_VOID_NO_BARRIER into a RETURN_VOID, as the quickening
+ // optimization does not depend on the boot image (the optimization relies on not
+ // having final fields in a class, which does not change for an app).
+ constexpr bool kDecompileReturnInstruction = false;
const uint8_t* quickening_info_ptr = quickening_info.data();
const uint8_t* const quickening_info_end = quickening_info.data() + quickening_info.size();
for (const DexFile* dex_file : dex_files) {
@@ -196,7 +200,7 @@ void VdexFile::Unquicken(const std::vector<const DexFile*>& dex_files,
quickening_info_ptr += sizeof(uint32_t);
optimizer::ArtDecompileDEX(*code_item,
ArrayRef<const uint8_t>(quickening_info_ptr, quickening_size),
- /* decompile_return_instruction */ false);
+ kDecompileReturnInstruction);
quickening_info_ptr += quickening_size;
}
it.Next();
@@ -209,7 +213,7 @@ void VdexFile::Unquicken(const std::vector<const DexFile*>& dex_files,
quickening_info_ptr += sizeof(uint32_t);
optimizer::ArtDecompileDEX(*code_item,
ArrayRef<const uint8_t>(quickening_info_ptr, quickening_size),
- /* decompile_return_instruction */ false);
+ kDecompileReturnInstruction);
quickening_info_ptr += quickening_size;
}
it.Next();