diff options
author | 2013-04-05 19:13:07 -0700 | |
---|---|---|
committer | 2013-04-26 10:12:52 -0700 | |
commit | b0682d5f7970470130f43d35f37ae7605a8a9bb8 (patch) | |
tree | 3bf3d9e1b3ed5da8e7db5c9e736e6cde7c5e30c8 /src/compiler/driver/compiler_driver.h | |
parent | ba1814eeac6adb44f2f78317556b3484b19e02fc (diff) |
Supporting de-virtualization for precise types.
Sharpening invoke-virtual and invoke-interface calls to invoke-direct for cases
where the type of "this" pointer in the invoke- params is precisely known.
Instructions that have an invoke opcode are marked as interesting, for each invoke-virtual/interface
we come across with a precise type for "this" we mark the location as a candidate for sharpening,
resolve the concrete method and save its method reference <DexFile, DexMethodIndex> to be sharpened
in CompilerDriver::ComputeInvokeInfo().
Added a new entry to AOT statistics showing the percentage of sharpened calls that were based on
type analysis.
Fix a minor bug in type creation for GetSuperClass(). Previously super class of a precise reference
had precise types created which is not necessarily the case.
Change-Id: Iee61858e84242dfc82be363ee221d2747a1ac86a
Diffstat (limited to 'src/compiler/driver/compiler_driver.h')
-rw-r--r-- | src/compiler/driver/compiler_driver.h | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/compiler/driver/compiler_driver.h b/src/compiler/driver/compiler_driver.h index 3581f5f68f..a4fa84aa3c 100644 --- a/src/compiler/driver/compiler_driver.h +++ b/src/compiler/driver/compiler_driver.h @@ -39,6 +39,8 @@ class ParallelCompilationManager; class DexCompilationUnit; class TimingLogger; +const uint32_t kDexPCNotReady = 0xFFFFFF; + enum CompilerBackend { kQuick, kPortable, @@ -156,8 +158,9 @@ class CompilerDriver { // Can we fastpath a interface, super class or virtual method call? Computes method's vtable // index. - bool ComputeInvokeInfo(uint32_t method_idx, const DexCompilationUnit* mUnit, InvokeType& type, - int& vtable_idx, uintptr_t& direct_code, uintptr_t& direct_method) + bool ComputeInvokeInfo(uint32_t method_idx, uint32_t dex_pc, + const DexCompilationUnit* mUnit, InvokeType& type, int& vtable_idx, + uintptr_t& direct_code, uintptr_t& direct_method) LOCKS_EXCLUDED(Locks::mutator_lock_); // Record patch information for later fix up. |