OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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/compiler/simplified-lowering.h" | 5 #include "src/compiler/simplified-lowering.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 | 8 |
9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
10 #include "src/code-factory.h" | 10 #include "src/code-factory.h" |
(...skipping 721 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
732 // => Float64Cmp | 732 // => Float64Cmp |
733 VisitFloat64Cmp(node); | 733 VisitFloat64Cmp(node); |
734 if (lower()) NodeProperties::ChangeOp(node, Float64Op(node)); | 734 if (lower()) NodeProperties::ChangeOp(node, Float64Op(node)); |
735 } | 735 } |
736 break; | 736 break; |
737 } | 737 } |
738 case IrOpcode::kNumberAdd: | 738 case IrOpcode::kNumberAdd: |
739 case IrOpcode::kNumberSubtract: { | 739 case IrOpcode::kNumberSubtract: { |
740 // Add and subtract reduce to Int32Add/Sub if the inputs | 740 // Add and subtract reduce to Int32Add/Sub if the inputs |
741 // are already integers and all uses are truncating. | 741 // are already integers and all uses are truncating. |
742 if (CanLowerToInt32Binop(node, use)) { | 742 if (CanLowerToWord32AdditiveBinop(node, use)) { |
743 // => signed Int32Add/Sub | 743 // => signed Int32Add/Sub |
744 VisitInt32Binop(node); | 744 VisitInt32Binop(node); |
745 if (lower()) NodeProperties::ChangeOp(node, Int32Op(node)); | 745 if (lower()) NodeProperties::ChangeOp(node, Int32Op(node)); |
746 } else if (CanLowerToUint32Binop(node, use)) { | |
747 // => unsigned Int32Add/Sub | |
748 VisitUint32Binop(node); | |
749 if (lower()) NodeProperties::ChangeOp(node, Uint32Op(node)); | |
750 } else if (CanLowerToWord32AdditiveBinop(node, use)) { | |
751 // => signed Int32Add/Sub, truncating inputs | |
752 ProcessTruncateWord32Input(node, 0); | |
753 ProcessTruncateWord32Input(node, 1); | |
754 SetOutput(node, kMachInt32); | |
755 if (lower()) NodeProperties::ChangeOp(node, Int32Op(node)); | |
756 } else { | 746 } else { |
757 // => Float64Add/Sub | 747 // => Float64Add/Sub |
758 VisitFloat64Binop(node); | 748 VisitFloat64Binop(node); |
759 if (lower()) NodeProperties::ChangeOp(node, Float64Op(node)); | 749 if (lower()) NodeProperties::ChangeOp(node, Float64Op(node)); |
760 } | 750 } |
761 break; | 751 break; |
762 } | 752 } |
763 case IrOpcode::kNumberMultiply: { | 753 case IrOpcode::kNumberMultiply: { |
764 NumberMatcher right(node->InputAt(1)); | 754 NumberMatcher right(node->InputAt(1)); |
765 if (right.IsInRange(-1048576, 1048576)) { // must fit double mantissa. | 755 if (right.IsInRange(-1048576, 1048576)) { // must fit double mantissa. |
(...skipping 903 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1669 ReplaceEffectUses(node, comparison); | 1659 ReplaceEffectUses(node, comparison); |
1670 node->ReplaceInput(0, comparison); | 1660 node->ReplaceInput(0, comparison); |
1671 node->ReplaceInput(1, jsgraph()->SmiConstant(EQUAL)); | 1661 node->ReplaceInput(1, jsgraph()->SmiConstant(EQUAL)); |
1672 node->TrimInputCount(2); | 1662 node->TrimInputCount(2); |
1673 NodeProperties::ChangeOp(node, machine()->IntLessThanOrEqual()); | 1663 NodeProperties::ChangeOp(node, machine()->IntLessThanOrEqual()); |
1674 } | 1664 } |
1675 | 1665 |
1676 } // namespace compiler | 1666 } // namespace compiler |
1677 } // namespace internal | 1667 } // namespace internal |
1678 } // namespace v8 | 1668 } // namespace v8 |
OLD | NEW |