Home | History | Annotate | Download | only in compiler
      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
      3 // found in the LICENSE file.
      4 
      5 #ifndef V8_COMPILER_MOVE_OPTIMIZER_
      6 #define V8_COMPILER_MOVE_OPTIMIZER_
      7 
      8 #include "src/compiler/instruction.h"
      9 #include "src/zone-containers.h"
     10 
     11 namespace v8 {
     12 namespace internal {
     13 namespace compiler {
     14 
     15 class MoveOptimizer final {
     16  public:
     17   MoveOptimizer(Zone* local_zone, InstructionSequence* code);
     18   void Run();
     19 
     20  private:
     21   typedef ZoneVector<MoveOperands*> MoveOpVector;
     22   typedef ZoneVector<Instruction*> Instructions;
     23 
     24   InstructionSequence* code() const { return code_; }
     25   Zone* local_zone() const { return local_zone_; }
     26   Zone* code_zone() const { return code()->zone(); }
     27   MoveOpVector& local_vector() { return local_vector_; }
     28 
     29   void CompressBlock(InstructionBlock* blocke);
     30   void CompressMoves(ParallelMove* left, ParallelMove* right);
     31   const Instruction* LastInstruction(const InstructionBlock* block) const;
     32   void OptimizeMerge(InstructionBlock* block);
     33   void FinalizeMoves(Instruction* instr);
     34 
     35   Zone* const local_zone_;
     36   InstructionSequence* const code_;
     37   Instructions to_finalize_;
     38   MoveOpVector local_vector_;
     39 
     40   DISALLOW_COPY_AND_ASSIGN(MoveOptimizer);
     41 };
     42 
     43 }  // namespace compiler
     44 }  // namespace internal
     45 }  // namespace v8
     46 
     47 #endif  // V8_COMPILER_MOVE_OPTIMIZER_
     48