| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/crankshaft/hydrogen-instructions.h" | 5 #include "src/crankshaft/hydrogen-instructions.h" |
| 6 | 6 |
| 7 #include "src/base/bits.h" | 7 #include "src/base/bits.h" |
| 8 #include "src/base/safe_math.h" | 8 #include "src/base/safe_math.h" |
| 9 #include "src/crankshaft/hydrogen-infer-representation.h" | 9 #include "src/crankshaft/hydrogen-infer-representation.h" |
| 10 #include "src/double.h" | 10 #include "src/double.h" |
| (...skipping 1563 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1574 if (val->representation().IsSmiOrInteger32()) { | 1574 if (val->representation().IsSmiOrInteger32()) { |
| 1575 if (val->representation().Equals(representation())) return val; | 1575 if (val->representation().Equals(representation())) return val; |
| 1576 return Prepend(new(block()->zone()) HChange( | 1576 return Prepend(new(block()->zone()) HChange( |
| 1577 val, representation(), false, false)); | 1577 val, representation(), false, false)); |
| 1578 } | 1578 } |
| 1579 } | 1579 } |
| 1580 if (op() == kMathFloor && value()->IsDiv() && value()->HasOneUse()) { | 1580 if (op() == kMathFloor && value()->IsDiv() && value()->HasOneUse()) { |
| 1581 HDiv* hdiv = HDiv::cast(value()); | 1581 HDiv* hdiv = HDiv::cast(value()); |
| 1582 | 1582 |
| 1583 HValue* left = hdiv->left(); | 1583 HValue* left = hdiv->left(); |
| 1584 if (left->representation().IsInteger32()) { | 1584 if (left->representation().IsInteger32() && !left->CheckFlag(kUint32)) { |
| 1585 // A value with an integer representation does not need to be transformed. | 1585 // A value with an integer representation does not need to be transformed. |
| 1586 } else if (left->IsChange() && HChange::cast(left)->from().IsInteger32()) { | 1586 } else if (left->IsChange() && HChange::cast(left)->from().IsInteger32() && |
| 1587 !HChange::cast(left)->value()->CheckFlag(kUint32)) { |
| 1587 // A change from an integer32 can be replaced by the integer32 value. | 1588 // A change from an integer32 can be replaced by the integer32 value. |
| 1588 left = HChange::cast(left)->value(); | 1589 left = HChange::cast(left)->value(); |
| 1589 } else if (hdiv->observed_input_representation(1).IsSmiOrInteger32()) { | 1590 } else if (hdiv->observed_input_representation(1).IsSmiOrInteger32()) { |
| 1590 left = Prepend(new(block()->zone()) HChange( | 1591 left = Prepend(new(block()->zone()) HChange( |
| 1591 left, Representation::Integer32(), false, false)); | 1592 left, Representation::Integer32(), false, false)); |
| 1592 } else { | 1593 } else { |
| 1593 return this; | 1594 return this; |
| 1594 } | 1595 } |
| 1595 | 1596 |
| 1596 HValue* right = hdiv->right(); | 1597 HValue* right = hdiv->right(); |
| 1597 if (right->IsInteger32Constant()) { | 1598 if (right->IsInteger32Constant()) { |
| 1598 right = Prepend(HConstant::cast(right)->CopyToRepresentation( | 1599 right = Prepend(HConstant::cast(right)->CopyToRepresentation( |
| 1599 Representation::Integer32(), right->block()->zone())); | 1600 Representation::Integer32(), right->block()->zone())); |
| 1600 } else if (right->representation().IsInteger32()) { | 1601 } else if (right->representation().IsInteger32() && |
| 1602 !right->CheckFlag(kUint32)) { |
| 1601 // A value with an integer representation does not need to be transformed. | 1603 // A value with an integer representation does not need to be transformed. |
| 1602 } else if (right->IsChange() && | 1604 } else if (right->IsChange() && |
| 1603 HChange::cast(right)->from().IsInteger32()) { | 1605 HChange::cast(right)->from().IsInteger32() && |
| 1606 !HChange::cast(right)->value()->CheckFlag(kUint32)) { |
| 1604 // A change from an integer32 can be replaced by the integer32 value. | 1607 // A change from an integer32 can be replaced by the integer32 value. |
| 1605 right = HChange::cast(right)->value(); | 1608 right = HChange::cast(right)->value(); |
| 1606 } else if (hdiv->observed_input_representation(2).IsSmiOrInteger32()) { | 1609 } else if (hdiv->observed_input_representation(2).IsSmiOrInteger32()) { |
| 1607 right = Prepend(new(block()->zone()) HChange( | 1610 right = Prepend(new(block()->zone()) HChange( |
| 1608 right, Representation::Integer32(), false, false)); | 1611 right, Representation::Integer32(), false, false)); |
| 1609 } else { | 1612 } else { |
| 1610 return this; | 1613 return this; |
| 1611 } | 1614 } |
| 1612 | 1615 |
| 1613 return Prepend(HMathFloorOfDiv::New( | 1616 return Prepend(HMathFloorOfDiv::New( |
| (...skipping 3077 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4691 case HObjectAccess::kExternalMemory: | 4694 case HObjectAccess::kExternalMemory: |
| 4692 os << "[external-memory]"; | 4695 os << "[external-memory]"; |
| 4693 break; | 4696 break; |
| 4694 } | 4697 } |
| 4695 | 4698 |
| 4696 return os << "@" << access.offset(); | 4699 return os << "@" << access.offset(); |
| 4697 } | 4700 } |
| 4698 | 4701 |
| 4699 } // namespace internal | 4702 } // namespace internal |
| 4700 } // namespace v8 | 4703 } // namespace v8 |
| OLD | NEW |