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 #include "src/compiler/state-values-utils.h" | 9 #include "src/compiler/state-values-utils.h" |
10 | 10 |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
246 Register::from_code(index).IsAllocatable()); | 246 Register::from_code(index).IsAllocatable()); |
247 DCHECK_IMPLIES(kind == REGISTER && IsFloatingPoint(rep), | 247 DCHECK_IMPLIES(kind == REGISTER && IsFloatingPoint(rep), |
248 DoubleRegister::from_code(index).IsAllocatable()); | 248 DoubleRegister::from_code(index).IsAllocatable()); |
249 } | 249 } |
250 | 250 |
251 | 251 |
252 Instruction::Instruction(InstructionCode opcode) | 252 Instruction::Instruction(InstructionCode opcode) |
253 : opcode_(opcode), | 253 : opcode_(opcode), |
254 bit_field_(OutputCountField::encode(0) | InputCountField::encode(0) | | 254 bit_field_(OutputCountField::encode(0) | InputCountField::encode(0) | |
255 TempCountField::encode(0) | IsCallField::encode(false)), | 255 TempCountField::encode(0) | IsCallField::encode(false)), |
256 reference_map_(NULL) { | 256 reference_map_(nullptr) { |
257 parallel_moves_[0] = nullptr; | 257 parallel_moves_[0] = nullptr; |
258 parallel_moves_[1] = nullptr; | 258 parallel_moves_[1] = nullptr; |
259 } | 259 } |
260 | 260 |
261 | 261 |
262 Instruction::Instruction(InstructionCode opcode, size_t output_count, | 262 Instruction::Instruction(InstructionCode opcode, size_t output_count, |
263 InstructionOperand* outputs, size_t input_count, | 263 InstructionOperand* outputs, size_t input_count, |
264 InstructionOperand* inputs, size_t temp_count, | 264 InstructionOperand* inputs, size_t temp_count, |
265 InstructionOperand* temps) | 265 InstructionOperand* temps) |
266 : opcode_(opcode), | 266 : opcode_(opcode), |
267 bit_field_(OutputCountField::encode(output_count) | | 267 bit_field_(OutputCountField::encode(output_count) | |
268 InputCountField::encode(input_count) | | 268 InputCountField::encode(input_count) | |
269 TempCountField::encode(temp_count) | | 269 TempCountField::encode(temp_count) | |
270 IsCallField::encode(false)), | 270 IsCallField::encode(false)), |
271 reference_map_(NULL) { | 271 reference_map_(nullptr) { |
272 parallel_moves_[0] = nullptr; | 272 parallel_moves_[0] = nullptr; |
273 parallel_moves_[1] = nullptr; | 273 parallel_moves_[1] = nullptr; |
274 size_t offset = 0; | 274 size_t offset = 0; |
275 for (size_t i = 0; i < output_count; ++i) { | 275 for (size_t i = 0; i < output_count; ++i) { |
276 DCHECK(!outputs[i].IsInvalid()); | 276 DCHECK(!outputs[i].IsInvalid()); |
277 operands_[offset++] = outputs[i]; | 277 operands_[offset++] = outputs[i]; |
278 } | 278 } |
279 for (size_t i = 0; i < input_count; ++i) { | 279 for (size_t i = 0; i < input_count; ++i) { |
280 DCHECK(!inputs[i].IsInvalid()); | 280 DCHECK(!inputs[i].IsInvalid()); |
281 operands_[offset++] = inputs[i]; | 281 operands_[offset++] = inputs[i]; |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
452 | 452 |
453 std::ostream& operator<<(std::ostream& os, | 453 std::ostream& operator<<(std::ostream& os, |
454 const PrintableInstruction& printable) { | 454 const PrintableInstruction& printable) { |
455 const Instruction& instr = *printable.instr_; | 455 const Instruction& instr = *printable.instr_; |
456 PrintableInstructionOperand printable_op = {printable.register_configuration_, | 456 PrintableInstructionOperand printable_op = {printable.register_configuration_, |
457 InstructionOperand()}; | 457 InstructionOperand()}; |
458 os << "gap "; | 458 os << "gap "; |
459 for (int i = Instruction::FIRST_GAP_POSITION; | 459 for (int i = Instruction::FIRST_GAP_POSITION; |
460 i <= Instruction::LAST_GAP_POSITION; i++) { | 460 i <= Instruction::LAST_GAP_POSITION; i++) { |
461 os << "("; | 461 os << "("; |
462 if (instr.parallel_moves()[i] != NULL) { | 462 if (instr.parallel_moves()[i] != nullptr) { |
463 PrintableParallelMove ppm = {printable.register_configuration_, | 463 PrintableParallelMove ppm = {printable.register_configuration_, |
464 instr.parallel_moves()[i]}; | 464 instr.parallel_moves()[i]}; |
465 os << ppm; | 465 os << ppm; |
466 } | 466 } |
467 os << ") "; | 467 os << ") "; |
468 } | 468 } |
469 os << "\n "; | 469 os << "\n "; |
470 | 470 |
471 if (instr.OutputCount() > 1) os << "("; | 471 if (instr.OutputCount() > 1) os << "("; |
472 for (size_t i = 0; i < instr.OutputCount(); i++) { | 472 for (size_t i = 0; i < instr.OutputCount(); i++) { |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
561 size_t j = 0; | 561 size_t j = 0; |
562 for (InstructionBlock::Predecessors::const_iterator i = predecessors_.begin(); | 562 for (InstructionBlock::Predecessors::const_iterator i = predecessors_.begin(); |
563 i != predecessors_.end(); ++i, ++j) { | 563 i != predecessors_.end(); ++i, ++j) { |
564 if (*i == rpo_number) break; | 564 if (*i == rpo_number) break; |
565 } | 565 } |
566 return j; | 566 return j; |
567 } | 567 } |
568 | 568 |
569 | 569 |
570 static RpoNumber GetRpo(const BasicBlock* block) { | 570 static RpoNumber GetRpo(const BasicBlock* block) { |
571 if (block == NULL) return RpoNumber::Invalid(); | 571 if (block == nullptr) return RpoNumber::Invalid(); |
572 return RpoNumber::FromInt(block->rpo_number()); | 572 return RpoNumber::FromInt(block->rpo_number()); |
573 } | 573 } |
574 | 574 |
575 | 575 |
576 static RpoNumber GetLoopEndRpo(const BasicBlock* block) { | 576 static RpoNumber GetLoopEndRpo(const BasicBlock* block) { |
577 if (!block->IsLoopHeader()) return RpoNumber::Invalid(); | 577 if (!block->IsLoopHeader()) return RpoNumber::Invalid(); |
578 return RpoNumber::FromInt(block->loop_end()->rpo_number()); | 578 return RpoNumber::FromInt(block->loop_end()->rpo_number()); |
579 } | 579 } |
580 | 580 |
581 | 581 |
(...skipping 14 matching lines...) Expand all Loading... |
596 instr_block->predecessors().push_back(GetRpo(predecessor)); | 596 instr_block->predecessors().push_back(GetRpo(predecessor)); |
597 } | 597 } |
598 return instr_block; | 598 return instr_block; |
599 } | 599 } |
600 | 600 |
601 | 601 |
602 InstructionBlocks* InstructionSequence::InstructionBlocksFor( | 602 InstructionBlocks* InstructionSequence::InstructionBlocksFor( |
603 Zone* zone, const Schedule* schedule) { | 603 Zone* zone, const Schedule* schedule) { |
604 InstructionBlocks* blocks = zone->NewArray<InstructionBlocks>(1); | 604 InstructionBlocks* blocks = zone->NewArray<InstructionBlocks>(1); |
605 new (blocks) InstructionBlocks( | 605 new (blocks) InstructionBlocks( |
606 static_cast<int>(schedule->rpo_order()->size()), NULL, zone); | 606 static_cast<int>(schedule->rpo_order()->size()), nullptr, zone); |
607 size_t rpo_number = 0; | 607 size_t rpo_number = 0; |
608 for (BasicBlockVector::const_iterator it = schedule->rpo_order()->begin(); | 608 for (BasicBlockVector::const_iterator it = schedule->rpo_order()->begin(); |
609 it != schedule->rpo_order()->end(); ++it, ++rpo_number) { | 609 it != schedule->rpo_order()->end(); ++it, ++rpo_number) { |
610 DCHECK(!(*blocks)[rpo_number]); | 610 DCHECK(!(*blocks)[rpo_number]); |
611 DCHECK(GetRpo(*it).ToSize() == rpo_number); | 611 DCHECK(GetRpo(*it).ToSize() == rpo_number); |
612 (*blocks)[rpo_number] = InstructionBlockFor(zone, *it); | 612 (*blocks)[rpo_number] = InstructionBlockFor(zone, *it); |
613 } | 613 } |
614 ComputeAssemblyOrder(blocks); | 614 ComputeAssemblyOrder(blocks); |
615 return blocks; | 615 return blocks; |
616 } | 616 } |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
682 } | 682 } |
683 DCHECK(block->code_start() >= 0 && block->code_start() < end); | 683 DCHECK(block->code_start() >= 0 && block->code_start() < end); |
684 block->set_code_end(end); | 684 block->set_code_end(end); |
685 } | 685 } |
686 | 686 |
687 | 687 |
688 int InstructionSequence::AddInstruction(Instruction* instr) { | 688 int InstructionSequence::AddInstruction(Instruction* instr) { |
689 int index = static_cast<int>(instructions_.size()); | 689 int index = static_cast<int>(instructions_.size()); |
690 instructions_.push_back(instr); | 690 instructions_.push_back(instr); |
691 if (instr->NeedsReferenceMap()) { | 691 if (instr->NeedsReferenceMap()) { |
692 DCHECK(instr->reference_map() == NULL); | 692 DCHECK(instr->reference_map() == nullptr); |
693 ReferenceMap* reference_map = new (zone()) ReferenceMap(zone()); | 693 ReferenceMap* reference_map = new (zone()) ReferenceMap(zone()); |
694 reference_map->set_instruction_position(index); | 694 reference_map->set_instruction_position(index); |
695 instr->set_reference_map(reference_map); | 695 instr->set_reference_map(reference_map); |
696 reference_maps_.push_back(reference_map); | 696 reference_maps_.push_back(reference_map); |
697 } | 697 } |
698 return index; | 698 return index; |
699 } | 699 } |
700 | 700 |
701 | 701 |
702 InstructionBlock* InstructionSequence::GetInstructionBlock( | 702 InstructionBlock* InstructionSequence::GetInstructionBlock( |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
846 break; | 846 break; |
847 case OutputFrameStateCombine::kPokeAt: | 847 case OutputFrameStateCombine::kPokeAt: |
848 break; | 848 break; |
849 } | 849 } |
850 return size; | 850 return size; |
851 } | 851 } |
852 | 852 |
853 | 853 |
854 size_t FrameStateDescriptor::GetTotalSize() const { | 854 size_t FrameStateDescriptor::GetTotalSize() const { |
855 size_t total_size = 0; | 855 size_t total_size = 0; |
856 for (const FrameStateDescriptor* iter = this; iter != NULL; | 856 for (const FrameStateDescriptor* iter = this; iter != nullptr; |
857 iter = iter->outer_state_) { | 857 iter = iter->outer_state_) { |
858 total_size += iter->GetSize(); | 858 total_size += iter->GetSize(); |
859 } | 859 } |
860 return total_size; | 860 return total_size; |
861 } | 861 } |
862 | 862 |
863 | 863 |
864 size_t FrameStateDescriptor::GetFrameCount() const { | 864 size_t FrameStateDescriptor::GetFrameCount() const { |
865 size_t count = 0; | 865 size_t count = 0; |
866 for (const FrameStateDescriptor* iter = this; iter != NULL; | 866 for (const FrameStateDescriptor* iter = this; iter != nullptr; |
867 iter = iter->outer_state_) { | 867 iter = iter->outer_state_) { |
868 ++count; | 868 ++count; |
869 } | 869 } |
870 return count; | 870 return count; |
871 } | 871 } |
872 | 872 |
873 | 873 |
874 size_t FrameStateDescriptor::GetJSFrameCount() const { | 874 size_t FrameStateDescriptor::GetJSFrameCount() const { |
875 size_t count = 0; | 875 size_t count = 0; |
876 for (const FrameStateDescriptor* iter = this; iter != NULL; | 876 for (const FrameStateDescriptor* iter = this; iter != nullptr; |
877 iter = iter->outer_state_) { | 877 iter = iter->outer_state_) { |
878 if (FrameStateFunctionInfo::IsJSFunctionType(iter->type_)) { | 878 if (FrameStateFunctionInfo::IsJSFunctionType(iter->type_)) { |
879 ++count; | 879 ++count; |
880 } | 880 } |
881 } | 881 } |
882 return count; | 882 return count; |
883 } | 883 } |
884 | 884 |
885 | 885 |
886 std::ostream& operator<<(std::ostream& os, const RpoNumber& rpo) { | 886 std::ostream& operator<<(std::ostream& os, const RpoNumber& rpo) { |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
948 os << " B" << succ.ToInt(); | 948 os << " B" << succ.ToInt(); |
949 } | 949 } |
950 os << "\n"; | 950 os << "\n"; |
951 } | 951 } |
952 return os; | 952 return os; |
953 } | 953 } |
954 | 954 |
955 } // namespace compiler | 955 } // namespace compiler |
956 } // namespace internal | 956 } // namespace internal |
957 } // namespace v8 | 957 } // namespace v8 |
OLD | NEW |