OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
237 LifetimePosition start_; | 237 LifetimePosition start_; |
238 LifetimePosition end_; | 238 LifetimePosition end_; |
239 UseInterval* next_; | 239 UseInterval* next_; |
240 | 240 |
241 friend class LiveRange; // Assigns to start_. | 241 friend class LiveRange; // Assigns to start_. |
242 }; | 242 }; |
243 | 243 |
244 // Representation of a use position. | 244 // Representation of a use position. |
245 class UsePosition: public ZoneObject { | 245 class UsePosition: public ZoneObject { |
246 public: | 246 public: |
247 UsePosition(LifetimePosition pos, LOperand* operand); | 247 UsePosition(LifetimePosition pos, LOperand* operand, LOperand* hint); |
248 | 248 |
249 LOperand* operand() const { return operand_; } | 249 LOperand* operand() const { return operand_; } |
250 bool HasOperand() const { return operand_ != NULL; } | 250 bool HasOperand() const { return operand_ != NULL; } |
251 | 251 |
252 LOperand* hint() const { return hint_; } | 252 LOperand* hint() const { return hint_; } |
253 void set_hint(LOperand* hint) { hint_ = hint; } | |
254 bool HasHint() const; | 253 bool HasHint() const; |
255 bool RequiresRegister() const; | 254 bool RequiresRegister() const; |
256 bool RegisterIsBeneficial() const; | 255 bool RegisterIsBeneficial() const; |
257 | 256 |
258 LifetimePosition pos() const { return pos_; } | 257 LifetimePosition pos() const { return pos_; } |
259 UsePosition* next() const { return next_; } | 258 UsePosition* next() const { return next_; } |
260 | 259 |
261 private: | 260 private: |
262 void set_next(UsePosition* next) { next_ = next; } | 261 void set_next(UsePosition* next) { next_ = next; } |
263 | 262 |
264 LOperand* operand_; | 263 LOperand* const operand_; |
265 LOperand* hint_; | 264 LOperand* const hint_; |
266 LifetimePosition pos_; | 265 LifetimePosition const pos_; |
267 UsePosition* next_; | 266 UsePosition* next_; |
268 bool requires_reg_; | 267 bool requires_reg_; |
269 bool register_beneficial_; | 268 bool register_beneficial_; |
270 | 269 |
271 friend class LiveRange; | 270 friend class LiveRange; |
272 }; | 271 }; |
273 | 272 |
274 // Representation of SSA values' live ranges as a collection of (continuous) | 273 // Representation of SSA values' live ranges as a collection of (continuous) |
275 // intervals over the instruction ordering. | 274 // intervals over the instruction ordering. |
276 class LiveRange: public ZoneObject { | 275 class LiveRange: public ZoneObject { |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
360 bool Covers(LifetimePosition position); | 359 bool Covers(LifetimePosition position); |
361 LifetimePosition FirstIntersection(LiveRange* other); | 360 LifetimePosition FirstIntersection(LiveRange* other); |
362 | 361 |
363 // Add a new interval or a new use position to this live range. | 362 // Add a new interval or a new use position to this live range. |
364 void EnsureInterval(LifetimePosition start, | 363 void EnsureInterval(LifetimePosition start, |
365 LifetimePosition end, | 364 LifetimePosition end, |
366 Zone* zone); | 365 Zone* zone); |
367 void AddUseInterval(LifetimePosition start, | 366 void AddUseInterval(LifetimePosition start, |
368 LifetimePosition end, | 367 LifetimePosition end, |
369 Zone* zone); | 368 Zone* zone); |
370 UsePosition* AddUsePosition(LifetimePosition pos, | 369 void AddUsePosition(LifetimePosition pos, |
371 LOperand* operand, | 370 LOperand* operand, |
372 Zone* zone); | 371 LOperand* hint, |
| 372 Zone* zone); |
373 | 373 |
374 // Shorten the most recently added interval by setting a new start. | 374 // Shorten the most recently added interval by setting a new start. |
375 void ShortenTo(LifetimePosition start); | 375 void ShortenTo(LifetimePosition start); |
376 | 376 |
377 #ifdef DEBUG | 377 #ifdef DEBUG |
378 // True if target overlaps an existing interval. | 378 // True if target overlaps an existing interval. |
379 bool HasOverlap(UseInterval* target) const; | 379 bool HasOverlap(UseInterval* target) const; |
380 void Verify() const; | 380 void Verify() const; |
381 #endif | 381 #endif |
382 | 382 |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
636 LifetimePosition allocation_finger_; | 636 LifetimePosition allocation_finger_; |
637 #endif | 637 #endif |
638 | 638 |
639 DISALLOW_COPY_AND_ASSIGN(LAllocator); | 639 DISALLOW_COPY_AND_ASSIGN(LAllocator); |
640 }; | 640 }; |
641 | 641 |
642 | 642 |
643 } } // namespace v8::internal | 643 } } // namespace v8::internal |
644 | 644 |
645 #endif // V8_LITHIUM_ALLOCATOR_H_ | 645 #endif // V8_LITHIUM_ALLOCATOR_H_ |
OLD | NEW |