From 31d4b8e0058b33e2c5ce792a69e5e897583652e2 Mon Sep 17 00:00:00 2001 From: Sameer Abu Asal Date: Mon, 29 Apr 2013 11:31:03 -0700 Subject: 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 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. Fixed DCHECK in Class::FindVirtualMethodForVirtual to handle cases for Miranda methods. Change-Id: I0626d5cd1bc70a685db71abec067370ebdaf6edc --- src/compiler/driver/compiler_driver.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src/compiler/driver/compiler_driver.h') diff --git a/src/compiler/driver/compiler_driver.h b/src/compiler/driver/compiler_driver.h index a20e5ef585..e289558276 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, @@ -149,8 +151,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. -- cgit v1.2.3-59-g8ed1b