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

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

Issue 664683002: [turbofan] decouple register allocation from schedule and graph (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 2 months 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
« no previous file with comments | « src/compiler/register-allocator.cc ('k') | src/compiler/schedule.cc » ('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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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_SCHEDULE_H_ 5 #ifndef V8_COMPILER_SCHEDULE_H_
6 #define V8_COMPILER_SCHEDULE_H_ 6 #define V8_COMPILER_SCHEDULE_H_
7 7
8 #include <iosfwd> 8 #include <iosfwd>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 int ToInt() const { return static_cast<int>(index_); } 43 int ToInt() const { return static_cast<int>(index_); }
44 size_t ToSize() const { return index_; } 44 size_t ToSize() const { return index_; }
45 static Id FromSize(size_t index) { return Id(index); } 45 static Id FromSize(size_t index) { return Id(index); }
46 static Id FromInt(int index) { return Id(static_cast<size_t>(index)); } 46 static Id FromInt(int index) { return Id(static_cast<size_t>(index)); }
47 47
48 private: 48 private:
49 explicit Id(size_t index) : index_(index) {} 49 explicit Id(size_t index) : index_(index) {}
50 size_t index_; 50 size_t index_;
51 }; 51 };
52 52
53 static const int kInvalidRpoNumber = -1;
53 class RpoNumber FINAL { 54 class RpoNumber FINAL {
54 public: 55 public:
55 int ToInt() const { return static_cast<int>(index_); } 56 int ToInt() const {
56 size_t ToSize() const { return index_; } 57 DCHECK(IsValid());
57 static RpoNumber FromInt(int index) { 58 return index_;
58 return RpoNumber(static_cast<size_t>(index));
59 } 59 }
60 static RpoNumber Invalid() { return RpoNumber(static_cast<size_t>(-1)); } 60 size_t ToSize() const {
61 DCHECK(IsValid());
62 return static_cast<size_t>(index_);
63 }
64 bool IsValid() const { return index_ != kInvalidRpoNumber; }
65 static RpoNumber FromInt(int index) { return RpoNumber(index); }
66 static RpoNumber Invalid() { return RpoNumber(kInvalidRpoNumber); }
61 67
62 bool IsNext(const RpoNumber other) const { 68 bool IsNext(const RpoNumber other) const {
69 DCHECK(IsValid());
63 return other.index_ == this->index_ + 1; 70 return other.index_ == this->index_ + 1;
64 } 71 }
65 72
73 bool operator==(RpoNumber other) const {
74 return this->index_ == other.index_;
75 }
76
66 private: 77 private:
67 explicit RpoNumber(size_t index) : index_(index) {} 78 explicit RpoNumber(int32_t index) : index_(index) {}
68 size_t index_; 79 int32_t index_;
69 }; 80 };
70 81
71 BasicBlock(Zone* zone, Id id); 82 BasicBlock(Zone* zone, Id id);
72 83
73 Id id() const { return id_; } 84 Id id() const { return id_; }
74 85
75 // Predecessors and successors. 86 // Predecessors and successors.
76 typedef ZoneVector<BasicBlock*> Predecessors; 87 typedef ZoneVector<BasicBlock*> Predecessors;
77 Predecessors::iterator predecessors_begin() { return predecessors_.begin(); } 88 Predecessors::iterator predecessors_begin() { return predecessors_.begin(); }
78 Predecessors::iterator predecessors_end() { return predecessors_.end(); } 89 Predecessors::iterator predecessors_end() { return predecessors_.end(); }
90 Predecessors::const_iterator predecessors_begin() const {
91 return predecessors_.begin();
92 }
93 Predecessors::const_iterator predecessors_end() const {
94 return predecessors_.end();
95 }
79 size_t PredecessorCount() const { return predecessors_.size(); } 96 size_t PredecessorCount() const { return predecessors_.size(); }
80 BasicBlock* PredecessorAt(size_t index) { return predecessors_[index]; } 97 BasicBlock* PredecessorAt(size_t index) { return predecessors_[index]; }
81 size_t PredecessorIndexOf(BasicBlock* predecessor);
82 void AddPredecessor(BasicBlock* predecessor); 98 void AddPredecessor(BasicBlock* predecessor);
83 99
84 typedef ZoneVector<BasicBlock*> Successors; 100 typedef ZoneVector<BasicBlock*> Successors;
85 Successors::iterator successors_begin() { return successors_.begin(); } 101 Successors::iterator successors_begin() { return successors_.begin(); }
86 Successors::iterator successors_end() { return successors_.end(); } 102 Successors::iterator successors_end() { return successors_.end(); }
103 Successors::const_iterator successors_begin() const {
104 return successors_.begin();
105 }
106 Successors::const_iterator successors_end() const {
107 return successors_.end();
108 }
87 size_t SuccessorCount() const { return successors_.size(); } 109 size_t SuccessorCount() const { return successors_.size(); }
88 BasicBlock* SuccessorAt(size_t index) { return successors_[index]; } 110 BasicBlock* SuccessorAt(size_t index) { return successors_[index]; }
89 void AddSuccessor(BasicBlock* successor); 111 void AddSuccessor(BasicBlock* successor);
90 112
91 // Nodes in the basic block. 113 // Nodes in the basic block.
92 Node* NodeAt(size_t index) { return nodes_[index]; } 114 Node* NodeAt(size_t index) { return nodes_[index]; }
93 size_t NodeCount() const { return nodes_.size(); } 115 size_t NodeCount() const { return nodes_.size(); }
94 116
95 typedef NodeVector::iterator iterator; 117 typedef NodeVector::iterator iterator;
96 iterator begin() { return nodes_.begin(); } 118 iterator begin() { return nodes_.begin(); }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 int32_t loop_end() const { return loop_end_; } 152 int32_t loop_end() const { return loop_end_; }
131 void set_loop_end(int32_t loop_end); 153 void set_loop_end(int32_t loop_end);
132 154
133 RpoNumber GetRpoNumber() const { return RpoNumber::FromInt(rpo_number_); } 155 RpoNumber GetRpoNumber() const { return RpoNumber::FromInt(rpo_number_); }
134 int32_t rpo_number() const { return rpo_number_; } 156 int32_t rpo_number() const { return rpo_number_; }
135 void set_rpo_number(int32_t rpo_number); 157 void set_rpo_number(int32_t rpo_number);
136 158
137 // Loop membership helpers. 159 // Loop membership helpers.
138 inline bool IsLoopHeader() const { return loop_end_ >= 0; } 160 inline bool IsLoopHeader() const { return loop_end_ >= 0; }
139 bool LoopContains(BasicBlock* block) const; 161 bool LoopContains(BasicBlock* block) const;
140 BasicBlock* ContainingLoop();
141 162
142 private: 163 private:
143 int32_t rpo_number_; // special RPO number of the block. 164 int32_t rpo_number_; // special RPO number of the block.
144 BasicBlock* dominator_; // Immediate dominator of the block. 165 BasicBlock* dominator_; // Immediate dominator of the block.
145 BasicBlock* loop_header_; // Pointer to dominating loop header basic block, 166 BasicBlock* loop_header_; // Pointer to dominating loop header basic block,
146 // NULL if none. For loop headers, this points to 167 // NULL if none. For loop headers, this points to
147 // enclosing loop header. 168 // enclosing loop header.
148 int32_t loop_depth_; // loop nesting, 0 is top-level 169 int32_t loop_depth_; // loop nesting, 0 is top-level
149 int32_t loop_end_; // end of the loop, if this block is a loop header. 170 int32_t loop_end_; // end of the loop, if this block is a loop header.
150 171
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 BasicBlock* end_; 257 BasicBlock* end_;
237 }; 258 };
238 259
239 std::ostream& operator<<(std::ostream& os, const Schedule& s); 260 std::ostream& operator<<(std::ostream& os, const Schedule& s);
240 261
241 } // namespace compiler 262 } // namespace compiler
242 } // namespace internal 263 } // namespace internal
243 } // namespace v8 264 } // namespace v8
244 265
245 #endif // V8_COMPILER_SCHEDULE_H_ 266 #endif // V8_COMPILER_SCHEDULE_H_
OLDNEW
« no previous file with comments | « src/compiler/register-allocator.cc ('k') | src/compiler/schedule.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698