diff options
| author | 2017-11-29 15:16:42 +0000 | |
|---|---|---|
| committer | 2017-11-29 15:16:42 +0000 | |
| commit | a602c56ba1a82d70eb40de35e7c716477a46ee28 (patch) | |
| tree | d0f253b21fc8f792dd09afe58743e9c2f2b5150b | |
| parent | aa25db7d2a6f7f507c27ce49c99a33daf3059f8f (diff) | |
| parent | 4c71d00f3bee9ae7a3e14ca6629e9e0cb4e25fd8 (diff) | |
Merge "ART: Remove nested SOA in intrinsics code"
| -rw-r--r-- | compiler/optimizing/intrinsics.cc | 14 | ||||
| -rw-r--r-- | compiler/optimizing/intrinsics.h | 5 |
2 files changed, 9 insertions, 10 deletions
diff --git a/compiler/optimizing/intrinsics.cc b/compiler/optimizing/intrinsics.cc index 9bf10f58fd..77199242f5 100644 --- a/compiler/optimizing/intrinsics.cc +++ b/compiler/optimizing/intrinsics.cc @@ -104,7 +104,8 @@ static inline IntrinsicExceptions GetExceptions(Intrinsics i) { return kCanThrow; } -static bool CheckInvokeType(Intrinsics intrinsic, HInvoke* invoke) { +static bool CheckInvokeType(Intrinsics intrinsic, HInvoke* invoke) + REQUIRES_SHARED(Locks::mutator_lock_) { // Whenever the intrinsic is marked as static, report an error if we find an InvokeVirtual. // // Whenever the intrinsic is marked as direct and we find an InvokeVirtual, a devirtualization @@ -130,7 +131,6 @@ static bool CheckInvokeType(Intrinsics intrinsic, HInvoke* invoke) { } if (invoke_type == kVirtual) { ArtMethod* art_method = invoke->GetResolvedMethod(); - ScopedObjectAccess soa(Thread::Current()); return (art_method->IsFinal() || art_method->GetDeclaringClass()->IsFinal()); } return false; @@ -155,12 +155,10 @@ bool IntrinsicsRecognizer::Recognize(HInvoke* invoke, /*out*/ bool* wrong_invoke return false; } - { - // TODO: b/65872996 Polymorphic signature methods should be compiler intrinsics. - ScopedObjectAccess soa(Thread::Current()); - if (art_method->IsPolymorphicSignature()) { - return false; - } + // TODO: b/65872996 The intent is that polymorphic signature methods should + // be compiler intrinsics. At present, they are only interpreter intrinsics. + if (art_method->IsPolymorphicSignature()) { + return false; } Intrinsics intrinsic = static_cast<Intrinsics>(art_method->GetIntrinsic()); diff --git a/compiler/optimizing/intrinsics.h b/compiler/optimizing/intrinsics.h index 8088ab25a7..c07a99032a 100644 --- a/compiler/optimizing/intrinsics.h +++ b/compiler/optimizing/intrinsics.h @@ -46,8 +46,9 @@ class IntrinsicsRecognizer : public HOptimization { // Static helper that recognizes intrinsic call. Returns true on success. // If it fails due to invoke type mismatch, wrong_invoke_type is set. - // Useful to recognize intrinsics on invidual calls outside this full pass. - static bool Recognize(HInvoke* invoke, /*out*/ bool* wrong_invoke_type); + // Useful to recognize intrinsics on individual calls outside this full pass. + static bool Recognize(HInvoke* invoke, /*out*/ bool* wrong_invoke_type) + REQUIRES_SHARED(Locks::mutator_lock_); static constexpr const char* kIntrinsicsRecognizerPassName = "intrinsics_recognition"; |