From ec696e5d98ae4c503966f199bac341b50bfa1a5b Mon Sep 17 00:00:00 2001 From: Ulya Trafimovich Date: Wed, 26 Jan 2022 10:21:32 +0000 Subject: Clean up debug checks in intrinsic code. Deduplicate checks that were repeated for all ISAs, use a few helper functions to make the code simpler. Bug: 71781600 Test: art/test.py -r --host Test: art/test.py -r --target Change-Id: I3fefecce98a9a8b3b9bf53c31c2eefdafe8bd6a3 --- compiler/optimizing/intrinsics_utils.h | 38 ++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'compiler/optimizing/intrinsics_utils.h') diff --git a/compiler/optimizing/intrinsics_utils.h b/compiler/optimizing/intrinsics_utils.h index 3713b32a6c..f24454786e 100644 --- a/compiler/optimizing/intrinsics_utils.h +++ b/compiler/optimizing/intrinsics_utils.h @@ -146,6 +146,44 @@ static inline bool IsVarHandleGetAndAdd(HInvoke* invoke) { } } +static inline bool IsVarHandleGet(HInvoke* invoke) { + mirror::VarHandle::AccessModeTemplate access_mode = + mirror::VarHandle::GetAccessModeTemplateByIntrinsic(invoke->GetIntrinsic()); + return access_mode == mirror::VarHandle::AccessModeTemplate::kGet; +} + +static inline bool IsUnsafeGetObject(HInvoke* invoke) { + switch (invoke->GetIntrinsic()) { + case Intrinsics::kUnsafeGetObject: + case Intrinsics::kUnsafeGetObjectVolatile: + case Intrinsics::kJdkUnsafeGetObject: + case Intrinsics::kJdkUnsafeGetObjectVolatile: + case Intrinsics::kJdkUnsafeGetObjectAcquire: + return true; + default: + return false; + } +} + +static inline bool IsUnsafeCASObject(HInvoke* invoke) { + switch (invoke->GetIntrinsic()) { + case Intrinsics::kUnsafeCASObject: + case Intrinsics::kJdkUnsafeCASObject: + case Intrinsics::kJdkUnsafeCompareAndSetObject: + return true; + default: + return false; + } +} + +static inline bool IsVarHandleCASFamily(HInvoke* invoke) { + mirror::VarHandle::AccessModeTemplate access_mode = + mirror::VarHandle::GetAccessModeTemplateByIntrinsic(invoke->GetIntrinsic()); + return access_mode == mirror::VarHandle::AccessModeTemplate::kCompareAndSet || + access_mode == mirror::VarHandle::AccessModeTemplate::kGetAndUpdate || + access_mode == mirror::VarHandle::AccessModeTemplate::kCompareAndExchange; +} + static inline DataType::Type GetVarHandleExpectedValueType(HInvoke* invoke, size_t expected_coordinates_count) { DCHECK_EQ(expected_coordinates_count, GetExpectedVarHandleCoordinatesCount(invoke)); -- cgit v1.2.3-59-g8ed1b