Chromium Code Reviews| Index: runtime/vm/flow_graph_optimizer.cc |
| =================================================================== |
| --- runtime/vm/flow_graph_optimizer.cc (revision 38266) |
| +++ runtime/vm/flow_graph_optimizer.cc (working copy) |
| @@ -2020,6 +2020,7 @@ |
| switch (op_kind) { |
| case Token::kADD: |
| case Token::kSUB: |
| + case Token::kMUL: |
| if (HasOnlyTwoOf(ic_data, kSmiCid)) { |
| // Don't generate smi code if the IC data is marked because |
| // of an overflow. |
| @@ -2036,7 +2037,8 @@ |
| operands_type = kDoubleCid; |
| } else if (HasOnlyTwoOf(ic_data, kFloat32x4Cid)) { |
| operands_type = kFloat32x4Cid; |
| - } else if (HasOnlyTwoOf(ic_data, kInt32x4Cid)) { |
| + } else if ((op_kind != Token::kMUL) && |
| + HasOnlyTwoOf(ic_data, kInt32x4Cid)) { |
|
srdjan
2014/07/16 16:55:23
How do you prevent repeated deoptimizations? Maybe
regis
2014/07/16 23:12:41
It's done above in the same way as for ADD and SUB
|
| operands_type = kInt32x4Cid; |
|
srdjan
2014/07/16 16:55:23
Optional alternative (something like this):
} els
regis
2014/07/16 23:12:41
Done, but assert not kMUL, rather than return fals
|
| } else if (HasOnlyTwoOf(ic_data, kFloat64x2Cid)) { |
| operands_type = kFloat64x2Cid; |
| @@ -2044,23 +2046,6 @@ |
| return false; |
| } |
| break; |
| - case Token::kMUL: |
| - if (HasOnlyTwoOf(ic_data, kSmiCid)) { |
| - // Don't generate smi code if the IC data is marked because of an |
| - // overflow. |
| - // TODO(fschneider): Add unboxed mint multiplication. |
| - if (ic_data.HasDeoptReason(ICData::kDeoptBinarySmiOp)) return false; |
| - operands_type = kSmiCid; |
| - } else if (ShouldSpecializeForDouble(ic_data)) { |
| - operands_type = kDoubleCid; |
| - } else if (HasOnlyTwoOf(ic_data, kFloat32x4Cid)) { |
| - operands_type = kFloat32x4Cid; |
| - } else if (HasOnlyTwoOf(ic_data, kFloat64x2Cid)) { |
| - operands_type = kFloat64x2Cid; |
| - } else { |
| - return false; |
| - } |
| - break; |
| case Token::kDIV: |
| if (ShouldSpecializeForDouble(ic_data) || |
| HasOnlyTwoOf(ic_data, kSmiCid)) { |