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

Side by Side Diff: src/compiler/code-generator.cc

Issue 2451853002: Uniform and precise source positions for inlining (Closed)
Patch Set: fixed obsolete identifiers Created 4 years, 1 month 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
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/compiler/code-generator.h" 5 #include "src/compiler/code-generator.h"
6 6
7 #include "src/address-map.h" 7 #include "src/address-map.h"
8 #include "src/base/adapters.h" 8 #include "src/base/adapters.h"
9 #include "src/compilation-info.h" 9 #include "src/compilation-info.h"
10 #include "src/compiler/code-generator-impl.h" 10 #include "src/compiler/code-generator-impl.h"
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 81
82 // Place function entry hook if requested to do so. 82 // Place function entry hook if requested to do so.
83 if (linkage()->GetIncomingDescriptor()->IsJSFunctionCall()) { 83 if (linkage()->GetIncomingDescriptor()->IsJSFunctionCall()) {
84 ProfileEntryHookStub::MaybeCallEntryHook(masm()); 84 ProfileEntryHookStub::MaybeCallEntryHook(masm());
85 } 85 }
86 // Architecture-specific, linkage-specific prologue. 86 // Architecture-specific, linkage-specific prologue.
87 info->set_prologue_offset(masm()->pc_offset()); 87 info->set_prologue_offset(masm()->pc_offset());
88 88
89 // Define deoptimization literals for all inlined functions. 89 // Define deoptimization literals for all inlined functions.
90 DCHECK_EQ(0u, deoptimization_literals_.size()); 90 DCHECK_EQ(0u, deoptimization_literals_.size());
91 for (const CompilationInfo::InlinedFunctionHolder& inlined : 91 for (CompilationInfo::InlinedFunctionHolder& inlined :
92 info->inlined_functions()) { 92 info->inlined_functions()) {
93 if (!inlined.shared_info.is_identical_to(info->shared_info())) { 93 if (!inlined.shared_info.is_identical_to(info->shared_info())) {
94 inlined.RegisterInlinedFunctionId(deoptimization_literals_.size());
94 DefineDeoptimizationLiteral(inlined.shared_info); 95 DefineDeoptimizationLiteral(inlined.shared_info);
95 } 96 }
96 } 97 }
97 inlined_function_count_ = deoptimization_literals_.size(); 98 inlined_function_count_ = deoptimization_literals_.size();
98 99
99 // Define deoptimization literals for all unoptimized code objects of inlined 100 // Define deoptimization literals for all unoptimized code objects of inlined
100 // functions. This ensures unoptimized code is kept alive by optimized code. 101 // functions. This ensures unoptimized code is kept alive by optimized code.
101 for (const CompilationInfo::InlinedFunctionHolder& inlined : 102 for (const CompilationInfo::InlinedFunctionHolder& inlined :
102 info->inlined_functions()) { 103 info->inlined_functions()) {
103 if (!inlined.shared_info.is_identical_to(info->shared_info())) { 104 if (!inlined.shared_info.is_identical_to(info->shared_info())) {
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 return kSuccess; 468 return kSuccess;
468 } 469 }
469 470
470 471
471 void CodeGenerator::AssembleSourcePosition(Instruction* instr) { 472 void CodeGenerator::AssembleSourcePosition(Instruction* instr) {
472 SourcePosition source_position; 473 SourcePosition source_position;
473 if (!code()->GetSourcePosition(instr, &source_position)) return; 474 if (!code()->GetSourcePosition(instr, &source_position)) return;
474 if (source_position == current_source_position_) return; 475 if (source_position == current_source_position_) return;
475 current_source_position_ = source_position; 476 current_source_position_ = source_position;
476 if (source_position.IsUnknown()) return; 477 if (source_position.IsUnknown()) return;
477 int code_pos = source_position.raw(); 478 source_position_table_builder_.AddPosition(masm()->pc_offset(),
478 source_position_table_builder_.AddPosition(masm()->pc_offset(), code_pos, 479 source_position, false);
479 false);
480 if (FLAG_code_comments) { 480 if (FLAG_code_comments) {
481 CompilationInfo* info = this->info(); 481 CompilationInfo* info = this->info();
482 if (!info->parse_info()) return; 482 if (!info->parse_info()) return;
483 Vector<char> buffer = Vector<char>::New(256); 483 std::ostringstream buffer;
484 int ln = Script::GetLineNumber(info->script(), code_pos); 484 buffer << "-- " << source_position.Info(info) << " --";
485 int cn = Script::GetColumnNumber(info->script(), code_pos); 485 masm()->RecordComment(buffer.str().c_str());
486 if (info->script()->name()->IsString()) {
487 Handle<String> file(String::cast(info->script()->name()));
488 base::OS::SNPrintF(buffer.start(), buffer.length(), "-- %s:%d:%d --",
489 file->ToCString().get(), ln, cn);
490 } else {
491 base::OS::SNPrintF(buffer.start(), buffer.length(),
492 "-- <unknown>:%d:%d --", ln, cn);
493 }
494 masm()->RecordComment(buffer.start());
495 } 486 }
496 } 487 }
497 488
498 bool CodeGenerator::GetSlotAboveSPBeforeTailCall(Instruction* instr, 489 bool CodeGenerator::GetSlotAboveSPBeforeTailCall(Instruction* instr,
499 int* slot) { 490 int* slot) {
500 if (instr->IsTailCall()) { 491 if (instr->IsTailCall()) {
501 InstructionOperandConverter g(this, instr); 492 InstructionOperandConverter g(this, instr);
502 *slot = g.InputInt32(instr->InputCount() - 1); 493 *slot = g.InputInt32(instr->InputCount() - 1);
503 return true; 494 return true;
504 } else { 495 } else {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
541 Handle<FixedArray> literals = isolate()->factory()->NewFixedArray( 532 Handle<FixedArray> literals = isolate()->factory()->NewFixedArray(
542 static_cast<int>(deoptimization_literals_.size()), TENURED); 533 static_cast<int>(deoptimization_literals_.size()), TENURED);
543 { 534 {
544 AllowDeferredHandleDereference copy_handles; 535 AllowDeferredHandleDereference copy_handles;
545 for (unsigned i = 0; i < deoptimization_literals_.size(); i++) { 536 for (unsigned i = 0; i < deoptimization_literals_.size(); i++) {
546 literals->set(i, *deoptimization_literals_[i]); 537 literals->set(i, *deoptimization_literals_[i]);
547 } 538 }
548 data->SetLiteralArray(*literals); 539 data->SetLiteralArray(*literals);
549 } 540 }
550 541
542 data->SetInliningPositions(*info->CreateInliningPositions());
543
551 if (info->is_osr()) { 544 if (info->is_osr()) {
552 DCHECK(osr_pc_offset_ >= 0); 545 DCHECK(osr_pc_offset_ >= 0);
553 data->SetOsrAstId(Smi::FromInt(info_->osr_ast_id().ToInt())); 546 data->SetOsrAstId(Smi::FromInt(info_->osr_ast_id().ToInt()));
554 data->SetOsrPcOffset(Smi::FromInt(osr_pc_offset_)); 547 data->SetOsrPcOffset(Smi::FromInt(osr_pc_offset_));
555 } else { 548 } else {
556 BailoutId osr_ast_id = BailoutId::None(); 549 BailoutId osr_ast_id = BailoutId::None();
557 data->SetOsrAstId(Smi::FromInt(osr_ast_id.ToInt())); 550 data->SetOsrAstId(Smi::FromInt(osr_ast_id.ToInt()));
558 data->SetOsrPcOffset(Smi::FromInt(-1)); 551 data->SetOsrPcOffset(Smi::FromInt(-1));
559 } 552 }
560 553
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
935 : frame_(gen->frame()), masm_(gen->masm()), next_(gen->ools_) { 928 : frame_(gen->frame()), masm_(gen->masm()), next_(gen->ools_) {
936 gen->ools_ = this; 929 gen->ools_ = this;
937 } 930 }
938 931
939 932
940 OutOfLineCode::~OutOfLineCode() {} 933 OutOfLineCode::~OutOfLineCode() {}
941 934
942 } // namespace compiler 935 } // namespace compiler
943 } // namespace internal 936 } // namespace internal
944 } // namespace v8 937 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698