| 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/js-builtin-reducer.h" | 5 #include "src/compiler/js-builtin-reducer.h" | 
| 6 #include "src/compiler/js-graph.h" | 6 #include "src/compiler/js-graph.h" | 
| 7 #include "src/compiler/node-properties.h" | 7 #include "src/compiler/node-properties.h" | 
| 8 #include "src/compiler/simplified-operator.h" | 8 #include "src/compiler/simplified-operator.h" | 
| 9 #include "src/compiler/typer.h" | 9 #include "src/compiler/typer.h" | 
| 10 #include "src/isolate-inl.h" | 10 #include "src/isolate-inl.h" | 
| (...skipping 871 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 882 } | 882 } | 
| 883 | 883 | 
| 884 TEST_F(JSBuiltinReducerTest, MathMaxWithPlainPrimitive) { | 884 TEST_F(JSBuiltinReducerTest, MathMaxWithPlainPrimitive) { | 
| 885   Node* function = MathFunction("max"); | 885   Node* function = MathFunction("max"); | 
| 886 | 886 | 
| 887   Node* effect = graph()->start(); | 887   Node* effect = graph()->start(); | 
| 888   Node* control = graph()->start(); | 888   Node* control = graph()->start(); | 
| 889   Node* context = UndefinedConstant(); | 889   Node* context = UndefinedConstant(); | 
| 890   Node* frame_state = graph()->start(); | 890   Node* frame_state = graph()->start(); | 
| 891   Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 891   Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 
| 892   Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 892   Node* p1 = Parameter(Type::PlainPrimitive(), 1); | 
| 893                                 UndefinedConstant(), p0, context, frame_state, | 893   Node* call = graph()->NewNode(javascript()->CallFunction(4), function, | 
| 894                                 effect, control); | 894                                 UndefinedConstant(), p0, p1, context, | 
|  | 895                                 frame_state, effect, control); | 
| 895   Reduction r = Reduce(call); | 896   Reduction r = Reduce(call); | 
| 896 | 897 | 
| 897   ASSERT_TRUE(r.Changed()); | 898   ASSERT_TRUE(r.Changed()); | 
| 898   EXPECT_THAT(r.replacement(), IsPlainPrimitiveToNumber(p0)); | 899   EXPECT_THAT(r.replacement(), IsNumberMax(IsPlainPrimitiveToNumber(p0), | 
| 899 } | 900                                            IsPlainPrimitiveToNumber(p1))); | 
| 900 |  | 
| 901 TEST_F(JSBuiltinReducerTest, MathMaxWithIntegral32) { |  | 
| 902   Node* function = MathFunction("max"); |  | 
| 903 |  | 
| 904   Node* effect = graph()->start(); |  | 
| 905   Node* control = graph()->start(); |  | 
| 906   Node* context = UndefinedConstant(); |  | 
| 907   Node* frame_state = graph()->start(); |  | 
| 908   TRACED_FOREACH(Type*, t0, kIntegral32Types) { |  | 
| 909     TRACED_FOREACH(Type*, t1, kIntegral32Types) { |  | 
| 910       Node* p0 = Parameter(t0, 0); |  | 
| 911       Node* p1 = Parameter(t1, 1); |  | 
| 912       Node* call = graph()->NewNode(javascript()->CallFunction(4), function, |  | 
| 913                                     UndefinedConstant(), p0, p1, context, |  | 
| 914                                     frame_state, effect, control); |  | 
| 915       Reduction r = Reduce(call); |  | 
| 916 |  | 
| 917       ASSERT_TRUE(r.Changed()); |  | 
| 918       EXPECT_THAT(r.replacement(), IsSelect(MachineRepresentation::kNone, |  | 
| 919                                             IsNumberLessThan(p1, p0), p0, p1)); |  | 
| 920     } |  | 
| 921   } |  | 
| 922 } | 901 } | 
| 923 | 902 | 
| 924 // ----------------------------------------------------------------------------- | 903 // ----------------------------------------------------------------------------- | 
| 925 // Math.min | 904 // Math.min | 
| 926 | 905 | 
| 927 TEST_F(JSBuiltinReducerTest, MathMinWithNoArguments) { | 906 TEST_F(JSBuiltinReducerTest, MathMinWithNoArguments) { | 
| 928   Node* function = MathFunction("min"); | 907   Node* function = MathFunction("min"); | 
| 929 | 908 | 
| 930   Node* effect = graph()->start(); | 909   Node* effect = graph()->start(); | 
| 931   Node* control = graph()->start(); | 910   Node* control = graph()->start(); | 
| (...skipping 28 matching lines...) Expand all  Loading... | 
| 960 } | 939 } | 
| 961 | 940 | 
| 962 TEST_F(JSBuiltinReducerTest, MathMinWithPlainPrimitive) { | 941 TEST_F(JSBuiltinReducerTest, MathMinWithPlainPrimitive) { | 
| 963   Node* function = MathFunction("min"); | 942   Node* function = MathFunction("min"); | 
| 964 | 943 | 
| 965   Node* effect = graph()->start(); | 944   Node* effect = graph()->start(); | 
| 966   Node* control = graph()->start(); | 945   Node* control = graph()->start(); | 
| 967   Node* context = UndefinedConstant(); | 946   Node* context = UndefinedConstant(); | 
| 968   Node* frame_state = graph()->start(); | 947   Node* frame_state = graph()->start(); | 
| 969   Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 948   Node* p0 = Parameter(Type::PlainPrimitive(), 0); | 
| 970   Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 949   Node* p1 = Parameter(Type::PlainPrimitive(), 1); | 
| 971                                 UndefinedConstant(), p0, context, frame_state, | 950   Node* call = graph()->NewNode(javascript()->CallFunction(4), function, | 
| 972                                 effect, control); | 951                                 UndefinedConstant(), p0, p1, context, | 
|  | 952                                 frame_state, effect, control); | 
| 973   Reduction r = Reduce(call); | 953   Reduction r = Reduce(call); | 
| 974 | 954 | 
| 975   ASSERT_TRUE(r.Changed()); | 955   ASSERT_TRUE(r.Changed()); | 
| 976   EXPECT_THAT(r.replacement(), IsPlainPrimitiveToNumber(p0)); | 956   EXPECT_THAT(r.replacement(), IsNumberMin(IsPlainPrimitiveToNumber(p0), | 
| 977 } | 957                                            IsPlainPrimitiveToNumber(p1))); | 
| 978 |  | 
| 979 TEST_F(JSBuiltinReducerTest, MathMinWithIntegral32) { |  | 
| 980   Node* function = MathFunction("min"); |  | 
| 981 |  | 
| 982   Node* effect = graph()->start(); |  | 
| 983   Node* control = graph()->start(); |  | 
| 984   Node* context = UndefinedConstant(); |  | 
| 985   Node* frame_state = graph()->start(); |  | 
| 986   TRACED_FOREACH(Type*, t0, kIntegral32Types) { |  | 
| 987     TRACED_FOREACH(Type*, t1, kIntegral32Types) { |  | 
| 988       Node* p0 = Parameter(t0, 0); |  | 
| 989       Node* p1 = Parameter(t1, 1); |  | 
| 990       Node* call = graph()->NewNode(javascript()->CallFunction(4), function, |  | 
| 991                                     UndefinedConstant(), p0, p1, context, |  | 
| 992                                     frame_state, effect, control); |  | 
| 993       Reduction r = Reduce(call); |  | 
| 994 |  | 
| 995       ASSERT_TRUE(r.Changed()); |  | 
| 996       EXPECT_THAT(r.replacement(), IsSelect(MachineRepresentation::kNone, |  | 
| 997                                             IsNumberLessThan(p1, p0), p1, p0)); |  | 
| 998     } |  | 
| 999   } |  | 
| 1000 } | 958 } | 
| 1001 | 959 | 
| 1002 // ----------------------------------------------------------------------------- | 960 // ----------------------------------------------------------------------------- | 
| 1003 // Math.round | 961 // Math.round | 
| 1004 | 962 | 
| 1005 TEST_F(JSBuiltinReducerTest, MathRoundWithNumber) { | 963 TEST_F(JSBuiltinReducerTest, MathRoundWithNumber) { | 
| 1006   Node* function = MathFunction("round"); | 964   Node* function = MathFunction("round"); | 
| 1007 | 965 | 
| 1008   Node* effect = graph()->start(); | 966   Node* effect = graph()->start(); | 
| 1009   Node* control = graph()->start(); | 967   Node* control = graph()->start(); | 
| (...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1433   Reduction r = Reduce(call); | 1391   Reduction r = Reduce(call); | 
| 1434 | 1392 | 
| 1435   ASSERT_TRUE(r.Changed()); | 1393   ASSERT_TRUE(r.Changed()); | 
| 1436   EXPECT_THAT(r.replacement(), | 1394   EXPECT_THAT(r.replacement(), | 
| 1437               IsStringFromCharCode(IsPlainPrimitiveToNumber(p0))); | 1395               IsStringFromCharCode(IsPlainPrimitiveToNumber(p0))); | 
| 1438 } | 1396 } | 
| 1439 | 1397 | 
| 1440 }  // namespace compiler | 1398 }  // namespace compiler | 
| 1441 }  // namespace internal | 1399 }  // namespace internal | 
| 1442 }  // namespace v8 | 1400 }  // namespace v8 | 
| OLD | NEW | 
|---|