• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2015 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_FRAME_ELIDER_H_
6 #define V8_COMPILER_FRAME_ELIDER_H_
7 
8 #include "src/compiler/instruction.h"
9 
10 namespace v8 {
11 namespace internal {
12 namespace compiler {
13 
14 
15 // Determine which instruction blocks need a frame and where frames must be
16 // constructed/deconstructed.
17 class FrameElider {
18  public:
19   explicit FrameElider(InstructionSequence* code);
20   void Run();
21 
22 
23  private:
24   void MarkBlocks();
25   void PropagateMarks();
26   void MarkDeConstruction();
27   bool PropagateInOrder();
28   bool PropagateReversed();
29   bool PropagateIntoBlock(InstructionBlock* block);
30   const InstructionBlocks& instruction_blocks() const;
31   InstructionBlock* InstructionBlockAt(RpoNumber rpo_number) const;
32   Instruction* InstructionAt(int index) const;
33 
34   InstructionSequence* const code_;
35 };
36 
37 }  // namespace compiler
38 }  // namespace internal
39 }  // namespace v8
40 
41 #endif  // V8_COMPILER_FRAME_ELIDER_H_
42