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/address-map.h" | 9 #include "src/address-map.h" |
10 #include "src/base/bits.h" | 10 #include "src/base/bits.h" |
(...skipping 821 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
832 } | 832 } |
833 | 833 |
834 // Infer representation for phi-like nodes. | 834 // Infer representation for phi-like nodes. |
835 MachineRepresentation GetOutputInfoForPhi(Node* node, Truncation use) { | 835 MachineRepresentation GetOutputInfoForPhi(Node* node, Truncation use) { |
836 // Compute the representation. | 836 // Compute the representation. |
837 Type* type = TypeOf(node); | 837 Type* type = TypeOf(node); |
838 if (type->Is(Type::None())) { | 838 if (type->Is(Type::None())) { |
839 return MachineRepresentation::kNone; | 839 return MachineRepresentation::kNone; |
840 } else if (type->Is(Type::Signed32()) || type->Is(Type::Unsigned32())) { | 840 } else if (type->Is(Type::Signed32()) || type->Is(Type::Unsigned32())) { |
841 return MachineRepresentation::kWord32; | 841 return MachineRepresentation::kWord32; |
842 } else if (use.IsUsedAsWord32()) { | 842 } else if (type->Is(Type::NumberOrOddball()) && use.IsUsedAsWord32()) { |
843 return MachineRepresentation::kWord32; | 843 return MachineRepresentation::kWord32; |
844 } else if (type->Is(Type::Boolean())) { | 844 } else if (type->Is(Type::Boolean())) { |
845 return MachineRepresentation::kBit; | 845 return MachineRepresentation::kBit; |
846 } else if (use.IsUsedAsFloat64()) { | 846 } else if (type->Is(Type::NumberOrOddball()) && use.IsUsedAsFloat64()) { |
847 return MachineRepresentation::kFloat64; | 847 return MachineRepresentation::kFloat64; |
848 } else if (type->Is( | 848 } else if (type->Is( |
849 Type::Union(Type::SignedSmall(), Type::NaN(), zone()))) { | 849 Type::Union(Type::SignedSmall(), Type::NaN(), zone()))) { |
850 // TODO(turbofan): For Phis that return either NaN or some Smi, it's | 850 // TODO(turbofan): For Phis that return either NaN or some Smi, it's |
851 // beneficial to not go all the way to double, unless the uses are | 851 // beneficial to not go all the way to double, unless the uses are |
852 // double uses. For tagging that just means some potentially expensive | 852 // double uses. For tagging that just means some potentially expensive |
853 // allocation code; we might want to do the same for -0 as well? | 853 // allocation code; we might want to do the same for -0 as well? |
854 return MachineRepresentation::kTagged; | 854 return MachineRepresentation::kTagged; |
855 } else if (type->Is(Type::Number())) { | 855 } else if (type->Is(Type::Number())) { |
856 return MachineRepresentation::kFloat64; | 856 return MachineRepresentation::kFloat64; |
(...skipping 2760 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3617 isolate(), graph()->zone(), callable.descriptor(), 0, flags, | 3617 isolate(), graph()->zone(), callable.descriptor(), 0, flags, |
3618 Operator::kNoProperties); | 3618 Operator::kNoProperties); |
3619 to_number_operator_.set(common()->Call(desc)); | 3619 to_number_operator_.set(common()->Call(desc)); |
3620 } | 3620 } |
3621 return to_number_operator_.get(); | 3621 return to_number_operator_.get(); |
3622 } | 3622 } |
3623 | 3623 |
3624 } // namespace compiler | 3624 } // namespace compiler |
3625 } // namespace internal | 3625 } // namespace internal |
3626 } // namespace v8 | 3626 } // namespace v8 |
OLD | NEW |