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