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

Side by Side Diff: src/data-flow.h

Issue 3146037: Cleanup the AST code by removing unused parts and get rid of the... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 10 years, 4 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
OLDNEW
1 // Copyright 2010 the V8 project authors. All rights reserved. 1 // Copyright 2010 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 24 matching lines...) Expand all
35 #include "zone-inl.h" 35 #include "zone-inl.h"
36 36
37 namespace v8 { 37 namespace v8 {
38 namespace internal { 38 namespace internal {
39 39
40 // Forward declarations. 40 // Forward declarations.
41 class Node; 41 class Node;
42 42
43 class BitVector: public ZoneObject { 43 class BitVector: public ZoneObject {
44 public: 44 public:
45 explicit BitVector(int length) 45 BitVector() : length_(0), data_length_(0), data_(NULL) { }
46 : length_(length), 46
47 data_length_(SizeFor(length)), 47 explicit BitVector(int length) {
48 data_(Zone::NewArray<uint32_t>(data_length_)) { 48 ExpandTo(length);
49 ASSERT(length > 0);
50 Clear();
51 } 49 }
52 50
53 BitVector(const BitVector& other) 51 BitVector(const BitVector& other)
54 : length_(other.length()), 52 : length_(other.length()),
55 data_length_(SizeFor(length_)), 53 data_length_(SizeFor(length_)),
56 data_(Zone::NewArray<uint32_t>(data_length_)) { 54 data_(Zone::NewArray<uint32_t>(data_length_)) {
57 CopyFrom(other); 55 CopyFrom(other);
58 } 56 }
59 57
60 static int SizeFor(int length) { 58 void ExpandTo(int length) {
61 return 1 + ((length - 1) / 32); 59 ASSERT(length > 0);
60 length_ = length;
61 data_length_ = SizeFor(length);
62 data_ = Zone::NewArray<uint32_t>(data_length_);
63 Clear();
62 } 64 }
63 65
64 BitVector& operator=(const BitVector& rhs) { 66 BitVector& operator=(const BitVector& rhs) {
65 if (this != &rhs) CopyFrom(rhs); 67 if (this != &rhs) CopyFrom(rhs);
66 return *this; 68 return *this;
67 } 69 }
68 70
69 void CopyFrom(const BitVector& other) { 71 void CopyFrom(const BitVector& other) {
70 ASSERT(other.length() == length()); 72 ASSERT(other.length() == length());
71 for (int i = 0; i < data_length_; i++) { 73 for (int i = 0; i < data_length_; i++) {
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 return true; 132 return true;
131 } 133 }
132 134
133 int length() const { return length_; } 135 int length() const { return length_; }
134 136
135 #ifdef DEBUG 137 #ifdef DEBUG
136 void Print(); 138 void Print();
137 #endif 139 #endif
138 140
139 private: 141 private:
142 static int SizeFor(int length) {
143 return 1 + ((length - 1) / 32);
144 }
145
140 int length_; 146 int length_;
141 int data_length_; 147 int data_length_;
142 uint32_t* data_; 148 uint32_t* data_;
143 }; 149 };
144 150
145 151
146 // Simple fixed-capacity list-based worklist (managed as a queue) of 152 // Simple fixed-capacity list-based worklist (managed as a queue) of
147 // pointers to T. 153 // pointers to T.
148 template<typename T> 154 template<typename T>
149 class WorkList BASE_EMBEDDED { 155 class WorkList BASE_EMBEDDED {
(...skipping 30 matching lines...) Expand all
180 } 186 }
181 187
182 private: 188 private:
183 int capacity_; // Including one empty slot. 189 int capacity_; // Including one empty slot.
184 int head_; // Where the first item is. 190 int head_; // Where the first item is.
185 int tail_; // Where the next inserted item will go. 191 int tail_; // Where the next inserted item will go.
186 List<T*> queue_; 192 List<T*> queue_;
187 }; 193 };
188 194
189 195
190 struct ReachingDefinitionsData BASE_EMBEDDED {
191 public:
192 ReachingDefinitionsData() : rd_in_(NULL), kill_(NULL), gen_(NULL) {}
193
194 void Initialize(int definition_count) {
195 rd_in_ = new BitVector(definition_count);
196 kill_ = new BitVector(definition_count);
197 gen_ = new BitVector(definition_count);
198 }
199
200 BitVector* rd_in() { return rd_in_; }
201 BitVector* kill() { return kill_; }
202 BitVector* gen() { return gen_; }
203
204 private:
205 BitVector* rd_in_;
206 BitVector* kill_;
207 BitVector* gen_;
208 };
209
210
211 // This class is used to number all expressions in the AST according to
212 // their evaluation order (post-order left-to-right traversal).
213 class AstLabeler: public AstVisitor {
214 public:
215 AstLabeler() : next_number_(0) {}
216
217 void Label(CompilationInfo* info);
218
219 private:
220 CompilationInfo* info() { return info_; }
221
222 void VisitDeclarations(ZoneList<Declaration*>* decls);
223 void VisitStatements(ZoneList<Statement*>* stmts);
224
225 // AST node visit functions.
226 #define DECLARE_VISIT(type) virtual void Visit##type(type* node);
227 AST_NODE_LIST(DECLARE_VISIT)
228 #undef DECLARE_VISIT
229
230 // Traversal number for labelling AST nodes.
231 int next_number_;
232
233 CompilationInfo* info_;
234
235 DISALLOW_COPY_AND_ASSIGN(AstLabeler);
236 };
237
238
239 // Computes the set of assigned variables and annotates variables proxies 196 // Computes the set of assigned variables and annotates variables proxies
240 // that are trivial sub-expressions and for-loops where the loop variable 197 // that are trivial sub-expressions and for-loops where the loop variable
241 // is guaranteed to be a smi. 198 // is guaranteed to be a smi.
242 class AssignedVariablesAnalyzer : public AstVisitor { 199 class AssignedVariablesAnalyzer : public AstVisitor {
243 public: 200 public:
244 explicit AssignedVariablesAnalyzer(FunctionLiteral* fun); 201 explicit AssignedVariablesAnalyzer(FunctionLiteral* fun) : fun_(fun) { }
245 202 bool Analyze();
246 void Analyze();
247 203
248 private: 204 private:
249 Variable* FindSmiLoopVariable(ForStatement* stmt); 205 Variable* FindSmiLoopVariable(ForStatement* stmt);
250 206
251 int BitIndex(Variable* var); 207 int BitIndex(Variable* var);
252 208
253 void RecordAssignedVar(Variable* var); 209 void RecordAssignedVar(Variable* var);
254 210
255 void MarkIfTrivial(Expression* expr); 211 void MarkIfTrivial(Expression* expr);
256 212
(...skipping 12 matching lines...) Expand all
269 BitVector av_; 225 BitVector av_;
270 226
271 DISALLOW_COPY_AND_ASSIGN(AssignedVariablesAnalyzer); 227 DISALLOW_COPY_AND_ASSIGN(AssignedVariablesAnalyzer);
272 }; 228 };
273 229
274 230
275 } } // namespace v8::internal 231 } } // namespace v8::internal
276 232
277 233
278 #endif // V8_DATAFLOW_H_ 234 #endif // V8_DATAFLOW_H_
OLDNEW
« no previous file with comments | « src/compiler.cc ('k') | src/data-flow.cc » ('j') | src/x64/full-codegen-x64.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698