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

Side by Side Diff: test/unittests/compiler/register-allocator-unittest.cc

Issue 727323002: [turbofan] move register allocation phases to pipeline (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 6 years, 1 month 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
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/base/utils/random-number-generator.h" 5 #include "src/base/utils/random-number-generator.h"
6 #include "src/compiler/register-allocator.h" 6 #include "src/compiler/instruction.h"
7 #include "src/compiler/register-allocator-verifier.h" 7 #include "src/compiler/pipeline.h"
8 #include "test/unittests/test-utils.h" 8 #include "test/unittests/test-utils.h"
9 #include "testing/gmock/include/gmock/gmock.h" 9 #include "testing/gmock/include/gmock/gmock.h"
10 10
11 namespace v8 { 11 namespace v8 {
12 namespace internal { 12 namespace internal {
13 namespace compiler { 13 namespace compiler {
14 14
15 typedef BasicBlock::RpoNumber Rpo; 15 typedef BasicBlock::RpoNumber Rpo;
16 16
17 static const char* 17 static const char*
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 } 160 }
161 161
162 InstructionSequence* sequence() { 162 InstructionSequence* sequence() {
163 if (sequence_ == nullptr) { 163 if (sequence_ == nullptr) {
164 sequence_ = 164 sequence_ =
165 new (zone()) InstructionSequence(zone(), &instruction_blocks_); 165 new (zone()) InstructionSequence(zone(), &instruction_blocks_);
166 } 166 }
167 return sequence_; 167 return sequence_;
168 } 168 }
169 169
170 RegisterAllocator* allocator() {
171 if (allocator_.is_empty()) {
172 allocator_.Reset(
173 new RegisterAllocator(config(), zone(), frame(), sequence()));
174 }
175 return allocator_.get();
176 }
177
178 void StartLoop(int loop_blocks) { 170 void StartLoop(int loop_blocks) {
179 CHECK(current_block_ == nullptr); 171 CHECK(current_block_ == nullptr);
180 if (!loop_blocks_.empty()) { 172 if (!loop_blocks_.empty()) {
181 CHECK(!loop_blocks_.back().loop_header_.IsValid()); 173 CHECK(!loop_blocks_.back().loop_header_.IsValid());
182 } 174 }
183 LoopData loop_data = {Rpo::Invalid(), loop_blocks}; 175 LoopData loop_data = {Rpo::Invalid(), loop_blocks};
184 loop_blocks_.push_back(loop_data); 176 loop_blocks_.push_back(loop_data);
185 } 177 }
186 178
187 void EndLoop() { 179 void EndLoop() {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 completions_.push_back(completion); 212 completions_.push_back(completion);
221 CHECK(current_block_ != nullptr); 213 CHECK(current_block_ != nullptr);
222 sequence()->EndBlock(current_block_->rpo_number()); 214 sequence()->EndBlock(current_block_->rpo_number());
223 current_block_ = nullptr; 215 current_block_ = nullptr;
224 return instruction_index; 216 return instruction_index;
225 } 217 }
226 218
227 void Allocate() { 219 void Allocate() {
228 CHECK_EQ(nullptr, current_block_); 220 CHECK_EQ(nullptr, current_block_);
229 WireBlocks(); 221 WireBlocks();
230 RegisterAllocatorVerifier verifier(zone(), config(), sequence()); 222 Pipeline::AllocateRegisters(config(), sequence(), true);
231 if (FLAG_trace_alloc || FLAG_trace_turbo) {
232 OFStream os(stdout);
233 PrintableInstructionSequence printable = {config(), sequence()};
234 os << "Before: " << std::endl << printable << std::endl;
235 }
236 allocator()->Allocate();
237 if (FLAG_trace_alloc || FLAG_trace_turbo) {
238 OFStream os(stdout);
239 PrintableInstructionSequence printable = {config(), sequence()};
240 os << "After: " << std::endl << printable << std::endl;
241 }
242 verifier.VerifyAssignment();
243 verifier.VerifyGapMoves();
244 } 223 }
245 224
246 TestOperand Imm(int32_t imm = 0) { 225 TestOperand Imm(int32_t imm = 0) {
247 int index = sequence()->AddImmediate(Constant(imm)); 226 int index = sequence()->AddImmediate(Constant(imm));
248 return TestOperand(kImmediate, index); 227 return TestOperand(kImmediate, index);
249 } 228 }
250 229
251 VReg Parameter(TestOperand output_op = Reg()) { 230 VReg Parameter(TestOperand output_op = Reg()) {
252 VReg vreg = NewReg(); 231 VReg vreg = NewReg();
253 InstructionOperand* outputs[1]{ConvertOutputOp(vreg, output_op)}; 232 InstructionOperand* outputs[1]{ConvertOutputOp(vreg, output_op)};
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 Rpo loop_header_; 492 Rpo loop_header_;
514 int expected_blocks_; 493 int expected_blocks_;
515 }; 494 };
516 495
517 typedef std::vector<LoopData> LoopBlocks; 496 typedef std::vector<LoopData> LoopBlocks;
518 typedef std::map<int, const Instruction*> Instructions; 497 typedef std::map<int, const Instruction*> Instructions;
519 typedef std::vector<BlockCompletion> Completions; 498 typedef std::vector<BlockCompletion> Completions;
520 499
521 SmartPointer<RegisterConfiguration> config_; 500 SmartPointer<RegisterConfiguration> config_;
522 Frame* frame_; 501 Frame* frame_;
523 SmartPointer<RegisterAllocator> allocator_;
524 InstructionSequence* sequence_; 502 InstructionSequence* sequence_;
525 int num_general_registers_; 503 int num_general_registers_;
526 int num_double_registers_; 504 int num_double_registers_;
527 505
528 // Block building state. 506 // Block building state.
529 InstructionBlocks instruction_blocks_; 507 InstructionBlocks instruction_blocks_;
530 Instructions instructions_; 508 Instructions instructions_;
531 int current_instruction_index_; 509 int current_instruction_index_;
532 Completions completions_; 510 Completions completions_;
533 LoopBlocks loop_blocks_; 511 LoopBlocks loop_blocks_;
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
746 StartBlock(); 724 StartBlock();
747 Return(DefineConstant()); 725 Return(DefineConstant());
748 EndBlock(); 726 EndBlock();
749 727
750 Allocate(); 728 Allocate();
751 } 729 }
752 730
753 } // namespace compiler 731 } // namespace compiler
754 } // namespace internal 732 } // namespace internal
755 } // namespace v8 733 } // namespace v8
OLDNEW
« src/compiler/pipeline.cc ('K') | « test/cctest/compiler/test-codegen-deopt.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698