summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <treehugger-gerrit@google.com> 2017-11-29 15:16:42 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2017-11-29 15:16:42 +0000
commita602c56ba1a82d70eb40de35e7c716477a46ee28 (patch)
treed0f253b21fc8f792dd09afe58743e9c2f2b5150b
parentaa25db7d2a6f7f507c27ce49c99a33daf3059f8f (diff)
parent4c71d00f3bee9ae7a3e14ca6629e9e0cb4e25fd8 (diff)
Merge "ART: Remove nested SOA in intrinsics code"
-rw-r--r--compiler/optimizing/intrinsics.cc14
-rw-r--r--compiler/optimizing/intrinsics.h5
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";