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

Reply via email to