| Index: runtime/vm/intermediate_language_dbc.cc
|
| diff --git a/runtime/vm/intermediate_language_dbc.cc b/runtime/vm/intermediate_language_dbc.cc
|
| index 3838de2cbf23169b146711bf97fbfdd8a6d999b3..10ff36d7d365b4fd0878e46cd433b415d59759a1 100644
|
| --- a/runtime/vm/intermediate_language_dbc.cc
|
| +++ b/runtime/vm/intermediate_language_dbc.cc
|
| @@ -245,44 +245,38 @@ EMIT_NATIVE_CODE(PolymorphicInstanceCall,
|
| const CallTargets& ic_data = targets();
|
|
|
| // Push the target onto the stack.
|
| - if (with_checks()) {
|
| - const intptr_t length = ic_data.length();
|
| - if (!Utils::IsUint(8, length)) {
|
| - Unsupported(compiler);
|
| - UNREACHABLE();
|
| - }
|
| - bool using_ranges = false;
|
| - for (intptr_t i = 0; i < length; i++) {
|
| - if (ic_data[i].cid_start != ic_data[i].cid_end) {
|
| - using_ranges = true;
|
| - break;
|
| - }
|
| + const intptr_t length = ic_data.length();
|
| + if (!Utils::IsUint(8, length)) {
|
| + Unsupported(compiler);
|
| + UNREACHABLE();
|
| + }
|
| + bool using_ranges = false;
|
| + for (intptr_t i = 0; i < length; i++) {
|
| + if (ic_data[i].cid_start != ic_data[i].cid_end) {
|
| + using_ranges = true;
|
| + break;
|
| }
|
| + }
|
|
|
| - if (using_ranges) {
|
| - __ PushPolymorphicInstanceCallByRange(instance_call()->ArgumentCount(),
|
| - length);
|
| - } else {
|
| - __ PushPolymorphicInstanceCall(instance_call()->ArgumentCount(), length);
|
| - }
|
| - for (intptr_t i = 0; i < length; i++) {
|
| - const Function& target = *ic_data[i].target;
|
| - intptr_t cid_start = ic_data[i].cid_start;
|
| - intptr_t cid_end = ic_data[i].cid_end;
|
| + if (using_ranges) {
|
| + __ PushPolymorphicInstanceCallByRange(instance_call()->ArgumentCount(),
|
| + length);
|
| + } else {
|
| + __ PushPolymorphicInstanceCall(instance_call()->ArgumentCount(), length);
|
| + }
|
| + for (intptr_t i = 0; i < length; i++) {
|
| + const Function& target = *ic_data[i].target;
|
| + intptr_t cid_start = ic_data[i].cid_start;
|
| + intptr_t cid_end = ic_data[i].cid_end;
|
|
|
| - __ Nop(compiler->ToEmbeddableCid(cid_start, this));
|
| - if (using_ranges) {
|
| - __ Nop(compiler->ToEmbeddableCid(1 + cid_end - cid_start, this));
|
| - }
|
| - __ Nop(__ AddConstant(target));
|
| + __ Nop(compiler->ToEmbeddableCid(cid_start, this));
|
| + if (using_ranges) {
|
| + __ Nop(compiler->ToEmbeddableCid(1 + cid_end - cid_start, this));
|
| }
|
| - compiler->EmitDeopt(deopt_id(),
|
| - ICData::kDeoptPolymorphicInstanceCallTestFail, 0);
|
| - } else {
|
| - ASSERT(targets().HasSingleTarget());
|
| - const Function& target = targets().FirstTarget();
|
| - __ PushConstant(target);
|
| + __ Nop(__ AddConstant(target));
|
| }
|
| + compiler->EmitDeopt(deopt_id(), ICData::kDeoptPolymorphicInstanceCallTestFail,
|
| + 0);
|
|
|
| // Call the function.
|
| __ StaticCall(instance_call()->ArgumentCount(), argdesc_kidx);
|
|
|