diff options
Diffstat (limited to 'compiler/optimizing/inliner.h')
-rw-r--r-- | compiler/optimizing/inliner.h | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/compiler/optimizing/inliner.h b/compiler/optimizing/inliner.h index 241c63bcc2..e98a66b314 100644 --- a/compiler/optimizing/inliner.h +++ b/compiler/optimizing/inliner.h @@ -72,24 +72,13 @@ class HInliner : public HOptimization { bool TryInline(HInvoke* invoke_instruction); - // Attempt to resolve the target of the invoke instruction to an acutal call - // target. - // - // Returns the target directly in the case of static or direct invokes. - // Otherwise, uses CHA devirtualization or other methods to try to find the - // call target. - ArtMethod* FindActualCallTarget(HInvoke* invoke_instruction, bool* cha_devirtualize) - REQUIRES_SHARED(Locks::mutator_lock_); - // Try to inline `resolved_method` in place of `invoke_instruction`. `do_rtp` is whether // reference type propagation can run after the inlining. If the inlining is successful, this - // method will replace and remove the `invoke_instruction`. If `cha_devirtualize` is true, - // a CHA guard needs to be added for the inlining. + // method will replace and remove the `invoke_instruction`. bool TryInlineAndReplace(HInvoke* invoke_instruction, ArtMethod* resolved_method, ReferenceTypeInfo receiver_type, - bool do_rtp, - bool cha_devirtualize) + bool do_rtp) REQUIRES_SHARED(Locks::mutator_lock_); bool TryBuildAndInline(HInvoke* invoke_instruction, @@ -170,6 +159,17 @@ class HInliner : public HOptimization { bool TryInlineFromInlineCache(HInvoke* invoke_instruction) REQUIRES_SHARED(Locks::mutator_lock_); + // Try inlining the invoke instruction using CHA. + bool TryInlineFromCHA(HInvoke* invoke_instruction) + REQUIRES_SHARED(Locks::mutator_lock_); + + // When we fail inlining `invoke_instruction`, we will try to devirtualize the + // call. + bool TryDevirtualize(HInvoke* invoke_instruction, + ArtMethod* method, + HInvoke** replacement) + REQUIRES_SHARED(Locks::mutator_lock_); + // Try getting the inline cache from JIT code cache. // Return true if the inline cache was successfully allocated and the // invoke info was found in the profile info. @@ -215,7 +215,7 @@ class HInliner : public HOptimization { // Try CHA-based devirtualization to change virtual method calls into // direct calls. // Returns the actual method that resolved_method can be devirtualized to. - ArtMethod* TryCHADevirtualization(ArtMethod* resolved_method) + ArtMethod* FindMethodFromCHA(ArtMethod* resolved_method) REQUIRES_SHARED(Locks::mutator_lock_); // Add a CHA guard for a CHA-based devirtualized call. A CHA guard checks a @@ -230,13 +230,17 @@ class HInliner : public HOptimization { uint32_t dex_pc) const REQUIRES_SHARED(Locks::mutator_lock_); + void MaybeRunReferenceTypePropagation(HInstruction* replacement, + HInvoke* invoke_instruction) + REQUIRES_SHARED(Locks::mutator_lock_); + void FixUpReturnReferenceType(ArtMethod* resolved_method, HInstruction* return_replacement) REQUIRES_SHARED(Locks::mutator_lock_); bool ArgumentTypesMoreSpecific(HInvoke* invoke_instruction, ArtMethod* resolved_method) REQUIRES_SHARED(Locks::mutator_lock_); - bool ReturnTypeMoreSpecific(HInvoke* invoke_instruction, HInstruction* return_replacement) + bool ReturnTypeMoreSpecific(HInstruction* return_replacement, HInvoke* invoke_instruction) REQUIRES_SHARED(Locks::mutator_lock_); // Add a type guard on the given `receiver`. This will add to the graph: |