| 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 <limits> | 5 #include <limits> |
| 6 | 6 |
| 7 #include "src/compiler/access-builder.h" | 7 #include "src/compiler/access-builder.h" |
| 8 #include "src/compiler/change-lowering.h" | 8 #include "src/compiler/change-lowering.h" |
| 9 #include "src/compiler/control-builders.h" | 9 #include "src/compiler/control-builders.h" |
| 10 #include "src/compiler/generic-node-inl.h" | 10 #include "src/compiler/generic-node-inl.h" |
| (...skipping 929 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 940 t.simplified()->NumberEqual()); | 940 t.simplified()->NumberEqual()); |
| 941 t.CheckLoweringBinop(IrOpcode::kFloat64LessThan, | 941 t.CheckLoweringBinop(IrOpcode::kFloat64LessThan, |
| 942 t.simplified()->NumberLessThan()); | 942 t.simplified()->NumberLessThan()); |
| 943 t.CheckLoweringBinop(IrOpcode::kFloat64LessThanOrEqual, | 943 t.CheckLoweringBinop(IrOpcode::kFloat64LessThanOrEqual, |
| 944 t.simplified()->NumberLessThanOrEqual()); | 944 t.simplified()->NumberLessThanOrEqual()); |
| 945 } | 945 } |
| 946 } | 946 } |
| 947 | 947 |
| 948 | 948 |
| 949 TEST(LowerNumberAddSub_to_int32) { | 949 TEST(LowerNumberAddSub_to_int32) { |
| 950 TestingGraph t(Type::Signed32(), Type::Signed32()); | 950 HandleAndZoneScope scope; |
| 951 t.CheckLoweringTruncatedBinop(IrOpcode::kInt32Add, | 951 Factory* f = scope.main_zone()->isolate()->factory(); |
| 952 t.simplified()->NumberAdd(), | 952 Type* small_range = |
| 953 t.simplified()->NumberToInt32()); | 953 Type::Range(f->NewNumber(1), f->NewNumber(10), scope.main_zone()); |
| 954 t.CheckLoweringTruncatedBinop(IrOpcode::kInt32Sub, | 954 Type* large_range = |
| 955 t.simplified()->NumberSubtract(), | 955 Type::Range(f->NewNumber(-1e+13), f->NewNumber(1e+14), scope.main_zone()); |
| 956 t.simplified()->NumberToInt32()); | 956 static Type* types[] = {Type::Signed32(), Type::Integral32(), small_range, |
| 957 large_range}; |
| 958 |
| 959 for (size_t i = 0; i < arraysize(types); i++) { |
| 960 for (size_t j = 0; j < arraysize(types); j++) { |
| 961 TestingGraph t(types[i], types[j]); |
| 962 t.CheckLoweringTruncatedBinop(IrOpcode::kInt32Add, |
| 963 t.simplified()->NumberAdd(), |
| 964 t.simplified()->NumberToInt32()); |
| 965 t.CheckLoweringTruncatedBinop(IrOpcode::kInt32Sub, |
| 966 t.simplified()->NumberSubtract(), |
| 967 t.simplified()->NumberToInt32()); |
| 968 } |
| 969 } |
| 957 } | 970 } |
| 958 | 971 |
| 959 | 972 |
| 960 TEST(LowerNumberAddSub_to_uint32) { | 973 TEST(LowerNumberAddSub_to_uint32) { |
| 961 TestingGraph t(Type::Unsigned32(), Type::Unsigned32()); | 974 HandleAndZoneScope scope; |
| 962 t.CheckLoweringTruncatedBinop(IrOpcode::kInt32Add, | 975 Factory* f = scope.main_zone()->isolate()->factory(); |
| 963 t.simplified()->NumberAdd(), | 976 Type* small_range = |
| 964 t.simplified()->NumberToUint32()); | 977 Type::Range(f->NewNumber(1), f->NewNumber(10), scope.main_zone()); |
| 965 t.CheckLoweringTruncatedBinop(IrOpcode::kInt32Sub, | 978 Type* large_range = |
| 966 t.simplified()->NumberSubtract(), | 979 Type::Range(f->NewNumber(-1e+13), f->NewNumber(1e+14), scope.main_zone()); |
| 967 t.simplified()->NumberToUint32()); | 980 static Type* types[] = {Type::Signed32(), Type::Integral32(), small_range, |
| 981 large_range}; |
| 982 |
| 983 for (size_t i = 0; i < arraysize(types); i++) { |
| 984 for (size_t j = 0; j < arraysize(types); j++) { |
| 985 TestingGraph t(types[i], types[j]); |
| 986 t.CheckLoweringTruncatedBinop(IrOpcode::kInt32Add, |
| 987 t.simplified()->NumberAdd(), |
| 988 t.simplified()->NumberToUint32()); |
| 989 t.CheckLoweringTruncatedBinop(IrOpcode::kInt32Sub, |
| 990 t.simplified()->NumberSubtract(), |
| 991 t.simplified()->NumberToUint32()); |
| 992 } |
| 993 } |
| 968 } | 994 } |
| 969 | 995 |
| 970 | 996 |
| 971 TEST(LowerNumberAddSub_to_float64) { | 997 TEST(LowerNumberAddSub_to_float64) { |
| 972 for (size_t i = 0; i < arraysize(test_types); i++) { | 998 for (size_t i = 0; i < arraysize(test_types); i++) { |
| 973 TestingGraph t(test_types[i], test_types[i]); | 999 TestingGraph t(test_types[i], test_types[i]); |
| 974 | 1000 |
| 975 t.CheckLoweringBinop(IrOpcode::kFloat64Add, t.simplified()->NumberAdd()); | 1001 t.CheckLoweringBinop(IrOpcode::kFloat64Add, t.simplified()->NumberAdd()); |
| 976 t.CheckLoweringBinop(IrOpcode::kFloat64Sub, | 1002 t.CheckLoweringBinop(IrOpcode::kFloat64Sub, |
| 977 t.simplified()->NumberSubtract()); | 1003 t.simplified()->NumberSubtract()); |
| (...skipping 947 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1925 TestingGraph t(Type::Unsigned32()); | 1951 TestingGraph t(Type::Unsigned32()); |
| 1926 Node* k = t.jsgraph.Constant(0); | 1952 Node* k = t.jsgraph.Constant(0); |
| 1927 Node* mod = t.graph()->NewNode(t.simplified()->NumberModulus(), t.p0, k); | 1953 Node* mod = t.graph()->NewNode(t.simplified()->NumberModulus(), t.p0, k); |
| 1928 Node* trunc = t.graph()->NewNode(t.simplified()->NumberToUint32(), mod); | 1954 Node* trunc = t.graph()->NewNode(t.simplified()->NumberToUint32(), mod); |
| 1929 t.Return(trunc); | 1955 t.Return(trunc); |
| 1930 t.Lower(); | 1956 t.Lower(); |
| 1931 | 1957 |
| 1932 CHECK_EQ(IrOpcode::kFloat64Mod, mod->opcode()); | 1958 CHECK_EQ(IrOpcode::kFloat64Mod, mod->opcode()); |
| 1933 } | 1959 } |
| 1934 } | 1960 } |
| OLD | NEW |