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

Unified Diff: src/compiler/bytecode-graph-builder.cc

Issue 2407823002: [turbofan] Remember source positions when creating graph from bytecode. (Closed)
Patch Set: No longer mark cctest/test-cpu-profiler/TickLinesOptimized as FAIL. Created 4 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/compiler/bytecode-graph-builder.h ('k') | src/compiler/js-inlining.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler/bytecode-graph-builder.cc
diff --git a/src/compiler/bytecode-graph-builder.cc b/src/compiler/bytecode-graph-builder.cc
index 0195f94030500c9806e5f3752a1307641d6f9f00..26deb67ff396c9d4be489b7a30b726f7db4a5caa 100644
--- a/src/compiler/bytecode-graph-builder.cc
+++ b/src/compiler/bytecode-graph-builder.cc
@@ -587,10 +587,9 @@ bool BytecodeGraphBuilder::Environment::StateValuesAreUpToDate(
1, output_poke_start, output_poke_end);
}
-BytecodeGraphBuilder::BytecodeGraphBuilder(Zone* local_zone,
- CompilationInfo* info,
- JSGraph* jsgraph,
- float invocation_frequency)
+BytecodeGraphBuilder::BytecodeGraphBuilder(
+ Zone* local_zone, CompilationInfo* info, JSGraph* jsgraph,
+ float invocation_frequency, SourcePositionTable* source_positions)
: local_zone_(local_zone),
jsgraph_(jsgraph),
invocation_frequency_(invocation_frequency),
@@ -613,8 +612,8 @@ BytecodeGraphBuilder::BytecodeGraphBuilder(Zone* local_zone,
info->is_deoptimization_enabled()),
state_values_cache_(jsgraph),
liveness_analyzer_(
- static_cast<size_t>(bytecode_array()->register_count()), local_zone) {
-}
+ static_cast<size_t>(bytecode_array()->register_count()), local_zone),
+ source_positions_(source_positions) {}
Node* BytecodeGraphBuilder::GetNewTarget() {
if (!new_target_.is_set()) {
@@ -714,11 +713,16 @@ void BytecodeGraphBuilder::VisitBytecodes() {
loop_analysis.Analyze();
set_branch_analysis(&analysis);
set_loop_analysis(&loop_analysis);
+
interpreter::BytecodeArrayIterator iterator(bytecode_array());
set_bytecode_iterator(&iterator);
+ SourcePositionTableIterator source_position_iterator(
+ bytecode_array()->source_position_table());
+
BuildOSRNormalEntryPoint();
while (!iterator.done()) {
int current_offset = iterator.current_offset();
+ UpdateCurrentSourcePosition(&source_position_iterator, current_offset);
EnterAndExitExceptionHandlers(current_offset);
SwitchToMergeEnvironment(current_offset);
if (environment() != nullptr) {
@@ -736,6 +740,7 @@ void BytecodeGraphBuilder::VisitBytecodes() {
}
iterator.Advance();
}
+
set_branch_analysis(nullptr);
set_bytecode_iterator(nullptr);
DCHECK(exception_handlers_.empty());
@@ -2256,6 +2261,21 @@ Node* BytecodeGraphBuilder::MergeValue(Node* value, Node* other,
return value;
}
+void BytecodeGraphBuilder::UpdateCurrentSourcePosition(
+ SourcePositionTableIterator* it, int offset) {
+ // TODO(neis): Remove this once inlining supports source positions.
+ if (source_positions_ == nullptr) return;
+
+ if (it->done()) return;
+
+ if (it->code_offset() == offset) {
+ source_positions_->set_current_position(it->source_position());
+ it->Advance();
+ } else {
+ DCHECK_GT(it->code_offset(), offset);
+ }
+}
+
} // namespace compiler
} // namespace internal
} // namespace v8
« no previous file with comments | « src/compiler/bytecode-graph-builder.h ('k') | src/compiler/js-inlining.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698