X87: Externalize deoptimization reasons.
authorchunyang.dai <chunyang.dai@intel.com>
Mon, 9 Feb 2015 14:10:07 +0000 (06:10 -0800)
committerCommit bot <commit-bot@chromium.org>
Mon, 9 Feb 2015 14:10:17 +0000 (14:10 +0000)
port 2491a639bf46da4bfdcf65329305ee3053aa5fec (r26463)

original commit message:

   Externalize deoptimization reasons.
   1) The hardcoded strings were converted into DeoptReason enum.

   2) Deopt comment were converted into a pair location and deopt reason entries so
      the deopt reason tracking mode would less affect the size of the RelocInfo table and heap.

   3) DeoptReason entry in RelocInfo reuses kCommentTag value and generates short entry in RelocInfo table.

BUG=

Review URL: https://codereview.chromium.org/867243005

Cr-Commit-Position: refs/heads/master@{#26526}

src/x87/assembler-x87.cc
src/x87/assembler-x87.h
src/x87/lithium-codegen-x87.cc
src/x87/lithium-codegen-x87.h

index 4177156ee66c1dede3776720fea62aa6548bae20..0784592cc13be6439bb8cff83c14b4eb7569d4c9 100644 (file)
@@ -1919,6 +1919,15 @@ void Assembler::RecordComment(const char* msg, bool force) {
 }
 
 
+void Assembler::RecordDeoptReason(const int reason, const int raw_position) {
+  if (FLAG_trace_deopt) {
+    EnsureSpace ensure_space(this);
+    RecordRelocInfo(RelocInfo::POSITION, raw_position);
+    RecordRelocInfo(RelocInfo::DEOPT_REASON, reason);
+  }
+}
+
+
 void Assembler::GrowBuffer() {
   DCHECK(buffer_overflow());
   if (!own_buffer_) FATAL("external code buffer is too small");
index 1da632f2660ed768e054c47757fe3c97ecfa141e..94c814f493960a421a57a0cccef37c811775961e 100644 (file)
@@ -935,6 +935,10 @@ class Assembler : public AssemblerBase {
   // write a comment.
   void RecordComment(const char* msg, bool force = false);
 
+  // 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);
+
   // Writes a single byte or word of data in the code stream.  Used for
   // inline tables, e.g., jump-tables.
   void db(uint8_t data);
index 648bee03fcd15d14028e4788255d914c4688c453..76edbb095e1c906c71c201548e475544655f799d 100644 (file)
@@ -1080,7 +1080,7 @@ void LCodeGen::RegisterEnvironmentForDeoptimization(
 
 
 void LCodeGen::DeoptimizeIf(Condition cc, LInstruction* instr,
-                            const char* detail,
+                            Deoptimizer::DeoptReason deopt_reason,
                             Deoptimizer::BailoutType bailout_type) {
   LEnvironment* environment = instr->environment();
   RegisterEnvironmentForDeoptimization(environment, Safepoint::kNoLazyDeopt);
@@ -1144,7 +1144,7 @@ void LCodeGen::DeoptimizeIf(Condition cc, LInstruction* instr,
   }
 
   Deoptimizer::Reason reason(instr->hydrogen_value()->position().raw(),
-                             instr->Mnemonic(), detail);
+                             instr->Mnemonic(), deopt_reason);
   DCHECK(info()->IsStub() || frame_is_built_);
   if (cc == no_condition && frame_is_built_) {
     DeoptComment(reason);
@@ -1168,11 +1168,11 @@ void LCodeGen::DeoptimizeIf(Condition cc, LInstruction* instr,
 
 
 void LCodeGen::DeoptimizeIf(Condition cc, LInstruction* instr,
-                            const char* detail) {
+                            Deoptimizer::DeoptReason deopt_reason) {
   Deoptimizer::BailoutType bailout_type = info()->IsStub()
       ? Deoptimizer::LAZY
       : Deoptimizer::EAGER;
-  DeoptimizeIf(cc, instr, detail, bailout_type);
+  DeoptimizeIf(cc, instr, deopt_reason, bailout_type);
 }
 
 
@@ -5311,7 +5311,7 @@ void LCodeGen::DoDeferredTaggedToI(LTaggedToI* instr, Label* done) {
     __ bind(&check_false);
     __ cmp(input_reg, factory()->false_value());
     DeoptimizeIf(not_equal, instr,
-                 Deoptimizer::kNotAHeapNumberUndefinedTrueFalse);
+                 Deoptimizer::kNotAHeapNumberUndefinedBoolean);
     __ Move(input_reg, Immediate(0));
   } else {
     // TODO(olivf) Converting a number on the fpu is actually quite slow. We
index 13d6cda5562243042fca8cb0798988f9ad3bdb5d..4536948e0cb4c5771ea1b147cc0f0826e03ffa81 100644 (file)
@@ -229,9 +229,11 @@ class LCodeGen: public LCodeGenBase {
 
   void RegisterEnvironmentForDeoptimization(LEnvironment* environment,
                                             Safepoint::DeoptMode mode);
-  void DeoptimizeIf(Condition cc, LInstruction* instr, const char* detail,
+  void DeoptimizeIf(Condition cc, LInstruction* instr,
+                    Deoptimizer::DeoptReason deopt_reason,
                     Deoptimizer::BailoutType bailout_type);
-  void DeoptimizeIf(Condition cc, LInstruction* instr, const char* detail);
+  void DeoptimizeIf(Condition cc, LInstruction* instr,
+                    Deoptimizer::DeoptReason deopt_reason);
 
   bool DeoptEveryNTimes() {
     return FLAG_deopt_every_n_times != 0 && !info()->IsStub();