ART: Clean up InlineMethodAnalyzer
Remove dead code.
Test: m test-art-host
Change-Id: If86503fde2a77279a3169144bcae700101d81784
diff --git a/compiler/dex/inline_method_analyser.cc b/compiler/dex/inline_method_analyser.cc
index 3347070..e691a67 100644
--- a/compiler/dex/inline_method_analyser.cc
+++ b/compiler/dex/inline_method_analyser.cc
@@ -26,7 +26,6 @@
#include "dex_instruction_utils.h"
#include "mirror/class-inl.h"
#include "mirror/dex_cache-inl.h"
-#include "verifier/method_verifier-inl.h"
/*
* NOTE: This code is part of the quick compiler. It lives in the runtime
@@ -391,7 +390,6 @@
#undef STORE_IPUT
result->opcode = kInlineOpConstructor;
- result->flags = kInlineSpecial;
result->d.constructor_data.reserved = 0u;
return true;
}
@@ -429,25 +427,6 @@
static_assert(InlineMethodAnalyser::IGetVariant(Instruction::IGET_SHORT) ==
InlineMethodAnalyser::IPutVariant(Instruction::IPUT_SHORT), "iget/iput_short variant");
-// This is used by compiler and debugger. We look into the dex cache for resolved methods and
-// fields. However, in the context of the debugger, not all methods and fields are resolved. Since
-// we need to be able to detect possibly inlined method, we pass a null inline method to indicate
-// we don't want to take unresolved methods and fields into account during analysis.
-bool InlineMethodAnalyser::AnalyseMethodCode(verifier::MethodVerifier* verifier,
- InlineMethod* result) {
- DCHECK(verifier != nullptr);
- if (!Runtime::Current()->UseJitCompilation()) {
- DCHECK_EQ(verifier->CanLoadClasses(), result != nullptr);
- }
-
- // Note: verifier->GetMethod() may be null.
- return AnalyseMethodCode(verifier->CodeItem(),
- verifier->GetMethodReference(),
- (verifier->GetAccessFlags() & kAccStatic) != 0u,
- verifier->GetMethod(),
- result);
-}
-
bool InlineMethodAnalyser::AnalyseMethodCode(ArtMethod* method, InlineMethod* result) {
const DexFile::CodeItem* code_item = method->GetCodeItem();
if (code_item == nullptr) {
@@ -473,7 +452,6 @@
case Instruction::RETURN_VOID:
if (result != nullptr) {
result->opcode = kInlineOpNop;
- result->flags = kInlineSpecial;
result->d.data = 0u;
}
return true;
@@ -549,7 +527,6 @@
if (result != nullptr) {
result->opcode = kInlineOpReturnArg;
- result->flags = kInlineSpecial;
InlineReturnArgData* data = &result->d.return_data;
data->arg = reg - arg_start;
data->is_wide = (return_opcode == Instruction::RETURN_WIDE) ? 1u : 0u;
@@ -586,7 +563,6 @@
}
if (result != nullptr) {
result->opcode = kInlineOpNonWideConst;
- result->flags = kInlineSpecial;
result->d.data = static_cast<uint64_t>(const_value);
}
return true;
@@ -647,7 +623,6 @@
return false;
}
result->opcode = kInlineOpIGet;
- result->flags = kInlineSpecial;
data->op_variant = IGetVariant(opcode);
data->method_is_static = is_static ? 1u : 0u;
data->object_arg = object_arg; // Allow IGET on any register, not just "this".
@@ -716,7 +691,6 @@
return false;
}
result->opcode = kInlineOpIPut;
- result->flags = kInlineSpecial;
data->op_variant = IPutVariant(opcode);
data->method_is_static = is_static ? 1u : 0u;
data->object_arg = object_arg; // Allow IPUT on any register, not just "this".
diff --git a/compiler/dex/inline_method_analyser.h b/compiler/dex/inline_method_analyser.h
index ab643ab..a35e97f 100644
--- a/compiler/dex/inline_method_analyser.h
+++ b/compiler/dex/inline_method_analyser.h
@@ -36,128 +36,12 @@
class ArtMethod;
enum InlineMethodOpcode : uint16_t {
- kIntrinsicDoubleCvt,
- kIntrinsicFloatCvt,
- kIntrinsicFloat2Int,
- kIntrinsicDouble2Long,
- kIntrinsicFloatIsInfinite,
- kIntrinsicDoubleIsInfinite,
- kIntrinsicFloatIsNaN,
- kIntrinsicDoubleIsNaN,
- kIntrinsicReverseBits,
- kIntrinsicReverseBytes,
- kIntrinsicBitCount,
- kIntrinsicCompare,
- kIntrinsicHighestOneBit,
- kIntrinsicLowestOneBit,
- kIntrinsicNumberOfLeadingZeros,
- kIntrinsicNumberOfTrailingZeros,
- kIntrinsicRotateRight,
- kIntrinsicRotateLeft,
- kIntrinsicSignum,
- kIntrinsicAbsInt,
- kIntrinsicAbsLong,
- kIntrinsicAbsFloat,
- kIntrinsicAbsDouble,
- kIntrinsicMinMaxInt,
- kIntrinsicMinMaxLong,
- kIntrinsicMinMaxFloat,
- kIntrinsicMinMaxDouble,
- kIntrinsicCos,
- kIntrinsicSin,
- kIntrinsicAcos,
- kIntrinsicAsin,
- kIntrinsicAtan,
- kIntrinsicAtan2,
- kIntrinsicCbrt,
- kIntrinsicCosh,
- kIntrinsicExp,
- kIntrinsicExpm1,
- kIntrinsicHypot,
- kIntrinsicLog,
- kIntrinsicLog10,
- kIntrinsicNextAfter,
- kIntrinsicSinh,
- kIntrinsicTan,
- kIntrinsicTanh,
- kIntrinsicSqrt,
- kIntrinsicCeil,
- kIntrinsicFloor,
- kIntrinsicRint,
- kIntrinsicRoundFloat,
- kIntrinsicRoundDouble,
- kIntrinsicReferenceGetReferent,
- kIntrinsicCharAt,
- kIntrinsicCompareTo,
- kIntrinsicEquals,
- kIntrinsicGetCharsNoCheck,
- kIntrinsicIsEmptyOrLength,
- kIntrinsicIndexOf,
- kIntrinsicNewStringFromBytes,
- kIntrinsicNewStringFromChars,
- kIntrinsicNewStringFromString,
- kIntrinsicCurrentThread,
- kIntrinsicPeek,
- kIntrinsicPoke,
- kIntrinsicCas,
- kIntrinsicUnsafeGet,
- kIntrinsicUnsafePut,
-
- // 1.8.
- kIntrinsicUnsafeGetAndAddInt,
- kIntrinsicUnsafeGetAndAddLong,
- kIntrinsicUnsafeGetAndSetInt,
- kIntrinsicUnsafeGetAndSetLong,
- kIntrinsicUnsafeGetAndSetObject,
- kIntrinsicUnsafeLoadFence,
- kIntrinsicUnsafeStoreFence,
- kIntrinsicUnsafeFullFence,
-
- kIntrinsicSystemArrayCopyCharArray,
- kIntrinsicSystemArrayCopy,
-
kInlineOpNop,
kInlineOpReturnArg,
kInlineOpNonWideConst,
kInlineOpIGet,
kInlineOpIPut,
kInlineOpConstructor,
- kInlineStringInit,
-};
-std::ostream& operator<<(std::ostream& os, const InlineMethodOpcode& rhs);
-
-enum InlineMethodFlags : uint16_t {
- kNoInlineMethodFlags = 0x0000,
- kInlineIntrinsic = 0x0001,
- kInlineSpecial = 0x0002,
-};
-
-// IntrinsicFlags are stored in InlineMethod::d::raw_data
-enum IntrinsicFlags {
- kIntrinsicFlagNone = 0,
-
- // kIntrinsicMinMaxInt
- kIntrinsicFlagMax = kIntrinsicFlagNone,
- kIntrinsicFlagMin = 1,
-
- // kIntrinsicIsEmptyOrLength
- kIntrinsicFlagLength = kIntrinsicFlagNone,
- kIntrinsicFlagIsEmpty = kIntrinsicFlagMin,
-
- // kIntrinsicIndexOf
- kIntrinsicFlagBase0 = kIntrinsicFlagMin,
-
- // kIntrinsicUnsafeGet, kIntrinsicUnsafePut, kIntrinsicUnsafeCas
- kIntrinsicFlagIsLong = kIntrinsicFlagMin,
- // kIntrinsicUnsafeGet, kIntrinsicUnsafePut
- kIntrinsicFlagIsVolatile = 2,
- // kIntrinsicUnsafePut, kIntrinsicUnsafeCas
- kIntrinsicFlagIsObject = 4,
- // kIntrinsicUnsafePut
- kIntrinsicFlagIsOrdered = 8,
-
- // kIntrinsicDoubleCvt, kIntrinsicFloatCvt.
- kIntrinsicFlagToFloatingPoint = kIntrinsicFlagMin,
};
struct InlineIGetIPutData {
@@ -198,7 +82,6 @@
struct InlineMethod {
InlineMethodOpcode opcode;
- InlineMethodFlags flags;
union {
uint64_t data;
InlineIGetIPutData ifield_data;
@@ -213,12 +96,8 @@
* Analyse method code to determine if the method is a candidate for inlining.
* If it is, record the inlining data.
*
- * @param verifier the method verifier holding data about the method to analyse.
- * @param method placeholder for the inline method data.
* @return true if the method is a candidate for inlining, false otherwise.
*/
- static bool AnalyseMethodCode(verifier::MethodVerifier* verifier, InlineMethod* result)
- REQUIRES_SHARED(Locks::mutator_lock_);
static bool AnalyseMethodCode(ArtMethod* method, InlineMethod* result)
REQUIRES_SHARED(Locks::mutator_lock_);