| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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/compiler/common-operator.h" | 5 #include "src/compiler/common-operator.h" |
| 6 #include "src/compiler/graph.h" | 6 #include "src/compiler/graph.h" |
| 7 #include "src/compiler/instruction.h" | 7 #include "src/compiler/instruction.h" |
| 8 #include "src/compiler/schedule.h" | 8 #include "src/compiler/schedule.h" |
| 9 | 9 |
| 10 namespace v8 { | 10 namespace v8 { |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 return os << "(R)"; | 35 return os << "(R)"; |
| 36 case UnallocatedOperand::MUST_HAVE_SLOT: | 36 case UnallocatedOperand::MUST_HAVE_SLOT: |
| 37 return os << "(S)"; | 37 return os << "(S)"; |
| 38 case UnallocatedOperand::SAME_AS_FIRST_INPUT: | 38 case UnallocatedOperand::SAME_AS_FIRST_INPUT: |
| 39 return os << "(1)"; | 39 return os << "(1)"; |
| 40 case UnallocatedOperand::ANY: | 40 case UnallocatedOperand::ANY: |
| 41 return os << "(-)"; | 41 return os << "(-)"; |
| 42 } | 42 } |
| 43 } | 43 } |
| 44 case InstructionOperand::CONSTANT: | 44 case InstructionOperand::CONSTANT: |
| 45 return os << "[constant:" << op.index() << "]"; | 45 return os << "[constant:" << ConstantOperand::cast(op).virtual_register() |
| 46 << "]"; |
| 46 case InstructionOperand::IMMEDIATE: | 47 case InstructionOperand::IMMEDIATE: |
| 47 return os << "[immediate:" << op.index() << "]"; | 48 return os << "[immediate:" << ImmediateOperand::cast(op).index() << "]"; |
| 48 case InstructionOperand::STACK_SLOT: | 49 case InstructionOperand::STACK_SLOT: |
| 49 return os << "[stack:" << op.index() << "]"; | 50 return os << "[stack:" << StackSlotOperand::cast(op).index() << "]"; |
| 50 case InstructionOperand::DOUBLE_STACK_SLOT: | 51 case InstructionOperand::DOUBLE_STACK_SLOT: |
| 51 return os << "[double_stack:" << op.index() << "]"; | 52 return os << "[double_stack:" << DoubleStackSlotOperand::cast(op).index() |
| 53 << "]"; |
| 52 case InstructionOperand::REGISTER: | 54 case InstructionOperand::REGISTER: |
| 53 return os << "[" << conf->general_register_name(op.index()) << "|R]"; | 55 return os << "[" |
| 56 << conf->general_register_name( |
| 57 RegisterOperand::cast(op).index()) << "|R]"; |
| 54 case InstructionOperand::DOUBLE_REGISTER: | 58 case InstructionOperand::DOUBLE_REGISTER: |
| 55 return os << "[" << conf->double_register_name(op.index()) << "|R]"; | 59 return os << "[" |
| 60 << conf->double_register_name( |
| 61 DoubleRegisterOperand::cast(op).index()) << "|R]"; |
| 56 case InstructionOperand::INVALID: | 62 case InstructionOperand::INVALID: |
| 57 return os << "(x)"; | 63 return os << "(x)"; |
| 58 } | 64 } |
| 59 UNREACHABLE(); | 65 UNREACHABLE(); |
| 60 return os; | 66 return os; |
| 61 } | 67 } |
| 62 | 68 |
| 63 | 69 |
| 64 std::ostream& operator<<(std::ostream& os, | 70 std::ostream& operator<<(std::ostream& os, |
| 65 const PrintableMoveOperands& printable) { | 71 const PrintableMoveOperands& printable) { |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 166 first = false; | 172 first = false; |
| 167 PrintableMoveOperands pmo = {printable.register_configuration_, move}; | 173 PrintableMoveOperands pmo = {printable.register_configuration_, move}; |
| 168 os << pmo; | 174 os << pmo; |
| 169 } | 175 } |
| 170 return os; | 176 return os; |
| 171 } | 177 } |
| 172 | 178 |
| 173 | 179 |
| 174 void PointerMap::RecordPointer(InstructionOperand* op, Zone* zone) { | 180 void PointerMap::RecordPointer(InstructionOperand* op, Zone* zone) { |
| 175 // Do not record arguments as pointers. | 181 // Do not record arguments as pointers. |
| 176 if (op->IsStackSlot() && op->index() < 0) return; | 182 if (op->IsStackSlot() && StackSlotOperand::cast(op)->index() < 0) return; |
| 177 DCHECK(!op->IsDoubleRegister() && !op->IsDoubleStackSlot()); | 183 DCHECK(!op->IsDoubleRegister() && !op->IsDoubleStackSlot()); |
| 178 pointer_operands_.Add(op, zone); | 184 pointer_operands_.Add(op, zone); |
| 179 } | 185 } |
| 180 | 186 |
| 181 | 187 |
| 182 void PointerMap::RemovePointer(InstructionOperand* op) { | 188 void PointerMap::RemovePointer(InstructionOperand* op) { |
| 183 // Do not record arguments as pointers. | 189 // Do not record arguments as pointers. |
| 184 if (op->IsStackSlot() && op->index() < 0) return; | 190 if (op->IsStackSlot() && StackSlotOperand::cast(op)->index() < 0) return; |
| 185 DCHECK(!op->IsDoubleRegister() && !op->IsDoubleStackSlot()); | 191 DCHECK(!op->IsDoubleRegister() && !op->IsDoubleStackSlot()); |
| 186 for (int i = 0; i < pointer_operands_.length(); ++i) { | 192 for (int i = 0; i < pointer_operands_.length(); ++i) { |
| 187 if (pointer_operands_[i]->Equals(op)) { | 193 if (pointer_operands_[i]->Equals(op)) { |
| 188 pointer_operands_.Remove(i); | 194 pointer_operands_.Remove(i); |
| 189 --i; | 195 --i; |
| 190 } | 196 } |
| 191 } | 197 } |
| 192 } | 198 } |
| 193 | 199 |
| 194 | 200 |
| 195 void PointerMap::RecordUntagged(InstructionOperand* op, Zone* zone) { | 201 void PointerMap::RecordUntagged(InstructionOperand* op, Zone* zone) { |
| 196 // Do not record arguments as pointers. | 202 // Do not record arguments as pointers. |
| 197 if (op->IsStackSlot() && op->index() < 0) return; | 203 if (op->IsStackSlot() && StackSlotOperand::cast(op)->index() < 0) return; |
| 198 DCHECK(!op->IsDoubleRegister() && !op->IsDoubleStackSlot()); | 204 DCHECK(!op->IsDoubleRegister() && !op->IsDoubleStackSlot()); |
| 199 untagged_operands_.Add(op, zone); | 205 untagged_operands_.Add(op, zone); |
| 200 } | 206 } |
| 201 | 207 |
| 202 | 208 |
| 203 std::ostream& operator<<(std::ostream& os, const PointerMap& pm) { | 209 std::ostream& operator<<(std::ostream& os, const PointerMap& pm) { |
| 204 os << "{"; | 210 os << "{"; |
| 205 for (ZoneList<InstructionOperand*>::iterator op = | 211 for (ZoneList<InstructionOperand*>::iterator op = |
| 206 pm.pointer_operands_.begin(); | 212 pm.pointer_operands_.begin(); |
| 207 op != pm.pointer_operands_.end(); ++op) { | 213 op != pm.pointer_operands_.end(); ++op) { |
| (...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 586 InstructionSequence::StateId state_id) { | 592 InstructionSequence::StateId state_id) { |
| 587 return deoptimization_entries_[state_id.ToInt()]; | 593 return deoptimization_entries_[state_id.ToInt()]; |
| 588 } | 594 } |
| 589 | 595 |
| 590 | 596 |
| 591 int InstructionSequence::GetFrameStateDescriptorCount() { | 597 int InstructionSequence::GetFrameStateDescriptorCount() { |
| 592 return static_cast<int>(deoptimization_entries_.size()); | 598 return static_cast<int>(deoptimization_entries_.size()); |
| 593 } | 599 } |
| 594 | 600 |
| 595 | 601 |
| 602 RpoNumber InstructionSequence::InputRpo(Instruction* instr, size_t index) { |
| 603 InstructionOperand* operand = instr->InputAt(index); |
| 604 Constant constant = |
| 605 operand->IsImmediate() |
| 606 ? GetImmediate(ImmediateOperand::cast(operand)->index()) |
| 607 : GetConstant(ConstantOperand::cast(operand)->virtual_register()); |
| 608 return constant.ToRpoNumber(); |
| 609 } |
| 610 |
| 611 |
| 596 FrameStateDescriptor::FrameStateDescriptor( | 612 FrameStateDescriptor::FrameStateDescriptor( |
| 597 Zone* zone, const FrameStateCallInfo& state_info, size_t parameters_count, | 613 Zone* zone, const FrameStateCallInfo& state_info, size_t parameters_count, |
| 598 size_t locals_count, size_t stack_count, FrameStateDescriptor* outer_state) | 614 size_t locals_count, size_t stack_count, FrameStateDescriptor* outer_state) |
| 599 : type_(state_info.type()), | 615 : type_(state_info.type()), |
| 600 bailout_id_(state_info.bailout_id()), | 616 bailout_id_(state_info.bailout_id()), |
| 601 frame_state_combine_(state_info.state_combine()), | 617 frame_state_combine_(state_info.state_combine()), |
| 602 parameters_count_(parameters_count), | 618 parameters_count_(parameters_count), |
| 603 locals_count_(locals_count), | 619 locals_count_(locals_count), |
| 604 stack_count_(stack_count), | 620 stack_count_(stack_count), |
| 605 types_(zone), | 621 types_(zone), |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 728 os << " B" << succ.ToInt(); | 744 os << " B" << succ.ToInt(); |
| 729 } | 745 } |
| 730 os << "\n"; | 746 os << "\n"; |
| 731 } | 747 } |
| 732 return os; | 748 return os; |
| 733 } | 749 } |
| 734 | 750 |
| 735 } // namespace compiler | 751 } // namespace compiler |
| 736 } // namespace internal | 752 } // namespace internal |
| 737 } // namespace v8 | 753 } // namespace v8 |
| OLD | NEW |