From: palfia@homejinni.com Date: Mon, 21 Oct 2013 22:20:45 +0000 (+0000) Subject: MIPS: Add tool to visualize machine code/lithium. X-Git-Tag: upstream/4.7.83~12021 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=26e02eea57bc07635ffceed4c5ec6c4727e2ede3;p=platform%2Fupstream%2Fv8.git MIPS: Add tool to visualize machine code/lithium. Port r17295 (b36eb655) Original commit message: In the process: - Add a command-line flag --opt-code-positions to track source position information throughout optimized code. - Add a subclass of the hydrogen graph builder to ensure that the source position is properly set on the graph builder for all generated hydrogen code. - Overhaul handling of source positions in hydrogen to ensure they are passed through to generated code consistently and in most cases transparently. BUG= R=plind44@gmail.com Review URL: https://codereview.chromium.org/33803002 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@17305 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/src/mips/lithium-codegen-mips.cc b/src/mips/lithium-codegen-mips.cc index 73ecf48..2c6e5a5 100644 --- a/src/mips/lithium-codegen-mips.cc +++ b/src/mips/lithium-codegen-mips.cc @@ -253,8 +253,9 @@ bool LCodeGen::GenerateDeferredCode() { for (int i = 0; !is_aborted() && i < deferred_.length(); i++) { LDeferredCode* code = deferred_[i]; - int pos = instructions_->at(code->instruction_index())->position(); - RecordAndUpdatePosition(pos); + HValue* value = + instructions_->at(code->instruction_index())->hydrogen_value(); + RecordAndWritePosition(value->position()); Comment(";;; <@%d,#%d> " "-------------------- Deferred %s --------------------", @@ -656,8 +657,6 @@ void LCodeGen::CallCodeGeneric(Handle code, SafepointMode safepoint_mode) { EnsureSpaceForLazyDeopt(Deoptimizer::patch_size()); ASSERT(instr != NULL); - LPointerMap* pointers = instr->pointer_map(); - RecordPosition(pointers->position()); __ Call(code, mode); RecordSafepointWithLazyDeopt(instr, safepoint_mode); } @@ -668,9 +667,6 @@ void LCodeGen::CallRuntime(const Runtime::Function* function, LInstruction* instr, SaveFPRegsMode save_doubles) { ASSERT(instr != NULL); - LPointerMap* pointers = instr->pointer_map(); - ASSERT(pointers != NULL); - RecordPosition(pointers->position()); __ CallRuntime(function, num_arguments, save_doubles); @@ -937,7 +933,7 @@ void LCodeGen::RecordSafepoint(LPointerMap* pointers, void LCodeGen::RecordSafepoint(Safepoint::DeoptMode deopt_mode) { - LPointerMap empty_pointers(RelocInfo::kNoPosition, zone()); + LPointerMap empty_pointers(zone()); RecordSafepoint(&empty_pointers, deopt_mode); } @@ -959,17 +955,10 @@ void LCodeGen::RecordSafepointWithRegistersAndDoubles( } -void LCodeGen::RecordPosition(int position) { +void LCodeGen::RecordAndWritePosition(int position) { if (position == RelocInfo::kNoPosition) return; masm()->positions_recorder()->RecordPosition(position); -} - - -void LCodeGen::RecordAndUpdatePosition(int position) { - if (position >= 0 && position != old_position_) { - masm()->positions_recorder()->RecordPosition(position); - old_position_ = position; - } + masm()->positions_recorder()->WriteRecordedPositions(); } @@ -3374,7 +3363,6 @@ void LCodeGen::DoApplyArguments(LApplyArguments* instr) { __ bind(&invoke); ASSERT(instr->HasPointerMap()); LPointerMap* pointers = instr->pointer_map(); - RecordPosition(pointers->position()); SafepointGenerator safepoint_generator( this, pointers, Safepoint::kLazyDeopt); // The number of arguments is stored in receiver which is a0, as expected @@ -3463,7 +3451,6 @@ void LCodeGen::CallKnownFunction(Handle function, dont_adapt_arguments || formal_parameter_count == arity; LPointerMap* pointers = instr->pointer_map(); - RecordPosition(pointers->position()); if (can_invoke_directly) { if (a1_state == A1_UNINITIALIZED) { @@ -3921,7 +3908,6 @@ void LCodeGen::DoInvokeFunction(LInvokeFunction* instr) { Handle known_function = instr->hydrogen()->known_function(); if (known_function.is_null()) { LPointerMap* pointers = instr->pointer_map(); - RecordPosition(pointers->position()); SafepointGenerator generator(this, pointers, Safepoint::kLazyDeopt); ParameterCount count(instr->arity()); __ InvokeFunction(a1, count, CALL_FUNCTION, generator, CALL_AS_METHOD); diff --git a/src/mips/lithium-codegen-mips.h b/src/mips/lithium-codegen-mips.h index e3d3a60..f643d02 100644 --- a/src/mips/lithium-codegen-mips.h +++ b/src/mips/lithium-codegen-mips.h @@ -58,8 +58,7 @@ class LCodeGen: public LCodeGenBase { frame_is_built_(false), safepoints_(info->zone()), resolver_(this), - expected_safepoint_kind_(Safepoint::kSimple), - old_position_(RelocInfo::kNoPosition) { + expected_safepoint_kind_(Safepoint::kSimple) { PopulateDeoptimizationLiteralsWithInlinedFunctions(); } @@ -295,8 +294,8 @@ class LCodeGen: public LCodeGenBase { void RecordSafepointWithRegistersAndDoubles(LPointerMap* pointers, int arguments, Safepoint::DeoptMode mode); - void RecordPosition(int position); - void RecordAndUpdatePosition(int position) V8_OVERRIDE; + + void RecordAndWritePosition(int position) V8_OVERRIDE; static Condition TokenToCondition(Token::Value op, bool is_unsigned); void EmitGoto(int block); @@ -402,8 +401,6 @@ class LCodeGen: public LCodeGenBase { Safepoint::Kind expected_safepoint_kind_; - int old_position_; - class PushSafepointRegistersScope V8_FINAL BASE_EMBEDDED { public: PushSafepointRegistersScope(LCodeGen* codegen, diff --git a/src/mips/lithium-mips.cc b/src/mips/lithium-mips.cc index b3cd74c..fb94bc3 100644 --- a/src/mips/lithium-mips.cc +++ b/src/mips/lithium-mips.cc @@ -661,7 +661,7 @@ LInstruction* LChunkBuilder::MarkAsCall(LInstruction* instr, LInstruction* LChunkBuilder::AssignPointerMap(LInstruction* instr) { ASSERT(!instr->HasPointerMap()); - instr->set_pointer_map(new(zone()) LPointerMap(position_, zone())); + instr->set_pointer_map(new(zone()) LPointerMap(zone())); return instr; } @@ -919,7 +919,6 @@ void LChunkBuilder::VisitInstruction(HInstruction* current) { } #endif - instr->set_position(position_); if (FLAG_stress_pointer_maps && !instr->HasPointerMap()) { instr = AssignPointerMap(instr); } diff --git a/src/mips/lithium-mips.h b/src/mips/lithium-mips.h index 68f1de9..301be8f 100644 --- a/src/mips/lithium-mips.h +++ b/src/mips/lithium-mips.h @@ -212,7 +212,6 @@ class LInstruction : public ZoneObject { : environment_(NULL), hydrogen_value_(NULL), bit_field_(IsCallBits::encode(false)) { - set_position(RelocInfo::kNoPosition); } virtual ~LInstruction() {} @@ -253,15 +252,6 @@ class LInstruction : public ZoneObject { LPointerMap* pointer_map() const { return pointer_map_.get(); } bool HasPointerMap() const { return pointer_map_.is_set(); } - // The 31 bits PositionBits is used to store the int position value. And the - // position value may be RelocInfo::kNoPosition (-1). The accessor always - // +1/-1 so that the encoded value of position in bit_field_ is always >= 0 - // and can fit into the 31 bits PositionBits. - void set_position(int pos) { - bit_field_ = PositionBits::update(bit_field_, pos + 1); - } - int position() { return PositionBits::decode(bit_field_) - 1; } - void set_hydrogen_value(HValue* value) { hydrogen_value_ = value; } HValue* hydrogen_value() const { return hydrogen_value_; } @@ -301,7 +291,6 @@ class LInstruction : public ZoneObject { virtual LOperand* TempAt(int i) = 0; class IsCallBits: public BitField {}; - class PositionBits: public BitField {}; LEnvironment* environment_; SetOncePointer pointer_map_;