| Index: src/hydrogen-instructions.cc
|
| diff --git a/src/hydrogen-instructions.cc b/src/hydrogen-instructions.cc
|
| index 5fc65ce8034ca6d7e764e41da2f447dced9aef61..05e919688f3b9d738ac04f93d931c14f58a5e2d0 100644
|
| --- a/src/hydrogen-instructions.cc
|
| +++ b/src/hydrogen-instructions.cc
|
| @@ -1291,7 +1291,15 @@ HValue* HUnaryMathOperation::Canonicalize() {
|
|
|
| // If the input is integer32 then we replace the round instruction
|
| // with its input.
|
| - if (val->representation().IsSmiOrInteger32()) return val;
|
| + if (val->representation().IsSmiOrInteger32()) {
|
| + if (!val->representation().Equals(representation())) {
|
| + HChange* result = new(block()->zone()) HChange(
|
| + val, representation(), false, false, false);
|
| + result->InsertBefore(this);
|
| + return result;
|
| + }
|
| + return val;
|
| + }
|
| }
|
|
|
| if (op() == kMathFloor) {
|
| @@ -1300,7 +1308,15 @@ HValue* HUnaryMathOperation::Canonicalize() {
|
|
|
| // If the input is integer32 then we replace the floor instruction
|
| // with its input.
|
| - if (val->representation().IsSmiOrInteger32()) return val;
|
| + if (val->representation().IsSmiOrInteger32()) {
|
| + if (!val->representation().Equals(representation())) {
|
| + HChange* result = new(block()->zone()) HChange(
|
| + val, representation(), false, false, false);
|
| + result->InsertBefore(this);
|
| + return result;
|
| + }
|
| + return val;
|
| + }
|
|
|
| if (val->IsDiv() && (val->UseCount() == 1)) {
|
| HDiv* hdiv = HDiv::cast(val);
|
|
|