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