diff options
author | Vladimir Marko <vmarko@google.com> | 2015-04-08 10:01:01 +0100 |
---|---|---|
committer | Vladimir Marko <vmarko@google.com> | 2015-04-08 16:36:19 +0100 |
commit | 87b7c52ac660119b8dea46967974b76c86d0750b (patch) | |
tree | 9f80325934dd7568b8288224a155284fea97bd9a /compiler/dex/quick/gen_invoke.cc | |
parent | 8635e1886f3624154c076cf40cbf182c74e2e0e3 (diff) | |
download | android_art-87b7c52ac660119b8dea46967974b76c86d0750b.tar.gz android_art-87b7c52ac660119b8dea46967974b76c86d0750b.tar.bz2 android_art-87b7c52ac660119b8dea46967974b76c86d0750b.zip |
Quick: Clean up temp use counting.
For the boot image on arm64 and x86-64 we're using true
PC-relative addressing, so pc_rel_temp_ is nullptr and
CanUsePcRelDexCacheArrayLoad() returns true, but we're not
actually using the ArtMethod* so fix the AnalyzeMIR() to
take it into account.
Also don't count intrinsic invokes towards ArtMethod* uses.
To avoid repeated method inliner inquiries about whether a
method is intrinsic or special (requiring lock acquisition),
cache that information in MirMethodLoweringInfo. As part of
that cleanup, take quickened invokes into account for
suspend check elimination.
Change-Id: I5b4ec124221c0db1314c8e72675976c110ebe7ca
Diffstat (limited to 'compiler/dex/quick/gen_invoke.cc')
-rwxr-xr-x | compiler/dex/quick/gen_invoke.cc | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/compiler/dex/quick/gen_invoke.cc b/compiler/dex/quick/gen_invoke.cc index e747239894..db7095dafb 100755 --- a/compiler/dex/quick/gen_invoke.cc +++ b/compiler/dex/quick/gen_invoke.cc @@ -1435,10 +1435,12 @@ bool Mir2Lir::GenInlinedUnsafePut(CallInfo* info, bool is_long, void Mir2Lir::GenInvoke(CallInfo* info) { DCHECK(cu_->compiler_driver->GetMethodInlinerMap() != nullptr); - const DexFile* dex_file = info->method_ref.dex_file; - if (cu_->compiler_driver->GetMethodInlinerMap()->GetMethodInliner(dex_file) - ->GenIntrinsic(this, info)) { - return; + if (mir_graph_->GetMethodLoweringInfo(info->mir).IsIntrinsic()) { + const DexFile* dex_file = info->method_ref.dex_file; + auto* inliner = cu_->compiler_driver->GetMethodInlinerMap()->GetMethodInliner(dex_file); + if (inliner->GenIntrinsic(this, info)) { + return; + } } GenInvokeNoInline(info); } |