2bde09eae58eef2731add65e96a36c834a53f109
[platform/upstream/nodejs.git] / deps / v8 / src / compiler / move-optimizer.h
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<GapInstruction*> GapInstructions;
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& temp_vector_0() { return temp_vector_0_; }
28   MoveOpVector& temp_vector_1() { return temp_vector_1_; }
29
30   void CompressBlock(InstructionBlock* blocke);
31   void CompressMoves(MoveOpVector* eliminated, ParallelMove* left,
32                      ParallelMove* right);
33   void FinalizeMoves(GapInstruction* gap);
34
35   Zone* const local_zone_;
36   InstructionSequence* const code_;
37   GapInstructions to_finalize_;
38   MoveOpVector temp_vector_0_;
39   MoveOpVector temp_vector_1_;
40
41   DISALLOW_COPY_AND_ASSIGN(MoveOptimizer);
42 };
43
44 }  // namespace compiler
45 }  // namespace internal
46 }  // namespace v8
47
48 #endif  // V8_COMPILER_MOVE_OPTIMIZER_