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

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

Issue 713803002: [turbofan] add register assignment verifier (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
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 | Annotate | Revision Log
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 #ifndef V8_COMPILER_INSTRUCTION_H_ 5 #ifndef V8_COMPILER_INSTRUCTION_H_
6 #define V8_COMPILER_INSTRUCTION_H_ 6 #define V8_COMPILER_INSTRUCTION_H_
7 7
8 #include <deque> 8 #include <deque>
9 #include <iosfwd> 9 #include <iosfwd>
10 #include <map> 10 #include <map>
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 DCHECK(index >= 0); 325 DCHECK(index >= 0);
326 if (index < kNumCachedOperands) return &cache[index]; 326 if (index < kNumCachedOperands) return &cache[index];
327 return new (zone) SubKindOperand(index); 327 return new (zone) SubKindOperand(index);
328 } 328 }
329 329
330 static SubKindOperand* cast(InstructionOperand* op) { 330 static SubKindOperand* cast(InstructionOperand* op) {
331 DCHECK(op->kind() == kOperandKind); 331 DCHECK(op->kind() == kOperandKind);
332 return reinterpret_cast<SubKindOperand*>(op); 332 return reinterpret_cast<SubKindOperand*>(op);
333 } 333 }
334 334
335 static const SubKindOperand* cast(const InstructionOperand* op) {
336 DCHECK(op->kind() == kOperandKind);
337 return reinterpret_cast<const SubKindOperand*>(op);
338 }
339
335 static void SetUpCache(); 340 static void SetUpCache();
336 static void TearDownCache(); 341 static void TearDownCache();
337 342
338 private: 343 private:
339 static SubKindOperand* cache; 344 static SubKindOperand* cache;
340 345
341 SubKindOperand() : InstructionOperand() {} 346 SubKindOperand() : InstructionOperand() {}
342 explicit SubKindOperand(int index) 347 explicit SubKindOperand(int index)
343 : InstructionOperand(kOperandKind, index) {} 348 : InstructionOperand(kOperandKind, index) {}
344 }; 349 };
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
574 LAST_INNER_POSITION = AFTER 579 LAST_INNER_POSITION = AFTER
575 }; 580 };
576 581
577 ParallelMove* GetOrCreateParallelMove(InnerPosition pos, Zone* zone) { 582 ParallelMove* GetOrCreateParallelMove(InnerPosition pos, Zone* zone) {
578 if (parallel_moves_[pos] == NULL) { 583 if (parallel_moves_[pos] == NULL) {
579 parallel_moves_[pos] = new (zone) ParallelMove(zone); 584 parallel_moves_[pos] = new (zone) ParallelMove(zone);
580 } 585 }
581 return parallel_moves_[pos]; 586 return parallel_moves_[pos];
582 } 587 }
583 588
584 ParallelMove* GetParallelMove(InnerPosition pos) { 589 ParallelMove* GetParallelMove(InnerPosition pos) const {
585 return parallel_moves_[pos]; 590 return parallel_moves_[pos];
586 } 591 }
587 592
588 static GapInstruction* New(Zone* zone) { 593 static GapInstruction* New(Zone* zone) {
589 void* buffer = zone->New(sizeof(GapInstruction)); 594 void* buffer = zone->New(sizeof(GapInstruction));
590 return new (buffer) GapInstruction(kGapInstruction); 595 return new (buffer) GapInstruction(kGapInstruction);
591 } 596 }
592 597
593 static GapInstruction* cast(Instruction* instr) { 598 static GapInstruction* cast(Instruction* instr) {
594 DCHECK(instr->IsGapMoves()); 599 DCHECK(instr->IsGapMoves());
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
910 void MarkAsReference(int virtual_register); 915 void MarkAsReference(int virtual_register);
911 void MarkAsDouble(int virtual_register); 916 void MarkAsDouble(int virtual_register);
912 917
913 void AddGapMove(int index, InstructionOperand* from, InstructionOperand* to); 918 void AddGapMove(int index, InstructionOperand* from, InstructionOperand* to);
914 919
915 BlockStartInstruction* GetBlockStart(BasicBlock::RpoNumber rpo); 920 BlockStartInstruction* GetBlockStart(BasicBlock::RpoNumber rpo);
916 921
917 typedef InstructionDeque::const_iterator const_iterator; 922 typedef InstructionDeque::const_iterator const_iterator;
918 const_iterator begin() const { return instructions_.begin(); } 923 const_iterator begin() const { return instructions_.begin(); }
919 const_iterator end() const { return instructions_.end(); } 924 const_iterator end() const { return instructions_.end(); }
925 const InstructionDeque& instructions() const { return instructions_; }
920 926
921 GapInstruction* GapAt(int index) const { 927 GapInstruction* GapAt(int index) const {
922 return GapInstruction::cast(InstructionAt(index)); 928 return GapInstruction::cast(InstructionAt(index));
923 } 929 }
924 bool IsGapAt(int index) const { return InstructionAt(index)->IsGapMoves(); } 930 bool IsGapAt(int index) const { return InstructionAt(index)->IsGapMoves(); }
925 Instruction* InstructionAt(int index) const { 931 Instruction* InstructionAt(int index) const {
926 DCHECK(index >= 0); 932 DCHECK(index >= 0);
927 DCHECK(index < static_cast<int>(instructions_.size())); 933 DCHECK(index < static_cast<int>(instructions_.size()));
928 return instructions_[index]; 934 return instructions_[index];
929 } 935 }
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
1005 1011
1006 1012
1007 std::ostream& operator<<(std::ostream& os, 1013 std::ostream& operator<<(std::ostream& os,
1008 const PrintableInstructionSequence& code); 1014 const PrintableInstructionSequence& code);
1009 1015
1010 } // namespace compiler 1016 } // namespace compiler
1011 } // namespace internal 1017 } // namespace internal
1012 } // namespace v8 1018 } // namespace v8
1013 1019
1014 #endif // V8_COMPILER_INSTRUCTION_H_ 1020 #endif // V8_COMPILER_INSTRUCTION_H_
OLDNEW
« no previous file with comments | « BUILD.gn ('k') | src/compiler/pipeline.cc » ('j') | src/compiler/register-allocator-verifier.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698