Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(680)

Side by Side Diff: src/crankshaft/hydrogen.cc

Issue 1973993002: [compiler] Profiler reconstructs inlined frames for deopts. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix build. Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/crankshaft/hydrogen.h ('k') | src/crankshaft/ia32/lithium-codegen-ia32.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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/crankshaft/hydrogen.h" 5 #include "src/crankshaft/hydrogen.h"
6 6
7 #include <sstream> 7 #include <sstream>
8 8
9 #include "src/allocation-site-scopes.h" 9 #include "src/allocation-site-scopes.h"
10 #include "src/ast/ast-numbering.h" 10 #include "src/ast/ast-numbering.h"
(...skipping 1341 matching lines...) Expand 10 before | Expand all | Expand 10 after
1352 builder_->set_current_block(exit_block_); 1352 builder_->set_current_block(exit_block_);
1353 } 1353 }
1354 finished_ = true; 1354 finished_ = true;
1355 } 1355 }
1356 1356
1357 1357
1358 HGraph* HGraphBuilder::CreateGraph() { 1358 HGraph* HGraphBuilder::CreateGraph() {
1359 graph_ = new (zone()) HGraph(info_, descriptor_); 1359 graph_ = new (zone()) HGraph(info_, descriptor_);
1360 if (FLAG_hydrogen_stats) isolate()->GetHStatistics()->Initialize(info_); 1360 if (FLAG_hydrogen_stats) isolate()->GetHStatistics()->Initialize(info_);
1361 if (!info_->IsStub() && info_->is_tracking_positions()) { 1361 if (!info_->IsStub() && info_->is_tracking_positions()) {
1362 TraceInlinedFunction(info_->shared_info(), SourcePosition::Unknown(), 1362 TraceInlinedFunction(info_->shared_info(), SourcePosition::Unknown());
1363 InlinedFunctionInfo::kNoParentId);
1364 } 1363 }
1365 CompilationPhase phase("H_Block building", info_); 1364 CompilationPhase phase("H_Block building", info_);
1366 set_current_block(graph()->entry_block()); 1365 set_current_block(graph()->entry_block());
1367 if (!BuildGraph()) return NULL; 1366 if (!BuildGraph()) return NULL;
1368 graph()->FinalizeUniqueness(); 1367 graph()->FinalizeUniqueness();
1369 return graph_; 1368 return graph_;
1370 } 1369 }
1371 1370
1372 int HGraphBuilder::TraceInlinedFunction(Handle<SharedFunctionInfo> shared, 1371 int HGraphBuilder::TraceInlinedFunction(Handle<SharedFunctionInfo> shared,
1373 SourcePosition position, 1372 SourcePosition position) {
1374 int parent_id) {
1375 DCHECK(info_->is_tracking_positions()); 1373 DCHECK(info_->is_tracking_positions());
1376 1374
1377 int inline_id = static_cast<int>(info_->inlined_function_infos().size()); 1375 int inline_id = static_cast<int>(info_->inlined_function_infos().size());
1378 InlinedFunctionInfo info(parent_id, position, UnboundScript::kNoScriptId, 1376 InlinedFunctionInfo info(shared->start_position());
1379 shared->start_position());
1380 if (!shared->script()->IsUndefined()) { 1377 if (!shared->script()->IsUndefined()) {
1381 Handle<Script> script(Script::cast(shared->script())); 1378 Handle<Script> script(Script::cast(shared->script()));
1382 info.script_id = script->id();
1383 1379
1384 if (FLAG_hydrogen_track_positions && !script->source()->IsUndefined()) { 1380 if (FLAG_hydrogen_track_positions && !script->source()->IsUndefined()) {
1385 CodeTracer::Scope tracing_scope(isolate()->GetCodeTracer()); 1381 CodeTracer::Scope tracing_scope(isolate()->GetCodeTracer());
1386 Object* source_name = script->name(); 1382 Object* source_name = script->name();
1387 OFStream os(tracing_scope.file()); 1383 OFStream os(tracing_scope.file());
1388 os << "--- FUNCTION SOURCE ("; 1384 os << "--- FUNCTION SOURCE (";
1389 if (source_name->IsString()) { 1385 if (source_name->IsString()) {
1390 os << String::cast(source_name)->ToCString().get() << ":"; 1386 os << String::cast(source_name)->ToCString().get() << ":";
1391 } 1387 }
1392 os << shared->DebugName()->ToCString().get() << ") id{"; 1388 os << shared->DebugName()->ToCString().get() << ") id{";
(...skipping 7258 matching lines...) Expand 10 before | Expand all | Expand 10 after
8651 // TryInline should always return true). 8647 // TryInline should always return true).
8652 8648
8653 // Type-check the inlined function. 8649 // Type-check the inlined function.
8654 DCHECK(target_shared->has_deoptimization_support()); 8650 DCHECK(target_shared->has_deoptimization_support());
8655 AstTyper(target_info.isolate(), target_info.zone(), target_info.closure(), 8651 AstTyper(target_info.isolate(), target_info.zone(), target_info.closure(),
8656 target_info.scope(), target_info.osr_ast_id(), target_info.literal()) 8652 target_info.scope(), target_info.osr_ast_id(), target_info.literal())
8657 .Run(); 8653 .Run();
8658 8654
8659 int inlining_id = 0; 8655 int inlining_id = 0;
8660 if (top_info()->is_tracking_positions()) { 8656 if (top_info()->is_tracking_positions()) {
8661 inlining_id = TraceInlinedFunction(target_shared, source_position(), 8657 inlining_id = TraceInlinedFunction(target_shared, source_position());
8662 function_state()->inlining_id());
8663 } 8658 }
8664 8659
8665 // Save the pending call context. Set up new one for the inlined function. 8660 // Save the pending call context. Set up new one for the inlined function.
8666 // The function state is new-allocated because we need to delete it 8661 // The function state is new-allocated because we need to delete it
8667 // in two different places. 8662 // in two different places.
8668 FunctionState* target_state = new FunctionState( 8663 FunctionState* target_state = new FunctionState(
8669 this, &target_info, inlining_kind, inlining_id, 8664 this, &target_info, inlining_kind, inlining_id,
8670 function_state()->ComputeTailCallMode(syntactic_tail_call_mode)); 8665 function_state()->ComputeTailCallMode(syntactic_tail_call_mode));
8671 8666
8672 HConstant* undefined = graph()->GetConstantUndefined(); 8667 HConstant* undefined = graph()->GetConstantUndefined();
(...skipping 5072 matching lines...) Expand 10 before | Expand all | Expand 10 after
13745 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); 13740 isolate()->GetHTracer()->TraceHydrogen(name(), graph_);
13746 } 13741 }
13747 13742
13748 #ifdef DEBUG 13743 #ifdef DEBUG
13749 graph_->Verify(false); // No full verify. 13744 graph_->Verify(false); // No full verify.
13750 #endif 13745 #endif
13751 } 13746 }
13752 13747
13753 } // namespace internal 13748 } // namespace internal
13754 } // namespace v8 13749 } // namespace v8
OLDNEW
« no previous file with comments | « src/crankshaft/hydrogen.h ('k') | src/crankshaft/ia32/lithium-codegen-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698