Reviewers: ulan,
Description:
Refactoring only: Extracted method to print deopt location.
Please review this at https://codereview.chromium.org/11640041/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files:
M src/deoptimizer.cc
M src/objects.h
M src/objects.cc
Index: src/deoptimizer.cc
diff --git a/src/deoptimizer.cc b/src/deoptimizer.cc
index
7018346842a84eb4c493444e6b3bf1cb2dc17192..2cfba59fbded47b7c1ea9fd31098e1fc6b84a031
100644
--- a/src/deoptimizer.cc
+++ b/src/deoptimizer.cc
@@ -529,26 +529,7 @@ Deoptimizer::Deoptimizer(Isolate* isolate,
if (type == EAGER) {
ASSERT(from == NULL);
compiled_code_ = function_->code();
- if (FLAG_trace_deopt && FLAG_code_comments) {
- // Print instruction associated with this bailout.
- const char* last_comment = NULL;
- int mask = RelocInfo::ModeMask(RelocInfo::COMMENT)
- | RelocInfo::ModeMask(RelocInfo::RUNTIME_ENTRY);
- for (RelocIterator it(compiled_code_, mask); !it.done(); it.next()) {
- RelocInfo* info = it.rinfo();
- if (info->rmode() == RelocInfo::COMMENT) {
- last_comment = reinterpret_cast<const char*>(info->data());
- }
- if (info->rmode() == RelocInfo::RUNTIME_ENTRY) {
- unsigned id = Deoptimizer::GetDeoptimizationId(
- info->target_address(), Deoptimizer::EAGER);
- if (id == bailout_id && last_comment != NULL) {
- PrintF(" %s\n", last_comment);
- break;
- }
- }
- }
- }
+ if (FLAG_trace_deopt) compiled_code_->PrintDeoptLocation(bailout_id);
} else if (type == LAZY) {
compiled_code_ =
isolate->deoptimizer_data()->FindDeoptimizingCode(from);
if (compiled_code_ == NULL) {
Index: src/objects.cc
diff --git a/src/objects.cc b/src/objects.cc
index
5f87a26065df2a176884b269a0fe99f0ffb2c064..e43a94ab49978c2db77abe22bee7dd2df65af242
100644
--- a/src/objects.cc
+++ b/src/objects.cc
@@ -9138,6 +9138,25 @@ Code* Code::GetCodeAgeStub(Age age, MarkingParity
parity) {
}
+void Code::PrintDeoptLocation(int bailout_id) {
+ const char* last_comment = NULL;
+ int mask = RelocInfo::ModeMask(RelocInfo::COMMENT)
+ | RelocInfo::ModeMask(RelocInfo::RUNTIME_ENTRY);
+ for (RelocIterator it(this, mask); !it.done(); it.next()) {
+ RelocInfo* info = it.rinfo();
+ if (info->rmode() == RelocInfo::COMMENT) {
+ last_comment = reinterpret_cast<const char*>(info->data());
+ } else if (last_comment != NULL &&
+ bailout_id == Deoptimizer::GetDeoptimizationId(
+ info->target_address(), Deoptimizer::EAGER)) {
+ CHECK(info->rmode() == RelocInfo::RUNTIME_ENTRY);
+ PrintF(" %s\n", last_comment);
+ return;
+ }
+ }
+}
+
+
#ifdef ENABLE_DISASSEMBLER
void DeoptimizationInputData::DeoptimizationInputDataPrint(FILE* out) {
Index: src/objects.h
diff --git a/src/objects.h b/src/objects.h
index
83a05ade808f32d32ad08889741182da50bbddf8..8fe7fa77131cd5c42d00abc4d6075d323b64b2b9
100644
--- a/src/objects.h
+++ b/src/objects.h
@@ -4528,6 +4528,8 @@ class Code: public HeapObject {
static bool IsYoungSequence(byte* sequence);
bool IsOld();
+ void PrintDeoptLocation(int bailout_id);
+
// Max loop nesting marker used to postpose OSR. We don't take loop
// nesting that is deeper than 5 levels into account.
static const int kMaxLoopNestingMarker = 6;
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev