| Index: runtime/vm/flow_graph_optimizer.cc
|
| diff --git a/runtime/vm/flow_graph_optimizer.cc b/runtime/vm/flow_graph_optimizer.cc
|
| index f5333546f2ed98d51cc45fded39181aab427b875..2479ed0e257d393c1b5e09c27ecdbe2fc7374afd 100644
|
| --- a/runtime/vm/flow_graph_optimizer.cc
|
| +++ b/runtime/vm/flow_graph_optimizer.cc
|
| @@ -63,6 +63,13 @@ static bool CanUnboxDouble() {
|
| }
|
|
|
|
|
| +static bool ShouldInlineInt64ArrayOps() {
|
| +#if defined(TARGET_ARCH_X64)
|
| + return true;
|
| +#endif
|
| + return false;
|
| +}
|
| +
|
| static bool CanConvertUnboxedMintToDouble() {
|
| #if defined(TARGET_ARCH_IA32)
|
| return true;
|
| @@ -1173,6 +1180,10 @@ static intptr_t MethodKindToCid(MethodRecognizer::Kind kind) {
|
| case MethodRecognizer::kUint32ArraySetIndexed:
|
| return kTypedDataUint32ArrayCid;
|
|
|
| + case MethodRecognizer::kInt64ArrayGetIndexed:
|
| + case MethodRecognizer::kInt64ArraySetIndexed:
|
| + return kTypedDataInt64ArrayCid;
|
| +
|
| case MethodRecognizer::kFloat32x4ArrayGetIndexed:
|
| case MethodRecognizer::kFloat32x4ArraySetIndexed:
|
| return kTypedDataFloat32x4ArrayCid;
|
| @@ -1297,6 +1308,7 @@ bool FlowGraphOptimizer::InlineSetIndexed(
|
| case kTypedDataUint16ArrayCid:
|
| case kTypedDataInt32ArrayCid:
|
| case kTypedDataUint32ArrayCid:
|
| + case kTypedDataInt64ArrayCid:
|
| ASSERT(value_type.IsIntType());
|
| // Fall through.
|
| case kTypedDataFloat32ArrayCid:
|
| @@ -1452,6 +1464,11 @@ bool FlowGraphOptimizer::TryInlineRecognizedMethod(intptr_t receiver_cid,
|
| if (!CanUnboxInt32()) return false;
|
| return InlineGetIndexed(kind, call, receiver, ic_data, entry, last);
|
|
|
| + case MethodRecognizer::kInt64ArrayGetIndexed:
|
| + if (!ShouldInlineInt64ArrayOps()) {
|
| + return false;
|
| + }
|
| + return InlineGetIndexed(kind, call, receiver, ic_data, entry, last);
|
| // Recognized []= operators.
|
| case MethodRecognizer::kObjectArraySetIndexed:
|
| case MethodRecognizer::kGrowableArraySetIndexed:
|
| @@ -1483,6 +1500,12 @@ bool FlowGraphOptimizer::TryInlineRecognizedMethod(intptr_t receiver_cid,
|
| }
|
| return InlineSetIndexed(kind, target, call, receiver, token_pos,
|
| &ic_data, value_check, entry, last);
|
| + case MethodRecognizer::kInt64ArraySetIndexed:
|
| + if (!ShouldInlineInt64ArrayOps()) {
|
| + return false;
|
| + }
|
| + return InlineSetIndexed(kind, target, call, receiver, token_pos,
|
| + &ic_data, value_check, entry, last);
|
| case MethodRecognizer::kFloat32ArraySetIndexed:
|
| case MethodRecognizer::kFloat64ArraySetIndexed:
|
| if (!CanUnboxDouble()) {
|
|
|