| // Copyright 2015 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef V8_COMPILER_BACKEND_FRAME_ELIDER_H_ |
| #define V8_COMPILER_BACKEND_FRAME_ELIDER_H_ |
| |
| #include "src/compiler/backend/instruction.h" |
| |
| namespace v8 { |
| namespace internal { |
| namespace compiler { |
| |
| // Determine which instruction blocks need a frame and where frames must be |
| // constructed/deconstructed. |
| class FrameElider { |
| public: |
| explicit FrameElider(InstructionSequence* code); |
| void Run(); |
| |
| private: |
| void MarkBlocks(); |
| void PropagateMarks(); |
| void MarkDeConstruction(); |
| bool PropagateInOrder(); |
| bool PropagateReversed(); |
| bool PropagateIntoBlock(InstructionBlock* block); |
| const InstructionBlocks& instruction_blocks() const; |
| InstructionBlock* InstructionBlockAt(RpoNumber rpo_number) const; |
| Instruction* InstructionAt(int index) const; |
| |
| InstructionSequence* const code_; |
| }; |
| |
| } // namespace compiler |
| } // namespace internal |
| } // namespace v8 |
| |
| #endif // V8_COMPILER_BACKEND_FRAME_ELIDER_H_ |