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

Unified Diff: src/compiler/register-allocator.h

Issue 671043004: [turbofan] cleanup register allocator interface a little (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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/compiler/pipeline.cc ('k') | src/compiler/register-allocator.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler/register-allocator.h
diff --git a/src/compiler/register-allocator.h b/src/compiler/register-allocator.h
index 3b6656ee8ff4d42ad89d17ecd11b8df921be5dd5..55abd5f11305c3eb551d179421212774546e322a 100644
--- a/src/compiler/register-allocator.h
+++ b/src/compiler/register-allocator.h
@@ -7,20 +7,11 @@
#include "src/allocation.h"
#include "src/compiler/instruction.h"
-#include "src/compiler/zone-pool.h"
#include "src/macro-assembler.h"
#include "src/zone.h"
namespace v8 {
namespace internal {
-
-// Forward declarations.
-class BitVector;
-class InstructionOperand;
-class UnallocatedOperand;
-class ParallelMove;
-class PointerMap;
-
namespace compiler {
class PipelineStatistics;
@@ -36,7 +27,7 @@ enum RegisterKind {
// each instruction there are exactly two lifetime positions: the beginning and
// the end of the instruction. Lifetime positions for different instructions are
// disjoint.
-class LifetimePosition {
+class LifetimePosition FINAL {
public:
// Return the lifetime position that corresponds to the beginning of
// the instruction with the given index.
@@ -115,7 +106,7 @@ class LifetimePosition {
// Representation of the non-empty interval [start,end[.
-class UseInterval : public ZoneObject {
+class UseInterval FINAL : public ZoneObject {
public:
UseInterval(LifetimePosition start, LifetimePosition end)
: start_(start), end_(end), next_(NULL) {
@@ -148,10 +139,14 @@ class UseInterval : public ZoneObject {
LifetimePosition start_;
LifetimePosition end_;
UseInterval* next_;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(UseInterval);
};
+
// Representation of a use position.
-class UsePosition : public ZoneObject {
+class UsePosition FINAL : public ZoneObject {
public:
UsePosition(LifetimePosition pos, InstructionOperand* operand,
InstructionOperand* hint);
@@ -173,13 +168,17 @@ class UsePosition : public ZoneObject {
InstructionOperand* const hint_;
LifetimePosition const pos_;
UsePosition* next_;
- bool requires_reg_;
- bool register_beneficial_;
+ bool requires_reg_ : 1;
+ bool register_beneficial_ : 1;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(UsePosition);
};
+
// Representation of SSA values' live ranges as a collection of (continuous)
// intervals over the instruction ordering.
-class LiveRange : public ZoneObject {
+class LiveRange FINAL : public ZoneObject {
public:
static const int kInvalidAssignment = 0x7fffffff;
@@ -315,25 +314,21 @@ class LiveRange : public ZoneObject {
int spill_start_index_;
friend class RegisterAllocator; // Assigns to kind_.
+
+ DISALLOW_COPY_AND_ASSIGN(LiveRange);
};
class RegisterAllocator BASE_EMBEDDED {
public:
- // TODO(dcarney): remove info
explicit RegisterAllocator(Zone* local_zone, Frame* frame,
- CompilationInfo* info, InstructionSequence* code);
-
- static void TraceAlloc(const char* msg, ...);
-
- // Checks whether the value of a given virtual register is a reference.
- // TODO(titzer): rename this to IsReference.
- bool HasTaggedValue(int virtual_register) const;
-
- // Returns the register kind required by the given virtual register.
- RegisterKind RequiredRegisterKind(int virtual_register) const;
+ InstructionSequence* code,
+ const char* debug_name = nullptr);
bool Allocate(PipelineStatistics* stats = NULL);
+ bool AllocationOk() { return allocation_ok_; }
+ BitVector* assigned_registers() { return assigned_registers_; }
+ BitVector* assigned_double_registers() { return assigned_double_registers_; }
const ZoneList<LiveRange*>* live_ranges() const { return &live_ranges_; }
const Vector<LiveRange*>* fixed_live_ranges() const {
@@ -342,17 +337,9 @@ class RegisterAllocator BASE_EMBEDDED {
const Vector<LiveRange*>* fixed_double_live_ranges() const {
return &fixed_double_live_ranges_;
}
+ InstructionSequence* code() const { return code_; }
- CompilationInfo* info() const { return info_; }
- inline InstructionSequence* code() const { return code_; }
-
- // This zone is for datastructures only needed during register allocation.
- inline Zone* zone() const { return zone_; }
-
- // This zone is for InstructionOperands and moves that live beyond register
- // allocation.
- inline Zone* code_zone() const { return code()->zone(); }
-
+ private:
int GetVirtualRegister() {
int vreg = code()->NextVirtualRegister();
if (vreg >= UnallocatedOperand::kMaxVirtualRegisters) {
@@ -363,16 +350,24 @@ class RegisterAllocator BASE_EMBEDDED {
return vreg;
}
- bool AllocationOk() { return allocation_ok_; }
+ // Checks whether the value of a given virtual register is a reference.
+ // TODO(titzer): rename this to IsReference.
+ bool HasTaggedValue(int virtual_register) const;
+
+ // Returns the register kind required by the given virtual register.
+ RegisterKind RequiredRegisterKind(int virtual_register) const;
+
+ // This zone is for datastructures only needed during register allocation.
+ Zone* zone() const { return zone_; }
+
+ // This zone is for InstructionOperands and moves that live beyond register
+ // allocation.
+ Zone* code_zone() const { return code()->zone(); }
#ifdef DEBUG
void Verify() const;
#endif
- BitVector* assigned_registers() { return assigned_registers_; }
- BitVector* assigned_double_registers() { return assigned_double_registers_; }
-
- private:
void MeetRegisterConstraints();
void ResolvePhis();
void BuildLiveRanges();
@@ -383,7 +378,7 @@ class RegisterAllocator BASE_EMBEDDED {
void PopulatePointerMaps(); // TODO(titzer): rename to PopulateReferenceMaps.
void AllocateRegisters();
bool CanEagerlyResolveControlFlow(const InstructionBlock* block) const;
- inline bool SafePointsAreInOrder() const;
+ bool SafePointsAreInOrder() const;
// Liveness analysis support.
void InitializeLivenessAnalysis();
@@ -474,7 +469,7 @@ class RegisterAllocator BASE_EMBEDDED {
void ResolveControlFlow(LiveRange* range, const InstructionBlock* block,
const InstructionBlock* pred);
- inline void SetLiveRangeAssignedRegister(LiveRange* range, int reg);
+ void SetLiveRangeAssignedRegister(LiveRange* range, int reg);
// Return parallel move that should be used to connect ranges split at the
// given position.
@@ -494,16 +489,15 @@ class RegisterAllocator BASE_EMBEDDED {
const char* RegisterName(int allocation_index);
- inline Instruction* InstructionAt(int index) {
- return code()->InstructionAt(index);
- }
+ Instruction* InstructionAt(int index) { return code()->InstructionAt(index); }
Frame* frame() const { return frame_; }
+ const char* debug_name() const { return debug_name_; }
Zone* const zone_;
Frame* const frame_;
- CompilationInfo* const info_;
InstructionSequence* const code_;
+ const char* const debug_name_;
// During liveness analysis keep a mapping from block id to live_in sets
// for blocks already analyzed.
« no previous file with comments | « src/compiler/pipeline.cc ('k') | src/compiler/register-allocator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698