| 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 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 335 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 335 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, |
| 336 UndefinedConstant(), p0, context, frame_state, | 336 UndefinedConstant(), p0, context, frame_state, |
| 337 effect, control); | 337 effect, control); |
| 338 Reduction r = Reduce(call); | 338 Reduction r = Reduce(call); |
| 339 | 339 |
| 340 ASSERT_TRUE(r.Changed()); | 340 ASSERT_TRUE(r.Changed()); |
| 341 EXPECT_THAT(r.replacement(), IsNumberCos(IsPlainPrimitiveToNumber(p0))); | 341 EXPECT_THAT(r.replacement(), IsNumberCos(IsPlainPrimitiveToNumber(p0))); |
| 342 } | 342 } |
| 343 | 343 |
| 344 // ----------------------------------------------------------------------------- | 344 // ----------------------------------------------------------------------------- |
| 345 // Math.cosh |
| 346 |
| 347 TEST_F(JSBuiltinReducerTest, MathCoshWithNumber) { |
| 348 Node* function = MathFunction("cosh"); |
| 349 |
| 350 Node* effect = graph()->start(); |
| 351 Node* control = graph()->start(); |
| 352 Node* context = UndefinedConstant(); |
| 353 Node* frame_state = graph()->start(); |
| 354 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
| 355 Node* p0 = Parameter(t0, 0); |
| 356 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, |
| 357 UndefinedConstant(), p0, context, frame_state, |
| 358 effect, control); |
| 359 Reduction r = Reduce(call); |
| 360 |
| 361 ASSERT_TRUE(r.Changed()); |
| 362 EXPECT_THAT(r.replacement(), IsNumberCosh(p0)); |
| 363 } |
| 364 } |
| 365 |
| 366 TEST_F(JSBuiltinReducerTest, MathCoshWithPlainPrimitive) { |
| 367 Node* function = MathFunction("cosh"); |
| 368 |
| 369 Node* effect = graph()->start(); |
| 370 Node* control = graph()->start(); |
| 371 Node* context = UndefinedConstant(); |
| 372 Node* frame_state = graph()->start(); |
| 373 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
| 374 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, |
| 375 UndefinedConstant(), p0, context, frame_state, |
| 376 effect, control); |
| 377 Reduction r = Reduce(call); |
| 378 |
| 379 ASSERT_TRUE(r.Changed()); |
| 380 EXPECT_THAT(r.replacement(), IsNumberCosh(IsPlainPrimitiveToNumber(p0))); |
| 381 } |
| 382 |
| 383 // ----------------------------------------------------------------------------- |
| 345 // Math.exp | 384 // Math.exp |
| 346 | 385 |
| 347 TEST_F(JSBuiltinReducerTest, MathExpWithNumber) { | 386 TEST_F(JSBuiltinReducerTest, MathExpWithNumber) { |
| 348 Node* function = MathFunction("exp"); | 387 Node* function = MathFunction("exp"); |
| 349 | 388 |
| 350 Node* effect = graph()->start(); | 389 Node* effect = graph()->start(); |
| 351 Node* control = graph()->start(); | 390 Node* control = graph()->start(); |
| 352 Node* context = UndefinedConstant(); | 391 Node* context = UndefinedConstant(); |
| 353 Node* frame_state = graph()->start(); | 392 Node* frame_state = graph()->start(); |
| 354 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 393 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
| (...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 868 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 907 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, |
| 869 UndefinedConstant(), p0, context, frame_state, | 908 UndefinedConstant(), p0, context, frame_state, |
| 870 effect, control); | 909 effect, control); |
| 871 Reduction r = Reduce(call); | 910 Reduction r = Reduce(call); |
| 872 | 911 |
| 873 ASSERT_TRUE(r.Changed()); | 912 ASSERT_TRUE(r.Changed()); |
| 874 EXPECT_THAT(r.replacement(), IsNumberSin(IsPlainPrimitiveToNumber(p0))); | 913 EXPECT_THAT(r.replacement(), IsNumberSin(IsPlainPrimitiveToNumber(p0))); |
| 875 } | 914 } |
| 876 | 915 |
| 877 // ----------------------------------------------------------------------------- | 916 // ----------------------------------------------------------------------------- |
| 917 // Math.sinh |
| 918 |
| 919 TEST_F(JSBuiltinReducerTest, MathSinhWithNumber) { |
| 920 Node* function = MathFunction("sinh"); |
| 921 |
| 922 Node* effect = graph()->start(); |
| 923 Node* control = graph()->start(); |
| 924 Node* context = UndefinedConstant(); |
| 925 Node* frame_state = graph()->start(); |
| 926 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
| 927 Node* p0 = Parameter(t0, 0); |
| 928 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, |
| 929 UndefinedConstant(), p0, context, frame_state, |
| 930 effect, control); |
| 931 Reduction r = Reduce(call); |
| 932 |
| 933 ASSERT_TRUE(r.Changed()); |
| 934 EXPECT_THAT(r.replacement(), IsNumberSinh(p0)); |
| 935 } |
| 936 } |
| 937 |
| 938 TEST_F(JSBuiltinReducerTest, MathSinhWithPlainPrimitive) { |
| 939 Node* function = MathFunction("sinh"); |
| 940 |
| 941 Node* effect = graph()->start(); |
| 942 Node* control = graph()->start(); |
| 943 Node* context = UndefinedConstant(); |
| 944 Node* frame_state = graph()->start(); |
| 945 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
| 946 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, |
| 947 UndefinedConstant(), p0, context, frame_state, |
| 948 effect, control); |
| 949 Reduction r = Reduce(call); |
| 950 |
| 951 ASSERT_TRUE(r.Changed()); |
| 952 EXPECT_THAT(r.replacement(), IsNumberSinh(IsPlainPrimitiveToNumber(p0))); |
| 953 } |
| 954 |
| 955 // ----------------------------------------------------------------------------- |
| 878 // Math.sqrt | 956 // Math.sqrt |
| 879 | 957 |
| 880 TEST_F(JSBuiltinReducerTest, MathSqrtWithNumber) { | 958 TEST_F(JSBuiltinReducerTest, MathSqrtWithNumber) { |
| 881 Node* function = MathFunction("sqrt"); | 959 Node* function = MathFunction("sqrt"); |
| 882 | 960 |
| 883 Node* effect = graph()->start(); | 961 Node* effect = graph()->start(); |
| 884 Node* control = graph()->start(); | 962 Node* control = graph()->start(); |
| 885 Node* context = UndefinedConstant(); | 963 Node* context = UndefinedConstant(); |
| 886 Node* frame_state = graph()->start(); | 964 Node* frame_state = graph()->start(); |
| 887 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 965 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 946 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, | 1024 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, |
| 947 UndefinedConstant(), p0, context, frame_state, | 1025 UndefinedConstant(), p0, context, frame_state, |
| 948 effect, control); | 1026 effect, control); |
| 949 Reduction r = Reduce(call); | 1027 Reduction r = Reduce(call); |
| 950 | 1028 |
| 951 ASSERT_TRUE(r.Changed()); | 1029 ASSERT_TRUE(r.Changed()); |
| 952 EXPECT_THAT(r.replacement(), IsNumberTan(IsPlainPrimitiveToNumber(p0))); | 1030 EXPECT_THAT(r.replacement(), IsNumberTan(IsPlainPrimitiveToNumber(p0))); |
| 953 } | 1031 } |
| 954 | 1032 |
| 955 // ----------------------------------------------------------------------------- | 1033 // ----------------------------------------------------------------------------- |
| 1034 // Math.tanh |
| 1035 |
| 1036 TEST_F(JSBuiltinReducerTest, MathTanhWithNumber) { |
| 1037 Node* function = MathFunction("tanh"); |
| 1038 |
| 1039 Node* effect = graph()->start(); |
| 1040 Node* control = graph()->start(); |
| 1041 Node* context = UndefinedConstant(); |
| 1042 Node* frame_state = graph()->start(); |
| 1043 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
| 1044 Node* p0 = Parameter(t0, 0); |
| 1045 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, |
| 1046 UndefinedConstant(), p0, context, frame_state, |
| 1047 effect, control); |
| 1048 Reduction r = Reduce(call); |
| 1049 |
| 1050 ASSERT_TRUE(r.Changed()); |
| 1051 EXPECT_THAT(r.replacement(), IsNumberTanh(p0)); |
| 1052 } |
| 1053 } |
| 1054 |
| 1055 TEST_F(JSBuiltinReducerTest, MathTanhWithPlainPrimitive) { |
| 1056 Node* function = MathFunction("tanh"); |
| 1057 |
| 1058 Node* effect = graph()->start(); |
| 1059 Node* control = graph()->start(); |
| 1060 Node* context = UndefinedConstant(); |
| 1061 Node* frame_state = graph()->start(); |
| 1062 Node* p0 = Parameter(Type::PlainPrimitive(), 0); |
| 1063 Node* call = graph()->NewNode(javascript()->CallFunction(3), function, |
| 1064 UndefinedConstant(), p0, context, frame_state, |
| 1065 effect, control); |
| 1066 Reduction r = Reduce(call); |
| 1067 |
| 1068 ASSERT_TRUE(r.Changed()); |
| 1069 EXPECT_THAT(r.replacement(), IsNumberTanh(IsPlainPrimitiveToNumber(p0))); |
| 1070 } |
| 1071 |
| 1072 // ----------------------------------------------------------------------------- |
| 956 // Math.trunc | 1073 // Math.trunc |
| 957 | 1074 |
| 958 TEST_F(JSBuiltinReducerTest, MathTruncWithNumber) { | 1075 TEST_F(JSBuiltinReducerTest, MathTruncWithNumber) { |
| 959 Node* function = MathFunction("trunc"); | 1076 Node* function = MathFunction("trunc"); |
| 960 | 1077 |
| 961 Node* effect = graph()->start(); | 1078 Node* effect = graph()->start(); |
| 962 Node* control = graph()->start(); | 1079 Node* control = graph()->start(); |
| 963 Node* context = UndefinedConstant(); | 1080 Node* context = UndefinedConstant(); |
| 964 Node* frame_state = graph()->start(); | 1081 Node* frame_state = graph()->start(); |
| 965 TRACED_FOREACH(Type*, t0, kNumberTypes) { | 1082 TRACED_FOREACH(Type*, t0, kNumberTypes) { |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1027 Reduction r = Reduce(call); | 1144 Reduction r = Reduce(call); |
| 1028 | 1145 |
| 1029 ASSERT_TRUE(r.Changed()); | 1146 ASSERT_TRUE(r.Changed()); |
| 1030 EXPECT_THAT(r.replacement(), | 1147 EXPECT_THAT(r.replacement(), |
| 1031 IsStringFromCharCode(IsPlainPrimitiveToNumber(p0))); | 1148 IsStringFromCharCode(IsPlainPrimitiveToNumber(p0))); |
| 1032 } | 1149 } |
| 1033 | 1150 |
| 1034 } // namespace compiler | 1151 } // namespace compiler |
| 1035 } // namespace internal | 1152 } // namespace internal |
| 1036 } // namespace v8 | 1153 } // namespace v8 |
| OLD | NEW |