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); |