| Index: runtime/vm/aot_optimizer.cc
|
| diff --git a/runtime/vm/aot_optimizer.cc b/runtime/vm/aot_optimizer.cc
|
| index c1d1b8fd604842127f94447cb1b3ae3ecb8fe4ff..e46d5a3069e7b8061a0de219b2eb9ecf68ef19d2 100644
|
| --- a/runtime/vm/aot_optimizer.cc
|
| +++ b/runtime/vm/aot_optimizer.cc
|
| @@ -216,12 +216,16 @@ bool AotOptimizer::TryCreateICData(InstanceCallInstr* call) {
|
| }
|
|
|
| const Token::Kind op_kind = call->token_kind();
|
| - if (Token::IsRelationalOperator(op_kind) ||
|
| - Token::IsEqualityOperator(op_kind) ||
|
| - Token::IsBinaryOperator(op_kind)) {
|
| - // Guess cid: if one of the inputs is a number assume that the other
|
| - // is a number of same type.
|
| - if (FLAG_guess_icdata_cid) {
|
| + if (FLAG_guess_icdata_cid) {
|
| + if (Token::IsBinaryBitwiseOperator(op_kind)) {
|
| + class_ids[0] = kSmiCid;
|
| + class_ids[1] = kSmiCid;
|
| + }
|
| + if (Token::IsRelationalOperator(op_kind) ||
|
| + Token::IsEqualityOperator(op_kind) ||
|
| + Token::IsBinaryOperator(op_kind)) {
|
| + // Guess cid: if one of the inputs is a number assume that the other
|
| + // is a number of same type.
|
| const intptr_t cid_0 = class_ids[0];
|
| const intptr_t cid_1 = class_ids[1];
|
| if ((cid_0 == kDynamicCid) && (IsNumberCid(cid_1))) {
|
| @@ -1935,6 +1939,8 @@ void AotOptimizer::VisitInstanceCall(InstanceCallInstr* instr) {
|
| }
|
| break;
|
| }
|
| + case Token::kSHL:
|
| + case Token::kSHR:
|
| case Token::kBIT_OR:
|
| case Token::kBIT_XOR:
|
| case Token::kBIT_AND:
|
|
|