| 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 654 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 665 case IrOpcode::kNumberToInt32: { | 665 case IrOpcode::kNumberToInt32: { |
| 666 MachineTypeUnion use_rep = use & kRepMask; | 666 MachineTypeUnion use_rep = use & kRepMask; |
| 667 Node* input = node->InputAt(0); | 667 Node* input = node->InputAt(0); |
| 668 Type* in_upper = NodeProperties::GetBounds(input).upper; | 668 Type* in_upper = NodeProperties::GetBounds(input).upper; |
| 669 MachineTypeUnion in = GetInfo(input)->output; | 669 MachineTypeUnion in = GetInfo(input)->output; |
| 670 if (in_upper->Is(Type::Signed32())) { | 670 if (in_upper->Is(Type::Signed32())) { |
| 671 // If the input has type int32, pass through representation. | 671 // If the input has type int32, pass through representation. |
| 672 VisitUnop(node, kTypeInt32 | use_rep, kTypeInt32 | use_rep); | 672 VisitUnop(node, kTypeInt32 | use_rep, kTypeInt32 | use_rep); |
| 673 if (lower()) DeferReplacement(node, node->InputAt(0)); | 673 if (lower()) DeferReplacement(node, node->InputAt(0)); |
| 674 } else if ((in & kTypeMask) == kTypeUint32 || | 674 } else if ((in & kTypeMask) == kTypeUint32 || |
| 675 (in & kTypeMask) == kTypeInt32 || | 675 in_upper->Is(Type::Unsigned32())) { |
| 676 in_upper->Is(Type::Unsigned32()) || | 676 // Just change representation if necessary. |
| 677 VisitUnop(node, kTypeUint32 | kRepWord32, kTypeInt32 | kRepWord32); |
| 678 if (lower()) DeferReplacement(node, node->InputAt(0)); |
| 679 } else if ((in & kTypeMask) == kTypeInt32 || |
| 677 (in & kRepMask) == kRepWord32) { | 680 (in & kRepMask) == kRepWord32) { |
| 678 // Just change representation if necessary. | 681 // Just change representation if necessary. |
| 679 VisitUnop(node, kTypeInt32 | kRepWord32, kTypeInt32 | kRepWord32); | 682 VisitUnop(node, kTypeInt32 | kRepWord32, kTypeInt32 | kRepWord32); |
| 680 if (lower()) DeferReplacement(node, node->InputAt(0)); | 683 if (lower()) DeferReplacement(node, node->InputAt(0)); |
| 681 } else { | 684 } else { |
| 682 // Require the input in float64 format and perform truncation. | 685 // Require the input in float64 format and perform truncation. |
| 683 // TODO(turbofan): avoid a truncation with a smi check. | 686 // TODO(turbofan): avoid a truncation with a smi check. |
| 684 VisitUnop(node, kTypeInt32 | kRepFloat64, kTypeInt32 | kRepWord32); | 687 VisitUnop(node, kTypeInt32 | kRepFloat64, kTypeInt32 | kRepWord32); |
| 685 if (lower()) | 688 if (lower()) |
| 686 node->set_op(lowering->machine()->TruncateFloat64ToInt32()); | 689 node->set_op(lowering->machine()->TruncateFloat64ToInt32()); |
| 687 } | 690 } |
| 688 break; | 691 break; |
| 689 } | 692 } |
| 690 case IrOpcode::kNumberToUint32: { | 693 case IrOpcode::kNumberToUint32: { |
| 691 MachineTypeUnion use_rep = use & kRepMask; | 694 MachineTypeUnion use_rep = use & kRepMask; |
| 692 Node* input = node->InputAt(0); | 695 Node* input = node->InputAt(0); |
| 693 Type* in_upper = NodeProperties::GetBounds(input).upper; | 696 Type* in_upper = NodeProperties::GetBounds(input).upper; |
| 694 MachineTypeUnion in = GetInfo(input)->output; | 697 MachineTypeUnion in = GetInfo(input)->output; |
| 695 if (in_upper->Is(Type::Unsigned32())) { | 698 if (in_upper->Is(Type::Unsigned32())) { |
| 696 // If the input has type uint32, pass through representation. | 699 // If the input has type uint32, pass through representation. |
| 697 VisitUnop(node, kTypeUint32 | use_rep, kTypeUint32 | use_rep); | 700 VisitUnop(node, kTypeUint32 | use_rep, kTypeUint32 | use_rep); |
| 698 if (lower()) DeferReplacement(node, node->InputAt(0)); | 701 if (lower()) DeferReplacement(node, node->InputAt(0)); |
| 699 } else if ((in & kTypeMask) == kTypeUint32 || | 702 } else if ((in & kTypeMask) == kTypeUint32 || |
| 700 (in & kTypeMask) == kTypeInt32 || | 703 in_upper->Is(Type::Unsigned32())) { |
| 701 in_upper->Is(Type::Signed32()) || | 704 // Just change representation if necessary. |
| 705 VisitUnop(node, kTypeUint32 | kRepWord32, kTypeUint32 | kRepWord32); |
| 706 if (lower()) DeferReplacement(node, node->InputAt(0)); |
| 707 } else if ((in & kTypeMask) == kTypeInt32 || |
| 702 (in & kRepMask) == kRepWord32) { | 708 (in & kRepMask) == kRepWord32) { |
| 703 // Just change representation if necessary. | 709 // Just change representation if necessary. |
| 704 VisitUnop(node, kTypeUint32 | kRepWord32, kTypeUint32 | kRepWord32); | 710 VisitUnop(node, kTypeInt32 | kRepWord32, kTypeUint32 | kRepWord32); |
| 705 if (lower()) DeferReplacement(node, node->InputAt(0)); | 711 if (lower()) DeferReplacement(node, node->InputAt(0)); |
| 706 } else { | 712 } else { |
| 707 // Require the input in float64 format and perform truncation. | 713 // Require the input in float64 format and perform truncation. |
| 708 // TODO(turbofan): avoid a truncation with a smi check. | 714 // TODO(turbofan): avoid a truncation with a smi check. |
| 709 VisitUnop(node, kTypeUint32 | kRepFloat64, kTypeUint32 | kRepWord32); | 715 VisitUnop(node, kTypeUint32 | kRepFloat64, kTypeUint32 | kRepWord32); |
| 710 if (lower()) | 716 if (lower()) |
| 711 node->set_op(lowering->machine()->TruncateFloat64ToInt32()); | 717 node->set_op(lowering->machine()->TruncateFloat64ToInt32()); |
| 712 } | 718 } |
| 713 break; | 719 break; |
| 714 } | 720 } |
| (...skipping 683 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1398 | 1404 |
| 1399 void SimplifiedLowering::DoStringLessThanOrEqual(Node* node) { | 1405 void SimplifiedLowering::DoStringLessThanOrEqual(Node* node) { |
| 1400 node->set_op(machine()->IntLessThanOrEqual()); | 1406 node->set_op(machine()->IntLessThanOrEqual()); |
| 1401 node->ReplaceInput(0, StringComparison(node, true)); | 1407 node->ReplaceInput(0, StringComparison(node, true)); |
| 1402 node->ReplaceInput(1, jsgraph()->SmiConstant(EQUAL)); | 1408 node->ReplaceInput(1, jsgraph()->SmiConstant(EQUAL)); |
| 1403 } | 1409 } |
| 1404 | 1410 |
| 1405 } // namespace compiler | 1411 } // namespace compiler |
| 1406 } // namespace internal | 1412 } // namespace internal |
| 1407 } // namespace v8 | 1413 } // namespace v8 |
| OLD | NEW |