diff options
author | 2021-04-28 14:42:09 +0100 | |
---|---|---|
committer | 2021-05-06 10:37:17 +0000 | |
commit | 5024ddfd125b5c3b59d7f359ae33cf7f0255b048 (patch) | |
tree | b625ed5aa1c4976e4cd2de5732543d5d1eb34a0f /runtime/entrypoints/entrypoint_utils.cc | |
parent | 5859b689d4fdd36711187715c04e2e095f7975c0 (diff) |
Devirtualize to HInvokeStaticOrDirect.
When we statically know the target method, devirtualize an
HInvokeInterface or an HInvokeVirtual to a HInvokeStaticOrDirect.
Test: test.py
Bug: 182538502
Change-Id: Ie3a58603cde300fca9ca4972d4dfbbd20918f5ba
Diffstat (limited to 'runtime/entrypoints/entrypoint_utils.cc')
-rw-r--r-- | runtime/entrypoints/entrypoint_utils.cc | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/runtime/entrypoints/entrypoint_utils.cc b/runtime/entrypoints/entrypoint_utils.cc index ef0c474026..1c0127a519 100644 --- a/runtime/entrypoints/entrypoint_utils.cc +++ b/runtime/entrypoints/entrypoint_utils.cc @@ -302,6 +302,10 @@ void MaybeUpdateBssMethodEntry(ArtMethod* callee, MethodReference callee_referen oat_file->GetBssMethods().data() + oat_file->GetBssMethods().size()); std::atomic<ArtMethod*>* atomic_entry = reinterpret_cast<std::atomic<ArtMethod*>*>(method_entry); + if (kIsDebugBuild) { + ArtMethod* existing = atomic_entry->load(std::memory_order_acquire); + CHECK(existing->IsRuntimeMethod() || existing == callee); + } static_assert(sizeof(*method_entry) == sizeof(*atomic_entry), "Size check."); atomic_entry->store(callee, std::memory_order_release); } |