| 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/v8.h" | 5 #include "src/v8.h" |
| 6 #include "test/cctest/cctest.h" | 6 #include "test/cctest/cctest.h" |
| 7 | 7 |
| 8 #include "src/compiler/graph-inl.h" | 8 #include "src/compiler/graph-inl.h" |
| 9 #include "src/compiler/js-typed-lowering.h" | 9 #include "src/compiler/js-typed-lowering.h" |
| 10 #include "src/compiler/node-properties-inl.h" | 10 #include "src/compiler/node-properties-inl.h" |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 47 NodeProperties::SetBounds(n, Bounds(Type::None(), t)); | 47 NodeProperties::SetBounds(n, Bounds(Type::None(), t)); |
| 48 return n; | 48 return n; |
| 49 } | 49 } |
| 50 | 50 |
| 51 Node* UndefinedConstant() { | 51 Node* UndefinedConstant() { |
| 52 Unique<Object> unique = | 52 Unique<Object> unique = |
| 53 Unique<Object>::CreateImmovable(isolate->factory()->undefined_value()); | 53 Unique<Object>::CreateImmovable(isolate->factory()->undefined_value()); |
| 54 return graph.NewNode(common.HeapConstant(unique)); | 54 return graph.NewNode(common.HeapConstant(unique)); |
| 55 } | 55 } |
| 56 | 56 |
| 57 Node* HeapConstant(Handle<Object> constant) { |
| 58 Unique<Object> unique = Unique<Object>::CreateUninitialized(constant); |
| 59 return graph.NewNode(common.HeapConstant(unique)); |
| 60 } |
| 61 |
| 57 Node* EmptyFrameState(Node* context) { | 62 Node* EmptyFrameState(Node* context) { |
| 58 Node* parameters = graph.NewNode(common.StateValues(0)); | 63 Node* parameters = graph.NewNode(common.StateValues(0)); |
| 59 Node* locals = graph.NewNode(common.StateValues(0)); | 64 Node* locals = graph.NewNode(common.StateValues(0)); |
| 60 Node* stack = graph.NewNode(common.StateValues(0)); | 65 Node* stack = graph.NewNode(common.StateValues(0)); |
| 61 | 66 |
| 62 Node* state_node = | 67 Node* state_node = |
| 63 graph.NewNode(common.FrameState(JS_FRAME, BailoutId(0), kIgnoreOutput), | 68 graph.NewNode(common.FrameState(JS_FRAME, BailoutId(0), kIgnoreOutput), |
| 64 parameters, locals, stack, context, UndefinedConstant()); | 69 parameters, locals, stack, context, UndefinedConstant()); |
| 65 | 70 |
| 66 return state_node; | 71 return state_node; |
| (...skipping 1304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1371 CHECK_EQ(p1, r->InputAt(0)); | 1376 CHECK_EQ(p1, r->InputAt(0)); |
| 1372 CHECK_EQ(p0, r->InputAt(1)); | 1377 CHECK_EQ(p0, r->InputAt(1)); |
| 1373 } else { | 1378 } else { |
| 1374 CHECK_EQ(p0, r->InputAt(0)); | 1379 CHECK_EQ(p0, r->InputAt(0)); |
| 1375 CHECK_EQ(p1, r->InputAt(1)); | 1380 CHECK_EQ(p1, r->InputAt(1)); |
| 1376 } | 1381 } |
| 1377 } | 1382 } |
| 1378 } | 1383 } |
| 1379 } | 1384 } |
| 1380 } | 1385 } |
| 1386 |
| 1387 |
| 1388 TEST(BuiltinMathImul) { |
| 1389 JSTypedLoweringTester R; |
| 1390 |
| 1391 for (size_t i = 0; i < arraysize(kNumberTypes); i++) { |
| 1392 for (size_t j = 0; j < arraysize(kNumberTypes); j++) { |
| 1393 Type* t0 = kNumberTypes[i]; |
| 1394 Node* p0 = R.Parameter(t0, 0); |
| 1395 Type* t1 = kNumberTypes[j]; |
| 1396 Node* p1 = R.Parameter(t1, 1); |
| 1397 Node* fun = R.HeapConstant(handle(R.isolate->context()->math_imul_fun())); |
| 1398 Node* call = R.graph.NewNode(R.javascript.Call(4, NO_CALL_FUNCTION_FLAGS), |
| 1399 fun, R.UndefinedConstant(), p0, p1); |
| 1400 Node* r = R.reduce(call); |
| 1401 |
| 1402 if (t0->Is(Type::Integral32()) && t1->Is(Type::Integral32())) { |
| 1403 R.CheckPureBinop(R.machine.Int32Mul(), r); |
| 1404 CHECK_EQ(p0, r->InputAt(0)); |
| 1405 CHECK_EQ(p1, r->InputAt(1)); |
| 1406 } else { |
| 1407 CHECK_EQ(IrOpcode::kJSCallFunction, r->opcode()); |
| 1408 CHECK_EQ(call, r); |
| 1409 } |
| 1410 } |
| 1411 } |
| 1412 } |
| OLD | NEW |