From 32ee9fa6ab08e9cafceae3f148cd6ec52306be64 Mon Sep 17 00:00:00 2001 From: loislo Date: Fri, 27 Feb 2015 05:34:23 -0800 Subject: [PATCH] CpuProfiler: replace raw position with SourcePosition for DeoptReason Save Unknown position as zero in RelocInfo. Remove copy constructor of SourcePosition because it is trivial. Mechanical replace int raw_position with SourcePosition position. BUG=452067 LOG=n Review URL: https://codereview.chromium.org/959203002 Cr-Commit-Position: refs/heads/master@{#26916} --- src/arm/assembler-arm.h | 3 ++- src/arm/lithium-codegen-arm.cc | 2 +- src/arm64/assembler-arm64.h | 3 ++- src/arm64/lithium-codegen-arm64.cc | 2 +- src/assembler.cc | 10 ++++++---- src/compiler.h | 16 ++++++++++------ src/cpu-profiler-inl.h | 2 +- src/cpu-profiler.cc | 2 +- src/cpu-profiler.h | 3 ++- src/deoptimizer.cc | 8 +++++--- src/deoptimizer.h | 6 +++--- src/hydrogen-instructions.h | 2 +- src/ia32/assembler-ia32.h | 3 ++- src/ia32/lithium-codegen-ia32.cc | 2 +- src/lithium-codegen.cc | 2 +- src/mips/assembler-mips.h | 3 ++- src/mips/lithium-codegen-mips.cc | 2 +- src/mips64/assembler-mips64.h | 2 +- src/mips64/lithium-codegen-mips64.cc | 2 +- src/objects.cc | 14 +++++++++++--- src/ppc/assembler-ppc.h | 3 ++- src/ppc/lithium-codegen-ppc.cc | 2 +- src/profile-generator-inl.h | 2 +- src/profile-generator.cc | 12 +++++++++--- src/profile-generator.h | 23 ++++++++++++----------- src/x64/assembler-x64.h | 3 ++- src/x64/lithium-codegen-x64.cc | 2 +- src/x87/assembler-x87.h | 3 ++- src/x87/lithium-codegen-x87.cc | 2 +- 29 files changed, 86 insertions(+), 55 deletions(-) diff --git a/src/arm/assembler-arm.h b/src/arm/assembler-arm.h index 7d1e0bdbe..721b0bce4 100644 --- a/src/arm/assembler-arm.h +++ b/src/arm/assembler-arm.h @@ -45,6 +45,7 @@ #include "src/arm/constants-arm.h" #include "src/assembler.h" +#include "src/compiler.h" #include "src/serialize.h" namespace v8 { @@ -1400,7 +1401,7 @@ class Assembler : public AssemblerBase { // Record a deoptimization reason that can be used by a log or cpu profiler. // Use --trace-deopt to enable. - void RecordDeoptReason(const int reason, const int raw_position); + void RecordDeoptReason(const int reason, const SourcePosition position); // Record the emission of a constant pool. // diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc index 201120ae4..aa9bfc751 100644 --- a/src/arm/lithium-codegen-arm.cc +++ b/src/arm/lithium-codegen-arm.cc @@ -894,7 +894,7 @@ void LCodeGen::DeoptimizeIf(Condition condition, LInstruction* instr, __ stop("trap_on_deopt", condition); } - Deoptimizer::DeoptInfo deopt_info(instr->hydrogen_value()->position().raw(), + Deoptimizer::DeoptInfo deopt_info(instr->hydrogen_value()->position(), instr->Mnemonic(), deopt_reason); DCHECK(info()->IsStub() || frame_is_built_); // Go through jump table if we need to handle condition, build frame, or diff --git a/src/arm64/assembler-arm64.h b/src/arm64/assembler-arm64.h index 996898553..16d027065 100644 --- a/src/arm64/assembler-arm64.h +++ b/src/arm64/assembler-arm64.h @@ -11,6 +11,7 @@ #include "src/arm64/instructions-arm64.h" #include "src/assembler.h" +#include "src/compiler.h" #include "src/globals.h" #include "src/serialize.h" #include "src/utils.h" @@ -1010,7 +1011,7 @@ class Assembler : public AssemblerBase { // Record a deoptimization reason that can be used by a log or cpu profiler. // Use --trace-deopt to enable. - void RecordDeoptReason(const int reason, const int raw_position); + void RecordDeoptReason(const int reason, const SourcePosition position); int buffer_space() const; diff --git a/src/arm64/lithium-codegen-arm64.cc b/src/arm64/lithium-codegen-arm64.cc index 5926013c0..ddc8731c9 100644 --- a/src/arm64/lithium-codegen-arm64.cc +++ b/src/arm64/lithium-codegen-arm64.cc @@ -1058,7 +1058,7 @@ void LCodeGen::DeoptimizeBranch( __ Bind(&dont_trap); } - Deoptimizer::DeoptInfo deopt_info(instr->hydrogen_value()->position().raw(), + Deoptimizer::DeoptInfo deopt_info(instr->hydrogen_value()->position(), instr->Mnemonic(), deopt_reason); DCHECK(info()->IsStub() || frame_is_built_); // Go through jump table if we need to build frame, or restore caller doubles. diff --git a/src/assembler.cc b/src/assembler.cc index f4299ed71..86d4b11ae 100644 --- a/src/assembler.cc +++ b/src/assembler.cc @@ -465,7 +465,7 @@ void RelocInfoWriter::Write(const RelocInfo* rinfo) { DCHECK(begin_pos - pos_ <= RelocInfo::kMaxCallSize); } else if (rmode == RelocInfo::CODE_TARGET_WITH_ID) { // Use signed delta-encoding for id. - DCHECK(static_cast(rinfo->data()) == rinfo->data()); + DCHECK_EQ(static_cast(rinfo->data()), rinfo->data()); int id_delta = static_cast(rinfo->data()) - last_id_; // Check if delta is small enough to fit in a tagged byte. if (is_intn(id_delta, kSmallDataBits)) { @@ -483,12 +483,12 @@ void RelocInfoWriter::Write(const RelocInfo* rinfo) { WriteTaggedData(rinfo->data(), kDeoptReasonTag); } else if (RelocInfo::IsPosition(rmode)) { // Use signed delta-encoding for position. - DCHECK(static_cast(rinfo->data()) == rinfo->data()); + DCHECK_EQ(static_cast(rinfo->data()), rinfo->data()); int pos_delta = static_cast(rinfo->data()) - last_position_; if (rmode == RelocInfo::STATEMENT_POSITION) { WritePosition(pc_delta, pos_delta, rmode); } else { - DCHECK(rmode == RelocInfo::POSITION); + DCHECK_EQ(rmode, RelocInfo::POSITION); if (pc_delta != 0 || last_mode_ != RelocInfo::POSITION) { FlushPosition(); next_position_candidate_pc_delta_ = pc_delta; @@ -1656,9 +1656,11 @@ bool PositionsRecorder::WriteRecordedPositions() { // Platform specific but identical code for all the platforms. -void Assembler::RecordDeoptReason(const int reason, const int raw_position) { +void Assembler::RecordDeoptReason(const int reason, + const SourcePosition position) { if (FLAG_trace_deopt || isolate()->cpu_profiler()->is_profiling()) { EnsureSpace ensure_space(this); + int raw_position = position.IsUnknown() ? 0 : position.raw(); RecordRelocInfo(RelocInfo::POSITION, raw_position); RecordRelocInfo(RelocInfo::DEOPT_REASON, reason); } diff --git a/src/compiler.h b/src/compiler.h index 8ef2e0a95..593258357 100644 --- a/src/compiler.h +++ b/src/compiler.h @@ -39,9 +39,9 @@ struct OffsetRange { // script start. class SourcePosition { public: - SourcePosition(const SourcePosition& other) : value_(other.value_) {} - - static SourcePosition Unknown() { return SourcePosition(kNoPosition); } + static SourcePosition Unknown() { + return SourcePosition::FromRaw(kNoPosition); + } bool IsUnknown() const { return value_ == kNoPosition; } @@ -72,10 +72,14 @@ class SourcePosition { // Offset from the start of the inlined function. typedef BitField PositionField; - explicit SourcePosition(uint32_t value) : value_(value) {} - friend class HPositionInfo; - friend class LCodeGenBase; + friend class Deoptimizer; + + static SourcePosition FromRaw(uint32_t raw_position) { + SourcePosition position; + position.value_ = raw_position; + return position; + } // If FLAG_hydrogen_track_positions is set contains bitfields InliningIdField // and PositionField. diff --git a/src/cpu-profiler-inl.h b/src/cpu-profiler-inl.h index dfed578e2..12f57c22d 100644 --- a/src/cpu-profiler-inl.h +++ b/src/cpu-profiler-inl.h @@ -35,7 +35,7 @@ void CodeDisableOptEventRecord::UpdateCodeMap(CodeMap* code_map) { void CodeDeoptEventRecord::UpdateCodeMap(CodeMap* code_map) { CodeEntry* entry = code_map->FindEntry(start); - if (entry != NULL) entry->set_deopt_info(deopt_reason, raw_position); + if (entry != NULL) entry->set_deopt_info(deopt_reason, position); } diff --git a/src/cpu-profiler.cc b/src/cpu-profiler.cc index 62a94112f..06640b4f1 100644 --- a/src/cpu-profiler.cc +++ b/src/cpu-profiler.cc @@ -336,7 +336,7 @@ void CpuProfiler::CodeDeoptEvent(Code* code, int bailout_id, Address pc, Deoptimizer::DeoptInfo info = Deoptimizer::GetDeoptInfo(code, bailout_id); rec->start = code->address(); rec->deopt_reason = Deoptimizer::GetDeoptReason(info.deopt_reason); - rec->raw_position = info.raw_position; + rec->position = info.position; processor_->Enqueue(evt_rec); processor_->AddDeoptStack(isolate_, pc, fp_to_sp_delta); } diff --git a/src/cpu-profiler.h b/src/cpu-profiler.h index d8341d823..49611f3b3 100644 --- a/src/cpu-profiler.h +++ b/src/cpu-profiler.h @@ -9,6 +9,7 @@ #include "src/base/atomicops.h" #include "src/base/platform/time.h" #include "src/circular-queue.h" +#include "src/compiler.h" #include "src/sampler.h" #include "src/unbound-queue.h" @@ -78,7 +79,7 @@ class CodeDeoptEventRecord : public CodeEventRecord { public: Address start; const char* deopt_reason; - int raw_position; + SourcePosition position; INLINE(void UpdateCodeMap(CodeMap* code_map)); }; diff --git a/src/deoptimizer.cc b/src/deoptimizer.cc index 05d3953d7..d45ca228f 100644 --- a/src/deoptimizer.cc +++ b/src/deoptimizer.cc @@ -3650,7 +3650,7 @@ const char* Deoptimizer::GetDeoptReason(DeoptReason deopt_reason) { Deoptimizer::DeoptInfo Deoptimizer::GetDeoptInfo(Code* code, int bailout_id) { - int last_position = 0; + SourcePosition last_position = SourcePosition::Unknown(); Isolate* isolate = code->GetIsolate(); Deoptimizer::DeoptReason last_reason = Deoptimizer::kNoReason; int mask = RelocInfo::ModeMask(RelocInfo::DEOPT_REASON) | @@ -3659,7 +3659,9 @@ Deoptimizer::DeoptInfo Deoptimizer::GetDeoptInfo(Code* code, int bailout_id) { for (RelocIterator it(code, mask); !it.done(); it.next()) { RelocInfo* info = it.rinfo(); if (info->rmode() == RelocInfo::POSITION) { - last_position = static_cast(info->data()); + int raw_position = static_cast(info->data()); + last_position = raw_position ? SourcePosition::FromRaw(raw_position) + : SourcePosition::Unknown(); } else if (info->rmode() == RelocInfo::DEOPT_REASON) { last_reason = static_cast(info->data()); } else if (last_reason != Deoptimizer::kNoReason) { @@ -3677,6 +3679,6 @@ Deoptimizer::DeoptInfo Deoptimizer::GetDeoptInfo(Code* code, int bailout_id) { } } } - return DeoptInfo(0, NULL, Deoptimizer::kNoReason); + return DeoptInfo(SourcePosition::Unknown(), NULL, Deoptimizer::kNoReason); } } } // namespace v8::internal diff --git a/src/deoptimizer.h b/src/deoptimizer.h index 471a05d9b..501164f2d 100644 --- a/src/deoptimizer.h +++ b/src/deoptimizer.h @@ -184,10 +184,10 @@ class Deoptimizer : public Malloced { static const char* GetDeoptReason(DeoptReason deopt_reason); struct DeoptInfo { - DeoptInfo(int r, const char* m, DeoptReason d) - : raw_position(r), mnemonic(m), deopt_reason(d) {} + DeoptInfo(SourcePosition position, const char* m, DeoptReason d) + : position(position), mnemonic(m), deopt_reason(d) {} - int raw_position; + SourcePosition position; const char* mnemonic; DeoptReason deopt_reason; }; diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h index a9eb57d22..c6e8a5883 100644 --- a/src/hydrogen-instructions.h +++ b/src/hydrogen-instructions.h @@ -982,7 +982,7 @@ class HPositionInfo { if (has_operand_positions()) { return operand_positions()[kInstructionPosIndex]; } - return SourcePosition(static_cast(UntagPosition(data_))); + return SourcePosition::FromRaw(static_cast(UntagPosition(data_))); } void set_position(SourcePosition pos) { diff --git a/src/ia32/assembler-ia32.h b/src/ia32/assembler-ia32.h index a17b539ba..ea5a7e259 100644 --- a/src/ia32/assembler-ia32.h +++ b/src/ia32/assembler-ia32.h @@ -40,6 +40,7 @@ #include #include "src/assembler.h" +#include "src/compiler.h" #include "src/isolate.h" #include "src/serialize.h" @@ -1266,7 +1267,7 @@ class Assembler : public AssemblerBase { // Record a deoptimization reason that can be used by a log or cpu profiler. // Use --trace-deopt to enable. - void RecordDeoptReason(const int reason, const int raw_position); + void RecordDeoptReason(const int reason, const SourcePosition position); // Writes a single byte or word of data in the code stream. Used for // inline tables, e.g., jump-tables. diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc index 53888c032..8705af719 100644 --- a/src/ia32/lithium-codegen-ia32.cc +++ b/src/ia32/lithium-codegen-ia32.cc @@ -862,7 +862,7 @@ void LCodeGen::DeoptimizeIf(Condition cc, LInstruction* instr, __ bind(&done); } - Deoptimizer::DeoptInfo deopt_info(instr->hydrogen_value()->position().raw(), + Deoptimizer::DeoptInfo deopt_info(instr->hydrogen_value()->position(), instr->Mnemonic(), deopt_reason); DCHECK(info()->IsStub() || frame_is_built_); if (cc == no_condition && frame_is_built_) { diff --git a/src/lithium-codegen.cc b/src/lithium-codegen.cc index 242db222f..ea409b2af 100644 --- a/src/lithium-codegen.cc +++ b/src/lithium-codegen.cc @@ -153,7 +153,7 @@ void LCodeGenBase::Comment(const char* format, ...) { void LCodeGenBase::DeoptComment(const Deoptimizer::DeoptInfo& deopt_info) { - masm()->RecordDeoptReason(deopt_info.deopt_reason, deopt_info.raw_position); + masm()->RecordDeoptReason(deopt_info.deopt_reason, deopt_info.position); } diff --git a/src/mips/assembler-mips.h b/src/mips/assembler-mips.h index 585cf5e50..296311273 100644 --- a/src/mips/assembler-mips.h +++ b/src/mips/assembler-mips.h @@ -41,6 +41,7 @@ #include #include "src/assembler.h" +#include "src/compiler.h" #include "src/mips/constants-mips.h" #include "src/serialize.h" @@ -1020,7 +1021,7 @@ class Assembler : public AssemblerBase { // Record a deoptimization reason that can be used by a log or cpu profiler. // Use --trace-deopt to enable. - void RecordDeoptReason(const int reason, const int raw_position); + void RecordDeoptReason(const int reason, const SourcePosition position); static int RelocateInternalReference(RelocInfo::Mode rmode, byte* pc, diff --git a/src/mips/lithium-codegen-mips.cc b/src/mips/lithium-codegen-mips.cc index dbf5416a2..ac7c74114 100644 --- a/src/mips/lithium-codegen-mips.cc +++ b/src/mips/lithium-codegen-mips.cc @@ -857,7 +857,7 @@ void LCodeGen::DeoptimizeIf(Condition condition, LInstruction* instr, __ bind(&skip); } - Deoptimizer::DeoptInfo deopt_info(instr->hydrogen_value()->position().raw(), + Deoptimizer::DeoptInfo deopt_info(instr->hydrogen_value()->position(), instr->Mnemonic(), deopt_reason); DCHECK(info()->IsStub() || frame_is_built_); // Go through jump table if we need to handle condition, build frame, or diff --git a/src/mips64/assembler-mips64.h b/src/mips64/assembler-mips64.h index a550ef2c8..43f7b0262 100644 --- a/src/mips64/assembler-mips64.h +++ b/src/mips64/assembler-mips64.h @@ -1060,7 +1060,7 @@ class Assembler : public AssemblerBase { // Record a deoptimization reason that can be used by a log or cpu profiler. // Use --trace-deopt to enable. - void RecordDeoptReason(const int reason, const int raw_position); + void RecordDeoptReason(const int reason, const SourcePosition position); static int RelocateInternalReference(RelocInfo::Mode rmode, byte* pc, intptr_t pc_delta); diff --git a/src/mips64/lithium-codegen-mips64.cc b/src/mips64/lithium-codegen-mips64.cc index fe907b624..f392e6fff 100644 --- a/src/mips64/lithium-codegen-mips64.cc +++ b/src/mips64/lithium-codegen-mips64.cc @@ -807,7 +807,7 @@ void LCodeGen::DeoptimizeIf(Condition condition, LInstruction* instr, __ bind(&skip); } - Deoptimizer::DeoptInfo deopt_info(instr->hydrogen_value()->position().raw(), + Deoptimizer::DeoptInfo deopt_info(instr->hydrogen_value()->position(), instr->Mnemonic(), deopt_reason); DCHECK(info()->IsStub() || frame_is_built_); // Go through jump table if we need to handle condition, build frame, or diff --git a/src/objects.cc b/src/objects.cc index 6fd95030c..3895aecb5 100644 --- a/src/objects.cc +++ b/src/objects.cc @@ -15,6 +15,7 @@ #include "src/bootstrapper.h" #include "src/code-stubs.h" #include "src/codegen.h" +#include "src/compiler.h" #include "src/cpu-profiler.h" #include "src/date.h" #include "src/debug.h" @@ -11264,9 +11265,16 @@ Code* Code::GetCodeAgeStub(Isolate* isolate, Age age, MarkingParity parity) { void Code::PrintDeoptLocation(FILE* out, int bailout_id) { Deoptimizer::DeoptInfo info = Deoptimizer::GetDeoptInfo(this, bailout_id); - if (info.deopt_reason != Deoptimizer::kNoReason || info.raw_position != 0) { - PrintF(out, " ;;; deoptimize at %d: %s\n", info.raw_position, - Deoptimizer::GetDeoptReason(info.deopt_reason)); + class SourcePosition pos = info.position; + if (info.deopt_reason != Deoptimizer::kNoReason || !pos.IsUnknown()) { + if (FLAG_hydrogen_track_positions) { + PrintF(out, " ;;; deoptimize at %d_%d: %s\n", + pos.inlining_id(), pos.position(), + Deoptimizer::GetDeoptReason(info.deopt_reason)); + } else { + PrintF(out, " ;;; deoptimize at %d: %s\n", pos.raw(), + Deoptimizer::GetDeoptReason(info.deopt_reason)); + } } } diff --git a/src/ppc/assembler-ppc.h b/src/ppc/assembler-ppc.h index 672b928eb..7d52c74dd 100644 --- a/src/ppc/assembler-ppc.h +++ b/src/ppc/assembler-ppc.h @@ -44,6 +44,7 @@ #include #include "src/assembler.h" +#include "src/compiler.h" #include "src/ppc/constants-ppc.h" #include "src/serialize.h" @@ -1302,7 +1303,7 @@ class Assembler : public AssemblerBase { // Record a deoptimization reason that can be used by a log or cpu profiler. // Use --trace-deopt to enable. - void RecordDeoptReason(const int reason, const int raw_position); + void RecordDeoptReason(const int reason, const SourcePosition position); // Writes a single byte or word of data in the code stream. Used // for inline tables, e.g., jump-tables. diff --git a/src/ppc/lithium-codegen-ppc.cc b/src/ppc/lithium-codegen-ppc.cc index 06a939725..93aae29f4 100644 --- a/src/ppc/lithium-codegen-ppc.cc +++ b/src/ppc/lithium-codegen-ppc.cc @@ -813,7 +813,7 @@ void LCodeGen::DeoptimizeIf(Condition cond, LInstruction* instr, __ stop("trap_on_deopt", cond, kDefaultStopCode, cr); } - Deoptimizer::DeoptInfo deopt_info(instr->hydrogen_value()->position().raw(), + Deoptimizer::DeoptInfo deopt_info(instr->hydrogen_value()->position(), instr->Mnemonic(), deopt_reason); DCHECK(info()->IsStub() || frame_is_built_); // Go through jump table if we need to handle condition, build frame, or diff --git a/src/profile-generator-inl.h b/src/profile-generator-inl.h index d6d38e3f6..1e543dda8 100644 --- a/src/profile-generator-inl.h +++ b/src/profile-generator-inl.h @@ -26,7 +26,7 @@ CodeEntry::CodeEntry(Logger::LogEventsAndTags tag, const char* name, no_frame_ranges_(NULL), bailout_reason_(kEmptyBailoutReason), deopt_reason_(kNoDeoptReason), - deopt_location_(0), + deopt_position_(SourcePosition::Unknown()), line_info_(line_info), instruction_start_(instruction_start) {} diff --git a/src/profile-generator.cc b/src/profile-generator.cc index 656da1e97..d030b681e 100644 --- a/src/profile-generator.cc +++ b/src/profile-generator.cc @@ -113,7 +113,7 @@ void CodeEntry::FillFunctionInfo(SharedFunctionInfo* shared) { void ProfileNode::CollectDeoptInfo(CodeEntry* entry) { - deopt_infos_.Add(DeoptInfo(entry->deopt_reason(), entry->deopt_location())); + deopt_infos_.Add(DeoptInfo(entry->deopt_reason(), entry->deopt_position())); entry->clear_deopt_info(); } @@ -182,8 +182,14 @@ void ProfileNode::Print(int indent) { base::OS::Print(" %s:%d", entry_->resource_name(), entry_->line_number()); base::OS::Print("\n"); for (auto info : deopt_infos_) { - base::OS::Print("%*s deopted at %d with reason '%s'\n", indent + 10, "", - info.deopt_location, info.deopt_reason); + if (FLAG_hydrogen_track_positions) { + base::OS::Print("%*s deopted at %d_%d with reason '%s'\n", indent + 10, + "", info.deopt_position.inlining_id(), + info.deopt_position.position(), info.deopt_reason); + } else { + base::OS::Print("%*s deopted at %d with reason '%s'\n", indent + 10, "", + info.deopt_position.raw(), info.deopt_reason); + } } const char* bailout_reason = entry_->bailout_reason(); if (bailout_reason != GetBailoutReason(BailoutReason::kNoReason) && diff --git a/src/profile-generator.h b/src/profile-generator.h index 08e4afd6c..7ea168bcd 100644 --- a/src/profile-generator.h +++ b/src/profile-generator.h @@ -8,6 +8,7 @@ #include #include "include/v8-profiler.h" #include "src/allocation.h" +#include "src/compiler.h" #include "src/hashmap.h" #include "src/strings-storage.h" @@ -64,17 +65,17 @@ class CodeEntry { } const char* bailout_reason() const { return bailout_reason_; } - void set_deopt_info(const char* deopt_reason, int location) { - DCHECK(!deopt_location_); + void set_deopt_info(const char* deopt_reason, SourcePosition position) { + DCHECK(deopt_position_.IsUnknown()); deopt_reason_ = deopt_reason; - deopt_location_ = location; + deopt_position_ = position; } const char* deopt_reason() const { return deopt_reason_; } - int deopt_location() const { return deopt_location_; } - bool has_deopt_info() const { return deopt_location_; } + SourcePosition deopt_position() const { return deopt_position_; } + bool has_deopt_info() const { return !deopt_position_.IsUnknown(); } void clear_deopt_info() { deopt_reason_ = kNoDeoptReason; - deopt_location_ = 0; + deopt_position_ = SourcePosition::Unknown(); } void FillFunctionInfo(SharedFunctionInfo* shared); @@ -119,7 +120,7 @@ class CodeEntry { List* no_frame_ranges_; const char* bailout_reason_; const char* deopt_reason_; - int deopt_location_; + SourcePosition deopt_position_; JITLineInfoTable* line_info_; Address instruction_start_; @@ -132,13 +133,13 @@ class ProfileTree; class ProfileNode { private: struct DeoptInfo { - DeoptInfo(const char* deopt_reason, int deopt_location) - : deopt_reason(deopt_reason), deopt_location(deopt_location) {} + DeoptInfo(const char* deopt_reason, SourcePosition deopt_position) + : deopt_reason(deopt_reason), deopt_position(deopt_position) {} DeoptInfo(const DeoptInfo& info) : deopt_reason(info.deopt_reason), - deopt_location(info.deopt_location) {} + deopt_position(info.deopt_position) {} const char* deopt_reason; - int deopt_location; + SourcePosition deopt_position; }; public: diff --git a/src/x64/assembler-x64.h b/src/x64/assembler-x64.h index 08a23d6c6..96715d139 100644 --- a/src/x64/assembler-x64.h +++ b/src/x64/assembler-x64.h @@ -40,6 +40,7 @@ #include #include "src/assembler.h" +#include "src/compiler.h" #include "src/serialize.h" namespace v8 { @@ -1341,7 +1342,7 @@ class Assembler : public AssemblerBase { // Record a deoptimization reason that can be used by a log or cpu profiler. // Use --trace-deopt to enable. - void RecordDeoptReason(const int reason, const int raw_position); + void RecordDeoptReason(const int reason, const SourcePosition position); // Allocate a constant pool of the correct size for the generated code. Handle NewConstantPool(Isolate* isolate); diff --git a/src/x64/lithium-codegen-x64.cc b/src/x64/lithium-codegen-x64.cc index 33fc46582..6dde8a309 100644 --- a/src/x64/lithium-codegen-x64.cc +++ b/src/x64/lithium-codegen-x64.cc @@ -769,7 +769,7 @@ void LCodeGen::DeoptimizeIf(Condition cc, LInstruction* instr, __ bind(&done); } - Deoptimizer::DeoptInfo deopt_info(instr->hydrogen_value()->position().raw(), + Deoptimizer::DeoptInfo deopt_info(instr->hydrogen_value()->position(), instr->Mnemonic(), deopt_reason); DCHECK(info()->IsStub() || frame_is_built_); // Go through jump table if we need to handle condition, build frame, or diff --git a/src/x87/assembler-x87.h b/src/x87/assembler-x87.h index 05359648a..2fb46e1e6 100644 --- a/src/x87/assembler-x87.h +++ b/src/x87/assembler-x87.h @@ -40,6 +40,7 @@ #include #include "src/assembler.h" +#include "src/compiler.h" #include "src/isolate.h" #include "src/serialize.h" @@ -941,7 +942,7 @@ class Assembler : public AssemblerBase { // Record a deoptimization reason that can be used by a log or cpu profiler. // Use --trace-deopt to enable. - void RecordDeoptReason(const int reason, const int raw_position); + void RecordDeoptReason(const int reason, const SourcePosition position); // Writes a single byte or word of data in the code stream. Used for // inline tables, e.g., jump-tables. diff --git a/src/x87/lithium-codegen-x87.cc b/src/x87/lithium-codegen-x87.cc index 4c2a15afc..8fd8f5b97 100644 --- a/src/x87/lithium-codegen-x87.cc +++ b/src/x87/lithium-codegen-x87.cc @@ -1144,7 +1144,7 @@ void LCodeGen::DeoptimizeIf(Condition cc, LInstruction* instr, __ bind(&done); } - Deoptimizer::DeoptInfo deopt_info(instr->hydrogen_value()->position().raw(), + Deoptimizer::DeoptInfo deopt_info(instr->hydrogen_value()->position(), instr->Mnemonic(), deopt_reason); DCHECK(info()->IsStub() || frame_is_built_); if (cc == no_condition && frame_is_built_) { -- 2.34.1