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

Side by Side Diff: src/compiler/instruction.cc

Issue 1513543003: [turbofan] Make MachineType a pair of enums. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Moar rebase Created 5 years 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
« no previous file with comments | « src/compiler/instruction.h ('k') | src/compiler/instruction-selector.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 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 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 } else if (op.IsRegister()) { 115 } else if (op.IsRegister()) {
116 os << "[" << LocationOperand::cast(op).GetRegister().ToString() << "|R"; 116 os << "[" << LocationOperand::cast(op).GetRegister().ToString() << "|R";
117 } else { 117 } else {
118 DCHECK(op.IsDoubleRegister()); 118 DCHECK(op.IsDoubleRegister());
119 os << "[" << LocationOperand::cast(op).GetDoubleRegister().ToString() 119 os << "[" << LocationOperand::cast(op).GetDoubleRegister().ToString()
120 << "|R"; 120 << "|R";
121 } 121 }
122 if (allocated.IsExplicit()) { 122 if (allocated.IsExplicit()) {
123 os << "|E"; 123 os << "|E";
124 } 124 }
125 switch (allocated.machine_type()) { 125 switch (allocated.representation()) {
126 case kRepWord32: 126 case MachineRepresentation::kWord32:
127 os << "|w32"; 127 os << "|w32";
128 break; 128 break;
129 case kRepWord64: 129 case MachineRepresentation::kWord64:
130 os << "|w64"; 130 os << "|w64";
131 break; 131 break;
132 case kRepFloat32: 132 case MachineRepresentation::kFloat32:
133 os << "|f32"; 133 os << "|f32";
134 break; 134 break;
135 case kRepFloat64: 135 case MachineRepresentation::kFloat64:
136 os << "|f64"; 136 os << "|f64";
137 break; 137 break;
138 case kRepTagged: 138 case MachineRepresentation::kTagged:
139 os << "|t"; 139 os << "|t";
140 break; 140 break;
141 default: 141 default:
142 os << "|?"; 142 os << "|?";
143 break; 143 break;
144 } 144 }
145 return os << "]"; 145 return os << "]";
146 } 146 }
147 case InstructionOperand::INVALID: 147 case InstructionOperand::INVALID:
148 return os << "(x)"; 148 return os << "(x)";
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 to_eliminate = curr; 188 to_eliminate = curr;
189 if (replacement != nullptr) break; 189 if (replacement != nullptr) break;
190 } 190 }
191 } 191 }
192 DCHECK_IMPLIES(replacement == to_eliminate, replacement == nullptr); 192 DCHECK_IMPLIES(replacement == to_eliminate, replacement == nullptr);
193 if (replacement != nullptr) move->set_source(replacement->source()); 193 if (replacement != nullptr) move->set_source(replacement->source());
194 return to_eliminate; 194 return to_eliminate;
195 } 195 }
196 196
197 197
198 ExplicitOperand::ExplicitOperand(LocationKind kind, MachineType machine_type, 198 ExplicitOperand::ExplicitOperand(LocationKind kind, MachineRepresentation rep,
199 int index) 199 int index)
200 : LocationOperand(EXPLICIT, kind, machine_type, index) { 200 : LocationOperand(EXPLICIT, kind, rep, index) {
201 DCHECK_IMPLIES(kind == REGISTER && !IsFloatingPoint(machine_type), 201 DCHECK_IMPLIES(kind == REGISTER && !IsFloatingPoint(rep),
202 Register::from_code(index).IsAllocatable()); 202 Register::from_code(index).IsAllocatable());
203 DCHECK_IMPLIES(kind == REGISTER && IsFloatingPoint(machine_type), 203 DCHECK_IMPLIES(kind == REGISTER && IsFloatingPoint(rep),
204 DoubleRegister::from_code(index).IsAllocatable()); 204 DoubleRegister::from_code(index).IsAllocatable());
205 } 205 }
206 206
207 207
208 Instruction::Instruction(InstructionCode opcode) 208 Instruction::Instruction(InstructionCode opcode)
209 : opcode_(opcode), 209 : opcode_(opcode),
210 bit_field_(OutputCountField::encode(0) | InputCountField::encode(0) | 210 bit_field_(OutputCountField::encode(0) | InputCountField::encode(0) |
211 TempCountField::encode(0) | IsCallField::encode(false)), 211 TempCountField::encode(0) | IsCallField::encode(false)),
212 reference_map_(NULL) { 212 reference_map_(NULL) {
213 parallel_moves_[0] = nullptr; 213 parallel_moves_[0] = nullptr;
(...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after
649 if (end == block_starts_.end() || *end > instruction_index) --end; 649 if (end == block_starts_.end() || *end > instruction_index) --end;
650 DCHECK(*end <= instruction_index); 650 DCHECK(*end <= instruction_index);
651 size_t index = std::distance(begin, end); 651 size_t index = std::distance(begin, end);
652 auto block = instruction_blocks_->at(index); 652 auto block = instruction_blocks_->at(index);
653 DCHECK(block->code_start() <= instruction_index && 653 DCHECK(block->code_start() <= instruction_index &&
654 instruction_index < block->code_end()); 654 instruction_index < block->code_end());
655 return block; 655 return block;
656 } 656 }
657 657
658 658
659 static MachineType FilterRepresentation(MachineType rep) { 659 static MachineRepresentation FilterRepresentation(MachineRepresentation rep) {
660 DCHECK_EQ(rep, RepresentationOf(rep));
661 switch (rep) { 660 switch (rep) {
662 case kRepBit: 661 case MachineRepresentation::kBit:
663 case kRepWord8: 662 case MachineRepresentation::kWord8:
664 case kRepWord16: 663 case MachineRepresentation::kWord16:
665 return InstructionSequence::DefaultRepresentation(); 664 return InstructionSequence::DefaultRepresentation();
666 case kRepWord32: 665 case MachineRepresentation::kWord32:
667 case kRepWord64: 666 case MachineRepresentation::kWord64:
668 case kRepFloat32: 667 case MachineRepresentation::kFloat32:
669 case kRepFloat64: 668 case MachineRepresentation::kFloat64:
670 case kRepTagged: 669 case MachineRepresentation::kTagged:
671 return rep; 670 return rep;
672 default: 671 default:
673 break; 672 break;
674 } 673 }
675 UNREACHABLE(); 674 UNREACHABLE();
676 return kMachNone; 675 return MachineRepresentation::kNone;
677 } 676 }
678 677
679 678
680 MachineType InstructionSequence::GetRepresentation(int virtual_register) const { 679 MachineRepresentation InstructionSequence::GetRepresentation(
680 int virtual_register) const {
681 DCHECK_LE(0, virtual_register); 681 DCHECK_LE(0, virtual_register);
682 DCHECK_LT(virtual_register, VirtualRegisterCount()); 682 DCHECK_LT(virtual_register, VirtualRegisterCount());
683 if (virtual_register >= static_cast<int>(representations_.size())) { 683 if (virtual_register >= static_cast<int>(representations_.size())) {
684 return DefaultRepresentation(); 684 return DefaultRepresentation();
685 } 685 }
686 return representations_[virtual_register]; 686 return representations_[virtual_register];
687 } 687 }
688 688
689 689
690 void InstructionSequence::MarkAsRepresentation(MachineType machine_type, 690 void InstructionSequence::MarkAsRepresentation(MachineRepresentation rep,
691 int virtual_register) { 691 int virtual_register) {
692 DCHECK_LE(0, virtual_register); 692 DCHECK_LE(0, virtual_register);
693 DCHECK_LT(virtual_register, VirtualRegisterCount()); 693 DCHECK_LT(virtual_register, VirtualRegisterCount());
694 if (virtual_register >= static_cast<int>(representations_.size())) { 694 if (virtual_register >= static_cast<int>(representations_.size())) {
695 representations_.resize(VirtualRegisterCount(), DefaultRepresentation()); 695 representations_.resize(VirtualRegisterCount(), DefaultRepresentation());
696 } 696 }
697 machine_type = FilterRepresentation(machine_type); 697 rep = FilterRepresentation(rep);
698 DCHECK_IMPLIES(representations_[virtual_register] != machine_type, 698 DCHECK_IMPLIES(representations_[virtual_register] != rep,
699 representations_[virtual_register] == DefaultRepresentation()); 699 representations_[virtual_register] == DefaultRepresentation());
700 representations_[virtual_register] = machine_type; 700 representations_[virtual_register] = rep;
701 } 701 }
702 702
703 703
704 InstructionSequence::StateId InstructionSequence::AddFrameStateDescriptor( 704 InstructionSequence::StateId InstructionSequence::AddFrameStateDescriptor(
705 FrameStateDescriptor* descriptor) { 705 FrameStateDescriptor* descriptor) {
706 int deoptimization_id = static_cast<int>(deoptimization_entries_.size()); 706 int deoptimization_id = static_cast<int>(deoptimization_entries_.size());
707 deoptimization_entries_.push_back(descriptor); 707 deoptimization_entries_.push_back(descriptor);
708 return StateId::FromInt(deoptimization_id); 708 return StateId::FromInt(deoptimization_id);
709 } 709 }
710 710
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
752 FrameStateDescriptor* outer_state) 752 FrameStateDescriptor* outer_state)
753 : type_(type), 753 : type_(type),
754 bailout_id_(bailout_id), 754 bailout_id_(bailout_id),
755 frame_state_combine_(state_combine), 755 frame_state_combine_(state_combine),
756 parameters_count_(parameters_count), 756 parameters_count_(parameters_count),
757 locals_count_(locals_count), 757 locals_count_(locals_count),
758 stack_count_(stack_count), 758 stack_count_(stack_count),
759 types_(zone), 759 types_(zone),
760 shared_info_(shared_info), 760 shared_info_(shared_info),
761 outer_state_(outer_state) { 761 outer_state_(outer_state) {
762 types_.resize(GetSize(), kMachNone); 762 types_.resize(GetSize(), MachineType::None());
763 } 763 }
764 764
765 765
766 size_t FrameStateDescriptor::GetSize(OutputFrameStateCombine combine) const { 766 size_t FrameStateDescriptor::GetSize(OutputFrameStateCombine combine) const {
767 size_t size = 1 + parameters_count() + locals_count() + stack_count() + 767 size_t size = 1 + parameters_count() + locals_count() + stack_count() +
768 (HasContext() ? 1 : 0); 768 (HasContext() ? 1 : 0);
769 switch (combine.kind()) { 769 switch (combine.kind()) {
770 case OutputFrameStateCombine::kPushOutput: 770 case OutputFrameStateCombine::kPushOutput:
771 size += combine.GetPushCount(); 771 size += combine.GetPushCount();
772 break; 772 break;
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
885 os << " B" << succ.ToInt(); 885 os << " B" << succ.ToInt();
886 } 886 }
887 os << "\n"; 887 os << "\n";
888 } 888 }
889 return os; 889 return os;
890 } 890 }
891 891
892 } // namespace compiler 892 } // namespace compiler
893 } // namespace internal 893 } // namespace internal
894 } // namespace v8 894 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/instruction.h ('k') | src/compiler/instruction-selector.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698