Chromium Code Reviews| Index: runtime/vm/aot_optimizer.cc |
| diff --git a/runtime/vm/aot_optimizer.cc b/runtime/vm/aot_optimizer.cc |
| index 306fce4fc6919dea0052d6e7d50ebf788ac17cc8..868c821bb8d535a0fa266bb42b42ec07508e1294 100644 |
| --- a/runtime/vm/aot_optimizer.cc |
| +++ b/runtime/vm/aot_optimizer.cc |
| @@ -501,7 +501,7 @@ bool AotOptimizer::TryReplaceWithIndexedOp(InstanceCallInstr* call) { |
| if (!call->HasICData()) return false; |
| const ICData& ic_data = |
| ICData::Handle(Z, call->ic_data()->AsUnaryClassChecks()); |
| - if (ic_data.NumberOfChecks() != 1) { |
| + if (!ic_data.NumberOfChecksIs(1)) { |
| return false; |
| } |
| return FlowGraphInliner::TryReplaceInstanceCallWithInline( |
| @@ -1303,7 +1303,8 @@ RawBool* AotOptimizer::InstanceOfAsBool( |
| Class& cls = Class::Handle(Z); |
| bool results_differ = false; |
| - for (int i = 0; i < ic_data.NumberOfChecks(); i++) { |
| + intptr_t number_of_checks = ic_data.NumberOfChecks(); |
|
kustermann
2017/03/06 15:31:47
const - also further down
|
| + for (int i = 0; i < number_of_checks; i++) { |
| cls = class_table.At(ic_data.GetReceiverClassIdAt(i)); |
| if (cls.NumTypeArguments() > 0) { |
| return Bool::null(); |
| @@ -1559,12 +1560,12 @@ void AotOptimizer::ReplaceWithInstanceOf(InstanceCallInstr* call) { |
| const ICData& unary_checks = |
| ICData::ZoneHandle(Z, call->ic_data()->AsUnaryClassChecks()); |
| - if ((unary_checks.NumberOfChecks() > 0) && |
| - (unary_checks.NumberOfChecks() <= FLAG_max_polymorphic_checks)) { |
| + intptr_t number_of_checks = unary_checks.NumberOfChecks(); |
| + if (number_of_checks > 0 && number_of_checks <= FLAG_max_polymorphic_checks) { |
| ZoneGrowableArray<intptr_t>* results = |
| - new (Z) ZoneGrowableArray<intptr_t>(unary_checks.NumberOfChecks() * 2); |
| + new (Z) ZoneGrowableArray<intptr_t>(number_of_checks * 2); |
| InstanceOfAsBool(unary_checks, type, results); |
| - if (results->length() == unary_checks.NumberOfChecks() * 2) { |
| + if (results->length() == number_of_checks * 2) { |
| const bool can_deopt = TryExpandTestCidsResult(results, type); |
| if (can_deopt && !IsAllowedForInlining(call->deopt_id())) { |
| // Guard against repeated speculative inlining. |
| @@ -1597,10 +1598,10 @@ void AotOptimizer::ReplaceWithTypeCast(InstanceCallInstr* call) { |
| ASSERT(!type.IsMalformedOrMalbounded()); |
| const ICData& unary_checks = |
| ICData::ZoneHandle(Z, call->ic_data()->AsUnaryClassChecks()); |
| - if ((unary_checks.NumberOfChecks() > 0) && |
| - (unary_checks.NumberOfChecks() <= FLAG_max_polymorphic_checks)) { |
| + intptr_t number_of_checks = unary_checks.NumberOfChecks(); |
| + if (number_of_checks > 0 && number_of_checks <= FLAG_max_polymorphic_checks) { |
| ZoneGrowableArray<intptr_t>* results = |
| - new (Z) ZoneGrowableArray<intptr_t>(unary_checks.NumberOfChecks() * 2); |
| + new (Z) ZoneGrowableArray<intptr_t>(number_of_checks * 2); |
| const Bool& as_bool = |
| Bool::ZoneHandle(Z, InstanceOfAsBool(unary_checks, type, results)); |
| if (as_bool.raw() == Bool::True().raw()) { |
| @@ -1665,7 +1666,7 @@ bool AotOptimizer::TryInlineFieldAccess(InstanceCallInstr* call) { |
| const ICData& unary_checks = |
| ICData::Handle(Z, call->ic_data()->AsUnaryClassChecks()); |
| - if ((unary_checks.NumberOfChecks() > 0) && (op_kind == Token::kSET) && |
| + if (!unary_checks.NumberOfChecksIs(0) && (op_kind == Token::kSET) && |
| TryInlineInstanceSetter(call, unary_checks)) { |
| return true; |
| } |
| @@ -1706,8 +1707,8 @@ void AotOptimizer::VisitInstanceCall(InstanceCallInstr* instr) { |
| const ICData& unary_checks = |
| ICData::ZoneHandle(Z, instr->ic_data()->AsUnaryClassChecks()); |
| - if (IsAllowedForInlining(instr->deopt_id()) && |
| - (unary_checks.NumberOfChecks() > 0)) { |
| + intptr_t number_of_checks = unary_checks.NumberOfChecks(); |
| + if (IsAllowedForInlining(instr->deopt_id()) && number_of_checks > 0) { |
| if ((op_kind == Token::kINDEX) && TryReplaceWithIndexedOp(instr)) { |
| return; |
| } |
| @@ -1737,8 +1738,7 @@ void AotOptimizer::VisitInstanceCall(InstanceCallInstr* instr) { |
| } |
| } |
| - bool has_one_target = |
| - (unary_checks.NumberOfChecks() > 0) && unary_checks.HasOneTarget(); |
| + bool has_one_target = number_of_checks > 0 && unary_checks.HasOneTarget(); |
| if (has_one_target) { |
| // Check if the single target is a polymorphic target, if it is, |
| // we don't have one target. |
| @@ -1932,7 +1932,7 @@ void AotOptimizer::VisitInstanceCall(InstanceCallInstr* instr) { |
| instr->ReplaceWith(call, current_iterator()); |
| return; |
| } else if ((ic_data.raw() != ICData::null()) && |
| - (ic_data.NumberOfChecks() > 0)) { |
| + !ic_data.NumberOfChecksIs(0)) { |
| PolymorphicInstanceCallInstr* call = |
| new (Z) PolymorphicInstanceCallInstr(instr, ic_data, |
| /* with_checks = */ true, |
| @@ -2021,7 +2021,7 @@ void AotOptimizer::VisitStaticCall(StaticCallInstr* call) { |
| // We can handle only monomorphic min/max call sites with both arguments |
| // being either doubles or smis. |
| if (CanUnboxDouble() && call->HasICData() && |
| - (call->ic_data()->NumberOfChecks() == 1)) { |
| + call->ic_data()->NumberOfChecksIs(1)) { |
| const ICData& ic_data = *call->ic_data(); |
| intptr_t result_cid = kIllegalCid; |
| if (ICDataHasReceiverArgumentClassIds(ic_data, kDoubleCid, |
| @@ -2047,7 +2047,7 @@ void AotOptimizer::VisitStaticCall(StaticCallInstr* call) { |
| break; |
| } |
| case MethodRecognizer::kDoubleFromInteger: { |
| - if (call->HasICData() && (call->ic_data()->NumberOfChecks() == 1)) { |
| + if (call->HasICData() && call->ic_data()->NumberOfChecksIs(1)) { |
| const ICData& ic_data = *call->ic_data(); |
| if (CanUnboxDouble()) { |
| if (ArgIsAlways(kSmiCid, ic_data, 1)) { |
| @@ -2090,7 +2090,7 @@ bool AotOptimizer::TryInlineInstanceSetter(InstanceCallInstr* instr, |
| } |
| ASSERT(instr->HasICData()); |
| - if (unary_ic_data.NumberOfChecks() == 0) { |
| + if (unary_ic_data.NumberOfChecksIs(0)) { |
| // No type feedback collected. |
| return false; |
| } |