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

Side by Side Diff: src/mips64/lithium-codegen-mips64.cc

Issue 595513002: Further improve deopt reason output. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 2 months 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 | Annotate | Revision Log
« no previous file with comments | « src/mips64/lithium-codegen-mips64.h ('k') | src/utils.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/code-factory.h" 7 #include "src/code-factory.h"
8 #include "src/code-stubs.h" 8 #include "src/code-stubs.h"
9 #include "src/hydrogen-osr.h" 9 #include "src/hydrogen-osr.h"
10 #include "src/ic/ic.h" 10 #include "src/ic/ic.h"
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 } 293 }
294 } 294 }
295 // Deferred code is the last part of the instruction sequence. Mark 295 // Deferred code is the last part of the instruction sequence. Mark
296 // the generated code as done unless we bailed out. 296 // the generated code as done unless we bailed out.
297 if (!is_aborted()) status_ = DONE; 297 if (!is_aborted()) status_ = DONE;
298 return !is_aborted(); 298 return !is_aborted();
299 } 299 }
300 300
301 301
302 bool LCodeGen::GenerateJumpTable() { 302 bool LCodeGen::GenerateJumpTable() {
303 if (deopt_jump_table_.length() > 0) { 303 if (jump_table_.length() > 0) {
304 Comment(";;; -------------------- Jump table --------------------"); 304 Comment(";;; -------------------- Jump table --------------------");
305 } 305 }
306 Assembler::BlockTrampolinePoolScope block_trampoline_pool(masm_); 306 Assembler::BlockTrampolinePoolScope block_trampoline_pool(masm_);
307 Label table_start; 307 Label table_start;
308 __ bind(&table_start); 308 __ bind(&table_start);
309 Label needs_frame; 309 Label needs_frame;
310 for (int i = 0; i < deopt_jump_table_.length(); i++) { 310 for (int i = 0; i < jump_table_.length(); i++) {
311 Deoptimizer::JumpTableEntry* table_entry = &deopt_jump_table_[i]; 311 Deoptimizer::JumpTableEntry* table_entry = &jump_table_[i];
312 __ bind(&table_entry->label); 312 __ bind(&table_entry->label);
313 Address entry = table_entry->address; 313 Address entry = table_entry->address;
314 Deoptimizer::BailoutType type = table_entry->bailout_type;
315 int id = Deoptimizer::GetDeoptimizationId(isolate(), entry, type);
316 DCHECK_NE(Deoptimizer::kNotDeoptimizationEntry, id);
317 Comment(";;; jump table entry %d: deoptimization bailout %d.", i, id);
318 DeoptComment(table_entry->reason); 314 DeoptComment(table_entry->reason);
319 __ li(t9, Operand(ExternalReference::ForDeoptEntry(entry))); 315 __ li(t9, Operand(ExternalReference::ForDeoptEntry(entry)));
320 if (table_entry->needs_frame) { 316 if (table_entry->needs_frame) {
321 DCHECK(!info()->saves_caller_doubles()); 317 DCHECK(!info()->saves_caller_doubles());
322 if (needs_frame.is_bound()) { 318 if (needs_frame.is_bound()) {
323 __ Branch(&needs_frame); 319 __ Branch(&needs_frame);
324 } else { 320 } else {
325 __ bind(&needs_frame); 321 __ bind(&needs_frame);
326 __ MultiPush(cp.bit() | fp.bit() | ra.bit()); 322 __ MultiPush(cp.bit() | fp.bit() | ra.bit());
327 // This variant of deopt can only be used with stubs. Since we don't 323 // This variant of deopt can only be used with stubs. Since we don't
(...skipping 487 matching lines...) Expand 10 before | Expand all | Expand 10 after
815 Deoptimizer::Reason reason(instr->hydrogen_value()->position().raw(), 811 Deoptimizer::Reason reason(instr->hydrogen_value()->position().raw(),
816 instr->Mnemonic(), detail); 812 instr->Mnemonic(), detail);
817 DCHECK(info()->IsStub() || frame_is_built_); 813 DCHECK(info()->IsStub() || frame_is_built_);
818 // Go through jump table if we need to handle condition, build frame, or 814 // Go through jump table if we need to handle condition, build frame, or
819 // restore caller doubles. 815 // restore caller doubles.
820 if (condition == al && frame_is_built_ && 816 if (condition == al && frame_is_built_ &&
821 !info()->saves_caller_doubles()) { 817 !info()->saves_caller_doubles()) {
822 DeoptComment(reason); 818 DeoptComment(reason);
823 __ Call(entry, RelocInfo::RUNTIME_ENTRY, condition, src1, src2); 819 __ Call(entry, RelocInfo::RUNTIME_ENTRY, condition, src1, src2);
824 } else { 820 } else {
821 Deoptimizer::JumpTableEntry table_entry(entry, reason, bailout_type,
822 !frame_is_built_);
825 // We often have several deopts to the same entry, reuse the last 823 // We often have several deopts to the same entry, reuse the last
826 // jump entry if this is the case. 824 // jump entry if this is the case.
827 if (deopt_jump_table_.is_empty() || 825 if (jump_table_.is_empty() ||
828 (deopt_jump_table_.last().address != entry) || 826 !table_entry.IsEquivalentTo(jump_table_.last())) {
829 (deopt_jump_table_.last().bailout_type != bailout_type) || 827 jump_table_.Add(table_entry, zone());
830 (deopt_jump_table_.last().needs_frame != !frame_is_built_)) {
831 Deoptimizer::JumpTableEntry table_entry(entry, reason, bailout_type,
832 !frame_is_built_);
833 deopt_jump_table_.Add(table_entry, zone());
834 } 828 }
835 __ Branch(&deopt_jump_table_.last().label, condition, src1, src2); 829 __ Branch(&jump_table_.last().label, condition, src1, src2);
836 } 830 }
837 } 831 }
838 832
839 833
840 void LCodeGen::DeoptimizeIf(Condition condition, LInstruction* instr, 834 void LCodeGen::DeoptimizeIf(Condition condition, LInstruction* instr,
841 Register src1, const Operand& src2, 835 Register src1, const Operand& src2,
842 const char* detail) { 836 const char* detail) {
843 Deoptimizer::BailoutType bailout_type = info()->IsStub() 837 Deoptimizer::BailoutType bailout_type = info()->IsStub()
844 ? Deoptimizer::LAZY 838 ? Deoptimizer::LAZY
845 : Deoptimizer::EAGER; 839 : Deoptimizer::EAGER;
(...skipping 5100 matching lines...) Expand 10 before | Expand all | Expand 10 after
5946 __ li(at, scope_info); 5940 __ li(at, scope_info);
5947 __ Push(at, ToRegister(instr->function())); 5941 __ Push(at, ToRegister(instr->function()));
5948 CallRuntime(Runtime::kPushBlockContext, 2, instr); 5942 CallRuntime(Runtime::kPushBlockContext, 2, instr);
5949 RecordSafepoint(Safepoint::kNoLazyDeopt); 5943 RecordSafepoint(Safepoint::kNoLazyDeopt);
5950 } 5944 }
5951 5945
5952 5946
5953 #undef __ 5947 #undef __
5954 5948
5955 } } // namespace v8::internal 5949 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/mips64/lithium-codegen-mips64.h ('k') | src/utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698