| Index: src/hydrogen-instructions.cc
|
| diff --git a/src/hydrogen-instructions.cc b/src/hydrogen-instructions.cc
|
| index 997b7c2fda9b29455d03faac59c5a49a60d18d5c..5fc65ce8034ca6d7e764e41da2f447dced9aef61 100644
|
| --- a/src/hydrogen-instructions.cc
|
| +++ b/src/hydrogen-instructions.cc
|
| @@ -1285,6 +1285,15 @@ static HValue* SimplifiedDividendForMathFloorOfDiv(HValue* dividend) {
|
|
|
|
|
| HValue* HUnaryMathOperation::Canonicalize() {
|
| + if (op() == kMathRound) {
|
| + HValue* val = value();
|
| + if (val->IsChange()) val = HChange::cast(val)->value();
|
| +
|
| + // If the input is integer32 then we replace the round instruction
|
| + // with its input.
|
| + if (val->representation().IsSmiOrInteger32()) return val;
|
| + }
|
| +
|
| if (op() == kMathFloor) {
|
| HValue* val = value();
|
| if (val->IsChange()) val = HChange::cast(val)->value();
|
| @@ -3313,7 +3322,11 @@ Representation HUnaryMathOperation::RepresentationFromInputs() {
|
| // If any of the actual input representation is more general than what we
|
| // have so far but not Tagged, use that representation instead.
|
| Representation input_rep = value()->representation();
|
| - if (!input_rep.IsTagged()) rep = rep.generalize(input_rep);
|
| + if (!input_rep.IsTagged()) {
|
| + rep = rep.generalize(input_rep);
|
| + } else if (flexible_int()) {
|
| + rep = Representation::Integer32();
|
| + }
|
| return rep;
|
| }
|
|
|
|
|