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

Side by Side Diff: src/compiler/register-allocator.h

Issue 669053002: [turbofan] split compilation stats off from HStatistics and track high water marks (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
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_REGISTER_ALLOCATOR_H_ 5 #ifndef V8_REGISTER_ALLOCATOR_H_
6 #define V8_REGISTER_ALLOCATOR_H_ 6 #define V8_REGISTER_ALLOCATOR_H_
7 7
8 #include "src/allocation.h" 8 #include "src/allocation.h"
9 #include "src/compiler/instruction.h" 9 #include "src/compiler/instruction.h"
10 #include "src/compiler/zone-pool.h" 10 #include "src/compiler/zone-pool.h"
11 #include "src/macro-assembler.h" 11 #include "src/macro-assembler.h"
12 #include "src/zone.h" 12 #include "src/zone.h"
13 13
14 namespace v8 { 14 namespace v8 {
15 namespace internal { 15 namespace internal {
16 16
17 // Forward declarations. 17 // Forward declarations.
18 class BitVector; 18 class BitVector;
19 class InstructionOperand; 19 class InstructionOperand;
20 class UnallocatedOperand; 20 class UnallocatedOperand;
21 class ParallelMove; 21 class ParallelMove;
22 class PointerMap; 22 class PointerMap;
23 23
24 namespace compiler { 24 namespace compiler {
25 25
26 class PipelineStatistics;
27
26 enum RegisterKind { 28 enum RegisterKind {
27 UNALLOCATED_REGISTERS, 29 UNALLOCATED_REGISTERS,
28 GENERAL_REGISTERS, 30 GENERAL_REGISTERS,
29 DOUBLE_REGISTERS 31 DOUBLE_REGISTERS
30 }; 32 };
31 33
32 34
33 // This class represents a single point of a InstructionOperand's lifetime. For 35 // This class represents a single point of a InstructionOperand's lifetime. For
34 // each instruction there are exactly two lifetime positions: the beginning and 36 // each instruction there are exactly two lifetime positions: the beginning and
35 // the end of the instruction. Lifetime positions for different instructions are 37 // the end of the instruction. Lifetime positions for different instructions are
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 326
325 static void TraceAlloc(const char* msg, ...); 327 static void TraceAlloc(const char* msg, ...);
326 328
327 // Checks whether the value of a given virtual register is a reference. 329 // Checks whether the value of a given virtual register is a reference.
328 // TODO(titzer): rename this to IsReference. 330 // TODO(titzer): rename this to IsReference.
329 bool HasTaggedValue(int virtual_register) const; 331 bool HasTaggedValue(int virtual_register) const;
330 332
331 // Returns the register kind required by the given virtual register. 333 // Returns the register kind required by the given virtual register.
332 RegisterKind RequiredRegisterKind(int virtual_register) const; 334 RegisterKind RequiredRegisterKind(int virtual_register) const;
333 335
334 // TODO(dcarney): fix compilation phase stats to not require this. 336 bool Allocate(PipelineStatistics* stats = NULL);
335 bool Allocate(ZonePool* zone_pool = NULL);
336 337
337 const ZoneList<LiveRange*>* live_ranges() const { return &live_ranges_; } 338 const ZoneList<LiveRange*>* live_ranges() const { return &live_ranges_; }
338 const Vector<LiveRange*>* fixed_live_ranges() const { 339 const Vector<LiveRange*>* fixed_live_ranges() const {
339 return &fixed_live_ranges_; 340 return &fixed_live_ranges_;
340 } 341 }
341 const Vector<LiveRange*>* fixed_double_live_ranges() const { 342 const Vector<LiveRange*>* fixed_double_live_ranges() const {
342 return &fixed_double_live_ranges_; 343 return &fixed_double_live_ranges_;
343 } 344 }
344 345
345 CompilationInfo* info() const { return info_; } 346 CompilationInfo* info() const { return info_; }
346 inline InstructionSequence* code() const { return code_; } 347 inline InstructionSequence* code() const { return code_; }
347 ZonePool* zone_pool() const { return zone_pool_; }
348 348
349 // This zone is for datastructures only needed during register allocation. 349 // This zone is for datastructures only needed during register allocation.
350 inline Zone* zone() const { return zone_; } 350 inline Zone* zone() const { return zone_; }
351 351
352 // This zone is for InstructionOperands and moves that live beyond register 352 // This zone is for InstructionOperands and moves that live beyond register
353 // allocation. 353 // allocation.
354 inline Zone* code_zone() const { return code()->zone(); } 354 inline Zone* code_zone() const { return code()->zone(); }
355 355
356 int GetVirtualRegister() { 356 int GetVirtualRegister() {
357 int vreg = code()->NextVirtualRegister(); 357 int vreg = code()->NextVirtualRegister();
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
494 494
495 const char* RegisterName(int allocation_index); 495 const char* RegisterName(int allocation_index);
496 496
497 inline Instruction* InstructionAt(int index) { 497 inline Instruction* InstructionAt(int index) {
498 return code()->InstructionAt(index); 498 return code()->InstructionAt(index);
499 } 499 }
500 500
501 Frame* frame() const { return frame_; } 501 Frame* frame() const { return frame_; }
502 502
503 Zone* const zone_; 503 Zone* const zone_;
504 // TODO(dcarney): remove this.
505 ZonePool* zone_pool_;
506 Frame* const frame_; 504 Frame* const frame_;
507 CompilationInfo* const info_; 505 CompilationInfo* const info_;
508 InstructionSequence* const code_; 506 InstructionSequence* const code_;
509 507
510 // During liveness analysis keep a mapping from block id to live_in sets 508 // During liveness analysis keep a mapping from block id to live_in sets
511 // for blocks already analyzed. 509 // for blocks already analyzed.
512 ZoneList<BitVector*> live_in_sets_; 510 ZoneList<BitVector*> live_in_sets_;
513 511
514 // Liveness analysis results. 512 // Liveness analysis results.
515 ZoneList<LiveRange*> live_ranges_; 513 ZoneList<LiveRange*> live_ranges_;
(...skipping 22 matching lines...) Expand all
538 #endif 536 #endif
539 537
540 DISALLOW_COPY_AND_ASSIGN(RegisterAllocator); 538 DISALLOW_COPY_AND_ASSIGN(RegisterAllocator);
541 }; 539 };
542 540
543 } 541 }
544 } 542 }
545 } // namespace v8::internal::compiler 543 } // namespace v8::internal::compiler
546 544
547 #endif // V8_REGISTER_ALLOCATOR_H_ 545 #endif // V8_REGISTER_ALLOCATOR_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698