summaryrefslogtreecommitdiff
path: root/compiler/compiled_method.h
diff options
context:
space:
mode:
author Mathieu Chartier <mathieuc@google.com> 2018-01-18 16:31:01 -0800
committer Mathieu Chartier <mathieuc@google.com> 2018-01-22 08:46:37 -0800
commita79efdb69350fa66e1beabed4499ef4d0e809785 (patch)
tree0a7491e10f646075b2d535cf69e13145224bb2ca /compiler/compiled_method.h
parentccc5401bf082e4292a2cb75eeeb216a441189aef (diff)
Fix quickening logic
Fix varius bugs in the quickening logic where related to shared code items for different methods. Fixed the case where two methods quicken differently on the same code item by checking that the quicken info is the same for all methods that quicken the same code item. This is accomplished by requickening and reverifying the contents of the quicken info. Fixed the case where the dex to dex compiler would abort from a DCHECK that there was no already quickened instructions. Feature is tested by enabling deduping (aog/594315). Test: test-art-host Bug: 63756964 Change-Id: I52c2b89518f4e808594b450a5fcc373ab5a5863b
Diffstat (limited to 'compiler/compiled_method.h')
-rw-r--r--compiler/compiled_method.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/compiler/compiled_method.h b/compiler/compiled_method.h
index acdce260e5..4e8f3efe5a 100644
--- a/compiler/compiled_method.h
+++ b/compiler/compiled_method.h
@@ -168,6 +168,10 @@ class CompiledMethod FINAL : public CompiledCode {
ArrayRef<const linker::LinkerPatch> GetPatches() const;
+ // The compiler sometimes unquickens shared code items. In that case, we need to clear the vmap
+ // table to avoid writing the quicken info to the vdex file.
+ void ReleaseVMapTable();
+
private:
static constexpr size_t kIsIntrinsicLsb = kNumberOfCompiledCodePackedBits;
static constexpr size_t kIsIntrinsicSize = 1u;
@@ -186,7 +190,7 @@ class CompiledMethod FINAL : public CompiledCode {
// For quick code, method specific information that is not very dedupe friendly (method indices).
const LengthPrefixedArray<uint8_t>* const method_info_;
// For quick code, holds code infos which contain stack maps, inline information, and etc.
- const LengthPrefixedArray<uint8_t>* const vmap_table_;
+ const LengthPrefixedArray<uint8_t>* vmap_table_;
// For quick code, a FDE entry for the debug_frame section.
const LengthPrefixedArray<uint8_t>* const cfi_info_;
// For quick code, linker patches needed by the method.