| Index: test/unittests/compiler/js-builtin-reducer-unittest.cc
|
| diff --git a/test/unittests/compiler/js-builtin-reducer-unittest.cc b/test/unittests/compiler/js-builtin-reducer-unittest.cc
|
| index 090f6100660ca63ff006a8dbb787c0a413ca5ef5..5c508a5d4bcd37cb3cd9be15d6134e2f12b9fd46 100644
|
| --- a/test/unittests/compiler/js-builtin-reducer-unittest.cc
|
| +++ b/test/unittests/compiler/js-builtin-reducer-unittest.cc
|
| @@ -30,7 +30,7 @@
|
| return reducer.Reduce(node);
|
| }
|
|
|
| - Node* MathFunction(const char* name) {
|
| + Handle<JSFunction> MathFunction(const char* name) {
|
| Handle<Object> m =
|
| JSObject::GetProperty(isolate()->global_object(),
|
| isolate()->factory()->NewStringFromAsciiChecked(
|
| @@ -39,7 +39,7 @@
|
| JSObject::GetProperty(
|
| m, isolate()->factory()->NewStringFromAsciiChecked(name))
|
| .ToHandleChecked());
|
| - return HeapConstant(Unique<JSFunction>::CreateUninitialized(f));
|
| + return f;
|
| }
|
|
|
| JSOperatorBuilder* javascript() { return &javascript_; }
|
| @@ -50,15 +50,6 @@
|
|
|
|
|
| namespace {
|
| -
|
| -Type* const kIntegral32Types[] = {Type::UnsignedSmall(), Type::Negative32(),
|
| - Type::Unsigned31(), Type::SignedSmall(),
|
| - Type::Signed32(), Type::Unsigned32(),
|
| - Type::Integral32()};
|
| -
|
| -
|
| -const LanguageMode kLanguageModes[] = {SLOPPY, STRICT, STRONG};
|
| -
|
|
|
| // TODO(mstarzinger): Find a common place and unify with test-js-typed-lowering.
|
| Type* const kNumberTypes[] = {
|
| @@ -75,55 +66,56 @@
|
|
|
|
|
| TEST_F(JSBuiltinReducerTest, MathMax0) {
|
| - Node* function = MathFunction("max");
|
| + Handle<JSFunction> f = MathFunction("max");
|
|
|
| - TRACED_FOREACH(LanguageMode, language_mode, kLanguageModes) {
|
| - Node* call = graph()->NewNode(
|
| - javascript()->CallFunction(2, NO_CALL_FUNCTION_FLAGS, language_mode),
|
| - function, UndefinedConstant());
|
| - Reduction r = Reduce(call);
|
| + Node* fun = HeapConstant(Unique<HeapObject>::CreateUninitialized(f));
|
| + Node* call =
|
| + graph()->NewNode(javascript()->CallFunction(2, NO_CALL_FUNCTION_FLAGS),
|
| + fun, UndefinedConstant());
|
| + Reduction r = Reduce(call);
|
|
|
| - ASSERT_TRUE(r.Changed());
|
| - EXPECT_THAT(r.replacement(), IsNumberConstant(-V8_INFINITY));
|
| - }
|
| + ASSERT_TRUE(r.Changed());
|
| + EXPECT_THAT(r.replacement(), IsNumberConstant(-V8_INFINITY));
|
| }
|
|
|
|
|
| TEST_F(JSBuiltinReducerTest, MathMax1) {
|
| - Node* function = MathFunction("max");
|
| + Handle<JSFunction> f = MathFunction("max");
|
|
|
| - TRACED_FOREACH(LanguageMode, language_mode, kLanguageModes) {
|
| - TRACED_FOREACH(Type*, t0, kNumberTypes) {
|
| - Node* p0 = Parameter(t0, 0);
|
| - Node* call = graph()->NewNode(
|
| - javascript()->CallFunction(3, NO_CALL_FUNCTION_FLAGS, language_mode),
|
| - function, UndefinedConstant(), p0);
|
| - Reduction r = Reduce(call);
|
| + TRACED_FOREACH(Type*, t0, kNumberTypes) {
|
| + Node* p0 = Parameter(t0, 0);
|
| + Node* fun = HeapConstant(Unique<HeapObject>::CreateUninitialized(f));
|
| + Node* call =
|
| + graph()->NewNode(javascript()->CallFunction(3, NO_CALL_FUNCTION_FLAGS),
|
| + fun, UndefinedConstant(), p0);
|
| + Reduction r = Reduce(call);
|
|
|
| - ASSERT_TRUE(r.Changed());
|
| - EXPECT_THAT(r.replacement(), p0);
|
| - }
|
| + ASSERT_TRUE(r.Changed());
|
| + EXPECT_THAT(r.replacement(), p0);
|
| }
|
| }
|
|
|
|
|
| TEST_F(JSBuiltinReducerTest, MathMax2) {
|
| - Node* function = MathFunction("max");
|
| + Handle<JSFunction> f = MathFunction("max");
|
|
|
| - TRACED_FOREACH(LanguageMode, language_mode, kLanguageModes) {
|
| - TRACED_FOREACH(Type*, t0, kIntegral32Types) {
|
| - TRACED_FOREACH(Type*, t1, kIntegral32Types) {
|
| - Node* p0 = Parameter(t0, 0);
|
| - Node* p1 = Parameter(t1, 1);
|
| - Node* call =
|
| - graph()->NewNode(javascript()->CallFunction(
|
| - 4, NO_CALL_FUNCTION_FLAGS, language_mode),
|
| - function, UndefinedConstant(), p0, p1);
|
| - Reduction r = Reduce(call);
|
| + TRACED_FOREACH(Type*, t0, kNumberTypes) {
|
| + TRACED_FOREACH(Type*, t1, kNumberTypes) {
|
| + Node* p0 = Parameter(t0, 0);
|
| + Node* p1 = Parameter(t1, 1);
|
| + Node* fun = HeapConstant(Unique<HeapObject>::CreateUninitialized(f));
|
| + Node* call = graph()->NewNode(
|
| + javascript()->CallFunction(4, NO_CALL_FUNCTION_FLAGS), fun,
|
| + UndefinedConstant(), p0, p1);
|
| + Reduction r = Reduce(call);
|
|
|
| + if (t0->Is(Type::Integral32()) && t1->Is(Type::Integral32())) {
|
| ASSERT_TRUE(r.Changed());
|
| EXPECT_THAT(r.replacement(),
|
| IsSelect(kMachNone, IsNumberLessThan(p1, p0), p0, p1));
|
| + } else {
|
| + ASSERT_FALSE(r.Changed());
|
| + EXPECT_EQ(IrOpcode::kJSCallFunction, call->opcode());
|
| }
|
| }
|
| }
|
| @@ -135,21 +127,24 @@
|
|
|
|
|
| TEST_F(JSBuiltinReducerTest, MathImul) {
|
| - Node* function = MathFunction("imul");
|
| + Handle<JSFunction> f = MathFunction("imul");
|
|
|
| - TRACED_FOREACH(LanguageMode, language_mode, kLanguageModes) {
|
| - TRACED_FOREACH(Type*, t0, kIntegral32Types) {
|
| - TRACED_FOREACH(Type*, t1, kIntegral32Types) {
|
| - Node* p0 = Parameter(t0, 0);
|
| - Node* p1 = Parameter(t1, 1);
|
| - Node* call =
|
| - graph()->NewNode(javascript()->CallFunction(
|
| - 4, NO_CALL_FUNCTION_FLAGS, language_mode),
|
| - function, UndefinedConstant(), p0, p1);
|
| - Reduction r = Reduce(call);
|
| + TRACED_FOREACH(Type*, t0, kNumberTypes) {
|
| + TRACED_FOREACH(Type*, t1, kNumberTypes) {
|
| + Node* p0 = Parameter(t0, 0);
|
| + Node* p1 = Parameter(t1, 1);
|
| + Node* fun = HeapConstant(Unique<HeapObject>::CreateUninitialized(f));
|
| + Node* call = graph()->NewNode(
|
| + javascript()->CallFunction(4, NO_CALL_FUNCTION_FLAGS), fun,
|
| + UndefinedConstant(), p0, p1);
|
| + Reduction r = Reduce(call);
|
|
|
| + if (t0->Is(Type::Integral32()) && t1->Is(Type::Integral32())) {
|
| ASSERT_TRUE(r.Changed());
|
| EXPECT_THAT(r.replacement(), IsInt32Mul(p0, p1));
|
| + } else {
|
| + ASSERT_FALSE(r.Changed());
|
| + EXPECT_EQ(IrOpcode::kJSCallFunction, call->opcode());
|
| }
|
| }
|
| }
|
| @@ -161,19 +156,18 @@
|
|
|
|
|
| TEST_F(JSBuiltinReducerTest, MathFround) {
|
| - Node* function = MathFunction("fround");
|
| + Handle<JSFunction> f = MathFunction("fround");
|
|
|
| - TRACED_FOREACH(LanguageMode, language_mode, kLanguageModes) {
|
| - TRACED_FOREACH(Type*, t0, kNumberTypes) {
|
| - Node* p0 = Parameter(t0, 0);
|
| - Node* call = graph()->NewNode(
|
| - javascript()->CallFunction(3, NO_CALL_FUNCTION_FLAGS, language_mode),
|
| - function, UndefinedConstant(), p0);
|
| - Reduction r = Reduce(call);
|
| + TRACED_FOREACH(Type*, t0, kNumberTypes) {
|
| + Node* p0 = Parameter(t0, 0);
|
| + Node* fun = HeapConstant(Unique<HeapObject>::CreateUninitialized(f));
|
| + Node* call =
|
| + graph()->NewNode(javascript()->CallFunction(3, NO_CALL_FUNCTION_FLAGS),
|
| + fun, UndefinedConstant(), p0);
|
| + Reduction r = Reduce(call);
|
|
|
| - ASSERT_TRUE(r.Changed());
|
| - EXPECT_THAT(r.replacement(), IsTruncateFloat64ToFloat32(p0));
|
| - }
|
| + ASSERT_TRUE(r.Changed());
|
| + EXPECT_THAT(r.replacement(), IsTruncateFloat64ToFloat32(p0));
|
| }
|
| }
|
|
|
|
|