| Index: src/compiler/register-allocator.cc
 | 
| diff --git a/src/compiler/register-allocator.cc b/src/compiler/register-allocator.cc
 | 
| index 2a5f8550e9a97c1305986f3d294b94e74bf594ac..c09f6056c76be4fdd5752cc84f343fac75b9d605 100644
 | 
| --- a/src/compiler/register-allocator.cc
 | 
| +++ b/src/compiler/register-allocator.cc
 | 
| @@ -2,10 +2,9 @@
 | 
|  // Use of this source code is governed by a BSD-style license that can be
 | 
|  // found in the LICENSE file.
 | 
|  
 | 
| -#include "src/compiler/register-allocator.h"
 | 
| -
 | 
|  #include "src/compiler/linkage.h"
 | 
| -#include "src/hydrogen.h"
 | 
| +#include "src/compiler/pipeline-statistics.h"
 | 
| +#include "src/compiler/register-allocator.h"
 | 
|  #include "src/string-stream.h"
 | 
|  
 | 
|  namespace v8 {
 | 
| @@ -503,7 +502,6 @@ RegisterAllocator::RegisterAllocator(Zone* local_zone, Frame* frame,
 | 
|                                       CompilationInfo* info,
 | 
|                                       InstructionSequence* code)
 | 
|      : zone_(local_zone),
 | 
| -      zone_pool_(NULL),
 | 
|        frame_(frame),
 | 
|        info_(info),
 | 
|        code_(code),
 | 
| @@ -1096,72 +1094,53 @@ void RegisterAllocator::ResolvePhis(const InstructionBlock* block) {
 | 
|  }
 | 
|  
 | 
|  
 | 
| -bool RegisterAllocator::Allocate(ZonePool* zone_pool) {
 | 
| -  DCHECK_EQ(NULL, zone_pool_);
 | 
| -  zone_pool_ = zone_pool;
 | 
| +bool RegisterAllocator::Allocate(PipelineStatistics* stats) {
 | 
|    assigned_registers_ = new (code_zone())
 | 
|        BitVector(Register::NumAllocatableRegisters(), code_zone());
 | 
|    assigned_double_registers_ = new (code_zone())
 | 
|        BitVector(DoubleRegister::NumAllocatableAliasedRegisters(), code_zone());
 | 
| -  MeetRegisterConstraints();
 | 
| +  {
 | 
| +    PhaseScope phase_scope(stats, "meet register constraints");
 | 
| +    MeetRegisterConstraints();
 | 
| +  }
 | 
|    if (!AllocationOk()) return false;
 | 
| -  ResolvePhis();
 | 
| -  BuildLiveRanges();
 | 
| -  AllocateGeneralRegisters();
 | 
| +  {
 | 
| +    PhaseScope phase_scope(stats, "resolve phis");
 | 
| +    ResolvePhis();
 | 
| +  }
 | 
| +  {
 | 
| +    PhaseScope phase_scope(stats, "build live ranges");
 | 
| +    BuildLiveRanges();
 | 
| +  }
 | 
| +  {
 | 
| +    PhaseScope phase_scope(stats, "allocate general registers");
 | 
| +    AllocateGeneralRegisters();
 | 
| +  }
 | 
|    if (!AllocationOk()) return false;
 | 
| -  AllocateDoubleRegisters();
 | 
| +  {
 | 
| +    PhaseScope phase_scope(stats, "allocate double registers");
 | 
| +    AllocateDoubleRegisters();
 | 
| +  }
 | 
|    if (!AllocationOk()) return false;
 | 
| -  PopulatePointerMaps();
 | 
| -  ConnectRanges();
 | 
| -  ResolveControlFlow();
 | 
| +  {
 | 
| +    PhaseScope phase_scope(stats, "populate pointer maps");
 | 
| +    PopulatePointerMaps();
 | 
| +  }
 | 
| +  {
 | 
| +    PhaseScope phase_scope(stats, "connect ranges");
 | 
| +    ConnectRanges();
 | 
| +  }
 | 
| +  {
 | 
| +    PhaseScope phase_scope(stats, "resolve control flow");
 | 
| +    ResolveControlFlow();
 | 
| +  }
 | 
|    frame()->SetAllocatedRegisters(assigned_registers_);
 | 
|    frame()->SetAllocatedDoubleRegisters(assigned_double_registers_);
 | 
|    return true;
 | 
|  }
 | 
|  
 | 
|  
 | 
| -class RegisterAllocatorPhase : public CompilationPhase {
 | 
| - public:
 | 
| -  RegisterAllocatorPhase(const char* name, RegisterAllocator* allocator)
 | 
| -      : CompilationPhase(name, allocator->info()),
 | 
| -        allocator_(allocator),
 | 
| -        allocator_zone_start_allocation_size_(0),
 | 
| -        stats_(NULL) {
 | 
| -    if (FLAG_turbo_stats) {
 | 
| -      allocator_zone_start_allocation_size_ =
 | 
| -          allocator->info()->zone()->allocation_size();
 | 
| -      if (allocator->zone_pool() != NULL) {
 | 
| -        stats_ = new ZonePool::StatsScope(allocator->zone_pool());
 | 
| -      }
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  ~RegisterAllocatorPhase() {
 | 
| -    if (FLAG_turbo_stats) {
 | 
| -      unsigned size = allocator_->info()->zone()->allocation_size() -
 | 
| -                      allocator_zone_start_allocation_size_;
 | 
| -      if (stats_ != NULL) {
 | 
| -        size += static_cast<unsigned>(stats_->GetMaxAllocatedBytes());
 | 
| -      }
 | 
| -      isolate()->GetTStatistics()->SaveTiming(name(), base::TimeDelta(), size);
 | 
| -    }
 | 
| -    delete stats_;
 | 
| -#ifdef DEBUG
 | 
| -    if (allocator_ != NULL) allocator_->Verify();
 | 
| -#endif
 | 
| -  }
 | 
| -
 | 
| - private:
 | 
| -  RegisterAllocator* allocator_;
 | 
| -  unsigned allocator_zone_start_allocation_size_;
 | 
| -  ZonePool::StatsScope* stats_;
 | 
| -
 | 
| -  DISALLOW_COPY_AND_ASSIGN(RegisterAllocatorPhase);
 | 
| -};
 | 
| -
 | 
| -
 | 
|  void RegisterAllocator::MeetRegisterConstraints() {
 | 
| -  RegisterAllocatorPhase phase("L_Register constraints", this);
 | 
|    for (int i = 0; i < code()->InstructionBlockCount(); ++i) {
 | 
|      MeetRegisterConstraints(
 | 
|          code()->InstructionBlockAt(BasicBlock::RpoNumber::FromInt(i)));
 | 
| @@ -1171,8 +1150,6 @@ void RegisterAllocator::MeetRegisterConstraints() {
 | 
|  
 | 
|  
 | 
|  void RegisterAllocator::ResolvePhis() {
 | 
| -  RegisterAllocatorPhase phase("L_Resolve phis", this);
 | 
| -
 | 
|    // Process the blocks in reverse order.
 | 
|    for (int i = code()->InstructionBlockCount() - 1; i >= 0; --i) {
 | 
|      ResolvePhis(code()->InstructionBlockAt(BasicBlock::RpoNumber::FromInt(i)));
 | 
| @@ -1250,7 +1227,6 @@ const InstructionBlock* RegisterAllocator::GetInstructionBlock(
 | 
|  
 | 
|  
 | 
|  void RegisterAllocator::ConnectRanges() {
 | 
| -  RegisterAllocatorPhase phase("L_Connect ranges", this);
 | 
|    for (int i = 0; i < live_ranges()->length(); ++i) {
 | 
|      LiveRange* first_range = live_ranges()->at(i);
 | 
|      if (first_range == NULL || first_range->parent() != NULL) continue;
 | 
| @@ -1294,7 +1270,6 @@ bool RegisterAllocator::CanEagerlyResolveControlFlow(
 | 
|  
 | 
|  
 | 
|  void RegisterAllocator::ResolveControlFlow() {
 | 
| -  RegisterAllocatorPhase phase("L_Resolve control flow", this);
 | 
|    for (int block_id = 1; block_id < code()->InstructionBlockCount();
 | 
|         ++block_id) {
 | 
|      const InstructionBlock* block =
 | 
| @@ -1316,7 +1291,6 @@ void RegisterAllocator::ResolveControlFlow() {
 | 
|  
 | 
|  
 | 
|  void RegisterAllocator::BuildLiveRanges() {
 | 
| -  RegisterAllocatorPhase phase("L_Build live ranges", this);
 | 
|    InitializeLivenessAnalysis();
 | 
|    // Process the blocks in reverse order.
 | 
|    for (int block_id = code()->InstructionBlockCount() - 1; block_id >= 0;
 | 
| @@ -1457,8 +1431,6 @@ bool RegisterAllocator::SafePointsAreInOrder() const {
 | 
|  
 | 
|  
 | 
|  void RegisterAllocator::PopulatePointerMaps() {
 | 
| -  RegisterAllocatorPhase phase("L_Populate pointer maps", this);
 | 
| -
 | 
|    DCHECK(SafePointsAreInOrder());
 | 
|  
 | 
|    // Iterate over all safe point positions and record a pointer
 | 
| @@ -1541,7 +1513,6 @@ void RegisterAllocator::PopulatePointerMaps() {
 | 
|  
 | 
|  
 | 
|  void RegisterAllocator::AllocateGeneralRegisters() {
 | 
| -  RegisterAllocatorPhase phase("L_Allocate general registers", this);
 | 
|    num_registers_ = Register::NumAllocatableRegisters();
 | 
|    mode_ = GENERAL_REGISTERS;
 | 
|    AllocateRegisters();
 | 
| @@ -1549,7 +1520,6 @@ void RegisterAllocator::AllocateGeneralRegisters() {
 | 
|  
 | 
|  
 | 
|  void RegisterAllocator::AllocateDoubleRegisters() {
 | 
| -  RegisterAllocatorPhase phase("L_Allocate double registers", this);
 | 
|    num_registers_ = DoubleRegister::NumAllocatableAliasedRegisters();
 | 
|    mode_ = DOUBLE_REGISTERS;
 | 
|    AllocateRegisters();
 | 
| 
 |