Index: test/cctest/compiler/test-scheduler.cc |
diff --git a/test/cctest/compiler/test-scheduler.cc b/test/cctest/compiler/test-scheduler.cc |
index 157bdc2afdc451e6f02d5d60ce1426b681371237..5f72c17aa5af3cfa7225b497189f5a6288c6848d 100644 |
--- a/test/cctest/compiler/test-scheduler.cc |
+++ b/test/cctest/compiler/test-scheduler.cc |
@@ -1637,142 +1637,6 @@ TEST(BuildScheduleSimpleLoopWithCodeMotion) { |
#if V8_TURBOFAN_TARGET |
-// So we can get a real JS function. |
-static Handle<JSFunction> Compile(const char* source) { |
- Isolate* isolate = CcTest::i_isolate(); |
- Handle<String> source_code = isolate->factory() |
- ->NewStringFromUtf8(CStrVector(source)) |
- .ToHandleChecked(); |
- Handle<SharedFunctionInfo> shared_function = Compiler::CompileScript( |
- source_code, Handle<String>(), 0, 0, false, |
- Handle<Context>(isolate->native_context()), NULL, NULL, |
- v8::ScriptCompiler::kNoCompileOptions, NOT_NATIVES_CODE); |
- return isolate->factory()->NewFunctionFromSharedFunctionInfo( |
- shared_function, isolate->native_context()); |
-} |
- |
- |
-TEST(BuildScheduleTrivialLazyDeoptCall) { |
- FLAG_turbo_deoptimization = true; |
- |
- HandleAndZoneScope scope; |
- Isolate* isolate = scope.main_isolate(); |
- Graph graph(scope.main_zone()); |
- CommonOperatorBuilder common(scope.main_zone()); |
- JSOperatorBuilder js_builder(scope.main_zone()); |
- |
- InitializedHandleScope handles; |
- Handle<JSFunction> function = Compile("m()"); |
- CompilationInfoWithZone info(function); |
- Linkage linkage(&info); |
- |
- // Manually transcribed code for: |
- // function turbo_fan_test() { |
- // m(); |
- // } |
- // where m can lazy deopt (so it has a deopt block associated with it). |
- |
- |
- // Start // |
- // ^ // |
- // | (EC) // |
- // | // |
- // /------> Call <--------------\ // |
- // / ^ ^ \ // |
- // / | | \ undef // |
- // / / \ \ ^ // |
- // (E) | (C) / \ (C) \ (E) | // |
- // | Continuation LazyDeoptimization | | // |
- // \___ ^ ^ / | // |
- // \ | | ______/ Framestate // |
- // undef \ | (VC) | (C) / ^ // |
- // \ \ | | / / // |
- // Return Deoptimization ----------/ // |
- // ^ ^ // |
- // \ / // |
- // (C) \ / (C) // |
- // \ / // |
- // Merge // |
- // ^ // |
- // | // |
- // End // |
- |
- Handle<Object> undef_object = |
- Handle<Object>(isolate->heap()->undefined_value(), isolate); |
- PrintableUnique<Object> undef_constant = |
- PrintableUnique<Object>::CreateUninitialized(scope.main_zone(), |
- undef_object); |
- |
- Node* undef_node = graph.NewNode(common.HeapConstant(undef_constant)); |
- |
- Node* start_node = graph.NewNode(common.Start(0)); |
- |
- CallDescriptor* descriptor = linkage.GetJSCallDescriptor(0); |
- Node* call_node = graph.NewNode(common.Call(descriptor), |
- undef_node, // function |
- undef_node, // context |
- start_node, // effect |
- start_node); // control |
- |
- Node* cont_node = graph.NewNode(common.Continuation(), call_node); |
- Node* lazy_deopt_node = graph.NewNode(common.LazyDeoptimization(), call_node); |
- |
- Node* parameters = graph.NewNode(common.StateValues(1), undef_node); |
- Node* locals = graph.NewNode(common.StateValues(0)); |
- Node* stack = graph.NewNode(common.StateValues(0)); |
- |
- Node* state_node = graph.NewNode(common.FrameState(BailoutId(1234)), |
- parameters, locals, stack); |
- |
- Node* return_node = graph.NewNode(common.Return(), |
- undef_node, // return value |
- call_node, // effect |
- cont_node); // control |
- Node* deoptimization_node = graph.NewNode(common.Deoptimize(), |
- state_node, // deopt environment |
- call_node, // effect |
- lazy_deopt_node); // control |
- |
- Node* merge_node = |
- graph.NewNode(common.Merge(2), return_node, deoptimization_node); |
- |
- Node* end_node = graph.NewNode(common.End(), merge_node); |
- |
- graph.SetStart(start_node); |
- graph.SetEnd(end_node); |
- |
- Schedule* schedule = ComputeAndVerifySchedule(12, &graph); |
- |
- // Tests: |
- // Continuation and deopt have basic blocks. |
- BasicBlock* cont_block = schedule->block(cont_node); |
- BasicBlock* deopt_block = schedule->block(lazy_deopt_node); |
- BasicBlock* call_block = schedule->block(call_node); |
- CHECK_NE(NULL, cont_block); |
- CHECK_NE(NULL, deopt_block); |
- CHECK_NE(NULL, call_block); |
- // The basic blocks are different. |
- CHECK_NE(cont_block, deopt_block); |
- CHECK_NE(cont_block, call_block); |
- CHECK_NE(deopt_block, call_block); |
- // The call node finishes its own basic block. |
- CHECK_EQ(BasicBlock::kCall, call_block->control_); |
- CHECK_EQ(call_node, call_block->control_input_); |
- // The lazy deopt block is deferred. |
- CHECK(deopt_block->deferred_); |
- CHECK(!call_block->deferred_); |
- CHECK(!cont_block->deferred_); |
- // The lazy deopt block contains framestate + bailout (and nothing else). |
- CHECK_EQ(deoptimization_node, deopt_block->control_input_); |
- CHECK_EQ(5, static_cast<int>(deopt_block->nodes_.size())); |
- CHECK_EQ(lazy_deopt_node, deopt_block->nodes_[0]); |
- CHECK_EQ(IrOpcode::kStateValues, deopt_block->nodes_[1]->op()->opcode()); |
- CHECK_EQ(IrOpcode::kStateValues, deopt_block->nodes_[2]->op()->opcode()); |
- CHECK_EQ(IrOpcode::kStateValues, deopt_block->nodes_[3]->op()->opcode()); |
- CHECK_EQ(state_node, deopt_block->nodes_[4]); |
-} |
- |
- |
static Node* CreateDiamond(Graph* graph, CommonOperatorBuilder* common, |
Node* cond) { |
Node* tv = graph->NewNode(common->Int32Constant(6)); |