Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(437)

Side by Side Diff: src/compiler/simplified-lowering.cc

Issue 1461963002: [turbofan] Simplify NumberTo(U)Int32 handling in representation inference. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/compiler/representation-change.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 822 matching lines...) Expand 10 before | Expand all | Expand 10 after
833 case IrOpcode::kNumberShiftRightLogical: { 833 case IrOpcode::kNumberShiftRightLogical: {
834 VisitBinop(node, UseInfo::TruncatingWord32(), 834 VisitBinop(node, UseInfo::TruncatingWord32(),
835 UseInfo::TruncatingWord32(), kMachUint32); 835 UseInfo::TruncatingWord32(), kMachUint32);
836 if (lower()) lowering->DoShift(node, lowering->machine()->Word32Shr()); 836 if (lower()) lowering->DoShift(node, lowering->machine()->Word32Shr());
837 break; 837 break;
838 } 838 }
839 case IrOpcode::kNumberToInt32: { 839 case IrOpcode::kNumberToInt32: {
840 MachineTypeUnion use_rep = use & kRepMask; 840 MachineTypeUnion use_rep = use & kRepMask;
841 Node* input = node->InputAt(0); 841 Node* input = node->InputAt(0);
842 Type* in_upper = NodeProperties::GetType(input); 842 Type* in_upper = NodeProperties::GetType(input);
843 MachineTypeUnion in = GetInfo(input)->output;
844 if (in_upper->Is(Type::Signed32())) { 843 if (in_upper->Is(Type::Signed32())) {
845 // If the input has type int32, pass through representation. 844 // If the input has type int32, pass through representation.
846 VisitUnop(node, UseInfoFromRepresentation(use_rep), 845 VisitUnop(node, UseInfoFromRepresentation(use_rep),
847 kTypeInt32 | use_rep); 846 kTypeInt32 | use_rep);
848 if (lower()) DeferReplacement(node, node->InputAt(0)); 847 if (lower()) DeferReplacement(node, node->InputAt(0));
849 } else if ((in & kTypeMask) == kTypeUint32 || 848 } else {
850 in_upper->Is(Type::Unsigned32())) {
851 // Just change representation if necessary. 849 // Just change representation if necessary.
852 VisitUnop(node, UseInfo::TruncatingWord32(), kTypeInt32 | kRepWord32); 850 VisitUnop(node, UseInfo::TruncatingWord32(), kMachInt32);
853 if (lower()) DeferReplacement(node, node->InputAt(0)); 851 if (lower()) DeferReplacement(node, node->InputAt(0));
854 } else if ((in & kTypeMask) == kTypeInt32 ||
855 (in & kRepMask) == kRepWord32) {
856 // Just change representation if necessary.
857 VisitUnop(node, UseInfo::TruncatingWord32(), kTypeInt32 | kRepWord32);
858 if (lower()) DeferReplacement(node, node->InputAt(0));
859 } else {
860 // Require the input in float64 format and perform truncation.
861 // TODO(turbofan): avoid a truncation with a smi check.
862 VisitUnop(node, UseInfo::Float64TruncatingToWord32(),
863 kTypeInt32 | kRepWord32);
864 if (lower()) {
865 NodeProperties::ChangeOp(
866 node, lowering->machine()->TruncateFloat64ToInt32(
867 TruncationMode::kJavaScript));
868 }
869 } 852 }
870 break; 853 break;
871 } 854 }
872 case IrOpcode::kNumberToUint32: { 855 case IrOpcode::kNumberToUint32: {
873 MachineTypeUnion use_rep = use & kRepMask; 856 MachineTypeUnion use_rep = use & kRepMask;
874 Node* input = node->InputAt(0); 857 Node* input = node->InputAt(0);
875 Type* in_upper = NodeProperties::GetType(input); 858 Type* in_upper = NodeProperties::GetType(input);
876 MachineTypeUnion in = GetInfo(input)->output;
877 if (in_upper->Is(Type::Unsigned32())) { 859 if (in_upper->Is(Type::Unsigned32())) {
878 // If the input has type uint32, pass through representation. 860 // If the input has type uint32, pass through representation.
879 VisitUnop(node, UseInfoFromRepresentation(use_rep), 861 VisitUnop(node, UseInfoFromRepresentation(use_rep),
880 kTypeUint32 | use_rep); 862 kTypeUint32 | use_rep);
881 if (lower()) DeferReplacement(node, node->InputAt(0)); 863 if (lower()) DeferReplacement(node, node->InputAt(0));
882 } else if ((in & kTypeMask) == kTypeInt32 || 864 } else {
883 in_upper->Is(Type::Signed32())) {
884 // Just change representation if necessary. 865 // Just change representation if necessary.
885 VisitUnop(node, UseInfo::TruncatingWord32(), 866 VisitUnop(node, UseInfo::TruncatingWord32(), kMachUint32);
886 kTypeUint32 | kRepWord32);
887 if (lower()) DeferReplacement(node, node->InputAt(0)); 867 if (lower()) DeferReplacement(node, node->InputAt(0));
888 } else if ((in & kTypeMask) == kTypeUint32 ||
889 (in & kRepMask) == kRepWord32) {
890 // Just change representation if necessary.
891 VisitUnop(node, UseInfo::TruncatingWord32(),
892 kTypeUint32 | kRepWord32);
893 if (lower()) DeferReplacement(node, node->InputAt(0));
894 } else {
895 // Require the input in float64 format and perform truncation.
896 // TODO(turbofan): avoid a truncation with a smi check.
897 VisitUnop(node, UseInfo::Float64TruncatingToWord32(),
898 kTypeUint32 | kRepWord32);
899 if (lower()) {
900 NodeProperties::ChangeOp(
901 node, lowering->machine()->TruncateFloat64ToInt32(
902 TruncationMode::kJavaScript));
903 }
904 } 868 }
905 break; 869 break;
906 } 870 }
907 case IrOpcode::kNumberIsHoleNaN: { 871 case IrOpcode::kNumberIsHoleNaN: {
908 VisitUnop(node, UseInfo::Float64(), kMachBool); 872 VisitUnop(node, UseInfo::Float64(), kMachBool);
909 if (lower()) { 873 if (lower()) {
910 // NumberIsHoleNaN(x) => Word32Equal(Float64ExtractLowWord32(x), 874 // NumberIsHoleNaN(x) => Word32Equal(Float64ExtractLowWord32(x),
911 // #HoleNaNLower32) 875 // #HoleNaNLower32)
912 node->ReplaceInput(0, 876 node->ReplaceInput(0,
913 jsgraph_->graph()->NewNode( 877 jsgraph_->graph()->NewNode(
(...skipping 791 matching lines...) Expand 10 before | Expand all | Expand 10 after
1705 ReplaceEffectUses(node, comparison); 1669 ReplaceEffectUses(node, comparison);
1706 node->ReplaceInput(0, comparison); 1670 node->ReplaceInput(0, comparison);
1707 node->ReplaceInput(1, jsgraph()->SmiConstant(EQUAL)); 1671 node->ReplaceInput(1, jsgraph()->SmiConstant(EQUAL));
1708 node->TrimInputCount(2); 1672 node->TrimInputCount(2);
1709 NodeProperties::ChangeOp(node, machine()->IntLessThanOrEqual()); 1673 NodeProperties::ChangeOp(node, machine()->IntLessThanOrEqual());
1710 } 1674 }
1711 1675
1712 } // namespace compiler 1676 } // namespace compiler
1713 } // namespace internal 1677 } // namespace internal
1714 } // namespace v8 1678 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/representation-change.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698