| Index: src/hydrogen-instructions.cc
|
| diff --git a/src/hydrogen-instructions.cc b/src/hydrogen-instructions.cc
|
| index 1c3e1f3956d3e7cba96055054d8a2321a54998f2..60b49b0879f3801d48c20f08a2f63d0b516260b0 100644
|
| --- a/src/hydrogen-instructions.cc
|
| +++ b/src/hydrogen-instructions.cc
|
| @@ -2672,8 +2672,12 @@ std::ostream& HEnterInlined::PrintDataTo(std::ostream& os) const { // NOLINT
|
|
|
|
|
| static bool IsInteger32(double value) {
|
| - double roundtrip_value = static_cast<double>(static_cast<int32_t>(value));
|
| - return bit_cast<int64_t>(roundtrip_value) == bit_cast<int64_t>(value);
|
| + if (value >= std::numeric_limits<int32_t>::min() &&
|
| + value <= std::numeric_limits<int32_t>::max()) {
|
| + double roundtrip_value = static_cast<double>(static_cast<int32_t>(value));
|
| + return bit_cast<int64_t>(roundtrip_value) == bit_cast<int64_t>(value);
|
| + }
|
| + return false;
|
| }
|
|
|
|
|
| @@ -2779,7 +2783,7 @@ HConstant::HConstant(double double_value, Representation r,
|
| !std::isnan(double_value)) |
|
| IsUndetectableField::encode(false) |
|
| InstanceTypeField::encode(kUnknownInstanceType)),
|
| - int32_value_(DoubleToInt32(double_value)),
|
| + int32_value_(HasInteger32Value() ? DoubleToInt32(double_value) : 0),
|
| double_value_(double_value) {
|
| bit_field_ = HasSmiValueField::update(
|
| bit_field_, HasInteger32Value() && Smi::IsValid(int32_value_));
|
|
|